Class TLcdKML22DynamicModel

java.lang.Object
com.luciad.model.ALcdModel
com.luciad.format.kml22.model.TLcdKML22DynamicModel
All Implemented Interfaces:
ILcd2DBoundsIndexedModel, ILcd2DBoundsInteractable, ILcdModel, ILcdModelContainer, ILcdModelProducerListener, ILcdModelTreeNode, ILcdBounded, ILcdDisposable, ILcdStatusSource, Serializable, AutoCloseable, ReadWriteLock, EventListener

public class TLcdKML22DynamicModel extends ALcdModel implements ILcdModelTreeNode, ILcd2DBoundsIndexedModel, ReadWriteLock, ILcdStatusSource
Model wrapper around static KML models (TLcdKML22Kml, TLcdKML22Document, TLcdKML22Folder, TLcdKML22NetworkLink), resolving the dynamic contents of KML data.

If the wrapped model contains network links, the links will be automatically resolved by this model, and the contents of the resolved links will become available as submodels (also TLcdKML22DynamicModel's) of this model.

Since a network link can contain map-based parameters (e.g. the bounding box of the map), a TLcdKML22DynamicModel is typically created for each (map, kml model) pair. These parameters are passed to this model through a TLcdKML22Parameters.

The moment at which a network link is resolved, depends on the refresh mode and view refresh mode that is specified within the link:

  • If the view refresh mode is "onRegion" or unspecified, the link will be resolved whenever the contents of the model are needed (for example, when calling elements(). Note that the loading takes place asynchronously.
  • If the view refresh mode is "onStop", the link will be resolved when the TLcdKML22Parameters no longer changes. Since a TLcdKML22Parameters object is typically updated by the view, this corresponds to the view stopping panning/zooming. If a delay is specified, this will be taken into account.
  • If the refresh mode is "onInterval", the link will be resolved according to the time interval that is specified.

All resources needed by this model are retrieved from the TLcdKML22ResourceProvider that is passed to this model.

In addition to network link resolving, this model also provides functionality for advanced filtering, based on:

  • spatial bounds
  • time bounds
  • content types
  • altitude modes
  • visibility

Note: To ensure that TLcdKML22DynamicModel does no longer than necessary perform network link updates, it is advised to call the dispose() method as soon as the model is removed from the view (and no longer used elsewhere). If dispose is not called, the model will keep updating itself until it is garbage collected.

Since:
10.0
See Also:
  • Constructor Details

  • Method Details

    • getKMLModel

      public ILcdModelTreeNode getKMLModel()

      Returns the static KML model that is wrapped by this model. This is either a TLcdKML22Kml or TLcdKML22AbstractContainer otherwise.

      Returns:
      The KML model wrapped by this networklink.
    • getKMLNetworkLink

      public TLcdKML22NetworkLink getKMLNetworkLink()

      Returns the networklink contained by this dynamic model, if any.

      Returns:
      Either a TLcdKML22NetworkLink if this TLcdKML22DynamicModel was wraps a TLcdKML22NetworkLink; null otherwise.
    • setRegionFilter

      public void setRegionFilter(ILcdKML22RegionFilter aRegionFilter)

      Sets the region filter for this dynamic model, and all underlying child dynamic models.

      This method also fires a property change event

      Parameters:
      aRegionFilter - a region filter to set on this dynamic model and all its children recursively
    • getRegionFilter

      public ILcdKML22RegionFilter getRegionFilter()
      Returns the region filter this dynamic model uses
      Returns:
      a region filter
    • setKMLParameters

      public void setKMLParameters(TLcdKML22Parameters aParameterProvider)

      Sets the KML parameters for this dynamic model, and all underlying child dynamic models.

      This method also fires a property change event

      Parameters:
      aParameterProvider - a KML parameters to set on this dynamic model and all its children recursively
    • getKMLParameters

      public TLcdKML22Parameters getKMLParameters()
      Returns the KML parameters this dynamic model uses
      Returns:
      a KML parameters
    • setHierarchicalVisibility

      public void setHierarchicalVisibility(boolean aVisibility)

      Sets the visibility of the kml entity contained by this TLcdKML22DynamicModel in a hierarchical fashion.

      It does the following things:

      If the recursion is unwanted, you can use the getKMLNetworkLink() method to retrieve the underlying KML entity, and change the visibility of that element manually using ALcdKML22AbstractFeature.setVisibility(Boolean). This way, no other elements will have their elements changed, and no events will be fired.

      Parameters:
      aVisibility - the visibility to set in a hierarchical fashion
    • getName

      public String getName()
      Returns a string representation of this dynamic model, depending on the wrapped KML feature.
      Returns:
      a string representation of this dynamic model
    • addStatusListener

      public void addStatusListener(ILcdStatusListener aStatusListener)
      Adds a status listener to this model. The listener will get notified whenever the network link of this model (if there is one) is being refreshed.
      Specified by:
      addStatusListener in interface ILcdStatusSource
      Parameters:
      aStatusListener - a listener to be notified of network link changes in this model.
      See Also:
    • removeStatusListener

      public void removeStatusListener(ILcdStatusListener aStatusListener)
      Removes the specified status listener from this model. If the status listener was not registered before, this method has no effect.
      Specified by:
      removeStatusListener in interface ILcdStatusSource
      Parameters:
      aStatusListener - a status listener to be removed from this model.
      See Also:
    • getStatus

      public ELcdKML22ResourceStatus getStatus()
      Returns the status of this model.
      Returns:
      the status of this model
    • applyOnInteract2DBounds

      public int applyOnInteract2DBounds(ILcdBounds aBounds, ILcdTimeBounds aTimeBounds, Set<ELcdKML22ContentType> aContentTypes, Set<ELcdKML22AltitudeMode> aFilterOnAltitudeModes, boolean aFilterOnVisibility, boolean aFilterOnRegion, boolean aForceDrawingOrder, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY)
      Applies the specified function to all the model elements that meet the specified filter. By default, the order in which the function is applied on the elements is unspecified and depends on the implementation.

      A filter can be specified on the following properties:

      • Spatial bounds
      • Time bounds
      • KML content type
      • Visibility

      The return value of the specified function is used as a stop criterion: the spatial query is interrupted if the function returns false.

      Parameters:
      aBounds - the spatial bounds filter - only overlapping elements will be selected.
      aTimeBounds - the time bounds filter - only overlapping elements will be selected.
      aContentTypes - the KML content type filter - only elements with the specified content type will be selected.
      aFilterOnAltitudeModes - the altitude mode filter - only elements with the specified altitude mode will be selected.
      aFilterOnVisibility - the visibility filter - if true, only the visible element will be selected, otherwise visibility will not be taken into account.
      aFilterOnRegion - the region filter - if true only region active elements will be selected, otherwise region activity will not be taken into account.
      aForceDrawingOrder - indicates whether the drawing order of overlays should be taken into account. If true, objects with a drawing order will be applied after all other objects, and objects with a higher drawing order will be applied after objects with a lower drawing order.
      aStrictInteract - if false, the spatial search may return more elements than the ones strictly overlapping; if true, the search only returns the elements that are overlapping. The latter mode is more precise, but it may be slower.
      aFunctionToApply - the function to apply on each element that overlaps with the given bounds.
      aPrecisionX - the precision required in the x dimension, expressed in model units.
      aPrecisionY - the precision required in the y dimension, expressed in model units.
      Returns:
      the number of elements to which the ILcdFunction has been applied.
      Throws:
      NullPointerException - if the specified bounds or the specified function are null.
    • applyOnInteract2DBounds

      public int applyOnInteract2DBounds(ILcdBounds aBounds, ILcdTimeBounds aTimeBounds, Set<ELcdKML22ContentType> aContentTypes, Set<ELcdKML22AltitudeMode> aFilterOnAltitudeModes, boolean aFilterOnVisibility, boolean aFilterOnRegion, boolean aForceDrawingOrder, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY, double aMinSizeX, double aMinSizeY, boolean aIncludePoints)
      Applies the specified function to all the model elements that meet the specified filter. The order in which the function is applied on the elements is unspecified and depends on the implementation.

      A filter can be specified on the following properties:

      • Spatial bounds
      • Time bounds
      • KML content type
      • Visibility

      Only elements that have at least the specified minimal size in the x dimension or in the y dimension are considered. This can be useful for quickly eliminating elements that are too small to be visible in a view, for instance. If required, an exception can be made for point elements, which have a size of 0 by 0. They can be forced to be considered, even though they would always be rejected as being too small for any sizes larger than 0.

      The return value of the specified function is used as a stop criterion: the spatial query will be interrupted as soon as the function returns false for an element it was applied on.

      Parameters:
      aBounds - the spatial bounds filter - only overlapping elements will be selected.
      aTimeBounds - the time bounds filter - only overlapping elements will be selected.
      aContentTypes - the KML content type filter - only elements with the specified content type will be selected.
      aFilterOnAltitudeModes - the altitude mode filter - only elements with the specified altitude mode will be selected.
      aFilterOnVisibility - the visibility filter - if true, only the visible element will be selected, otherwise visibility will not be taken into account.
      aFilterOnRegion - the region filter - if true only region active elements will be selected, otherwise region activity will not be taken into account.
      aForceDrawingOrder - indicates whether the drawing order of overlays should be taken into account. If true, objects with a drawing order will be applied after all other objects, and objects with a higher drawing order will be applied after objects with a lower drawing order.
      aStrictInteract - if false, the spatial search may return more elements than the ones strictly overlapping; if true, the search only returns the elements that are overlapping. The latter mode is more precise, but it may be slower.
      aFunctionToApply - the function to apply on each element that overlaps with the given bounds.
      aPrecisionX - the precision required in the x dimension, expressed in model units.
      aPrecisionY - the precision required in the y dimension, expressed in model units.
      aMinSizeX - the minimal element size in the x dimension, expressed in model units.
      aMinSizeY - the minimal element size in the y dimension, expressed in model units.
      aIncludePoints - if true, zero-sized elements (points) are considered as well, even though they might be smaller than the minimum size.
      Returns:
      the number of elements to which the ILcdFunction has been applied.
      Throws:
      NullPointerException - if the specified bounds or the specified function are null.
    • elements

      public Enumeration elements(ILcdBounds aBounds, ILcdTimeBounds aTimeBounds, Set<ELcdKML22ContentType> aContentTypes, Set<ELcdKML22AltitudeMode> aAltitudeModes, boolean aFilterOnVisibility, boolean aFilterOnRegion, boolean aForceDrawingOrder)
      Returns an enumeration over all elements of this model that meet the specified filter.

      The order in which the elements are enumerated is unspecified by default.

      A filter can be specified on the following properties:

      • Spatial bounds
      • Time bounds
      • KML content type
      • Visibility
      Parameters:
      aBounds - the spatial bounds filter - only overlapping elements will be selected.
      aTimeBounds - the time bounds filter - only overlapping elements will be selected.
      aContentTypes - the KML content type filter - only elements with the specified content type will be selected.
      aAltitudeModes - the altitude mode filter - only elements with the specified altitude mode will be selected.
      aFilterOnVisibility - the visibility filter - if true, only the visible element will be selected, otherwise visibility will not be taken into account.
      aFilterOnRegion - region filter - if true, elements in a non-active region filter will be skipped.
      aForceDrawingOrder - if true, the all elements that feature a draw order will be sorted on their draw order.
      Returns:
      an enumeration over all elements of this model.
    • getBounds

      public ILcdBounds getBounds(ILcdTimeBounds aTimeBounds, Set<ELcdKML22ContentType> aContentTypes, Set<ELcdKML22AltitudeMode> aAltitudeModes, boolean aFilterOnVisibility, ILcdFilter aElementFilter)
      Returns the union of all spatial bounds of the elements in this model that meet the specified filter.
      Parameters:
      aTimeBounds - the time bounds filter - only overlapping elements will be selected.
      aContentTypes - the KML content type filter - only elements with the specified content type will be selected.
      aAltitudeModes - the altitude mode filter - only elements with the specified altitude mode will be selected.
      aFilterOnVisibility - the visibility filter - if true, only the visible element will be selected, otherwise visibility will not be taken into account.
      aElementFilter - a custom element filter to filter out certain elements from the bounds calculation
      Returns:
      the union of all spatial bounds of the elements in this model that meet the specified filter.
    • getTimeBounds

      public ILcdTimeBounds getTimeBounds(ILcdBounds aSpatialBounds, Set<ELcdKML22ContentType> aContentTypes, Set<ELcdKML22AltitudeMode> aAltitudeModes, boolean aFilterOnVisibility, boolean aFilterOnRegion, ILcdFilter aElementFilter, boolean aIgnoreUnboundedTimeBounds)
      Returns the union of all time bounds of the elements in this model that meet the specified filter.
      Parameters:
      aSpatialBounds - the spatial bounds filter - only overlapping elements will be selected.
      aContentTypes - the KML content type filter - only elements with the specified content type will be selected.
      aAltitudeModes - the altitude mode filter - only elements with the specified altitude mode will be selected.
      aFilterOnVisibility - the visibility filter - if true, only the visible element will be selected, otherwise visibility will not be taken into account.
      aFilterOnRegion - region filter - if true, elements in a non-active region filter will not be taken into account.
      aElementFilter - A custom filter that will be applied on each element.
      aIgnoreUnboundedTimeBounds - specifies whether unbounded start or end bounds should be included in the union (if at least one element is unbounded, the union bounds will be unbounded).
      Returns:
      the union of all spatial bounds of the elements in this model that meet the specified filter.
    • getModelDescriptor

      public ILcdModelDescriptor getModelDescriptor()
      Description copied from class: ALcdModel
      Returns the ILcdModelDescriptor providing meta information about this model and its elements.
      Specified by:
      getModelDescriptor in interface ILcdModel
      Specified by:
      getModelDescriptor in interface ILcdModelTreeNode
      Overrides:
      getModelDescriptor in class ALcdModel
      Returns:
      the ILcdModelDescriptor of this ILcdModel. Should not be null.
      See Also:
    • getModelReference

      public ILcdModelReference getModelReference()
      Description copied from class: ALcdModel
      Returns the ILcdModelReference describing how the geometry of the elements contained in this model should be interpreted.
      Specified by:
      getModelReference in interface ILcdModel
      Specified by:
      getModelReference in interface ILcdModelTreeNode
      Overrides:
      getModelReference in class ALcdModel
      Returns:
      the ILcdModelReference of this ILcdModel.
      See Also:
    • getModelEncoder

      public ILcdModelEncoder getModelEncoder()
      Description copied from class: ALcdModel
      Returns, if available, a model encoder that is capable of encoding this model, (encoder.canEncode(this)), null otherwise.
      Specified by:
      getModelEncoder in interface ILcdModel
      Specified by:
      getModelEncoder in interface ILcdModelTreeNode
      Overrides:
      getModelEncoder in class ALcdModel
      Returns:
      a model encoder that is capable of encoding this model if available, null otherwise.
      See Also:
    • elements

      public Enumeration elements()
      Description copied from interface: ILcdModelTreeNode
      Returns an enumeration over all elements of this model. The order in which the elements are enumerated is unspecified by default.

      The elements of the child model(s) are not included in this enumeration.

      Specified by:
      elements in interface ILcdModel
      Specified by:
      elements in interface ILcdModelTreeNode
      Returns:
      an enumeration over all elements of this model. The elements of the child model(s) are not included in this enumeration.
    • canAddElement

      public boolean canAddElement(Object aElement)
      Description copied from class: ALcdModel
      Returns true if the specified element can be added to this model, false otherwise.

      Note that this method generally does not validate whether the specified element is expressed in the same model reference as this model. It is the responsibility of the user of this model to make sure this precondition is fulfilled when an element is added to this model.

      This implementation always returns false.

      Specified by:
      canAddElement in interface ILcdModel
      Specified by:
      canAddElement in interface ILcdModelTreeNode
      Overrides:
      canAddElement in class ALcdModel
      Parameters:
      aElement - the element to be verified.
      Returns:
      true if the specified element can be added to this model, false otherwise.
    • addElement

      public void addElement(Object aElement, int aEventMode)
      Description copied from class: ALcdModel
      Adds the specified element to this model.

      Models that support this operation may place limitations on what elements may be added to this model. For example, implementations that are based on a spatial indexing structure will require that elements implement ILcdBounded.

      When adding an element, the user should make sure that canAddElement(aElement) holds, and that the element's geometry is expressed in the same model reference as this model. It is generally undefined what happens if an invalid element is added.

      Implementations of this interface should clearly specify in their documentation any restrictions on what elements may be added. Although it is unspecified what happens if the preconditions are not met, implementations are encouraged to throw meaningful exceptions (for example, NullPointerException, IllegalArgumentException, ClassCastException, UnsupportedOperationException), whenever possible.

      This implementation always throws an UnsupportedOperationException.

      Specified by:
      addElement in interface ILcdModel
      Specified by:
      addElement in interface ILcdModelTreeNode
      Overrides:
      addElement in class ALcdModel
      Parameters:
      aElement - the element to be added to this model.
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
      See Also:
    • addElements

      public void addElements(Vector aElements, int aEventMode)
      Description copied from class: ALcdModel
      Adds all of the elements in the specified vector to this model. Models that support this operation may place limitations on what elements may be added to this model. For example, implementations that are based on a spatial indexing structure will require that elements implement ILcdBounded. Implementations of this interface should clearly specify in their documentation any restrictions on what elements may be added.

      The behavior of this operation is undefined if the specified vector is modified while the operation is in progress.

      The specified elements will be added to this model in the order they are specified in the vector. If an element cannot be added, this method will return at the first failure. Succeeding elements won't be added.

      Although it is unspecified what happens if the preconditions are not met, implementations are encouraged to throw meaningful exceptions (for example, NullPointerException, IllegalArgumentException, ClassCastException, UnsupportedOperationException), whenever possible.

      This implementation iterates over all elements in the specified vector, and calls addElement(Object, int) for each element to be added, using event mode NO_EVENT if the specified event mode is NO_EVENT, FIRE_LATER otherwise. If the specified event mode is FIRE_NOW, fireCollectedModelChanges() is called afterwards.

      Specified by:
      addElements in interface ILcdModel
      Specified by:
      addElements in interface ILcdModelTreeNode
      Overrides:
      addElements in class ALcdModel
      Parameters:
      aElements - the vector of elements to be added to this model.
      aEventMode - the mode for sending the model change events This can be FIRE_LATER or NO_EVENT.
      See Also:
    • canRemoveElement

      public boolean canRemoveElement(Object aElement)
      Description copied from class: ALcdModel
      Returns true if the specified element can be removed from this model, false otherwise. Note that this method generally does not check whether the specified element is actually contained in this model.

      This implementation always returns false.

      Specified by:
      canRemoveElement in interface ILcdModel
      Specified by:
      canRemoveElement in interface ILcdModelTreeNode
      Overrides:
      canRemoveElement in class ALcdModel
      Parameters:
      aElement - the element to be verified.
      Returns:
      true if the specified element can be removed from this model, false otherwise.
    • removeElement

      public void removeElement(Object aElement, int aEventMode)
      Description copied from class: ALcdModel
      Removes the specified element from this model. If the specified element is not contained in this model, this method has no effect.

      Although it is unspecified what happens if the preconditions are not met, implementations are encouraged to throw meaningful exceptions (for example, NullPointerException, IllegalArgumentException, ClassCastException, UnsupportedOperationException), whenever possible.

      This implementation always throws an UnsupportedOperationException.

      Specified by:
      removeElement in interface ILcdModel
      Specified by:
      removeElement in interface ILcdModelTreeNode
      Overrides:
      removeElement in class ALcdModel
      Parameters:
      aElement - the element to be removed from this model.
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
      See Also:
    • removeElements

      public void removeElements(Vector aElements, int aEventMode)
      Description copied from class: ALcdModel
      Removes all of the elements in the specified vector from this model. If one of the elements in the specified vector is not contained in this model, this element will be ignored.

      The behavior of this operation is undefined if the specified vector is modified while the operation is in progress.

      The specified elements will be removed from this model in the order they are specified in the vector. If an element cannot be removed, this method will return at the first failure. Succeeding elements won't be removed.

      Although it is unspecified what happens if the preconditions are not met, implementations are encouraged to throw meaningful exceptions (for example, NullPointerException, IllegalArgumentException, ClassCastException, UnsupportedOperationException), whenever possible.

      This implementation iterates over all elements in the specified vector, and calls removeElement(Object, int) for each element to be removed, using event mode NO_EVENT if the specified event mode is NO_EVENT, FIRE_LATER otherwise. If the specified event mode is FIRE_NOW, fireCollectedModelChanges() is called afterwards.

      Specified by:
      removeElements in interface ILcdModel
      Specified by:
      removeElements in interface ILcdModelTreeNode
      Overrides:
      removeElements in class ALcdModel
      Parameters:
      aElements - the vector of elements to be removed from this model.
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
      See Also:
    • removeAllElements

      public void removeAllElements(int aEventMode)
      Description copied from class: ALcdModel
      Removes all elements from this model.

      If an element cannot be removed, this method will return at the first failure. Succeeding elements won't be removed.

      Although it is unspecified what happens if the preconditions are not met, implementations are encouraged to throw meaningful exceptions (for example, NullPointerException, IllegalArgumentException, ClassCastException, UnsupportedOperationException), whenever possible.

      This implementation iterates over all elements in the model, and calls removeElement(Object, int) for each element to be removed, using event mode NO_EVENT if the specified event mode is NO_EVENT, FIRE_LATER otherwise. If the specified event mode is FIRE_NOW, fireCollectedModelChanges() is called afterwards.

      Specified by:
      removeAllElements in interface ILcdModel
      Specified by:
      removeAllElements in interface ILcdModelTreeNode
      Overrides:
      removeAllElements in class ALcdModel
      Parameters:
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
    • elementChanged

      public void elementChanged(Object aElement, int aEventMode)
      Description copied from class: ALcdModel
      Notifies this model that the specified element has changed.

      This implementation calls TLcdModelChangedEventSupport#elementChanged(Object, int).

      Specified by:
      elementChanged in interface ILcdModel
      Specified by:
      elementChanged in interface ILcdModelTreeNode
      Overrides:
      elementChanged in class ALcdModel
      Parameters:
      aElement - the element that has changed.
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
    • elementsChanged

      public void elementsChanged(Vector aElements, int aEventMode)
      Description copied from class: ALcdModel
      Notifies this model that the elements in the specified vector have changed.

      This implementation calls TLcdModelChangedEventSupport#elementsChanged(java.util.Vector, int).

      Specified by:
      elementsChanged in interface ILcdModel
      Specified by:
      elementsChanged in interface ILcdModelTreeNode
      Overrides:
      elementsChanged in class ALcdModel
      Parameters:
      aElements - the vector of elements that have changed.
      aEventMode - the mode for sending out the model change event. This can be FIRE_LATER or NO_EVENT.
    • fireCollectedModelChanges

      public void fireCollectedModelChanges()
      Description copied from class: ALcdModel
      Notifies all listeners that are registered on this model of all the changes that have been collected between the previous notification and now.

      This implementation calls #TLcdModelChangedEventSupport#fireCollectedModelChanges().

      Specified by:
      fireCollectedModelChanges in interface ILcdModel
      Specified by:
      fireCollectedModelChanges in interface ILcdModelTreeNode
      Overrides:
      fireCollectedModelChanges in class ALcdModel
      See Also:
    • addModelListener

      public void addModelListener(ILcdModelListener aModelListener)
      Description copied from class: ALcdModel

      Registers the specified model listener to receive notifications of model changes on this model.

      Model changes are sent out when an element has been added, removed or changed. Model changes can be sent out individually, grouped or silently applied without notifications, depending on the ILcdFireEventMode that was specified with the change.

      In case you need to register a listener which keeps a reference to an object with a shorter life-time than this model, you can use a ALcdWeakModelListener instance as model listener.

      This implementation calls TLcdModelChangedEventSupport#addModelListener(ILcdModelListener).

      Specified by:
      addModelListener in interface ILcdModel
      Specified by:
      addModelListener in interface ILcdModelTreeNode
      Overrides:
      addModelListener in class ALcdModel
      Parameters:
      aModelListener - the ILcdModelListener to register on this model.
      See Also:
    • removeModelListener

      public void removeModelListener(ILcdModelListener aModelListener)
      Description copied from class: ALcdModel
      Unregisters the specified model listener so that it no longer receives notifications of model changes on this model.

      This implementation calls TLcdModelChangedEventSupport#removeModelListener(ILcdModelListener).

      Specified by:
      removeModelListener in interface ILcdModel
      Specified by:
      removeModelListener in interface ILcdModelTreeNode
      Overrides:
      removeModelListener in class ALcdModel
      Parameters:
      aModelListener - the ILcdModelListener to remove.
      See Also:
    • dispose

      public void dispose()
      Description copied from class: ALcdModel
      Disposes of this model and allows it to release any system resources that it is holding. The result of calling any other method (other than finalize) on this model subsequent to a call to this method is undefined.

      When a model disposer has been provided it is called, otherwise this method does nothing. When overriding this method it is recommended to call super.dispose().

      Specified by:
      dispose in interface ILcdDisposable
      Specified by:
      dispose in interface ILcdModel
      Specified by:
      dispose in interface ILcdModelTreeNode
      Overrides:
      dispose in class ALcdModel
      See Also:
    • applyOnInteract2DBounds

      public int applyOnInteract2DBounds(ILcdBounds aBounds, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY)

      Calls the custom applyOnInteract2DBounds method, with the following default parameters:

      • no filtering on time (null)
      • no filtering on element type (null)
      • no filtering on altitude modes (null)
      • no filtering on visibility (visibility not taken into account)
      • no filtering on region (all regions active by default)
      Specified by:
      applyOnInteract2DBounds in interface ILcd2DBoundsIndexedModel
      Parameters:
      aBounds - the rectangle to test overlap with.
      aStrictInteract - if false, the spatial search may return more elements than the ones strictly overlapping; if true, the search only returns the elements that are overlapping. The latter mode is more precise, but it may be slower.
      aFunctionToApply - the function to apply on each element that overlaps with the given bounds.
      aPrecisionX - the precision required in the x dimension, expressed in model units.
      aPrecisionY - the precision required in the y dimension, expressed in model units.
      Returns:
      the number of elements to which the ILcdFunction has been applied.
    • applyOnInteract2DBounds

      public int applyOnInteract2DBounds(ILcdBounds aBounds, boolean aStrictInteract, ILcdFunction aFunctionToApply, double aPrecisionX, double aPrecisionY, double aMinSizeX, double aMinSizeY, boolean aIncludePoints)

      Calls the custom applyOnInteract2DBounds method, with the following default parameters:

      • no filtering on time (null)
      • no filtering on element type (null)
      • no filtering on altitude modes (null)
      • no filtering on visibility (visibility not taken into account)
      • no filtering on region (all regions active by default)
      Specified by:
      applyOnInteract2DBounds in interface ILcd2DBoundsIndexedModel
      Specified by:
      applyOnInteract2DBounds in interface ILcd2DBoundsInteractable
      Parameters:
      aBounds - the rectangle to test overlap with.
      aStrictInteract - if false, the spatial search may return more elements than the ones strictly overlapping; if true, the search only returns the elements that are overlapping. The latter mode is more precise, but it may be slower.
      aFunctionToApply - the function to apply on each element that overlaps with the given bounds.
      aPrecisionX - the precision required in the x dimension, expressed in model units.
      aPrecisionY - the precision required in the y dimension, expressed in model units.
      aMinSizeX - the minimal element size in the x dimension, expressed in model units.
      aMinSizeY - the minimal element size in the y dimension, expressed in model units.
      aIncludePoints - if true, zero-sized elements (points) are considered as well, even though they might be smaller than the minimum size.
      Returns:
      the number of elements to which the ILcdFunction has been applied.
    • modelProduced

      public void modelProduced(TLcdModelProducerEvent aModelProducerEvent)
      Description copied from interface: ILcdModelProducerListener
      Notifies this ILcdModelProducerListener of a produced model.
      Specified by:
      modelProduced in interface ILcdModelProducerListener
      Parameters:
      aModelProducerEvent - the event describing the changes to a ILcdModelProducer.
    • modelCount

      public int modelCount()
      Description copied from interface: ILcdModelTreeNode

      Returns the number of child models of this model node.

      Specified by:
      modelCount in interface ILcdModelContainer
      Specified by:
      modelCount in interface ILcdModelTreeNode
      Returns:
      the number of child models of this model node.
    • getModel

      public TLcdKML22DynamicModel getModel(int aIndex)
      Description copied from interface: ILcdModelTreeNode

      Returns the child model at the given index.

      Specified by:
      getModel in interface ILcdModelContainer
      Specified by:
      getModel in interface ILcdModelTreeNode
      Parameters:
      aIndex - a valid index in this ILcdModelTreeNode
      Returns:
      the child model at the given index.
    • models

      public Enumeration models()
      Description copied from interface: ILcdModelTreeNode

      Returns an Enumeration of the child models of this ILcdModelTreeNode.

      Specified by:
      models in interface ILcdModelContainer
      Specified by:
      models in interface ILcdModelTreeNode
      Returns:
      an Enumeration of the child models of this ILcdModelTreeNode.
    • addModel

      public boolean addModel(ILcdModel aModel)
      Description copied from interface: ILcdModelTreeNode

      Adds the ILcdModel aModel as a child model to this ILcdModelTreeNode.

      Specified by:
      addModel in interface ILcdModelContainer
      Specified by:
      addModel in interface ILcdModelTreeNode
      Parameters:
      aModel - the model to be added.
      Returns:
      true if this collection of models changed as a result of the call
    • removeModel

      public boolean removeModel(ILcdModel aModel)
      Description copied from interface: ILcdModelTreeNode

      Removes the child model aModel from this ILcdModelTreeNode.

      Specified by:
      removeModel in interface ILcdModelContainer
      Specified by:
      removeModel in interface ILcdModelTreeNode
      Parameters:
      aModel - the model to be removed.
      Returns:
      true if a model was removed as a result of this call
    • addModelContainerListener

      public void addModelContainerListener(ILcdModelContainerListener aModelContainerListener)
      Description copied from interface: ILcdModelTreeNode
      Adds an ILcdModelContainerListener to this ILcdModelContainer.

      It will only receive notifications of changes in this ILcdModelTreeNode and not of any changes in the state of the child model node(s). If this is required, the listener must be registered as a hierarchy listener (see ILcdModelTreeNode.addHierarchyModelContainerListener(ILcdModelContainerListener)).

      .
      Specified by:
      addModelContainerListener in interface ILcdModelContainer
      Specified by:
      addModelContainerListener in interface ILcdModelTreeNode
      Parameters:
      aModelContainerListener - the listener to be added.
      See Also:
    • removeModelContainerListener

      public void removeModelContainerListener(ILcdModelContainerListener aModelContainerListener)
      Description copied from interface: ILcdModelTreeNode
      Removes an ILcdModelContainerListener from this ILcdModelContainer.

      It is not possible to remove a hierarchy model container listener. Use ILcdModelTreeNode.removeHierarchyModelContainerListener(ILcdModelContainerListener) for this purpose.

      Specified by:
      removeModelContainerListener in interface ILcdModelContainer
      Specified by:
      removeModelContainerListener in interface ILcdModelTreeNode
      Parameters:
      aModelContainerListener - the listener to be removed.
      See Also:
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: ILcdModelTreeNode

      Returns true when the model node is only used as a container for other models, and contains no useful data itself, false otherwise.

      Specified by:
      isEmpty in interface ILcdModelTreeNode
      Returns:
      true when the model node contains no useful data, false otherwise
    • addHierarchyModelContainerListener

      public void addHierarchyModelContainerListener(ILcdModelContainerListener aModelContainerListener)
      Description copied from interface: ILcdModelTreeNode

      Registers the given ILcdModelContainerListener to receive TLcdModelContainerEvents from all the ILcdModelTreeNodes contained in the tree with this node as root node. If the listener should only receive events originating from this model node, it should be adedd as a regular model listener (see ILcdModelTreeNode.addModelContainerListener(ILcdModelContainerListener)).

      The source ILcdModelContainer of the event can be retrieved by calling TLcdModelContainerEvent.getModelContainer() on the received TLcdModelContainerEvent.

      Specified by:
      addHierarchyModelContainerListener in interface ILcdModelTreeNode
      Parameters:
      aModelContainerListener - the listener
      See Also:
    • removeHierarchyModelContainerListener

      public void removeHierarchyModelContainerListener(ILcdModelContainerListener aModelContainerListener)
      Description copied from interface: ILcdModelTreeNode

      Unregisters the given ILcdModelContainerListener from receiving TLcdModelContainerEvents for the tree with this node as root node.

      Specified by:
      removeHierarchyModelContainerListener in interface ILcdModelTreeNode
      Parameters:
      aModelContainerListener - the listener
      See Also:
    • addHierarchyModelListener

      public void addHierarchyModelListener(ILcdModelListener aModelListener)
      Description copied from interface: ILcdModelTreeNode

      Registers the given ILcdModelListener to receive TLcdModelChangedEvents from all the ILcdModels contained in the tree with this node as root node. If the listener should only receive events originating from this model node, it should be added as a regular model listener (see ILcdModelTreeNode.addModelListener(ILcdModelListener)).

      The source ILcdModel of the event can be retrieved by calling TLcdModelChangedEvent.getModel() on the received TLcdModelChangedEvent.

      Specified by:
      addHierarchyModelListener in interface ILcdModelTreeNode
      Parameters:
      aModelListener - the listener
      See Also:
    • removeHierarchyModelListener

      public void removeHierarchyModelListener(ILcdModelListener aModelListener)
      Description copied from interface: ILcdModelTreeNode

      Unregisters the given ILcdModelListener from receiving TLcdModelChangedEvents for the tree with this node as root node.

      Specified by:
      removeHierarchyModelListener in interface ILcdModelTreeNode
      Parameters:
      aModelListener - the listener
      See Also:
    • getBounds

      public ILcdBounds getBounds()
      Description copied from interface: ILcdBounded
      Returns the ILcdBounds by which the geometry of this ILcdBounded object is bounded.

      If the geometry does not allow retrieving valid bounds (for example a polyline with 0 points) the return value is unspecified. It is highly recommended to return an undefined bounds. You can create undefined bounds using the default constructors of TLcdLonLatBounds or TLcdXYBounds.

      Specified by:
      getBounds in interface ILcdBounded
      Returns:
      the ILcdBounds by which the geometry of this ILcdBounded object is bounded.
    • readLock

      public Lock readLock()
      Specified by:
      readLock in interface ReadWriteLock
    • writeLock

      public Lock writeLock()
      Specified by:
      writeLock in interface ReadWriteLock
    • updateNetworkLink

      public void updateNetworkLink()

      Updates the NetworkLink of this TLcdKML22DynamicModel (if any). This method does not need to be called explicitly for most KML files. It can be called if a NetworkLink needs to be refreshed manually, or if you wish to retry loading a NetworkLink that has previously failed.

      The status of this dynamic model can be monitored using status listeners or by polling the status.

      Note that this method initiates an asynchronous retrieval to refresh a KML NetworkLink. The result of this call may or may not be immediate and can be performed on a separate thread.

      This method does nothing if the dynamic model has been disposed.