public class GraphWrapper extends Object implements ObservableGraph
Graph
which wraps another. If the wrapped graph
does not implement ObservableGraph
, then addGraphListener(com.phoenixst.plexus.GraphListener)
and removeGraphListener(com.phoenixst.plexus.GraphListener)
with throw
UnsupportedOperationExceptions
. This class is
intended to be extended.Graph.Edge
Modifier | Constructor and Description |
---|---|
protected |
GraphWrapper()
This constructor, together with
initialize(Graph) ,
allows a subclass to initialize the internal state during
deserialization. |
|
GraphWrapper(Graph delegate)
Creates a new
GraphWrapper . |
Modifier and Type | Method and Description |
---|---|
Graph.Edge |
addEdge(Object object,
Object tail,
Object head,
boolean isDirected)
Adds the specified edge to the
Graph (optional
operation). |
void |
addGraphListener(GraphListener listener)
Adds the specified
GraphListener which will be
notified whenever this ObservableGraph's
structure changes. |
boolean |
addNode(Object node)
Adds
node to this Graph (optional
operation). |
Collection |
adjacentNodes(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
Returns the nodes adjacent to the specified
node
for which the specified Predicate is satisfied. |
boolean |
containsEdge(Graph.Edge edge)
Returns
true if this Graph contains
the specified Graph.Edge . |
boolean |
containsNode(Object node)
Returns
true if this Graph contains
the specified node. |
protected com.phoenixst.plexus.GraphWrapper.EdgeWrapper |
createEdge(Graph.Edge edge)
Creates a wrapped
Graph.Edge . |
int |
degree(Object node)
Returns the degree of
node , defined as the number
of edges incident on node , with self-loops
counted twice. |
int |
degree(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
Returns the degree of
node for which the
specified Predicate is satisfied, defined as the
number of edges incident on node that pass the
predicate, with self-loops counted only once. |
Collection |
edges(org.apache.commons.collections.Predicate edgePredicate)
Returns the
Graph.Edges from this
Graph that satisfy the specified
predicate . |
Object |
getAdjacentNode(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
This implementation returns the other endpoint of the
Graph.Edge returned by getIncidentEdge(Object,Predicate) if present, otherwise it
returns null . |
protected Graph |
getDelegate()
Provides accesss to the internal state so it can be manually
serialized by a subclass's
writeObject() method. |
Graph.Edge |
getEdge(org.apache.commons.collections.Predicate edgePredicate)
This implementation
|
Graph.Edge |
getIncidentEdge(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
This implementation
|
Object |
getNode(org.apache.commons.collections.Predicate nodePredicate)
This implementation
|
Collection |
incidentEdges(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
Returns the
Graph.Edges incident on the specified
node for which the specified
Predicate is satisfied. |
protected void |
initialize(Graph delegateGraph)
This method should only be called by subclasses during
deserialization.
|
Collection |
nodes(org.apache.commons.collections.Predicate nodePredicate)
Returns the nodes from this
Graph that satisfy
the specified predicate . |
boolean |
removeEdge(Graph.Edge edge)
Removes the specified
Graph.Edge from this
Graph (optional operation). |
void |
removeGraphListener(GraphListener listener)
Removes a previously added
GraphListener . |
boolean |
removeNode(Object node)
Removes
node from this Graph
(optional operation). |
Traverser |
traverser(Object node,
org.apache.commons.collections.Predicate traverserPredicate)
This implementation
|
protected Object |
unwrapEdgeObject(Object edgeObject)
Returns an unwrapped edge Object.
|
protected Object |
unwrapNode(Object node)
Returns an unwrapped node.
|
protected Object |
wrapEdgeObject(Object edgeObject)
Returns a wrapped edge Object.
|
protected org.apache.commons.collections.Predicate |
wrapEdgePredicate(org.apache.commons.collections.Predicate edgePredicate)
Returns a wrapped edge predicate, if necessary.
|
protected Object |
wrapNode(Object node)
Returns a wrapped node.
|
protected org.apache.commons.collections.Predicate |
wrapNodePredicate(org.apache.commons.collections.Predicate nodePredicate)
Returns a wrapped node predicate, if necessary.
|
protected Traverser |
wrapTraverser(Traverser traverser)
Returns a wrapped traverser.
|
protected org.apache.commons.collections.Predicate |
wrapTraverserPredicate(org.apache.commons.collections.Predicate traverserPredicate)
Returns a wrapped traverser predicate, if necessary.
|
public GraphWrapper(Graph delegate)
GraphWrapper
.protected GraphWrapper()
initialize(Graph)
,
allows a subclass to initialize the internal state during
deserialization.protected final void initialize(Graph delegateGraph)
protected final Graph getDelegate()
writeObject()
method.protected Object unwrapEdgeObject(Object edgeObject)
protected com.phoenixst.plexus.GraphWrapper.EdgeWrapper createEdge(Graph.Edge edge)
Graph.Edge
.protected org.apache.commons.collections.Predicate wrapNodePredicate(org.apache.commons.collections.Predicate nodePredicate)
protected org.apache.commons.collections.Predicate wrapEdgePredicate(org.apache.commons.collections.Predicate edgePredicate)
protected org.apache.commons.collections.Predicate wrapTraverserPredicate(org.apache.commons.collections.Predicate traverserPredicate)
public boolean addNode(Object node)
Graph
node
to this Graph
(optional
operation). Returns true
if this
Graph
changed as a result of the call. Returns
false
if this Graph
already contains
node
.
If a Graph
refuses to add a particular node
for any reason other than that it already contains the node,
it must throw an exception (rather than returning
false
). This preserves the invariant that a
Graph
always contains the specified node after
this call returns. Graph
classes should clearly
specify in their documentation any other restrictions on what
nodes may be added.
public boolean removeNode(Object node)
Graph
node
from this Graph
(optional operation). This method will also remove all edges
incident on node
.removeNode
in interface Graph
node
- the node to be removed from this
Graph
.true
if this Graph
contained
node
.public boolean containsNode(Object node)
Graph
true
if this Graph
contains
the specified node.containsNode
in interface Graph
node
- the node whose presence in this Graph
is to be tested.true
if this Graph
contains
the specified node.public Graph.Edge addEdge(Object object, Object tail, Object head, boolean isDirected)
Graph
Graph
(optional
operation). Returns the newly created Graph.Edge
if this Graph
changed as a result of the call.
Returns null
if this Graph
does not
allow duplicate edges and already contains the specified edge.
If a Graph
refuses to add a particular edge
for any reason other than that it already contains the edge,
it must throw an exception (rather than returning
null
). This preserves the invariant that a
Graph
always contains the specified edge after
this call returns. Graph
classes should clearly
specify in their documentation any other restrictions on what
edges may be added.
addEdge
in interface Graph
object
- the user-defined object to be contained in the
new edge.tail
- the first endpoint of the new edge.head
- the second endpoint of the new edge.isDirected
- whether the new edge is directed.Graph.Edge
if this
Graph
changed as a result of the call,
null
if this Graph
does not allow
duplicate edges and already contains the specified edge.public boolean removeEdge(Graph.Edge edge)
Graph
Graph.Edge
from this
Graph
(optional operation).removeEdge
in interface Graph
edge
- the Graph.Edge
to be removed from
this Graph
.true
if this Graph
contained
the specified Graph.Edge
.public boolean containsEdge(Graph.Edge edge)
Graph
true
if this Graph
contains
the specified Graph.Edge
.containsEdge
in interface Graph
edge
- the Graph.Edge
whose presence in this
Graph
is to be tested.true
if this Graph
contains
the specified Graph.Edge
.public int degree(Object node)
Graph
node
, defined as the number
of edges incident on node
, with self-loops
counted twice. If this node has more than
Integer.MAX_VALUE
incident edges, returns
Integer.MAX_VALUE
.public int degree(Object node, org.apache.commons.collections.Predicate traverserPredicate)
Graph
node
for which the
specified Predicate
is satisfied, defined as the
number of edges incident on node
that pass the
predicate, with self-loops counted only once. The argument to
the Predicate.evaluate()
method is expected to be
an OrderedPair
. The first
element of the OrderedPair
is the specified
node
, the second is the Graph.Edge
.
If this node has more than Integer.MAX_VALUE
such
edges, returns Integer.MAX_VALUE
.public Collection nodes(org.apache.commons.collections.Predicate nodePredicate)
Graph
Graph
that satisfy
the specified predicate
.public Collection edges(org.apache.commons.collections.Predicate edgePredicate)
Graph
Graph.Edges
from this
Graph
that satisfy the specified
predicate
.public Collection adjacentNodes(Object node, org.apache.commons.collections.Predicate traverserPredicate)
Graph
node
for which the specified Predicate
is satisfied.
The argument to the Predicate.evaluate()
method
is expected to be an OrderedPair
. The first element of
the OrderedPair
is the specified
node
, the second is the Graph.Edge
.
It should be noted that removing a node from the returned
Collection
merely removes one instance of it
being adjacent to the specified node
. In other
words, a connecting Graph.Edge
is removed.adjacentNodes
in interface Graph
node
- return the nodes adjacent to this node for which
the specified predicate is satisfied.traverserPredicate
- the predicate which the returned
nodes and the traversed Graph.Edges
must satisfy.node
for which the specified predicate is satisfied.public Collection incidentEdges(Object node, org.apache.commons.collections.Predicate traverserPredicate)
Graph
Graph.Edges
incident on the specified
node
for which the specified
Predicate
is satisfied. The argument to the
Predicate.evaluate()
method is expected to be an
OrderedPair
. The first
element of the OrderedPair
is the specified
node
, the second is the Graph.Edge
.incidentEdges
in interface Graph
node
- return the Graph.Edges
incident on
this node for which the specified predicate is satisfied.traverserPredicate
- the predicate which the returned
Graph.Edges
must satisfy.Graph.Edges
incident on the specified
node
for which the specified predicate is
satisfied.public Object getNode(org.apache.commons.collections.Predicate nodePredicate)
public Graph.Edge getEdge(org.apache.commons.collections.Predicate edgePredicate)
public Object getAdjacentNode(Object node, org.apache.commons.collections.Predicate traverserPredicate)
Graph.Edge
returned by getIncidentEdge(Object,Predicate)
if present, otherwise it
returns null
.getAdjacentNode
in interface Graph
node
- traverse to a node adjacent to this node for which
the specified predicate is satisfied.traverserPredicate
- the predicate which the returned
node and the traversed Graph.Edge
must satisfy.node
for
which the specified predicate is satisfied.public Graph.Edge getIncidentEdge(Object node, org.apache.commons.collections.Predicate traverserPredicate)
getIncidentEdge
in interface Graph
node
- traverse to a Graph.Edge
incident on
this node for which the specified predicate is satisfied.traverserPredicate
- the predicate which the returned
Graph.Edge
must satisfy.Graph.Edge
incident on the specified
node
for which the specified predicate is
satisfied.public Traverser traverser(Object node, org.apache.commons.collections.Predicate traverserPredicate)
traverser
in interface Graph
node
- traverse over all nodes adjacent to this node for
which the specified predicate is satisfied.traverserPredicate
- the predicate which the returned
nodes and their traversed Graph.Edges
must
satisfy.Traverser
from node
to all
adjacent nodes for which the specified predicate is satisfied.public void addGraphListener(GraphListener listener)
GraphListener
which will be
notified whenever this ObservableGraph's
structure changes. If the wrapped graph does not implement
ObservableGraph
, then this method with throw an
UnsupportedOperationException
.addGraphListener
in interface ObservableGraph
public void removeGraphListener(GraphListener listener)
GraphListener
. If the
wrapped graph does not implement ObservableGraph
, then
this method with throw an
UnsupportedOperationException
.removeGraphListener
in interface ObservableGraph
See the Plexus project home, hosted by SourceForge.
Copyright ? 1994-2006, by Phoenix Software Technologists, Inc. and others. All Rights Reserved. Use is subject to license terms.