public class KMLNetworkLink extends KMLAbstractContainer implements PropertyChangeListener
KMLNetworkLink retrieves and loads its network resource whenever necessary. Upon a
successful retrieval, KMLNetworkLink sends an AVKey.RETRIEVAL_STATE_SUCCESSFUL property
change event to this link's property change listeners. Once retrieved and loaded, KMLNetworkLink stores
its network resource by calling setNetworkResource, draws its network resource during preRendering and
rendering, and forwards property change events from the network resource to its property change listeners.
During retrieval, KMLNetworkLink attempts to use either the Link or the Url.
The Link is the preferred method for encoding a KML NetworkLink's address since KML version 2.1,
therefore we give it priority over Url.| Modifier and Type | Class and Description |
|---|---|
protected static class |
KMLNetworkLink.RequestTask
Attempts to find this network link resource file locally, and if that fails attempts to find it remotely.
|
| Modifier and Type | Field and Description |
|---|---|
protected AtomicLong |
firstRetrievalTime |
protected boolean |
invalidTarget
Flag that is raised if the link retrieves a files that is not a KML document.
|
protected KMLLink |
link |
protected boolean |
linkFetched
Flag to indicate that the Link has been fetched from the hash map.
|
protected AtomicReference<KMLRoot> |
networkResource
Indicates the network resource referenced by this
KMLNetworkLink. |
protected AtomicLong |
networkResourceRetrievalTime
Time, in milliseconds since the Epoch, at which this
KMLNetworkLink's network resource was last
retrieved. |
protected KMLRoot |
root
Cache the root of this network link.
|
featuresballoon, region, styleSelectors, visibilityMSG_BOX_CHANGED, MSG_GEOMETRY_CHANGED, MSG_LINK_CHANGED, MSG_STYLE_CHANGED, MSG_TIME_CHANGED, MSG_VIEW_CHANGEDCHARACTERS_CONTENT, fields, namespaceURI, parent| Constructor and Description |
|---|
KMLNetworkLink(String namespaceURI)
Construct an instance.
|
| Modifier and Type | Method and Description |
|---|---|
void |
applyChange(KMLAbstractObject sourceValues) |
protected long |
computeExpiryRefreshTime(KMLRoot root,
String address)
Indicates the expiration time of a linked resource.
|
protected void |
doPreRender(KMLTraversalContext tc,
DrawContext dc)
Pre-renders the network resource referenced by this
KMLNetworkLink. |
protected void |
doRender(KMLTraversalContext tc,
DrawContext dc)
Renders the network resource referenced by this
KMLNetworkLink. |
String |
getDescription() |
Boolean |
getFlyToView() |
protected KMLLink |
getLinkOrUrl()
Returns this
NetworkLink's Link element or its Url element, depending on
which is available. |
String |
getName() |
KMLLink |
getNetworkLink() |
KMLRoot |
getNetworkResource()
Indicates the network resource referenced by this
KMLNetworkLink. |
Boolean |
getRefreshVisibility() |
KMLRoot |
getRoot()
Overridden to cache the root instead of climbing the parse tree each time.
|
Object |
getSnippet() |
KMLLink |
getUrl() |
protected boolean |
hasNetworkLinkControl() |
protected boolean |
isFeatureActive(KMLTraversalContext tc,
DrawContext dc)
Indicates whether this
KMLAbstractContainer is active and should be rendered on the specified
DrawContext. |
boolean |
isLinkCacheable()
Indicates whether the network resource references by this
KMLNetworkLink should be retrieved to the
World Wind cache or to a temporary location. |
protected boolean |
mustRetrieveNetworkResource()
Returns whether this
KMLNetworkLink must retrieve its network resource. |
void |
onChange(Message msg) |
void |
onMessage(Message msg)
Invoked when a message is received.
|
void |
propertyChange(PropertyChangeEvent evt)
Forward property change events from the inner
KMLRoot to this object's parent KMLRoot. |
protected void |
requestResource(DrawContext dc)
Thread's off a task to determine whether the resource is local or remote and then retrieves it either from disk
cache or a remote server.
|
protected void |
reset() |
protected void |
retrieveNetworkResource(String address)
Initiates a retrieval of the network resource referenced by this
KMLNetworkLink. |
void |
setNetworkResource(KMLRoot kmlRoot)
Specifies the network resource referenced by this
KMLNetworkLink, or null if this link
has no resource. |
addFeature, beginRendering, doAddEventContent, endRendering, getFeatures, mergeFeatures, preRenderFeatures, removeFeature, renderFeaturesaddStyleSelector, getAddress, getAddressDetails, getAuthor, getBalloon, getExtendedData, getLink, getOpen, getPhoneNumber, getRegion, getSnippetText, getStyleSelectors, getStyleUrl, getSubStyle, getTimePrimitive, getView, getVisibility, hasStyle, hasStyleSelectors, mergeStyleSelectors, preRender, render, renderBalloon, setBalloon, setRegion, setTimePrimitive, setView, setVisibilitygetId, getTargetIdallocate, doAddCharacters, doAddEventAttribute, doParseEventAttributes, doParseEventContent, freeResources, getAConstructor, getCharacters, getField, getField, getFields, getNamespaceURI, getParent, hasField, hasField, hasFields, mergeFields, newInstance, overrideFields, parse, parseCharacterContent, removeField, setField, setField, setFields, setNamespaceURI, setParentprotected AtomicLong firstRetrievalTime
protected boolean invalidTarget
protected KMLLink link
protected boolean linkFetched
protected AtomicReference<KMLRoot> networkResource
KMLNetworkLink. Initially null.protected AtomicLong networkResourceRetrievalTime
KMLNetworkLink's network resource was last
retrieved. Initially -1, indicating that the network resource has not been retrieved.protected KMLRoot root
public KMLNetworkLink(String namespaceURI)
namespaceURI - the qualifying namespace URI. May be null to indicate no namespace qualification.public void applyChange(KMLAbstractObject sourceValues)
applyChange in class KMLAbstractContainerprotected long computeExpiryRefreshTime(KMLRoot root, String address)
root - Root of target resource.address - Address of linked resource.protected void doPreRender(KMLTraversalContext tc, DrawContext dc)
KMLNetworkLink. If this link must retrieve its
network resource, this initiates a retrieval and does nothing until the resource is retrieved and loaded. Once
the network resource is retrieved and loaded, this calls setNetworkResource(KMLRoot) to
specify this link's new network resource, and sends an AVKey.RETRIEVAL_STATE_SUCCESSFUL
property change event to this link's property change listeners.doPreRender in class KMLAbstractContainertc - the current KML traversal context.dc - the current draw context.getNetworkResource()protected void doRender(KMLTraversalContext tc, DrawContext dc)
KMLNetworkLink. This does nothing if this link has
no network resource.doRender in class KMLAbstractContainertc - the current KML traversal context.dc - the current draw context.public String getDescription()
getDescription in class KMLAbstractFeaturepublic Boolean getFlyToView()
protected KMLLink getLinkOrUrl()
NetworkLink's Link element or its Url element, depending on
which is available. Link is the preferred method for encoding a NetworkLink since KML
version 2.1, therefore we give it priority. If a Link is not specified, the deprecated
Url element is returned.NetworkLink's Link element, if one is specified. Otherwise, this
NetworkLink's Url element. Returns null if neither
Link or a Url are specified.public String getName()
getName in class KMLAbstractFeaturepublic KMLLink getNetworkLink()
public KMLRoot getNetworkResource()
KMLNetworkLink. This returns null if
this link has no resource.null to indicate that this link has no resource.setNetworkResource(KMLRoot)public Boolean getRefreshVisibility()
public KMLRoot getRoot()
getRoot in class KMLAbstractObjectpublic Object getSnippet()
getSnippet in class KMLAbstractFeaturepublic KMLLink getUrl()
protected boolean hasNetworkLinkControl()
protected boolean isFeatureActive(KMLTraversalContext tc, DrawContext dc)
KMLAbstractContainer is active and should be rendered on the specified
DrawContext. This returns true if this container's visibility is
unspecified (null) or is set to true.
Regions do not apply directly to KML containers, because a descendant features can override the container's
Region with its own. Since a descendant Region may be larger or have a less restrictive LOD range than this
container, we cannot determine the visibility of the entire tree based on this container's Region. A container's
Region is inherited by any descendants that do not specify a Region, and Region visibility is determined at the
leaf nodes. Overridden to apply region culling according to the same rules as in KMLAbstractFeature. This
prevents retrieving network links in inactive regions.isFeatureActive in class KMLAbstractContainertc - the current KML traversal context. This parameter is ignored.dc - the draw context. This parameter is ignored.true if this container should be rendered, otherwise false.public boolean isLinkCacheable()
KMLNetworkLink should be retrieved to the
World Wind cache or to a temporary location. This returns true if all of the following conditions
are met, and false otherwise:
Link or a Url element.refreshMode is not onInterval or onExpire.viewRefreshMode is not onStop.true if this link's network resource can should be stored in a cache, or false
if it should be stored in a temporary location.protected boolean mustRetrieveNetworkResource()
KMLNetworkLink must retrieve its network resource. This always returns
false if this KMLNetworkLink has no KMLLink.true if this KMLNetworkLink must retrieve its network resource, otherwise
false.public void onChange(Message msg)
onChange in class KMLAbstractObjectpublic void onMessage(Message msg)
MessageListeneronMessage in interface MessageListeneronMessage in class KMLAbstractContainermsg - The message that was received.public void propertyChange(PropertyChangeEvent evt)
KMLRoot to this object's parent KMLRoot.propertyChange in interface PropertyChangeListenerevt - Event to forward.protected void requestResource(DrawContext dc)
dc - the current draw context.protected void reset()
protected void retrieveNetworkResource(String address)
KMLNetworkLink. Once the network
resource is retrieved and loaded, this calls setNetworkResource(KMLRoot) to specify this
link's new network resource, and sends an AVKey.RETRIEVAL_STATE_SUCCESSFUL
property change event to this link's property change listeners.
This does nothing if this KMLNetworkLink has no KMLLink.address - the address of the resource to retrievepublic void setNetworkResource(KMLRoot kmlRoot)
KMLNetworkLink, or null if this link
has no resource. If the specified kmlRoot is not nullkmlRoot during preRendering and rendering, and forwards property change events from the
kmlRoot to this link's property change listeners.kmlRoot - the network resource referenced by this KMLNetworkLink. May be null.getNetworkResource()