Class AbstractGraph
- All Implemented Interfaces:
Iterable<Node>,Element,Graph,Structure,AttributeSink,ElementSink,Pipe,Replayable,Sink,Source
- Direct Known Subclasses:
AdjacencyListGraph
public abstract class AbstractGraph extends AbstractElement implements Graph, Replayable
This class provides a basic implementation of
Graph interface, to minimize the effort
required to implement this interface. It provides event management
implementing all the methods of Pipe. It also
manages strict checking and auto-creation policies, as well as other services
as displaying, reading and writing.
Subclasses have to maintain data structures allowing to efficiently access
graph elements by their id or index and iterating on them. They also have to
maintain coherent indices of the graph elements. When AbstractGraph decides
to add or remove elements, it calls one of the "callbacks"
addNodeCallback(AbstractNode),
addEdgeCallback(AbstractEdge),
removeNodeCallback(AbstractNode),
removeEdgeCallback(AbstractEdge), clearCallback(). The role
of these callbacks is to update the data structures and to re-index elements
if necessary.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.graphstream.graph.implementations.AbstractElement
AbstractElement.AttributeChangeEventNested classes/interfaces inherited from interface org.graphstream.stream.Replayable
Replayable.Controller -
Constructor Summary
Constructors Constructor Description AbstractGraph(String id)The same asAbstractGraph(id, true, false)AbstractGraph(String id, boolean strictChecking, boolean autoCreate)Creates a new graph. -
Method Summary
Modifier and Type Method Description voidaddAttributeSink(AttributeSink sink)Add a sink for attribute events only.EdgeaddEdge(String id, Node from, Node to, boolean directed)LikeGraph.addEdge(String, String, String, boolean)but the node references are given instead of node identifiers.voidaddElementSink(ElementSink sink)Add a sink for elements events only.NodeaddNode(String id)Add a node in the graph.voidaddSink(Sink sink)Add a sink for all graph events (attributes and graph elements) coming from this source.Iterable<AttributeSink>attributeSinks()Returns an "iterable" ofAttributeSinkobjects registered to this graph.voidclear()Empty the graph completely by removing any references to nodes or edges.voidclearAttributeSinks()Remove all listener attribute sinks.voidclearElementSinks()Remove all listener element sinks.voidclearSinks()Remove all listener sinks.Viewerdisplay()Utility method that creates a new graph viewer, and register the graph in it.Viewerdisplay(boolean autoLayout)Utility method that creates a new graph viewer, and register the graph in it.voidedgeAdded(String sourceId, long timeId, String edgeId, String fromNodeId, String toNodeId, boolean directed)An edge was inserted in graph.voidedgeAttributeAdded(String sourceId, long timeId, String edgeId, String attribute, Object value)A edge attribute was added.voidedgeAttributeChanged(String sourceId, long timeId, String edgeId, String attribute, Object oldValue, Object newValue)A edge attribute was changed.voidedgeAttributeRemoved(String sourceId, long timeId, String edgeId, String attribute)A edge attribute was removed.EdgeFactory<? extends Edge>edgeFactory()The factory used to create edge instances.voidedgeRemoved(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.Iterable<ElementSink>elementSinks()Returns an "iterable" ofElementSinkobjects registered to this graph.Replayable.ControllergetReplayController()Get a controller to replay the graph.doublegetStep()The current step.voidgraphAttributeAdded(String sourceId, long timeId, String attribute, Object value)A graph attribute was added.voidgraphAttributeChanged(String sourceId, long timeId, String attribute, Object oldValue, Object newValue)A graph attribute was changed.voidgraphAttributeRemoved(String sourceId, long timeId, String attribute)A graph attribute was removed.voidgraphCleared(String sourceId, long timeId)The whole graph was cleared.booleanisAutoCreationEnabled()Is the automatic creation of missing elements enabled?.booleanisStrict()Is strict checking enabled?Iterator<Node>iterator()This implementation returns an iterator over nodes.voidnodeAdded(String sourceId, long timeId, String nodeId)A node was inserted in the given graph.voidnodeAttributeAdded(String sourceId, long timeId, String nodeId, String attribute, Object value)A node attribute was added.voidnodeAttributeChanged(String sourceId, long timeId, String nodeId, String attribute, Object oldValue, Object newValue)A node attribute was changed.voidnodeAttributeRemoved(String sourceId, long timeId, String nodeId, String attribute)A node attribute was removed.NodeFactory<? extends Node>nodeFactory()The factory used to create node instances.voidnodeRemoved(String sourceId, long timeId, String nodeId)A node was removed from the graph.voidremoveAttributeSink(AttributeSink sink)Remove an attribute sink.EdgeremoveEdge(Edge edge)Removes an edge.EdgeremoveEdge(Node node1, Node node2)Removes an edge between two nodes.voidremoveElementSink(ElementSink sink)Remove an element sink.NoderemoveNode(Node node)Removes a node.voidremoveSink(Sink sink)Remove a sink.voidsetAutoCreate(boolean on)Enable or disable the automatic creation of missing elements.voidsetEdgeFactory(EdgeFactory<? extends Edge> ef)Set the edge factory used to create edges.voidsetNodeFactory(NodeFactory<? extends Node> nf)Set the node factory used to create nodes.voidsetStrict(boolean on)Enable or disable strict checking.voidstepBegins(double time)Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events.voidstepBegins(String sourceId, long timeId, double step)Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events.Methods inherited from class org.graphstream.graph.implementations.AbstractElement
attributeKeys, clearAttributes, getAttribute, getAttribute, getAttributeCount, getFirstAttributeOf, getFirstAttributeOf, getId, getIndex, hasAttribute, hasAttribute, removeAttribute, setAttribute, toStringMethods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods 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, setAttributesMethods inherited from interface org.graphstream.graph.Graph
addEdge, addEdge, addEdge, addEdge, addEdge, getEdge, getEdge, getNode, getNode, read, read, removeEdge, removeEdge, removeEdge, removeEdge, removeNode, removeNode, write, writeMethods inherited from interface org.graphstream.graph.Structure
edges, getEdgeCount, getNodeCount, nodes
-
Constructor Details
-
AbstractGraph
The same asAbstractGraph(id, true, false)- Parameters:
id- Identifier of the graph- See Also:
AbstractGraph(String, boolean, boolean)
-
AbstractGraph
Creates a new graph. Subclasses must create their node and edge factories and initialize their data structures in their constructors.- Parameters:
id-strictChecking-autoCreate-
-
-
Method Details
-
iterator
This implementation returns an iterator over nodes.- Specified by:
iteratorin interfaceIterable<Node>- See Also:
Iterable.iterator()
-
nodeFactory
Description copied from interface:GraphThe factory used to create node instances. The factory can be changed to refine the node class generated for this graph.- Specified by:
nodeFactoryin interfaceGraph- See Also:
Graph.setNodeFactory(NodeFactory),Graph.edgeFactory()
-
edgeFactory
Description copied from interface:GraphThe factory used to create edge instances. The factory can be changed to refine the edge class generated for this graph.- Specified by:
edgeFactoryin interfaceGraph- See Also:
Graph.setEdgeFactory(EdgeFactory),Graph.nodeFactory()
-
setNodeFactory
Description copied from interface:GraphSet the node factory used to create nodes.- Specified by:
setNodeFactoryin interfaceGraph- Parameters:
nf- the new NodeFactory
-
setEdgeFactory
Description copied from interface:GraphSet the edge factory used to create edges.- Specified by:
setEdgeFactoryin interfaceGraph- Parameters:
ef- the new EdgeFactory
-
isStrict
public boolean isStrict()Description copied from interface:GraphIs 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:GraphEnable or disable strict checking.- Specified by:
setStrictin interfaceGraph- Parameters:
on- True or false.- See Also:
Graph.isStrict()
-
isAutoCreationEnabled
public boolean isAutoCreationEnabled()Description copied from interface:GraphIs 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:
isAutoCreationEnabledin interfaceGraph- Returns:
- True if enabled.
-
getStep
public double getStep()Description copied from interface:GraphThe current step. -
setAutoCreate
public void setAutoCreate(boolean on)Description copied from interface:GraphEnable or disable the automatic creation of missing elements.- Specified by:
setAutoCreatein interfaceGraph- Parameters:
on- True or false.- See Also:
Graph.isAutoCreationEnabled()
-
stepBegins
public void stepBegins(double time)Description copied from interface:GraphSince 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:
stepBeginsin interfaceGraph- Parameters:
time- A numerical value that may give a timestamp to track the evolution of the graph over the time.
-
display
Description copied from interface:GraphUtility 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:
displayin 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:GraphUtility 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:
displayin 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()
-
clear
public void clear()Description copied from interface:GraphEmpty the graph completely by removing any references to nodes or edges. Every attribute is also removed. However, listeners are kept.- Specified by:
clearin interfaceGraph- See Also:
Source.clearSinks()
-
addNode
Description copied from interface:GraphAdd 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
IdAlreadyInUseExceptionis 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.
-
addEdge
Description copied from interface:GraphLikeGraph.addEdge(String, String, String, boolean)but the node references are given instead of node identifiers.- Specified by:
addEdgein 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)
-
removeNode
Description copied from interface:GraphRemoves 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:
removeNodein interfaceGraph- Parameters:
node- The node to be removed- Returns:
- The removed node
-
removeEdge
Description copied from interface:GraphRemoves 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:
removeEdgein interfaceGraph- Parameters:
edge- The edge to be removed- Returns:
- The removed edge
-
removeEdge
Description copied from interface:GraphRemoves an edge between two nodes. LikeGraph.removeEdge(String, String)but node references are given instead of node identifiers.- Specified by:
removeEdgein interfaceGraph- Parameters:
node1- the first nodenode2- the second node- Returns:
- the removed edge or
nullif no edge is removed - See Also:
Graph.removeEdge(String, String)
-
attributeSinks
Description copied from interface:GraphReturns an "iterable" ofAttributeSinkobjects registered to this graph.- Specified by:
attributeSinksin interfaceGraph- Returns:
- the set of
AttributeSinkunder the form of an iterable object.
-
elementSinks
Description copied from interface:GraphReturns an "iterable" ofElementSinkobjects registered to this graph.- Specified by:
elementSinksin interfaceGraph- Returns:
- the list of
ElementSinkunder the form of an iterable object.
-
addAttributeSink
Description copied from interface:SourceAdd a sink for attribute events only. Attribute events include attribute addition change and removal.- Specified by:
addAttributeSinkin interfaceSource- Parameters:
sink- The sink to register.
-
addElementSink
Description copied from interface:SourceAdd a sink for elements events only. Elements events include, addition and removal of nodes and edges, as well as step events.- Specified by:
addElementSinkin interfaceSource- Parameters:
sink- The sink to register.
-
addSink
Description copied from interface:SourceAdd 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. -
clearAttributeSinks
public void clearAttributeSinks()Description copied from interface:SourceRemove all listener attribute sinks.- Specified by:
clearAttributeSinksin interfaceSource
-
clearElementSinks
public void clearElementSinks()Description copied from interface:SourceRemove all listener element sinks.- Specified by:
clearElementSinksin interfaceSource
-
clearSinks
public void clearSinks()Description copied from interface:SourceRemove all listener sinks.- Specified by:
clearSinksin interfaceSource
-
removeAttributeSink
Description copied from interface:SourceRemove an attribute sink.- Specified by:
removeAttributeSinkin interfaceSource- Parameters:
sink- The sink to remove, if it does not exist, this is ignored silently.
-
removeElementSink
Description copied from interface:SourceRemove an element sink.- Specified by:
removeElementSinkin interfaceSource- Parameters:
sink- The sink to remove, if it does not exist, this is ignored silently.
-
removeSink
Description copied from interface:SourceRemove a sink.- Specified by:
removeSinkin interfaceSource- Parameters:
sink- The sink to remove, if it does not exist, this is ignored silently.
-
edgeAttributeAdded
public void edgeAttributeAdded(String sourceId, long timeId, String edgeId, String attribute, Object value)Description copied from interface:AttributeSinkA edge attribute was added.- Specified by:
edgeAttributeAddedin 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:AttributeSinkA edge attribute was changed.- Specified by:
edgeAttributeChangedin 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:AttributeSinkA edge attribute was removed.- Specified by:
edgeAttributeRemovedin 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:AttributeSinkA graph attribute was added.- Specified by:
graphAttributeAddedin 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:AttributeSinkA graph attribute was changed.- Specified by:
graphAttributeChangedin 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:AttributeSinkA graph attribute was removed.- Specified by:
graphAttributeRemovedin 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:AttributeSinkA node attribute was added.- Specified by:
nodeAttributeAddedin 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:AttributeSinkA node attribute was changed.- Specified by:
nodeAttributeChangedin 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:AttributeSinkA node attribute was removed.- Specified by:
nodeAttributeRemovedin 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:ElementSinkAn edge was inserted in graph.- Specified by:
edgeAddedin 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:ElementSinkAn edge of graph was removed.The nodes the edge connects may already have been removed from the graph.- Specified by:
edgeRemovedin interfaceElementSink- Parameters:
sourceId- The graph where the edge will be removed.edgeId- The edge that will be removed.
-
graphCleared
Description copied from interface:ElementSinkThe whole graph was cleared. All the nodes, edges and attributes of the graph are removed.- Specified by:
graphClearedin interfaceElementSink- Parameters:
sourceId- The graph cleared.
-
nodeAdded
Description copied from interface:ElementSinkA node was inserted in the given graph.- Specified by:
nodeAddedin interfaceElementSink- Parameters:
sourceId- Identifier of the graph where the node was added.nodeId- Identifier of the added node.
-
nodeRemoved
Description copied from interface:ElementSinkA node was removed from the graph.- Specified by:
nodeRemovedin interfaceElementSink- Parameters:
sourceId- Identifier of the graph where the node will be removed.nodeId- Identifier of the removed node.
-
stepBegins
Description copied from interface:ElementSinkSince 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:
stepBeginsin 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.
-
getReplayController
Description copied from interface:ReplayableGet a controller to replay the graph.- Specified by:
getReplayControllerin interfaceReplayable- Returns:
- a new replay controller
-