Subversion Repositories mkgmap

Rev

Rev 4093 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * 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);
                }
        }

        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;            
        }
}