Package com.bbn.openmap.dataAccess.iso8211

Source Code of com.bbn.openmap.dataAccess.iso8211.View8211

/* ****************************************************************************
* $Id: View8211.java,v 1.3.2.3 2005/08/04 18:13:33 dietrick Exp $
*
* Project:  SDTS Translator
* Purpose:  Example program dumping data in 8211 data to stdout.
* Author:   Frank Warmerdam, warmerda@home.com
*
******************************************************************************
* Copyright (c) 1999, Frank Warmerdam
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
******************************************************************************
*/

package com.bbn.openmap.dataAccess.iso8211;

import com.bbn.openmap.layer.vpf.MutableInt;
import com.bbn.openmap.util.Debug;

import java.io.IOException;
import java.util.Iterator;

/**
* Class that uses the DDF* classes to read an 8211 file and print out
* the contents.
*/
public class View8211 {

    protected boolean bFSPTHack = false;
    protected String pszFilename = null;

    public View8211(String filename, boolean fspt_repeating) {
        pszFilename = filename;
        bFSPTHack = fspt_repeating;

        view();
    }

    protected void view() {
        DDFModule oModule;

        try {

            oModule = new DDFModule(pszFilename);

            if (bFSPTHack) {
                DDFFieldDefinition poFSPT = oModule.findFieldDefn("FSPT");

                if (poFSPT == null)
                    Debug.error("View8211: unable to find FSPT field to set repeating flag.");
                else
                    poFSPT.setRepeating(true);
            }

            /* -------------------------------------------------------------------- */
            /* Loop reading records till there are none left. */
            /* -------------------------------------------------------------------- */
            DDFRecord poRecord;
            int iRecord = 1;

            while ((poRecord = oModule.readRecord()) != null) {
                Debug.output("Record " + (iRecord++) + "("
                        + poRecord.getDataSize() + " bytes)");

                /* ------------------------------------------------------------ */
                /* Loop over each field in this particular record. */
                /* ------------------------------------------------------------ */
                for (Iterator it = poRecord.iterator(); it != null
                        && it.hasNext();
                // Debug.output(((DDFField)it.next()).toString()));
                viewRecordField(((DDFField) it.next())))
                    ;
            }

        } catch (IOException ioe) {
            Debug.error(ioe.getMessage());
            ioe.printStackTrace();
        }
    }

    /**
     * Dump the contents of a field instance in a record.
     */
    protected void viewRecordField(DDFField poField) {
        DDFFieldDefinition poFieldDefn = poField.getFieldDefn();

        // Report general information about the field.
        Debug.output("    Field " + poFieldDefn.getName() + ": "
                + poFieldDefn.getDescription());

        // Get pointer to this fields raw data. We will move through
        // it consuming data as we report subfield values.

        byte[] pachFieldData = poField.getData();
        int nBytesRemaining = poField.getDataSize();

        /* -------------------------------------------------------- */
        /* Loop over the repeat count for this fields */
        /* subfields. The repeat count will almost */
        /* always be one. */
        /* -------------------------------------------------------- */
        for (int iRepeat = 0; iRepeat < poField.getRepeatCount(); iRepeat++) {
            if (iRepeat > 0) {
                Debug.output("Repeating (" + iRepeat + ")...");
            }
            /* -------------------------------------------------------- */
            /* Loop over all the subfields of this field, advancing */
            /* the data pointer as we consume data. */
            /* -------------------------------------------------------- */
            for (int iSF = 0; iSF < poFieldDefn.getSubfieldCount(); iSF++) {

                DDFSubfieldDefinition poSFDefn = poFieldDefn.getSubfieldDefn(iSF);
                int nBytesConsumed = viewSubfield(poSFDefn,
                        pachFieldData,
                        nBytesRemaining);
                nBytesRemaining -= nBytesConsumed;
                byte[] tempData = new byte[pachFieldData.length
                        - nBytesConsumed];
                System.arraycopy(pachFieldData,
                        nBytesConsumed,
                        tempData,
                        0,
                        tempData.length);
                pachFieldData = tempData;
            }
        }
    }

    protected int viewSubfield(DDFSubfieldDefinition poSFDefn,
                               byte[] pachFieldData, int nBytesRemaining) {

        MutableInt nBytesConsumed = new MutableInt();

        DDFDataType ddfdt = poSFDefn.getType();

        if (ddfdt == DDFDataType.DDFInt) {
            Debug.output("        "
                    + poSFDefn.getName()
                    + " = "
                    + poSFDefn.extractIntData(pachFieldData,
                            nBytesRemaining,
                            nBytesConsumed));
        } else if (ddfdt == DDFDataType.DDFFloat) {
            Debug.output("        "
                    + poSFDefn.getName()
                    + " = "
                    + poSFDefn.extractFloatData(pachFieldData,
                            nBytesRemaining,
                            nBytesConsumed));
        } else if (ddfdt == DDFDataType.DDFString) {
            Debug.output("        "
                    + poSFDefn.getName()
                    + " = "
                    + poSFDefn.extractStringData(pachFieldData,
                            nBytesRemaining,
                            nBytesConsumed));
        } else if (ddfdt == DDFDataType.DDFBinaryString) {
            poSFDefn.extractStringData(pachFieldData,
                    nBytesRemaining,
                    nBytesConsumed); // pabyBString

            Debug.output("        " + poSFDefn.getName());
        }

        return nBytesConsumed.value;
    }

    public static void main(String[] argv) {

        Debug.init();

        String pszFilename = null;
        boolean bFSPTHack = false;

        for (int iArg = 0; iArg < argv.length; iArg++) {
            if (argv[iArg].equals("-fspt_repeating")) {
                bFSPTHack = true;
            } else {
                pszFilename = argv[iArg];
            }
        }

        if (pszFilename == null) {
            Debug.output("Usage: View8211 filename\n");
            System.exit(1);
        }

        new View8211(pszFilename, bFSPTHack);

    }

}
TOP

Related Classes of com.bbn.openmap.dataAccess.iso8211.View8211

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.