/* * Copyright (C) 2007 Steve Ratcliffe * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * * Author: Steve Ratcliffe * Create date: 23-Sep-2007 */ package uk.me.parabola.tdbfmt; import java.io.IOException; import uk.me.parabola.io.FileBlock; import uk.me.parabola.io.StructuredInputStream; import uk.me.parabola.io.StructuredOutputStream; /** * The header block. Identifies the particular map set. * * @author Steve Ratcliffe */ class HeaderBlock extends FileBlock { static final int BLOCK_ID = 0x50; /** The map family. */ private short familyId; /** A unique number associated with the map product */ private short productId; /** The version of TDB */ private final int tdbVersion; /** The series name is an overall name eg 'US Topo' */ private String seriesName; /** The version number of the map product */ private short productVersion; /** * Identifies a map within the series * @see #seriesName */ private String familyName; private byte enableProfile; private int codePage; HeaderBlock(int tdbVersion) { super(BLOCK_ID); this.tdbVersion = tdbVersion; } public HeaderBlock(StructuredInputStream ds) throws IOException { super(BLOCK_ID); productId = (short) ds.read2(); familyId = (short) ds.read2(); tdbVersion = ds.read2(); seriesName = ds.readString(); productVersion = (short) ds.read2(); familyName = ds.readString(); } /** * This is to overridden in a subclass. */ protected void writeBody(StructuredOutputStream os) throws IOException { os.write2(productId); os.write2(familyId); os.write2(tdbVersion); os.writeString(seriesName); os.write2(productVersion); os.writeString(familyName); if (tdbVersion >= TdbFile.TDB_V407) { // Unknown purpose os.write(0); os.write(0x12); // lowest map level os.write(1); os.write(1); os.write(1); os.write4(0); os.write(0); os.write(0x18); // highest routable? 19 no, 21 ok os.write4(0); os.write4(0); os.write4(0); os.write4(0); os.write3(0); os.write4(codePage); os.write4(10000); os.write(1); // map is routable if (enableProfile == 1) os.write(1); // map has profile information else os.write(0); os.write(0); // map has DEM sub files } } public String toString() { return "TDB header: " + productId + " version=" + tdbVersion + ", series:" + seriesName + ", family:" + familyName + ", ver=" + productVersion ; } public void setProductId(short productId) { this.productId = productId; } public void setSeriesName(String seriesName) { this.seriesName = seriesName; } public void setFamilyName(String familyName) { this.familyName = familyName; } public void setProductVersion(short productVersion) { this.productVersion = productVersion; } public void setFamilyId(short familyId) { this.familyId = familyId; } void setCodePage(int codePage) { this.codePage = codePage; } public int getTdbVersion() { return tdbVersion; } public void setEnableProfile(byte enableProfile) { this.enableProfile = enableProfile; } }