com.bbn.openmap.dataAccess.iso8211
Class DDFSubfieldDefinition

java.lang.Object
  extended by com.bbn.openmap.dataAccess.iso8211.DDFSubfieldDefinition
All Implemented Interfaces:
DDFConstants

public class DDFSubfieldDefinition
extends java.lang.Object
implements DDFConstants

Information from the DDR record describing one subfield of a DDFFieldDefn. All subfields of a field will occur in each occurrence of that field (as a DDFField) in a DDFRecord. Subfield's actually contain formatted data (as instances within a record).

Author:
Guillaume Pelletier provided fix for Big Endian support (important for S-57)

Nested Class Summary
static interface DDFSubfieldDefinition.DDFBinaryFormat
           
 
Field Summary
protected  boolean bIsVariable
          bIsVariable determines whether we using the chFormatDelimeter (true), or the fixed width (false).
protected  char chFormatDelimeter
           
protected  int eBinaryFormat
           
protected  DDFDataType eType
           
protected  int nFormatWidth
           
protected  java.lang.String pszFormatString
           
protected  java.lang.String pszName
           
 
Fields inherited from interface com.bbn.openmap.dataAccess.iso8211.DDFConstants
DDF_FIELD_TERMINATOR, DDF_FOOTER_SIZE, DDF_LEADER_SIZE, DDF_UNIT_TERMINATOR
 
Constructor Summary
DDFSubfieldDefinition()
           
 
Method Summary
 java.lang.String dumpData(byte[] pachData, int nMaxBytes)
          Dump subfield value to debugging file.
 double extractFloatData(byte[] pachSourceData, int nMaxBytes, MutableInt pnConsumedBytes)
          Extract a subfield value as a float.
 int extractIntData(byte[] pachSourceData, int nMaxBytes, MutableInt pnConsumedBytes)
          Extract a subfield value as an integer.
 int getDataLength(byte[] pachSourceData, int nMaxBytes, MutableInt pnConsumedBytes)
          Scan for the end of variable length data.
 java.lang.String getFormat()
          Get pointer to subfield format string
 java.lang.String getName()
          Get pointer to subfield name.
 DDFDataType getType()
          Get the general type of the subfield.
 int getWidth()
           
 boolean setFormat(java.lang.String pszFormat)
          While interpreting the format string we don't support: Passing an explicit terminator for variable length field.
 void setName(java.lang.String pszNewName)
          Set the name of the subfield.
 java.lang.String toString()
          Write out subfield definition info.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

pszName

protected java.lang.String pszName

pszFormatString

protected java.lang.String pszFormatString

eType

protected DDFDataType eType

eBinaryFormat

protected int eBinaryFormat

bIsVariable

protected boolean bIsVariable
bIsVariable determines whether we using the chFormatDelimeter (true), or the fixed width (false).


chFormatDelimeter

protected char chFormatDelimeter

nFormatWidth

protected int nFormatWidth
Constructor Detail

DDFSubfieldDefinition

public DDFSubfieldDefinition()
Method Detail

getWidth

public int getWidth()

getName

public java.lang.String getName()
Get pointer to subfield name.


getFormat

public java.lang.String getFormat()
Get pointer to subfield format string


getType

public DDFDataType getType()
Get the general type of the subfield. This can be used to determine which of ExtractFloatData(), ExtractIntData() or ExtractStringData() should be used.

Returns:
The subfield type. One of DDFInt, DDFFloat, DDFString or DDFBinaryString.

setName

public void setName(java.lang.String pszNewName)
Set the name of the subfield.


setFormat

public boolean setFormat(java.lang.String pszFormat)
While interpreting the format string we don't support:


toString

public java.lang.String toString()
Write out subfield definition info. A variety of information about this field definition is written to the give debugging file handle.

Overrides:
toString in class java.lang.Object

getDataLength

public int getDataLength(byte[] pachSourceData,
                         int nMaxBytes,
                         MutableInt pnConsumedBytes)
Scan for the end of variable length data. Given a pointer to the data for this subfield (from within a DDFRecord) this method will return the number of bytes which are data for this subfield. The number of bytes consumed as part of this field can also be fetched. This number may be one longer than the length if there is a terminator character used.

This method is mainly for internal use, or for applications which want the raw binary data to interpret themselves. Otherwise use one of ExtractStringData(), ExtractIntData() or ExtractFloatData().

Parameters:
pachSourceData - The pointer to the raw data for this field. This may have come from DDFRecord::GetData(), taking into account skip factors over previous subfields data.
nMaxBytes - The maximum number of bytes that are accessible after pachSourceData.
pnConsumedBytes - the number of bytes used.
Returns:
The number of bytes at pachSourceData which are actual data for this record (not including unit, or field terminator).

extractFloatData

public double extractFloatData(byte[] pachSourceData,
                               int nMaxBytes,
                               MutableInt pnConsumedBytes)
Extract a subfield value as a float. Given a pointer to the data for this subfield (from within a DDFRecord) this method will return the floating point data for this subfield. The number of bytes consumed as part of this field can also be fetched. This method may be called for any type of subfield, and will return zero if the subfield is not numeric.

Parameters:
pachSourceData - The pointer to the raw data for this field. This may have come from DDFRecord::GetData(), taking into account skip factors over previous subfields data.
nMaxBytes - The maximum number of bytes that are accessible after pachSourceData.
pnConsumedBytes - Pointer to an integer into which the number of bytes consumed by this field should be written. May be null to ignore. This is used as a skip factor to increment pachSourceData to point to the next subfields data.
Returns:
The subfield's numeric value (or zero if it isn't numeric).

extractIntData

public int extractIntData(byte[] pachSourceData,
                          int nMaxBytes,
                          MutableInt pnConsumedBytes)
Extract a subfield value as an integer. Given a pointer to the data for this subfield (from within a DDFRecord) this method will return the int data for this subfield. The number of bytes consumed as part of this field can also be fetched. This method may be called for any type of subfield, and will return zero if the subfield is not numeric.

Parameters:
pachSourceData - The pointer to the raw data for this field. This may have come from DDFRecord::GetData(), taking into account skip factors over previous subfields data.
nMaxBytes - The maximum number of bytes that are accessible after pachSourceData.
pnConsumedBytes - Pointer to an integer into which the number of bytes consumed by this field should be written. May be null to ignore. This is used as a skip factor to increment pachSourceData to point to the next subfields data.
Returns:
The subfield's numeric value (or zero if it isn't numeric).

dumpData

public java.lang.String dumpData(byte[] pachData,
                                 int nMaxBytes)
Dump subfield value to debugging file.

Parameters:
pachData - Pointer to data for this subfield.
nMaxBytes - Maximum number of bytes available in pachData.


Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details