Class TLcdDAFIFTATSRouteDecoder

java.lang.Object
com.luciad.format.dafift.decoder.ALcdDAFIFTModelDecoder
com.luciad.format.dafift.decoder.TLcdDAFIFTATSRouteDecoder
All Implemented Interfaces:
ILcdInputStreamFactoryCapable, ILcdModelDecoder
Direct Known Subclasses:
TLcdDAFIFTIndependentATSRouteDecoder

public class TLcdDAFIFTATSRouteDecoder extends ALcdDAFIFTModelDecoder
Implementation of ILcdModelDecoder that decodes DAFIFT ATS route objects from the specified source directory. The decoded models have as model descriptor an instance of TLcdDAFIFATSRouteModelDescriptor.

The objects in decoded models are based on the AIS domain objects available in com.luciad.ais.model, which all implement ILcdDataObject. This interface provides a generic and format-independent way of accessing the type and properties (features) of a domain object.

For this decoder, the type of the decoded objects is TLcdDAFIFTDataTypes.ATSRoute, which can also be retrieved through ILcdDataObject.getDataType(). The available properties of the objects are defined in TLcdDAFIFTATSRouteDataProperties. The values for these properties can be retrieved through ILcdDataObject.getValue(com.luciad.datamodel.TLcdDataProperty).

Next to ILcdDataObject, the objects in decoded models also implement ILcdFeatured, the former interface to access the properties (features) of a domain object. This is still fully supported, and explained in the following comments.

The setATSRouteFeaturesToBeDecoded method and the setATSRouteSegmentFeaturesToBeDecoded method allow the user to specify which DAFIFT features are to be decoded into the featured model objects. If no features are specified, all features will be decoded.

The following fields (which are taken from the National Imagery and Mapping Agency (NIMA) Product Specifications for Digital Aeronautical Flight Information File (DAFIF), Eight Edition, January 2005) are supported by the decoder. The list indicates into which feature the fields are decoded. For the ATS route objects:

For the ATS route segment objects:

All DAFIFT decoders rely on a specific set of key features that uniquely define an object. This set of features must always be included in the set of features to be decoded. For ATS routes, the key features are:

  • ILcdDAFIFATSRouteFeature.IDENTIFIER
  • ILcdDAFIFATSRouteFeature.DIRECTION

ATS routes are composed of waypoints. The TLcdDAFIFTATSRouteDecoder class does not decode the waypoints necessary to construct the ATS routes. A waypoint model should be specified using the setWaypointsModel method.

To identify the waypoint objects uniquely within the waypoint model, a unique index on the ILcdWayPointFeature.IDENTIFIER and ILcdDAFIFWayPointFeature.COUNTRY_CODE waypoint features is added.

By default, ATS Routes with the same identifier and direction end up in one domain object, but the method setSplitByBatch(boolean) can be used to enable splitting those objects in separate routes if there are gaps in the sequence numbers.

