Class KMLNetworkLink
- java.lang.Object
-
- All Implemented Interfaces:
MessageListener
,KMLRenderable
,XMLEventParser
,java.beans.PropertyChangeListener
,java.util.EventListener
public class KMLNetworkLink extends KMLAbstractContainer implements java.beans.PropertyChangeListener
Represents the KML NetworkLink element and provides access to its contents.During rendering,
KMLNetworkLink
retrieves and loads its network resource whenever necessary. Upon a successful retrieval,KMLNetworkLink
sends anAVKey.RETRIEVAL_STATE_SUCCESSFUL
property change event to this link's property change listeners. Once retrieved and loaded,KMLNetworkLink
stores its network resource by callingsetNetworkResource
, 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 theLink
or theUrl
. TheLink
is the preferred method for encoding a KML NetworkLink's address since KML version 2.1, therefore we give it priority overUrl
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
KMLNetworkLink.RequestTask
Attempts to find this network link resource file locally, and if that fails attempts to find it remotely.
-
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.atomic.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 java.util.concurrent.atomic.AtomicReference<KMLRoot>
networkResource
Indicates the network resource referenced by thisKMLNetworkLink
.protected java.util.concurrent.atomic.AtomicLong
networkResourceRetrievalTime
Time, in milliseconds since the Epoch, at which thisKMLNetworkLink's
network resource was last retrieved.protected KMLRoot
root
Cache the root of this network link.-
Fields inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractContainer
features
-
Fields inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractFeature
balloon, region, styleSelectors, visibility
-
Fields inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractObject
MSG_BOX_CHANGED, MSG_GEOMETRY_CHANGED, MSG_LINK_CHANGED, MSG_STYLE_CHANGED, MSG_TIME_CHANGED, MSG_VIEW_CHANGED
-
Fields inherited from class gov.nasa.worldwind.util.xml.AbstractXMLEventParser
CHARACTERS_CONTENT, fields, namespaceURI, parent
-
-
Constructor Summary
Constructors Constructor Description KMLNetworkLink(java.lang.String namespaceURI)
Construct an instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
applyChange(KMLAbstractObject sourceValues)
protected long
computeExpiryRefreshTime(KMLRoot root, java.lang.String address)
Indicates the expiration time of a linked resource.protected void
doPreRender(KMLTraversalContext tc, DrawContext dc)
Pre-renders the network resource referenced by thisKMLNetworkLink
.protected void
doRender(KMLTraversalContext tc, DrawContext dc)
Renders the network resource referenced by thisKMLNetworkLink
.java.lang.String
getDescription()
java.lang.Boolean
getFlyToView()
protected KMLLink
getLinkOrUrl()
Returns thisNetworkLink's
Link
element or itsUrl
element, depending on which is available.java.lang.String
getName()
KMLLink
getNetworkLink()
KMLRoot
getNetworkResource()
Indicates the network resource referenced by thisKMLNetworkLink
.java.lang.Boolean
getRefreshVisibility()
KMLRoot
getRoot()
Overridden to cache the root instead of climbing the parse tree each time.java.lang.Object
getSnippet()
KMLLink
getUrl()
protected boolean
hasNetworkLinkControl()
protected boolean
isFeatureActive(KMLTraversalContext tc, DrawContext dc)
Indicates whether thisKMLAbstractContainer
is active and should be rendered on the specifiedDrawContext
.boolean
isLinkCacheable()
Indicates whether the network resource references by thisKMLNetworkLink
should be retrieved to the WorldWind cache or to a temporary location.protected boolean
mustRetrieveNetworkResource()
Returns whether thisKMLNetworkLink
must retrieve its network resource.void
onChange(Message msg)
void
onMessage(Message msg)
Invoked when a message is received.void
propertyChange(java.beans.PropertyChangeEvent evt)
Forward property change events from the innerKMLRoot
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(java.lang.String address)
Initiates a retrieval of the network resource referenced by thisKMLNetworkLink
.void
setNetworkResource(KMLRoot kmlRoot)
Specifies the network resource referenced by thisKMLNetworkLink
, ornull
if this link has no resource.-
Methods inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractContainer
addFeature, beginRendering, doAddEventContent, endRendering, getFeatures, mergeFeatures, preRenderFeatures, removeFeature, renderFeatures
-
Methods inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractFeature
addStyleSelector, 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, setVisibility
-
Methods inherited from class gov.nasa.worldwind.ogc.kml.KMLAbstractObject
getId, getTargetId
-
Methods inherited from class gov.nasa.worldwind.util.xml.AbstractXMLEventParser
allocate, 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, setParent
-
-
-
-
Field Detail
-
networkResource
protected java.util.concurrent.atomic.AtomicReference<KMLRoot> networkResource
Indicates the network resource referenced by thisKMLNetworkLink
. Initiallynull
.
-
networkResourceRetrievalTime
protected java.util.concurrent.atomic.AtomicLong networkResourceRetrievalTime
Time, in milliseconds since the Epoch, at which thisKMLNetworkLink's
network resource was last retrieved. Initially-1
, indicating that the network resource has not been retrieved.
-
firstRetrievalTime
protected java.util.concurrent.atomic.AtomicLong firstRetrievalTime
-
linkFetched
protected boolean linkFetched
Flag to indicate that the Link has been fetched from the hash map.
-
link
protected KMLLink link
-
invalidTarget
protected boolean invalidTarget
Flag that is raised if the link retrieves a files that is not a KML document. In this case, do not attempt to retrieve the resource again until the link changes. If the link changes then target file may also have changed.
-
root
protected KMLRoot root
Cache the root of this network link. Accessing the root by climbing up a deep network link tree can be a performance bottleneck.
-
-
Method Detail
-
propertyChange
public void propertyChange(java.beans.PropertyChangeEvent evt)
Forward property change events from the innerKMLRoot
to this object's parent KMLRoot.- Specified by:
propertyChange
in interfacejava.beans.PropertyChangeListener
- Parameters:
evt
- Event to forward.
-
onMessage
public void onMessage(Message msg)
Description copied from interface:MessageListener
Invoked when a message is received.- Specified by:
onMessage
in interfaceMessageListener
- Overrides:
onMessage
in classKMLAbstractContainer
- Parameters:
msg
- The message that was received.
-
getRoot
public KMLRoot getRoot()
Overridden to cache the root instead of climbing the parse tree each time.- Overrides:
getRoot
in classKMLAbstractObject
-
getRefreshVisibility
public java.lang.Boolean getRefreshVisibility()
-
getFlyToView
public java.lang.Boolean getFlyToView()
-
getNetworkLink
public KMLLink getNetworkLink()
-
getUrl
public KMLLink getUrl()
-
getLinkOrUrl
protected KMLLink getLinkOrUrl()
Returns thisNetworkLink's
Link
element or itsUrl
element, depending on which is available.Link
is the preferred method for encoding aNetworkLink
since KML version 2.1, therefore we give it priority. If aLink
is not specified, the deprecatedUrl
element is returned.- Returns:
- this
NetworkLink's
Link
element, if one is specified. Otherwise, thisNetworkLink's
Url
element. Returnsnull
if neitherLink
or aUrl
are specified.
-
getNetworkResource
public KMLRoot getNetworkResource()
Indicates the network resource referenced by thisKMLNetworkLink
. This returnsnull
if this link has no resource.- Returns:
- this link's network resource, or
null
to indicate that this link has no resource. - See Also:
setNetworkResource(KMLRoot)
-
isFeatureActive
protected boolean isFeatureActive(KMLTraversalContext tc, DrawContext dc)
Indicates whether thisKMLAbstractContainer
is active and should be rendered on the specifiedDrawContext
. This returnstrue
if this container'svisibility
is unspecified (null
) or is set totrue
.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.
- Overrides:
isFeatureActive
in classKMLAbstractContainer
- Parameters:
tc
- the current KML traversal context. This parameter is ignored.dc
- the draw context. This parameter is ignored.- Returns:
true
if this container should be rendered, otherwisefalse
.
-
hasNetworkLinkControl
protected boolean hasNetworkLinkControl()
-
getName
public java.lang.String getName()
- Overrides:
getName
in classKMLAbstractFeature
-
getDescription
public java.lang.String getDescription()
- Overrides:
getDescription
in classKMLAbstractFeature
-
getSnippet
public java.lang.Object getSnippet()
- Overrides:
getSnippet
in classKMLAbstractFeature
-
setNetworkResource
public void setNetworkResource(KMLRoot kmlRoot)
Specifies the network resource referenced by thisKMLNetworkLink
, ornull
if this link has no resource. If the specifiedkmlRoot
is notnull
, this link draws thekmlRoot
during preRendering and rendering, and forwards property change events from thekmlRoot
to this link's property change listeners.- Parameters:
kmlRoot
- the network resource referenced by thisKMLNetworkLink
. May benull
.- See Also:
getNetworkResource()
-
doPreRender
protected void doPreRender(KMLTraversalContext tc, DrawContext dc)
Pre-renders the network resource referenced by thisKMLNetworkLink
. 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
to specify this link's new network resource, and sends ansetNetworkResource(KMLRoot)
property change event to this link's property change listeners.AVKey.RETRIEVAL_STATE_SUCCESSFUL
- Overrides:
doPreRender
in classKMLAbstractContainer
- Parameters:
tc
- the current KML traversal context.dc
- the current draw context.- See Also:
getNetworkResource()
-
doRender
protected void doRender(KMLTraversalContext tc, DrawContext dc)
Renders the network resource referenced by thisKMLNetworkLink
. This does nothing if this link has no network resource.- Overrides:
doRender
in classKMLAbstractContainer
- Parameters:
tc
- the current KML traversal context.dc
- the current draw context.
-
mustRetrieveNetworkResource
protected boolean mustRetrieveNetworkResource()
Returns whether thisKMLNetworkLink
must retrieve its network resource. This always returnsfalse
if thisKMLNetworkLink
has noKMLLink
.- Returns:
true
if thisKMLNetworkLink
must retrieve its network resource, otherwisefalse
.
-
requestResource
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.- Parameters:
dc
- the current draw context.
-
retrieveNetworkResource
protected void retrieveNetworkResource(java.lang.String address)
Initiates a retrieval of the network resource referenced by thisKMLNetworkLink
. Once the network resource is retrieved and loaded, this calls
to specify this link's new network resource, and sends ansetNetworkResource(KMLRoot)
property change event to this link's property change listeners.AVKey.RETRIEVAL_STATE_SUCCESSFUL
This does nothing if this
KMLNetworkLink
has noKMLLink
.- Parameters:
address
- the address of the resource to retrieve
-
computeExpiryRefreshTime
protected long computeExpiryRefreshTime(KMLRoot root, java.lang.String address)
Indicates the expiration time of a linked resource. The expiration time is specified by (in order of priority): a NetworkLinkControl/expires element in the target document, a HTTP Cache-Control header, or an HTTP Expires header.- Parameters:
root
- Root of target resource.address
- Address of linked resource.- Returns:
- The expiration time of the resource, in milliseconds since the Epoch. Zero indicates that there is no expiration time.
-
isLinkCacheable
public boolean isLinkCacheable()
Indicates whether the network resource references by thisKMLNetworkLink
should be retrieved to the WorldWind cache or to a temporary location. This returnstrue
if all of the following conditions are met, andfalse
otherwise:- This network link has either a
Link
or aUrl
element. - The Link or Url
element's
refreshMode
is notonInterval
oronExpire
. - The Link or
Url element's
viewRefreshMode
is notonStop
.
- Returns:
true
if this link's network resource can should be stored in a cache, orfalse
if it should be stored in a temporary location.
- This network link has either a
-
applyChange
public void applyChange(KMLAbstractObject sourceValues)
- Overrides:
applyChange
in classKMLAbstractContainer
-
onChange
public void onChange(Message msg)
- Overrides:
onChange
in classKMLAbstractObject
-
reset
protected void reset()
-
-