Class GraphicGraph
- All Implemented Interfaces:
Iterable<Node>
,Element
,Graph
,Structure
,AttributeSink
,ElementSink
,Pipe
,Sink
,Source
,StyleGroupListener
public class GraphicGraph extends AbstractElement implements Graph, StyleGroupListener
Warning: This class is NOT a general graph class, and it should NOT be used as it. This class is particularly dedicated to fast drawing of the graph and is internally arranged to be fast for this task only. It implements graph solely to be easily susceptible to be used as a sink and source for graph events. Some of the common methods of the Graph interface are not functional and will throw an exception if used (as documented in their respective JavaDoc).
The purpose of the graphic graph is to represent a graph with some often used graphic attributes (like position, label, etc.) stored as fields in the nodes and edges and most of the style stored in styles pertaining to a style sheet that tries to imitate the way CSS works. For example, the GraphicNode class defines a label, a position (x,y,z) and a style that is taken from the style sheet.
The style sheet is uploaded on the graph using an attribute correspondingly named "stylesheet" or "ui.stylesheet" (the second one is better). It can be a string that contains the whole style sheet, or an URL of the form :
url(name)
The graphic graph does not completely duplicate a graph, it only store things that are useful for drawing it. Although it implements "Graph", some methods are not implemented and will throw a runtime exception. These methods are mostly utility methods like write(), read(), and naturally display().
The graphic graph has the ability to store attributes like any other graph element, however the attributes stored by the graphic graph are restricted. There is a filter on the attribute adding methods that let pass only:
- All attributes starting with "ui.".
- The "x", "y", "z", "xy" and "xyz" attributes.
- The "stylesheet" attribute (although "ui.stylesheet" is preferred).
- The "label" attribute.
The implementation of this graph relies on the StyleGroupSet class and this is indeed its way to store its elements (grouped by style and Z level).
In addition to this, it provides, as all graphs do, the relational information for edges.
TODO : this graph cannot handle modification inside event listener methods !!
-
Nested Class Summary
Nested classes/interfaces inherited from class org.graphstream.graph.implementations.AbstractElement
AbstractElement.AttributeChangeEvent
-
Field Summary
Fields Modifier and Type Field Description boolean
graphChanged
Set to true each time the graph was modified internally and a redraw is needed.double
step
Memorize the step events.StyleGroup
style
The style of this graph. -
Constructor Summary
Constructors Constructor Description GraphicGraph(String id)
New empty graphic graph. -
Method Summary
Modifier and Type Method Description void
addAttributeSink(AttributeSink listener)
Add a sink for attribute events only.Edge
addEdge(String id, int index1, int index2)
LikeGraph.addEdge(String, String, String)
but the nodes are identified by their indices.Edge
addEdge(String id, int fromIndex, int toIndex, boolean directed)
LikeGraph.addEdge(String, String, String, boolean)
but the nodes are identified by their indices.Edge
addEdge(String id, String from, String to, boolean directed)
LikeGraph.addEdge(String, String, String)
, but this edge can be directed between the two given nodes.Edge
addEdge(String id, Node node1, Node node2)
LikeGraph.addEdge(String, String, String)
but the node references are given instead of node identifiers.Edge
addEdge(String id, Node from, Node to, boolean directed)
LikeGraph.addEdge(String, String, String, boolean)
but the node references are given instead of node identifiers.void
addElementSink(ElementSink listener)
Add a sink for elements events only.Node
addNode(String id)
Add a node in the graph.void
addSink(Sink listener)
Add a sink for all graph events (attributes and graph elements) coming from this source.GraphicSprite
addSprite(String id)
Iterable<AttributeSink>
attributeSinks()
Returns an "iterable" ofAttributeSink
objects registered to this graph.void
clear()
Empty the graph completely by removing any references to nodes or edges.void
clearAttributeSinks()
Remove all listener attribute sinks.void
clearElementSinks()
Remove all listener element sinks.void
clearSinks()
Remove all listener sinks.void
computeBounds()
Compute the overall bounds of the graphic graph according to the nodes and sprites positions.Viewer
display()
Utility method that creates a new graph viewer, and register the graph in it.Viewer
display(boolean autoLayout)
Utility method that creates a new graph viewer, and register the graph in it.void
edgeAdded(String sourceId, long timeId, String edgeId, String fromNodeId, String toNodeId, boolean directed)
An edge was inserted in graph.void
edgeAttributeAdded(String sourceId, long timeId, String edgeId, String attribute, Object value)
A edge attribute was added.void
edgeAttributeChanged(String sourceId, long timeId, String edgeId, String attribute, Object oldValue, Object newValue)
A edge attribute was changed.void
edgeAttributeRemoved(String sourceId, long timeId, String edgeId, String attribute)
A edge attribute was removed.EdgeFactory<? extends Edge>
edgeFactory()
The factory used to create edge instances.void
edgeRemoved(String sourceId, long timeId, String edgeId)
An edge of graph was removed.The nodes the edge connects may already have been removed from the graph.Stream<Edge>
edges()
Iterable<ElementSink>
elementSinks()
Returns an "iterable" ofElementSink
objects registered to this graph.void
elementStyleChanged(Element element, StyleGroup oldStyle, StyleGroup style)
The style of the element changed.boolean
feedbackXYZ()
Does the graphic graph publish via attribute changes the XYZ changes on nodes and sprites when changed ?.void
feedbackXYZ(boolean on)
Should the graphic graph publish via attribute changes the XYZ changes on nodes and sprites when changed ?.Edge
getEdge(int index)
Get an edge by its index.Edge
getEdge(String id)
Get an edge by its identifier.int
getEdgeCount()
Number of edges in this graph.Point3
getMaxPos()
The maximum position of a node or sprite.Point3
getMinPos()
The minimum position of a node or sprite.Node
getNode(int index)
Get a node by its index.Node
getNode(String id)
Get a node by its identifier.int
getNodeCount()
Number of nodes in this graph.GraphicSprite
getSprite(String id)
int
getSpriteCount()
double
getStep()
The current step.StyleGroup
getStyle()
The graph style group.StyleGroupSet
getStyleGroups()
The complete set of style groups.StyleSheet
getStyleSheet()
The style sheet.void
graphAttributeAdded(String sourceId, long timeId, String attribute, Object value)
A graph attribute was added.void
graphAttributeChanged(String sourceId, long timeId, String attribute, Object oldValue, Object newValue)
A graph attribute was changed.void
graphAttributeRemoved(String sourceId, long timeId, String attribute)
A graph attribute was removed.boolean
graphChangedFlag()
True if the graph was edited or changed in any way since the last reset of the "changed" flag.void
graphCleared(String sourceId, long timeId)
The whole graph was cleared.boolean
isAutoCreationEnabled()
Is the automatic creation of missing elements enabled?.boolean
isStrict()
Is strict checking enabled?Iterator<Node>
iterator()
void
nodeAdded(String sourceId, long timeId, String nodeId)
A node was inserted in the given graph.void
nodeAttributeAdded(String sourceId, long timeId, String nodeId, String attribute, Object value)
A node attribute was added.void
nodeAttributeChanged(String sourceId, long timeId, String nodeId, String attribute, Object oldValue, Object newValue)
A node attribute was changed.void
nodeAttributeRemoved(String sourceId, long timeId, String nodeId, String attribute)
A node attribute was removed.NodeFactory<? extends Node>
nodeFactory()
The factory used to create node instances.void
nodeRemoved(String sourceId, long timeId, String nodeId)
A node was removed from the graph.Stream<Node>
nodes()
void
printConnectivity()
Display the node/edge relations.void
read(String filename)
Utility method to read a graph.void
read(FileSource input, String filename)
Utility method to read a graph using the given reader.void
removeAttributeSink(AttributeSink listener)
Remove an attribute sink.Edge
removeEdge(int index)
Removes an edge with a given index.Edge
removeEdge(int fromIndex, int toIndex)
Removes an edge between two nodes.Edge
removeEdge(String id)
Removes an edge knowing its identifier.Edge
removeEdge(String from, String to)
Remove an edge given the identifiers of its two endpoints.Edge
removeEdge(Edge edge)
Removes an edge.Edge
removeEdge(Node node1, Node node2)
Removes an edge between two nodes.void
removeElementSink(ElementSink listener)
Remove an element sink.Node
removeNode(int index)
Removes a node with a given index.Node
removeNode(String id)
Remove a node using its identifier.Node
removeNode(Node node)
Removes a node.void
removeSink(Sink listener)
Remove a sink.void
removeSprite(String id)
void
replay()
Replay all the elements of the graph and all attributes as new events to all connected sinks.void
resetGraphChangedFlag()
Reset the "changed" flag.void
setAutoCreate(boolean on)
Enable or disable the automatic creation of missing elements.void
setEdgeFactory(EdgeFactory<? extends Edge> ef)
Set the edge factory used to create edges.void
setNodeFactory(NodeFactory<? extends Node> nf)
Set the node factory used to create nodes.void
setStrict(boolean on)
Enable or disable strict checking.Stream<GraphicSprite>
sprites()
void
stepBegins(double step)
Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events.void
stepBegins(String sourceId, long timeId, double time)
Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events.void
styleChanged(StyleGroup style)
String
toString()
Override the Object methodvoid
write(String filename)
Utility method to write a graph in DGS format to a file.void
write(FileSink output, String filename)
Utility method to write a graph in the chosen format to a file.Methods inherited from class org.graphstream.graph.implementations.AbstractElement
attributeKeys, clearAttributes, getAttribute, getAttribute, getAttributeCount, getFirstAttributeOf, getFirstAttributeOf, getId, getIndex, hasAttribute, hasAttribute, removeAttribute, setAttribute
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.graphstream.graph.Element
attributeKeys, clearAttributes, getArray, getAttribute, getAttribute, getAttributeCount, getFirstAttributeOf, getFirstAttributeOf, getId, getIndex, getLabel, getMap, getNumber, getVector, hasArray, hasAttribute, hasAttribute, hasLabel, hasMap, hasNumber, hasVector, removeAttribute, setAttribute, setAttributes
-
Field Details
-
style
The style of this graph. This is a shortcut to avoid searching it in the style sheet. -
step
public double stepMemorize the step events. -
graphChanged
public boolean graphChangedSet to true each time the graph was modified internally and a redraw is needed.
-
-
Constructor Details
-
GraphicGraph
New empty graphic graph.A default style sheet is created, it then can be "cascaded" with other style sheets.
-
-
Method Details
-
graphChangedFlag
public boolean graphChangedFlag()True if the graph was edited or changed in any way since the last reset of the "changed" flag.- Returns:
- true if the graph was changed.
-
resetGraphChangedFlag
public void resetGraphChangedFlag()Reset the "changed" flag.- See Also:
graphChangedFlag()
-
getStyleSheet
The style sheet. This style sheet is the result of the "cascade" or accumulation of styles added via attributes of the graph.- Returns:
- A style sheet.
-
getStyle
The graph style group.- Returns:
- A style group.
-
getStyleGroups
The complete set of style groups.- Returns:
- The style groups.
-
toString
Description copied from class:AbstractElement
Override the Object method- Overrides:
toString
in classAbstractElement
-
getStep
public double getStep()Description copied from interface:Graph
The current step. -
getMaxPos
The maximum position of a node or sprite. Notice that this is updated only each time thecomputeBounds()
method is called.- Returns:
- The maximum node or sprite position.
-
getMinPos
The minimum position of a node or sprite. Notice that this is updated only each time thecomputeBounds()
method is called.- Returns:
- The minimum node or sprite position.
-
feedbackXYZ
public boolean feedbackXYZ()Does the graphic graph publish via attribute changes the XYZ changes on nodes and sprites when changed ?. This is disabled by default, and enabled as soon as there is at least one listener. -
feedbackXYZ
public void feedbackXYZ(boolean on)Should the graphic graph publish via attribute changes the XYZ changes on nodes and sprites when changed ?. -
computeBounds
public void computeBounds()Compute the overall bounds of the graphic graph according to the nodes and sprites positions. We can only compute the graph bounds from the nodes and sprites centres since the node and graph bounds may in certain circumstances be computed according to the graph bounds. The bounds are stored in the graph metrics.This operation will process each node and sprite and is therefore costly. However it does this computation again only when a node or sprite moved. Therefore it can be called several times, if nothing moved in the graph, the computation will not be redone.
- See Also:
getMaxPos()
,getMinPos()
-
getNode
Description copied from interface:Graph
Get a node by its identifier. This method is implicitly generic and returns something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :ExtendedNode node = graph.getNode("...");
the method will return an ExtendedNode node. If no left part exists, method will just return a Node.
-
getEdge
Description copied from interface:Graph
Get an edge by its identifier. This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :ExtendedEdge edge = graph.getEdge("...");
the method will return an ExtendedEdge edge. If no left part exists, method will just return an Edge.
-
getSprite
-
printConnectivity
public void printConnectivity()Display the node/edge relations. -
elementStyleChanged
Description copied from interface:StyleGroupListener
The style of the element changed.- Specified by:
elementStyleChanged
in interfaceStyleGroupListener
- Parameters:
element
- The element.oldStyle
- The old style.style
- The changed style or the new style of the element.
-
styleChanged
-
nodes
-
edges
-
sprites
-
iterator
-
addSink
Description copied from interface:Source
Add a sink for all graph events (attributes and graph elements) coming from this source. This is similar to registering a sink for attributes an another for elements. -
removeSink
Description copied from interface:Source
Remove a sink.- Specified by:
removeSink
in interfaceSource
- Parameters:
listener
- The sink to remove, if it does not exist, this is ignored silently.
-
addAttributeSink
Description copied from interface:Source
Add a sink for attribute events only. Attribute events include attribute addition change and removal.- Specified by:
addAttributeSink
in interfaceSource
- Parameters:
listener
- The sink to register.
-
removeAttributeSink
Description copied from interface:Source
Remove an attribute sink.- Specified by:
removeAttributeSink
in interfaceSource
- Parameters:
listener
- The sink to remove, if it does not exist, this is ignored silently.
-
addElementSink
Description copied from interface:Source
Add a sink for elements events only. Elements events include, addition and removal of nodes and edges, as well as step events.- Specified by:
addElementSink
in interfaceSource
- Parameters:
listener
- The sink to register.
-
removeElementSink
Description copied from interface:Source
Remove an element sink.- Specified by:
removeElementSink
in interfaceSource
- Parameters:
listener
- The sink to remove, if it does not exist, this is ignored silently.
-
attributeSinks
Description copied from interface:Graph
Returns an "iterable" ofAttributeSink
objects registered to this graph.- Specified by:
attributeSinks
in interfaceGraph
- Returns:
- the set of
AttributeSink
under the form of an iterable object.
-
elementSinks
Description copied from interface:Graph
Returns an "iterable" ofElementSink
objects registered to this graph.- Specified by:
elementSinks
in interfaceGraph
- Returns:
- the list of
ElementSink
under the form of an iterable object.
-
addEdge
public Edge addEdge(String id, String from, String to, boolean directed) throws IdAlreadyInUseException, ElementNotFoundExceptionDescription copied from interface:Graph
LikeGraph.addEdge(String, String, String)
, but this edge can be directed between the two given nodes. If directed, the edge goes in the 'from' -> 'to' direction. An event is sent toward the listeners.- Specified by:
addEdge
in interfaceGraph
- Parameters:
id
- Unique and arbitrary string identifying the edge.from
- The first node identifier.to
- The second node identifier.directed
- Is the edge directed?- Returns:
- The newly created edge, an existing edge or
null
(see the detailed description inGraph.addEdge(String, String, String)
) - Throws:
IdAlreadyInUseException
- If an edge with the same id already exists and strict checking is enabled.ElementNotFoundException
- If strict checking is enabled, and 'node1' or 'node2' are not registered in the graph.- See Also:
Graph.addEdge(String, String, String)
-
addNode
Description copied from interface:Graph
Add a node in the graph.This acts as a factory, creating the node instance automatically (and eventually using the node factory provided). An event is generated toward the listeners. If strict checking is enabled, and a node already exists with this identifier, an
IdAlreadyInUseException
is raised. Else the error is silently ignored and the already existing node is returned.This method is implicitly generic and returns something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedNode n = graph.addNode("...");
the method will return an ExtendedNode. If no left part exists, method will just return a Node.
- Specified by:
addNode
in interfaceGraph
- Parameters:
id
- Arbitrary and unique string identifying the node.- Returns:
- The created node (or the already existing node).
- Throws:
IdAlreadyInUseException
- If strict checking is enabled the identifier is already used.
-
clear
public void clear()Description copied from interface:Graph
Empty the graph completely by removing any references to nodes or edges. Every attribute is also removed. However, listeners are kept.- Specified by:
clear
in interfaceGraph
- See Also:
Source.clearSinks()
-
removeEdge
Description copied from interface:Graph
Removes an edge knowing its identifier. An event is sent toward the listeners. If strict checking is enabled and the edge does not exist,ElementNotFoundException
is raised. Otherwise the error is silently ignored and null is returned.This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedEdge e = graph.removeEdge("...");
the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.
- Specified by:
removeEdge
in interfaceGraph
- Parameters:
id
- Identifier of the edge to remove.- Returns:
- The removed edge, or null if strict checking is disabled and the edge does not exist.
- Throws:
ElementNotFoundException
- If no edge matches the identifier and strict checking is enabled.
-
removeEdge
Description copied from interface:Graph
Remove an edge given the identifiers of its two endpoints.If the edge is directed it is removed only if its source and destination nodes are identified by 'from' and 'to' respectively. If the graph is a multi-graph and there are several edges between the two nodes, one of the edges at random is removed. An event is sent toward the listeners. If strict checking is enabled and at least one of the two given nodes does not exist or if they are not connected, a not found exception is raised. Else the error is silently ignored, and null is returned.
This method is implicitly generic and return something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedEdge e = graph.removeEdge("...", "...");
the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.
- Specified by:
removeEdge
in interfaceGraph
- Parameters:
from
- The origin node identifier to select the edge.to
- The destination node identifier to select the edge.- Returns:
- The removed edge, or null if strict checking is disabled and at least one of the two given nodes does not exist or there is no edge between them
- Throws:
ElementNotFoundException
- If the 'from' or 'to' node is not registered in the graph or not connected and strict checking is enabled.
-
removeNode
Description copied from interface:Graph
Remove a node using its identifier.An event is generated toward the listeners. Note that removing a node may remove all edges it is connected to. In this case corresponding events will also be generated toward the listeners.
This method is implicitly generic and return something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedNode n = graph.removeNode("...");
the method will return an ExtendedNode. If no left part exists, method will just return a Node.
- Specified by:
removeNode
in interfaceGraph
- Parameters:
id
- The unique identifier of the node to remove.- Returns:
- The removed node. If strict checking is disabled, it can return null if the node to remove does not exist.
- Throws:
ElementNotFoundException
- If no node matches the given identifier and strict checking is enabled.
-
display
Description copied from interface:Graph
Utility method that creates a new graph viewer, and register the graph in it. Notice that this method is a quick way to see a graph, and only this. It can be used to prototype a program, but may be limited. This method automatically launch a graph layout algorithm in its own thread to compute best node positions.- Specified by:
display
in interfaceGraph
- Returns:
- a graph viewer that allows to command the viewer (it often run in another thread).
- See Also:
Viewer
,Graph.display(boolean )
-
display
Description copied from interface:Graph
Utility method that creates a new graph viewer, and register the graph in it. Notice that this method is a quick way to see a graph, and only this. It can be used to prototype a program, but is very limited.- Specified by:
display
in interfaceGraph
- Parameters:
autoLayout
- If true a layout algorithm is launched in its own thread to compute best node positions.- Returns:
- a graph viewer that allows to command the viewer (it often run in another thread).
- See Also:
Viewer
,Graph.display()
-
stepBegins
public void stepBegins(double step)Description copied from interface:Graph
Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events. So a step is a event that occurs in the graph, it does not modify it but it gives a kind of timestamp that allows the tracking of the progress of the graph over the time.
This kind of event is useful for dynamic algorithms that listen to the dynamic graph and need to measure the time in the graph's evolution.
- Specified by:
stepBegins
in interfaceGraph
- Parameters:
step
- A numerical value that may give a timestamp to track the evolution of the graph over the time.
-
edgeFactory
Description copied from interface:Graph
The factory used to create edge instances. The factory can be changed to refine the edge class generated for this graph.- Specified by:
edgeFactory
in interfaceGraph
- See Also:
Graph.setEdgeFactory(EdgeFactory)
,Graph.nodeFactory()
-
getEdgeCount
public int getEdgeCount()Description copied from interface:Structure
Number of edges in this graph.- Specified by:
getEdgeCount
in interfaceStructure
- Returns:
- The number of edges.
-
getNodeCount
public int getNodeCount()Description copied from interface:Structure
Number of nodes in this graph.- Specified by:
getNodeCount
in interfaceStructure
- Returns:
- The number of nodes.
-
getSpriteCount
public int getSpriteCount() -
isAutoCreationEnabled
public boolean isAutoCreationEnabled()Description copied from interface:Graph
Is the automatic creation of missing elements enabled?. If strict checking is disabled and auto-creation is enabled, when an edge is created and one or two of its nodes are not already present in the graph, the nodes are automatically created.- Specified by:
isAutoCreationEnabled
in interfaceGraph
- Returns:
- True if enabled.
-
nodeFactory
Description copied from interface:Graph
The factory used to create node instances. The factory can be changed to refine the node class generated for this graph.- Specified by:
nodeFactory
in interfaceGraph
- See Also:
Graph.setNodeFactory(NodeFactory)
,Graph.edgeFactory()
-
setAutoCreate
public void setAutoCreate(boolean on)Description copied from interface:Graph
Enable or disable the automatic creation of missing elements.- Specified by:
setAutoCreate
in interfaceGraph
- Parameters:
on
- True or false.- See Also:
Graph.isAutoCreationEnabled()
-
isStrict
public boolean isStrict()Description copied from interface:Graph
Is strict checking enabled? If strict checking is enabled the graph checks for name space conflicts (e.g. insertion of two nodes with the same name), removal of non-existing elements, use of non existing elements (create an edge between two non existing nodes). Graph implementations are free to respect strict checking or not. -
setStrict
public void setStrict(boolean on)Description copied from interface:Graph
Enable or disable strict checking.- Specified by:
setStrict
in interfaceGraph
- Parameters:
on
- True or false.- See Also:
Graph.isStrict()
-
setEdgeFactory
Description copied from interface:Graph
Set the edge factory used to create edges.- Specified by:
setEdgeFactory
in interfaceGraph
- Parameters:
ef
- the new EdgeFactory
-
setNodeFactory
Description copied from interface:Graph
Set the node factory used to create nodes.- Specified by:
setNodeFactory
in interfaceGraph
- Parameters:
nf
- the new NodeFactory
-
read
Description copied from interface:Graph
Utility method to read a graph. This method tries to identify the graph format by itself and instantiates the corresponding reader automatically. If this process fails, a NotFoundException is raised.- Specified by:
read
in interfaceGraph
- Parameters:
filename
- The graph filename (or URL).- Throws:
IOException
- If an input output error occurs during the graph reading.
-
read
Description copied from interface:Graph
Utility method to read a graph using the given reader.- Specified by:
read
in interfaceGraph
- Parameters:
input
- An appropriate reader for the filename.filename
- The graph filename (or URL).- Throws:
IOException
- If an input/output error occurs during the graph reading.
-
write
Description copied from interface:Graph
Utility method to write a graph in the chosen format to a file.- Specified by:
write
in interfaceGraph
- Parameters:
output
- The output format to use.filename
- The file that will contain the saved graph (or URL).- Throws:
IOException
- If an input/output error occurs during the graph writing.
-
write
Description copied from interface:Graph
Utility method to write a graph in DGS format to a file.- Specified by:
write
in interfaceGraph
- Parameters:
filename
- The file that will contain the saved graph (or URL).- Throws:
IOException
- If an input/output error occurs during the graph writing.
-
edgeAttributeAdded
public void edgeAttributeAdded(String sourceId, long timeId, String edgeId, String attribute, Object value)Description copied from interface:AttributeSink
A edge attribute was added.- Specified by:
edgeAttributeAdded
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the change occurred.edgeId
- Identifier of the edge whose attribute changed.attribute
- The attribute name.value
- The attribute new value.
-
edgeAttributeChanged
public void edgeAttributeChanged(String sourceId, long timeId, String edgeId, String attribute, Object oldValue, Object newValue)Description copied from interface:AttributeSink
A edge attribute was changed.- Specified by:
edgeAttributeChanged
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the change occurred.edgeId
- Identifier of the edge whose attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.
-
edgeAttributeRemoved
Description copied from interface:AttributeSink
A edge attribute was removed.- Specified by:
edgeAttributeRemoved
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the attribute was removed.edgeId
- Identifier of the edge whose attribute was removed.attribute
- The removed attribute name.
-
graphAttributeAdded
Description copied from interface:AttributeSink
A graph attribute was added.- Specified by:
graphAttributeAdded
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the attribute changed.attribute
- The attribute name.value
- The attribute new value.
-
graphAttributeChanged
public void graphAttributeChanged(String sourceId, long timeId, String attribute, Object oldValue, Object newValue)Description copied from interface:AttributeSink
A graph attribute was changed.- Specified by:
graphAttributeChanged
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.
-
graphAttributeRemoved
Description copied from interface:AttributeSink
A graph attribute was removed.- Specified by:
graphAttributeRemoved
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the attribute was removed.attribute
- The removed attribute name.
-
nodeAttributeAdded
public void nodeAttributeAdded(String sourceId, long timeId, String nodeId, String attribute, Object value)Description copied from interface:AttributeSink
A node attribute was added.- Specified by:
nodeAttributeAdded
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the change occurred.nodeId
- Identifier of the node whose attribute changed.attribute
- The attribute name.value
- The attribute new value.
-
nodeAttributeChanged
public void nodeAttributeChanged(String sourceId, long timeId, String nodeId, String attribute, Object oldValue, Object newValue)Description copied from interface:AttributeSink
A node attribute was changed.- Specified by:
nodeAttributeChanged
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the change occurred.nodeId
- Identifier of the node whose attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.
-
nodeAttributeRemoved
Description copied from interface:AttributeSink
A node attribute was removed.- Specified by:
nodeAttributeRemoved
in interfaceAttributeSink
- Parameters:
sourceId
- Identifier of the graph where the attribute was removed.nodeId
- Identifier of the node whose attribute was removed.attribute
- The removed attribute name.
-
edgeAdded
public void edgeAdded(String sourceId, long timeId, String edgeId, String fromNodeId, String toNodeId, boolean directed)Description copied from interface:ElementSink
An edge was inserted in graph.- Specified by:
edgeAdded
in interfaceElementSink
- Parameters:
sourceId
- Identifier of the graph where the edge was added.edgeId
- Identifier of the added edge.fromNodeId
- Identifier of the first node of the edge.toNodeId
- Identifier of the second node of the edge.directed
- If true, the edge is directed.
-
edgeRemoved
Description copied from interface:ElementSink
An edge of graph was removed.The nodes the edge connects may already have been removed from the graph.- Specified by:
edgeRemoved
in interfaceElementSink
- Parameters:
sourceId
- The graph where the edge will be removed.edgeId
- The edge that will be removed.
-
graphCleared
Description copied from interface:ElementSink
The whole graph was cleared. All the nodes, edges and attributes of the graph are removed.- Specified by:
graphCleared
in interfaceElementSink
- Parameters:
sourceId
- The graph cleared.
-
nodeAdded
Description copied from interface:ElementSink
A node was inserted in the given graph.- Specified by:
nodeAdded
in interfaceElementSink
- Parameters:
sourceId
- Identifier of the graph where the node was added.nodeId
- Identifier of the added node.
-
nodeRemoved
Description copied from interface:ElementSink
A node was removed from the graph.- Specified by:
nodeRemoved
in interfaceElementSink
- Parameters:
sourceId
- Identifier of the graph where the node will be removed.nodeId
- Identifier of the removed node.
-
stepBegins
Description copied from interface:ElementSink
Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events. So a step is a event that occurs in the graph, it does not modify it but it gives a kind of timestamp that allow the tracking of the progress of the graph over the time.
This kind of event is useful for dynamic algorithms that listen to the dynamic graph and need to measure the time in the graph's evolution.
- Specified by:
stepBegins
in interfaceElementSink
- Parameters:
sourceId
- Identifier of the graph where the step starts.timeId
- A numerical value that may give a timestamp to track the evolution of the graph over the time.
-
addSprite
-
removeSprite
-
clearAttributeSinks
public void clearAttributeSinks()Description copied from interface:Source
Remove all listener attribute sinks.- Specified by:
clearAttributeSinks
in interfaceSource
-
clearElementSinks
public void clearElementSinks()Description copied from interface:Source
Remove all listener element sinks.- Specified by:
clearElementSinks
in interfaceSource
-
clearSinks
public void clearSinks()Description copied from interface:Source
Remove all listener sinks.- Specified by:
clearSinks
in interfaceSource
-
addEdge
Description copied from interface:Graph
LikeGraph.addEdge(String, String, String)
but the nodes are identified by their indices.- Specified by:
addEdge
in interfaceGraph
- Parameters:
id
- Unique and arbitrary string identifying the edge.index1
- The first node indexindex2
- The second node index- Returns:
- The newly created edge, an existing edge or
null
- See Also:
Graph.addEdge(String, String, String)
-
addEdge
Description copied from interface:Graph
LikeGraph.addEdge(String, String, String, boolean)
but the nodes are identified by their indices.- Specified by:
addEdge
in interfaceGraph
- Parameters:
id
- Unique and arbitrary string identifying the edge.fromIndex
- The second node indextoIndex
- The first node indexdirected
- Is the edge directed?- Returns:
- The newly created edge, an existing edge or
null
- See Also:
Graph.addEdge(String, String, String)
-
addEdge
Description copied from interface:Graph
LikeGraph.addEdge(String, String, String)
but the node references are given instead of node identifiers.- Specified by:
addEdge
in interfaceGraph
- Parameters:
id
- Unique and arbitrary string identifying the edge.node1
- The first nodenode2
- The second node- Returns:
- The newly created edge, an existing edge or
null
- See Also:
Graph.addEdge(String, String, String)
-
addEdge
Description copied from interface:Graph
LikeGraph.addEdge(String, String, String, boolean)
but the node references are given instead of node identifiers.- Specified by:
addEdge
in interfaceGraph
- Parameters:
id
- Unique and arbitrary string identifying the edge.from
- The first nodeto
- The second nodedirected
- Is the edge directed?- Returns:
- The newly created edge, an existing edge or
null
- See Also:
Graph.addEdge(String, String, String)
-
getEdge
Description copied from interface:Graph
Get an edge by its index. This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :ExtendedEdge edge = graph.getEdge(index);
the method will return an ExtendedEdge edge. If no left part exists, method will just return an Edge.
- Specified by:
getEdge
in interfaceGraph
- Parameters:
index
- The index of the edge to find.- Returns:
- The edge with the given index
- Throws:
IndexOutOfBoundsException
- if the index is less than 0 or greater thangetNodeCount() - 1
.
-
getNode
Description copied from interface:Graph
Get a node by its index. This method is implicitly generic and returns something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :ExtendedNode node = graph.getNode(index);
the method will return an ExtendedNode node. If no left part exists, method will just return a Node.
- Specified by:
getNode
in interfaceGraph
- Parameters:
index
- Index of the node to find.- Returns:
- The node with the given index
- Throws:
IndexOutOfBoundsException
- If the index is negative or greater thangetNodeCount() - 1
.
-
removeEdge
Description copied from interface:Graph
Removes an edge with a given index. An event is sent toward the listeners.This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedEdge edge = graph.removeEdge(i);
the method will return an ExtendedEdge edge. If no left part exists, method will just return an Edge.
- Specified by:
removeEdge
in interfaceGraph
- Parameters:
index
- The index of the edge to be removed.- Returns:
- The removed edge
-
removeEdge
Description copied from interface:Graph
Removes an edge between two nodes. LikeGraph.removeEdge(String, String)
but the nodes are identified by their indices.- Specified by:
removeEdge
in interfaceGraph
- Parameters:
fromIndex
- the index of the source nodetoIndex
- the index of the target node- Returns:
- the removed edge or
null
if no edge is removed - See Also:
Graph.removeEdge(String, String)
-
removeEdge
Description copied from interface:Graph
Removes an edge between two nodes. LikeGraph.removeEdge(String, String)
but node references are given instead of node identifiers.- Specified by:
removeEdge
in interfaceGraph
- Parameters:
node1
- the first nodenode2
- the second node- Returns:
- the removed edge or
null
if no edge is removed - See Also:
Graph.removeEdge(String, String)
-
removeEdge
Description copied from interface:Graph
Removes an edge. An event is sent toward the listeners.This method is implicitly generic and returns something which extends Edge. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedEdge e = graph.removeEdge(...);
the method will return an ExtendedEdge. If no left part exists, method will just return an Edge.
- Specified by:
removeEdge
in interfaceGraph
- Parameters:
edge
- The edge to be removed- Returns:
- The removed edge
-
removeNode
Description copied from interface:Graph
Removes a node with a given index.An event is generated toward the listeners. Note that removing a node may remove all edges it is connected to. In this case corresponding events will also be generated toward the listeners.
This method is implicitly generic and return something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedNode n = graph.removeNode(index);
the method will return an ExtendedNode. If no left part exists, method will just return a Node.
- Specified by:
removeNode
in interfaceGraph
- Parameters:
index
- The index of the node to be removed- Returns:
- The removed node
-
removeNode
Description copied from interface:Graph
Removes a node.An event is generated toward the listeners. Note that removing a node may remove all edges it is connected to. In this case corresponding events will also be generated toward the listeners.
This method is implicitly generic and return something which extends Node. The return type is the one of the left part of the assignment. For example, in the following call :
ExtendedNode n = graph.removeNode(...);
the method will return an ExtendedNode. If no left part exists, method will just return a Node.
- Specified by:
removeNode
in interfaceGraph
- Parameters:
node
- The node to be removed- Returns:
- The removed node
-
replay
public void replay()Replay all the elements of the graph and all attributes as new events to all connected sinks.Be very careful with this method, it introduces new events in the event stream and some sinks may therefore receive them twice !! Graph replay is always dangerous !
-