Since:
7.2
See Also:
  • Constructor Details

    • TLcdDAFIFTATSRouteDecoder

      @Deprecated public TLcdDAFIFTATSRouteDecoder(ALcdAISObjectFactory aDomainFactory)
      Deprecated.
      Creates a new TLcdDAFIFTATSRouteDecoder. The user should specify which aDomainFactory he or she wants to use to create the ATS routes.
      Parameters:
      aDomainFactory - The factory to be used to create the model objects.
    • TLcdDAFIFTATSRouteDecoder

      public TLcdDAFIFTATSRouteDecoder(TLcdAISDataObjectFactory aFactory)
      Creates a new TLcdDAFIFTATSRouteDecoder. The user should specify which factory he or she wants to use to create the ATS routes.
      Parameters:
      aFactory - The factory to be used to create the model objects.
  • Method Details

    • getDisplayName

      public String getDisplayName()
      Description copied from interface: ILcdModelDecoder
      Returns a short, displayable name for the format that is decoded by this ILcdModelDecoder.
      Specified by:
      getDisplayName in interface ILcdModelDecoder
      Overrides:
      getDisplayName in class ALcdDAFIFTModelDecoder
      Returns:
      the displayable name of this ILcdModelDecoder.
    • decode

      public ILcdModel decode(String aSource) throws IOException
      Checks whether a waypoint model is set before starting the decode process. If no waypoint model is specified, an IllegalStateException object will be thrown.

      Returns a model containing the domain objects read from the given source file.

      The model will be build by looping through the records found in the source file. Each record that passes the record filter (getRecordFilter()) will be decoded. A decoded record needs to pass two additional filters (a model filter getModelFilter() and a bounds filter getDecodingBounds()) before it can be added to the model.

      Furthermore, an error message will be initialized and filled with reports about errors occurred during the decode process. By default, all reports will be added into the error message. The method setMaxNumberOfErrorReports(int) can be used to adjust this setting.

      Specified by:
      decode in interface ILcdModelDecoder
      Parameters:
      aSource - Either the directory containing the DAFIFT source file to decode or the DAFIFT source file itself.
      Returns:
      the model build by reading the file found with the given source.
      Throws:
      IOException - if an error occurs during the reading process.
      IllegalStateException - if no waypoint model has been specified.
      See Also:
    • setSplitByBatch

      public void setSplitByBatch(boolean aSplitByBatch)
      Split a DAFIFT ATS route with multiple batches into separate ATS routes when the gap between consecutive sequence numbers is larger than 10.

      An ATS route contains segments and each segment in an ATS route is identified by a sequence number. Generally, sequence numbers start at 10 and increment in steps of 10 (i.e. 10, 20, 30...), but it is also possible that there is a larger gap in these increments (i.e. 10, 20, 30, 110, 120...). A series of sequence numbers without a gap is called a batch.

      By default, ATS routes with the same identifier and direction end up in one domain object, which means all batches and segments are combined into a single ATS route. This option allows changing this behaviour so that each batch is turned into a separate ATS route.

      Parameters:
      aSplitByBatch - If false, batches are not taken into account. This is the default behaviour. If true, each batch is decoded as a separate ATS route.
      Since:
      2024.0
    • setATSRouteDefaultDisplayNameIndex

      public void setATSRouteDefaultDisplayNameIndex(int aIndex)
      Specifies the index of the feature to be the ATS route display name.
      Parameters:
      aIndex - The index of the feature to be the ATS route display name.
    • setATSRouteSegmentDefaultDisplayNameIndex

      public void setATSRouteSegmentDefaultDisplayNameIndex(int aIndex)
      Specifies the index of the feature to be the ATS route segment display name.
      Parameters:
      aIndex - The index of the feature to be the ATS route segment display name.
    • setATSRouteFeaturesToBeDecoded

      public void setATSRouteFeaturesToBeDecoded(String[] aFeaturesToBeDecoded)
      Specifies the ATS route features to be decoded into the model objects.

      Please make sure that the IDENTIFIER and DIRECTION features are in your list of features to be decoded!

      Parameters:
      aFeaturesToBeDecoded - A list of features that should be decoded into the ATS route model objects.
    • setATSRouteSegmentFeaturesToBeDecoded

      public void setATSRouteSegmentFeaturesToBeDecoded(String[] aFeaturesToBeDecoded)
      Specifies the ATS route segment features to be decoded into the model objects.
      Parameters:
      aFeaturesToBeDecoded - A list of features that should be decoded into the ATS route segment objects.
    • setWaypointsModel

      public void setWaypointsModel(ILcdFeatureIndexedModel aWaypointsModel)
      Specifies the model containing the waypoint objects this decoder should use.
      Parameters:
      aWaypointsModel - A model containing waypoint objects.
    • getUniqueKeyFeatureNames

      public String[] getUniqueKeyFeatureNames()
      Returns the array of String objects containing the names of the features that will be used as a unique key to insert objects into the model.
      Returns:
      the array of String objects containing the names of the features that will be used as a unique key to insert objects into the model.
    • canDecodeSource

      public boolean canDecodeSource(String aSource)
      Returns true if the specified source is:
      • A file with the specific name corresponding to the object type of this decoder
      • A directory containing such a file
      • A .toc file in a directory, pointing to such a file
      Parameters:
      aSource - the name of the source file or directory that you want to decode
      Returns:
      a boolean indicating whether the given source can be decoded
    • getDomainFactory

      @Deprecated public ALcdAISObjectFactory getDomainFactory()
      Deprecated.
      Returns the factory that is used to create domain objects.
      Returns:
      the factory that is used to create domain objects.
      See Also:
    • setDomainFactory

      @Deprecated public void setDomainFactory(ALcdAISObjectFactory aDomainFactory)
      Specifies the domain factory.

      The domain factory will be used to create the domain objects decoded by this DAFIFT decoder.

      Parameters:
      aDomainFactory - The factory that will be used to create domain objects.
      See Also:
    • getDataObjectFactory

      public TLcdAISDataObjectFactory getDataObjectFactory()
      Returns the factory that is used to create domain objects.
      Returns:
      the factory that is used to create domain objects.
      See Also:
    • setDataObjectFactory

      public void setDataObjectFactory(TLcdAISDataObjectFactory aFactory)
      Specifies the data factory.

      The data factory will be used to create the domain objects decoded by this DAFIFT decoder.

      Decoders equipped with a data object factory that is not null, will NOT use their associated domain factory (see getDomainFactory()).

      Parameters:
      aFactory - The factory that will be used to create domain objects.
      See Also:
    • getInputStreamFactory

      public ILcdInputStreamFactory getInputStreamFactory()
      Returns the input stream factory that is currently used for creating the input streams for the given source names.
      Specified by:
      getInputStreamFactory in interface ILcdInputStreamFactoryCapable
      Returns:
      the input stream factory that is currently used.
      See Also:
    • setInputStreamFactory

      public void setInputStreamFactory(ILcdInputStreamFactory aInputStreamFactory)
      Sets the input stream factory that will be used for creating the input streams for the given source names.
      Specified by:
      setInputStreamFactory in interface ILcdInputStreamFactoryCapable
      Parameters:
      aInputStreamFactory - The input stream factory to be used.
      See Also:
    • getRecordFilter

      public ILcdDAFIFTRecordFilter getRecordFilter()
      Returns the record filter that is currently used.
      Returns:
      the record filter that is currently used.
      See Also:
    • setRecordFilter

      public void setRecordFilter(ILcdDAFIFTRecordFilter aRecordFilter)
      Specifies a filter to be used while creating the model. Only records that pass through this filter will be decoded into model objects.
      Parameters:
      aRecordFilter - The record filter that should be passed before a record can be decoded.
      See Also:
    • getMaxNumberOfErrorReports

      public int getMaxNumberOfErrorReports()
      Returns the number of error reports to be added to the error message. If there are more errors than the maxNumberOfErrorReports property, they won't be stored and you won't be able to see these errors in the error message after the decoding process.
      Returns:
      the number of error reports to be added to the error message.
      See Also:
    • setMaxNumberOfErrorReports

      public void setMaxNumberOfErrorReports(int aMaxNumberOfErrorReports)
      Specifies a value for the maximum number of error reports. If a negative value is set, all reported errors will be added to the error message.
      Parameters:
      aMaxNumberOfErrorReports - The maximum number of error reports to be added to the error message.
      See Also:
    • getErrorMessage

      public String getErrorMessage()
      Returns the error message of the last decode call.

      Note that the error message can only be retrieved once after a decode call.

      Returns:
      a String object containing the errors occurred during the last decode process.