Class NFERenderer<V extends NFEGeoObject>
- java.lang.Object
-
- oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
-
- oracle.spatial.network.nfe.vis.mapcanvas.render.NFERenderer<V>
-
- Type Parameters:
V
- The type of elements rendered. It must be a subclass ofNFEGeoObject
- All Implemented Interfaces:
java.util.EventListener
,javax.swing.event.ChangeListener
,GeoObjectLayer
,HoverableLayer
,Layer
,SelectableLayer
,PropertySupport
- Direct Known Subclasses:
NFEFeatureLayerRenderer
,NFENetworkRenderer
,NFEPathRenderer
public abstract class NFERenderer<V extends NFEGeoObject> extends BasicLayer implements SelectableLayer, HoverableLayer, javax.swing.event.ChangeListener
Basic renderer for displaying NFE layers using the MapCanvas. This class provides common functions used for rendering NFE API content.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
NFERenderer.Tier
protected class
NFERenderer.TierRenderingThread
-
Field Summary
Fields Modifier and Type Field Description protected AnimatedStroke
animatedStroke
protected java.awt.Color
boundaryColor
protected java.util.List<ContextualMenuHandler>
contextualMenuHandlerList
protected boolean
editable
protected java.util.Map<java.lang.String,V>
geoObjects
protected java.awt.Color
hoverBorderColor
protected java.awt.Color
hoverColor
protected DefaultSelectionManager<GeoObject>
hoverManager
protected java.awt.Stroke
hoverStroke
protected float
imageOpacityAlpha
protected java.awt.geom.Rectangle2D
lastDataWindow
protected java.awt.geom.AffineTransform
lastViewportTransform
protected AnimatedStroke
nontargetAnimatedStroke
protected java.util.concurrent.PriorityBlockingQueue<java.awt.geom.Rectangle2D>
refreshRegionQueue
protected DefaultSelectionManager<GeoObject>
selectionManager
protected java.awt.Stroke
simpleStroke
protected java.awt.Color
textDefaultColor
protected java.awt.Font
textDefaultFont
protected java.util.List<NFERenderer.Tier>
tiers
-
Fields inherited from class oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
canvas, properties
-
Fields inherited from interface oracle.spatial.network.nfe.vis.maps.core.Layer
PROPERTY_NAME, PROPERTY_PROVIDERID, PROPERTY_SRID, PROPERTY_VISIBLE
-
-
Constructor Summary
Constructors Constructor Description NFERenderer(MapCanvas canvas)
Constructor called from a subclass constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
addContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Add a contextual menu handlervoid
addSelectionListener(SelectionListener l)
Adds a SelectionListenerprotected abstract boolean
belongsToTier(V geoObj, java.lang.String tierName)
Tells whether the GeoObject is rendered by the given tiervoid
clear()
Clears all contents of this layer.boolean
clearHover()
Removes the hovering state from all the geo-objectsboolean
clearSelection()
Clears all selected objectsprotected boolean
containsTag(java.lang.String tag)
protected boolean
containsTag(Layer layer, java.lang.String tag)
protected NFERenderer.Tier
findTier(java.lang.String name)
Gets the tier identified by the given namejava.awt.geom.Rectangle2D
getDataMBR()
Always return null here.java.awt.geom.Rectangle2D
getFullExtent()
V
getGeoObject(java.lang.String key)
Gets the GeoObject identified by the given keyprotected abstract java.util.Collection<V>
getGeoObjects(java.awt.geom.Area area)
Gets all the GeoObjects interacting with the given areaprotected abstract java.util.Collection<V>
getGeoObjects(java.awt.geom.Point2D point, int granularity)
Gets all the GeoObjects interacting with the given pointprotected abstract java.util.Collection<V>
getGeoObjects(java.awt.geom.Rectangle2D rect)
Gets all the GeoObjects interacting with the given rectangleprotected abstract oracle.sdovis.style.Style
getGeoObjectStyle(V geoObj)
Gets the style used for rendering the GeoObjectjava.util.List<GeoObject>
getHover()
Returns all the geo-object that are being hoveredfloat
getImageOpacityAlpha()
Gets the opacityV
getObject(java.lang.Object key)
Gets the GeoObject corresponding to the provided keyGeoObject[]
getObjects()
Gets all GeoObjects in this layerprotected double
getScreenTolerance()
java.util.List<GeoObject>
getSelection()
Returns all selected objectsjava.util.List<GeoObject>
getSelection(GeoObject obj)
Returns selected objects that are children of the provided objects GeoObject's isSubElementOf() determines if an object is children of another objectoracle.sdovis.edit.util.JGeometrySegmentPoint
getSnapPoint(java.lang.Object key, java.awt.geom.Point2D point, double tolerance)
double
getTolerance()
Gets the screen tolerance converted to the model's coordinate systemboolean
handleEvent(java.util.EventObject evt)
The main method that performs event handling for this tool.java.util.List<GeoObject>
hitTest(int x, int y, int granularity)
Performs a hit test for the given mouse location (x,y).java.util.List<GeoObject>
hitTest(java.awt.geom.Rectangle2D mbr, int granularity)
Performs a hit test for the given rectangle.boolean
isHover(GeoObject obj)
Returns true if the geo-object is being hoveredboolean
isSelected(GeoObject obj)
Checks if an object is selectedprotected abstract boolean
isVisible(V geoObj)
Tells whether the GeoObject is visiblevoid
mapRegionChanged(MapRegionEvent e)
When the associated canvas's map region is changed, this method is called to notify the layer of the change.int
numHovered()
Returns the number of geo-objects that are being hoveredint
numSelected()
Returns the number of selected objectsvoid
refresh()
Refreshes the current data windowvoid
refresh(java.awt.geom.Rectangle2D dataWindow)
Refreshes the data window at the given areaprotected void
refreshAsync()
protected void
refreshAsync(java.awt.geom.Rectangle2D region)
void
removeContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Remove a contextual menu handlervoid
removeSelectionListener(SelectionListener l)
Removes the given SelectionListenerlong
render(java.awt.Graphics2D graphics)
Renders the layer contents to the given Graphics.protected void
renderGeoObject(V geoObj, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderGeoObject(V geoObj, oracle.sdovis.style.Style style, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderGeoObjects(NFERenderer.Tier tier, java.awt.geom.Area area, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderGeoObjLabel(java.awt.Graphics2D g, java.awt.geom.AffineTransform transform, V geoObj, java.lang.String label, java.awt.Font font, java.awt.Color color)
protected void
renderHoveredObject(V hoverShape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderHoveredObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders the currently hovered GeoObjectsprotected void
renderHoveredPoint(java.awt.geom.Point2D point, java.awt.Graphics2D graphics)
protected void
renderHoveredShape(V geoObj, java.awt.Shape shape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderSelectedObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
protected void
renderTier(NFERenderer.Tier tier, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders the given tierprotected void
renderTiers(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders all the layer's tiers using the given graphics and affine transformboolean
select(java.util.List<GeoObject> objs)
Adds the provided objects to the selection listboolean
setHover(java.util.List<GeoObject> objs)
A list of geo-objects being hoveredvoid
setImageOpacityAlpha(float imageOpacityAlpha)
Sets the opacity for the layer's rendered imagesboolean
setSelection(java.util.List<GeoObject> selectedGeoObjects)
Clears selection before setting the provided objects as selectedprotected void
sortTiers()
Sorts tiers by its z order in an ascending wayvoid
stateChanged(javax.swing.event.ChangeEvent event)
boolean
unselect(java.util.List<GeoObject> objs)
Removes the provided objects from the selection listvoid
update(long elapsedTime)
updates the contents data model or structure.-
Methods inherited from class oracle.spatial.network.nfe.vis.maps.layer.BasicLayer
added, addPropertyChangeListener, addPropertyChangeListener, fromXMLElement, getCanvas, getIcon, getName, getProperties, getProperty, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, getProviderID, getSRID, handleTheEvent, isMyEvent, isVisible, propagateEvent, removed, removePropertyChangeListener, removePropertyChangeListener, repaint, setCanvas, setMyCursor, setName, setProperty, setProviderID, setSRID, setVisible, toXMLElement
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface oracle.spatial.network.nfe.vis.maps.core.Layer
added, fromXMLElement, getCanvas, getIcon, getName, getProviderID, getSRID, isVisible, removed, repaint, setCanvas, setName, setProviderID, setSRID, setVisible, toXMLElement
-
Methods inherited from interface oracle.spatial.network.nfe.vis.maps.util.PropertySupport
addPropertyChangeListener, addPropertyChangeListener, getProperties, getProperty, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener, setProperty
-
-
-
-
Field Detail
-
geoObjects
protected java.util.Map<java.lang.String,V extends NFEGeoObject> geoObjects
-
tiers
protected java.util.List<NFERenderer.Tier> tiers
-
lastViewportTransform
protected java.awt.geom.AffineTransform lastViewportTransform
-
lastDataWindow
protected java.awt.geom.Rectangle2D lastDataWindow
-
hoverColor
protected java.awt.Color hoverColor
-
hoverBorderColor
protected java.awt.Color hoverBorderColor
-
simpleStroke
protected java.awt.Stroke simpleStroke
-
hoverStroke
protected java.awt.Stroke hoverStroke
-
boundaryColor
protected java.awt.Color boundaryColor
-
animatedStroke
protected AnimatedStroke animatedStroke
-
nontargetAnimatedStroke
protected AnimatedStroke nontargetAnimatedStroke
-
textDefaultFont
protected java.awt.Font textDefaultFont
-
textDefaultColor
protected java.awt.Color textDefaultColor
-
selectionManager
protected DefaultSelectionManager<GeoObject> selectionManager
-
hoverManager
protected DefaultSelectionManager<GeoObject> hoverManager
-
editable
protected boolean editable
-
imageOpacityAlpha
protected float imageOpacityAlpha
-
contextualMenuHandlerList
protected java.util.List<ContextualMenuHandler> contextualMenuHandlerList
-
refreshRegionQueue
protected java.util.concurrent.PriorityBlockingQueue<java.awt.geom.Rectangle2D> refreshRegionQueue
-
-
Constructor Detail
-
NFERenderer
public NFERenderer(MapCanvas canvas)
Constructor called from a subclass constructor. It initializes the basic renderer state.- Parameters:
canvas
- the MapCanvas where the layer will be rendered
-
-
Method Detail
-
getScreenTolerance
protected double getScreenTolerance()
-
getTolerance
public double getTolerance()
Gets the screen tolerance converted to the model's coordinate system- Returns:
- the tolerance value or zero if it is not specified or could not be converted
-
findTier
protected NFERenderer.Tier findTier(java.lang.String name)
Gets the tier identified by the given name- Parameters:
name
- the tier's name- Returns:
- a tier or null if none was found
-
sortTiers
protected void sortTiers()
Sorts tiers by its z order in an ascending way
-
refresh
public void refresh()
Refreshes the current data window
-
refresh
public void refresh(java.awt.geom.Rectangle2D dataWindow)
Refreshes the data window at the given area- Parameters:
dataWindow
- a region to be refreshed
-
renderTiers
protected void renderTiers(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders all the layer's tiers using the given graphics and affine transform- Parameters:
graphics
- a graphics objecttransform
- the affine transform used
-
renderTier
protected void renderTier(NFERenderer.Tier tier, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders the given tier- Parameters:
tier
- a tier to be renderedgraphics
- a graphics objecttransform
- the affine transform used
-
renderHoveredObjects
protected void renderHoveredObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
Renders the currently hovered GeoObjects- Parameters:
graphics
- a graphics objecttransform
- the affine transform used
-
renderHoveredObject
protected void renderHoveredObject(V hoverShape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderSelectedObjects
protected void renderSelectedObjects(java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderHoveredShape
protected void renderHoveredShape(V geoObj, java.awt.Shape shape, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderHoveredPoint
protected void renderHoveredPoint(java.awt.geom.Point2D point, java.awt.Graphics2D graphics)
-
renderGeoObjects
protected void renderGeoObjects(NFERenderer.Tier tier, java.awt.geom.Area area, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderGeoObject
protected void renderGeoObject(V geoObj, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
renderGeoObject
protected void renderGeoObject(V geoObj, oracle.sdovis.style.Style style, java.awt.Graphics2D graphics, java.awt.geom.AffineTransform transform)
-
containsTag
protected boolean containsTag(java.lang.String tag)
-
containsTag
protected boolean containsTag(Layer layer, java.lang.String tag)
-
getImageOpacityAlpha
public float getImageOpacityAlpha()
Gets the opacity- Returns:
- the opacity value
-
setImageOpacityAlpha
public void setImageOpacityAlpha(float imageOpacityAlpha)
Sets the opacity for the layer's rendered images- Parameters:
imageOpacityAlpha
- the opacity value
-
addContextualMenuHandler
public void addContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Add a contextual menu handler- Parameters:
contextualMenuHandler
- contextual menu handler
-
removeContextualMenuHandler
public void removeContextualMenuHandler(ContextualMenuHandler contextualMenuHandler)
Remove a contextual menu handler- Parameters:
contextualMenuHandler
- contextual menu handler
-
renderGeoObjLabel
protected void renderGeoObjLabel(java.awt.Graphics2D g, java.awt.geom.AffineTransform transform, V geoObj, java.lang.String label, java.awt.Font font, java.awt.Color color)
-
getGeoObject
public V getGeoObject(java.lang.String key)
Gets the GeoObject identified by the given key- Parameters:
key
- a GeoObject's key- Returns:
- a GeoObject or null if it was not found
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Point2D point, int granularity)
Gets all the GeoObjects interacting with the given point- Parameters:
point
- a spatial point in screen coordinate systemgranularity
-- Returns:
- a collection containing all the GeoObjects interacting with the point
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Rectangle2D rect)
Gets all the GeoObjects interacting with the given rectangle- Parameters:
rect
- a rectangle in screen coordinate system- Returns:
- a collection containing all the GeoObjects interacting with the rectangle
-
getGeoObjects
protected abstract java.util.Collection<V> getGeoObjects(java.awt.geom.Area area)
Gets all the GeoObjects interacting with the given area- Parameters:
area
- an area in screen coordinate system- Returns:
- a collection containing all the GeoObjects interacting with the area
-
getGeoObjectStyle
protected abstract oracle.sdovis.style.Style getGeoObjectStyle(V geoObj)
Gets the style used for rendering the GeoObject- Parameters:
geoObj
- a GeoObject- Returns:
- the GeoObject's style
-
belongsToTier
protected abstract boolean belongsToTier(V geoObj, java.lang.String tierName)
Tells whether the GeoObject is rendered by the given tier- Parameters:
geoObj
- a layer's GeoObjecttierName
- a tier name- Returns:
- true if the GeoObject is rendered by (belongs to) the given tier
-
isVisible
protected abstract boolean isVisible(V geoObj)
Tells whether the GeoObject is visible- Parameters:
geoObj
- a layer's GeoObject- Returns:
- true if the GeoObject is visible
-
isSelected
public boolean isSelected(GeoObject obj)
Description copied from interface:SelectableLayer
Checks if an object is selected- Specified by:
isSelected
in interfaceSelectableLayer
- Returns:
- true if the provided object is selected
-
clearSelection
public boolean clearSelection()
Description copied from interface:SelectableLayer
Clears all selected objects- Specified by:
clearSelection
in interfaceSelectableLayer
- Returns:
- true if changes where made
-
numSelected
public int numSelected()
Description copied from interface:SelectableLayer
Returns the number of selected objects- Specified by:
numSelected
in interfaceSelectableLayer
- Returns:
- the number of selected objects
-
getSelection
public java.util.List<GeoObject> getSelection()
Description copied from interface:SelectableLayer
Returns all selected objects- Specified by:
getSelection
in interfaceSelectableLayer
- Returns:
-
getSelection
public java.util.List<GeoObject> getSelection(GeoObject obj)
Description copied from interface:SelectableLayer
Returns selected objects that are children of the provided objects GeoObject's isSubElementOf() determines if an object is children of another object- Specified by:
getSelection
in interfaceSelectableLayer
- Returns:
-
setSelection
public boolean setSelection(java.util.List<GeoObject> selectedGeoObjects)
Description copied from interface:SelectableLayer
Clears selection before setting the provided objects as selected- Specified by:
setSelection
in interfaceSelectableLayer
- Returns:
-
select
public boolean select(java.util.List<GeoObject> objs)
Description copied from interface:SelectableLayer
Adds the provided objects to the selection list- Specified by:
select
in interfaceSelectableLayer
- Returns:
-
unselect
public boolean unselect(java.util.List<GeoObject> objs)
Description copied from interface:SelectableLayer
Removes the provided objects from the selection list- Specified by:
unselect
in interfaceSelectableLayer
- Returns:
-
addSelectionListener
public void addSelectionListener(SelectionListener l)
Description copied from interface:SelectableLayer
Adds a SelectionListener- Specified by:
addSelectionListener
in interfaceSelectableLayer
-
removeSelectionListener
public void removeSelectionListener(SelectionListener l)
Description copied from interface:SelectableLayer
Removes the given SelectionListener- Specified by:
removeSelectionListener
in interfaceSelectableLayer
-
stateChanged
public void stateChanged(javax.swing.event.ChangeEvent event)
- Specified by:
stateChanged
in interfacejavax.swing.event.ChangeListener
-
setHover
public boolean setHover(java.util.List<GeoObject> objs)
Description copied from interface:HoverableLayer
A list of geo-objects being hovered- Specified by:
setHover
in interfaceHoverableLayer
- Returns:
- true if the objects were hovered
-
clearHover
public boolean clearHover()
Description copied from interface:HoverableLayer
Removes the hovering state from all the geo-objects- Specified by:
clearHover
in interfaceHoverableLayer
- Returns:
-
getHover
public java.util.List<GeoObject> getHover()
Description copied from interface:HoverableLayer
Returns all the geo-object that are being hovered- Specified by:
getHover
in interfaceHoverableLayer
- Returns:
-
isHover
public boolean isHover(GeoObject obj)
Description copied from interface:HoverableLayer
Returns true if the geo-object is being hovered- Specified by:
isHover
in interfaceHoverableLayer
- Returns:
-
numHovered
public int numHovered()
Description copied from interface:HoverableLayer
Returns the number of geo-objects that are being hovered- Specified by:
numHovered
in interfaceHoverableLayer
- Returns:
-
getSnapPoint
public oracle.sdovis.edit.util.JGeometrySegmentPoint getSnapPoint(java.lang.Object key, java.awt.geom.Point2D point, double tolerance)
-
getFullExtent
public java.awt.geom.Rectangle2D getFullExtent()
- Specified by:
getFullExtent
in interfaceLayer
- Overrides:
getFullExtent
in classBasicLayer
-
clear
public void clear()
Description copied from interface:Layer
Clears all contents of this layer.- Specified by:
clear
in interfaceLayer
- Overrides:
clear
in classBasicLayer
-
handleEvent
public boolean handleEvent(java.util.EventObject evt)
Description copied from interface:Layer
The main method that performs event handling for this tool. Returns whether the event should be propagated to other layers down stream (further down the layer stack) after the event has been handled.- Specified by:
handleEvent
in interfaceLayer
- Overrides:
handleEvent
in classBasicLayer
-
update
public void update(long elapsedTime)
Description copied from interface:Layer
updates the contents data model or structure.- Specified by:
update
in interfaceLayer
- Overrides:
update
in classBasicLayer
- Parameters:
elapsedTime
- The elapsed time since last update.
-
getDataMBR
public java.awt.geom.Rectangle2D getDataMBR()
Description copied from class:BasicLayer
Always return null here.- Specified by:
getDataMBR
in interfaceLayer
- Overrides:
getDataMBR
in classBasicLayer
-
getObjects
public GeoObject[] getObjects()
Description copied from interface:GeoObjectLayer
Gets all GeoObjects in this layer- Specified by:
getObjects
in interfaceGeoObjectLayer
- Returns:
-
getObject
public V getObject(java.lang.Object key)
Description copied from interface:GeoObjectLayer
Gets the GeoObject corresponding to the provided key- Specified by:
getObject
in interfaceGeoObjectLayer
- Returns:
-
hitTest
public java.util.List<GeoObject> hitTest(int x, int y, int granularity)
Description copied from interface:Layer
Performs a hit test for the given mouse location (x,y). All the geo-objects that pass the hit test will be returned.- Specified by:
hitTest
in interfaceLayer
- Overrides:
hitTest
in classBasicLayer
- Parameters:
x
- mouse location xy
- mouse location y- Returns:
- a list of features that pass the hit test; if no feature passes the hit test, the list is empty.
-
hitTest
public java.util.List<GeoObject> hitTest(java.awt.geom.Rectangle2D mbr, int granularity)
Description copied from interface:Layer
Performs a hit test for the given rectangle. All the geo-objects that are either inside or intersect the rectangle will be returned.- Specified by:
hitTest
in interfaceLayer
- Overrides:
hitTest
in classBasicLayer
- Parameters:
mbr
- the test rectangle, in device coordinates- Returns:
- a list of features that pass the box hit test; if no feature passes the hit test, the list is empty.
-
mapRegionChanged
public void mapRegionChanged(MapRegionEvent e)
Description copied from interface:Layer
When the associated canvas's map region is changed, this method is called to notify the layer of the change. Note that either a device window change (as a result of resizing the application window) or a data window change can cause this method to be invoked. Query the canvas' MapRegion object to get the changed values. Inside a mapRegionChanged() implementation, the layer typically needs to update its data contents accordingly.- Specified by:
mapRegionChanged
in interfaceLayer
- Overrides:
mapRegionChanged
in classBasicLayer
-
render
public long render(java.awt.Graphics2D graphics)
Description copied from interface:Layer
Renders the layer contents to the given Graphics.- Specified by:
render
in interfaceLayer
- Overrides:
render
in classBasicLayer
- Parameters:
graphics
- the graphics object- Returns:
- the rendering time in milliseconds.
-
refreshAsync
protected void refreshAsync()
-
refreshAsync
protected void refreshAsync(java.awt.geom.Rectangle2D region)
-
-