Class MutableValueGraphAdapter<V,W>
- java.lang.Object
-
- org.jgrapht.graph.AbstractGraph<V,com.google.common.graph.EndpointPair<V>>
-
- org.jgrapht.graph.guava.BaseValueGraphAdapter<V,W,com.google.common.graph.MutableValueGraph<V,W>>
-
- org.jgrapht.graph.guava.MutableValueGraphAdapter<V,W>
-
- Type Parameters:
V- the graph vertex typeW- the value type
- All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable,org.jgrapht.Graph<V,com.google.common.graph.EndpointPair<V>>
- Direct Known Subclasses:
MutableDoubleValueGraphAdapter
public class MutableValueGraphAdapter<V,W> extends BaseValueGraphAdapter<V,W,com.google.common.graph.MutableValueGraph<V,W>> implements org.jgrapht.Graph<V,com.google.common.graph.EndpointPair<V>>, java.lang.Cloneable, java.io.Serializable
A graph adapter class using Guava'sMutableValueGraph.The adapter uses class
EndpointPairto represent edges. Changes in the adapter such as adding or removing vertices and edges are reflected in the underlying value graph.The class uses a converter from Guava's values to JGraphT's double weights. Thus, the resulting graph is weighted. Assume for example that the following class is the value type:
Then one could create an adapter using the following code:class MyValue implements Serializable { private double value; public MyValue(double value) { this.value = value; } public double getValue() { return value; } }MutableValueGraph<String, MyValue> valueGraph = ValueGraphBuilder.directed().allowsSelfLoops(true).build(); valueGraph.addNode("v1"); valueGraph.addNode("v2"); valueGraph.putEdgeValue("v1", "v2", new MyValue(5.0)); Graph<String, EndpointPair<String>> graph = new MutableValueGraphAdapter<>( valueGraph, new MyValue(1.0), (ToDoubleFunction<MyValue> & Serializable) MyValue::getValue); double weight = graph.getEdgeWeight(EndpointPair.ordered("v1", "v2")); // should return 5.0This is a one-way conversion meaning that calling
setEdgeWeight(EndpointPair, double)will throw an unsupported operation exception. Adjusting the weights can be done directly (by keeping an external reference) on the underlyingMutableValueGraphand callingMutableValueGraph.putEdgeValue(Object, Object, Object). Changes on the values will be propagated upstream using the provided value converter.- Author:
- Dimitrios Michail
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected WdefaultValue-
Fields inherited from class org.jgrapht.graph.guava.BaseValueGraphAdapter
edgeSupplier, LOOPS_NOT_ALLOWED, unmodifiableEdgeSet, unmodifiableVertexSet, valueConverter, valueGraph, vertexSupplier
-
-
Constructor Summary
Constructors Constructor Description MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter)Create a new adapter.MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter, java.util.function.Supplier<V> vertexSupplier, java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)Create a new adapter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description com.google.common.graph.EndpointPair<V>addEdge(V sourceVertex, V targetVertex)booleanaddEdge(V sourceVertex, V targetVertex, com.google.common.graph.EndpointPair<V> e)The provided edge object can either be null or must respect the source and target vertices that are provided as parameters.VaddVertex()booleanaddVertex(V v)java.lang.Objectclone()Returns a shallow copy of this graph instance.booleanremoveEdge(com.google.common.graph.EndpointPair<V> e)com.google.common.graph.EndpointPair<V>removeEdge(V sourceVertex, V targetVertex)booleanremoveVertex(V v)voidsetEdgeWeight(com.google.common.graph.EndpointPair<V> e, double weight)This method always throws anUnsupportedOperationExceptionsince the adapter works one-way from values to weights.-
Methods inherited from class org.jgrapht.graph.guava.BaseValueGraphAdapter
containsEdge, containsVertex, degreeOf, edgeSet, edgesOf, getAllEdges, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getEdgeWeight, getType, getVertexSupplier, incomingEdgesOf, inDegreeOf, outDegreeOf, outgoingEdgesOf, setEdgeSupplier, setVertexSupplier, vertexSet
-
Methods inherited from class org.jgrapht.graph.AbstractGraph
assertVertexExist, containsEdge, equals, hashCode, removeAllEdges, removeAllEdges, removeAllEdges, removeAllVertices, toString, toStringFromSets
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.jgrapht.Graph
containsEdge, containsEdge, containsVertex, degreeOf, edgeSet, edgesOf, getAllEdges, getEdge, getEdgeSource, getEdgeSupplier, getEdgeTarget, getEdgeWeight, getType, getVertexSupplier, incomingEdgesOf, inDegreeOf, outDegreeOf, outgoingEdgesOf, removeAllEdges, removeAllEdges, removeAllVertices, setEdgeWeight, vertexSet
-
-
-
-
Field Detail
-
defaultValue
protected final W defaultValue
-
-
Constructor Detail
-
MutableValueGraphAdapter
public MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter)
Create a new adapter.- Parameters:
valueGraph- the value graphdefaultValue- a default value to be used when creating new edgesvalueConverter- a function that converts a value to a double
-
MutableValueGraphAdapter
public MutableValueGraphAdapter(com.google.common.graph.MutableValueGraph<V,W> valueGraph, W defaultValue, java.util.function.ToDoubleFunction<W> valueConverter, java.util.function.Supplier<V> vertexSupplier, java.util.function.Supplier<com.google.common.graph.EndpointPair<V>> edgeSupplier)
Create a new adapter.- Parameters:
valueGraph- the value graphdefaultValue- a default value to be used when creating new edgesvalueConverter- a function that converts a value to a doublevertexSupplier- the vertex supplieredgeSupplier- the edge supplier
-
-
Method Detail
-
addEdge
public boolean addEdge(V sourceVertex, V targetVertex, com.google.common.graph.EndpointPair<V> e)
The provided edge object can either be null or must respect the source and target vertices that are provided as parameters.- Specified by:
addEdgein interfaceorg.jgrapht.Graph<V,W>- Throws:
java.lang.IllegalArgumentException- if edge e is not null and the sourceVertex parameter does not match the node U of the endpoint-pairjava.lang.IllegalArgumentException- if edge e is not null and the targetVertex parameter does not match the node V of the endpoint-pair
-
addVertex
public boolean addVertex(V v)
-
removeEdge
public com.google.common.graph.EndpointPair<V> removeEdge(V sourceVertex, V targetVertex)
-
removeEdge
public boolean removeEdge(com.google.common.graph.EndpointPair<V> e)
-
removeVertex
public boolean removeVertex(V v)
-
setEdgeWeight
public void setEdgeWeight(com.google.common.graph.EndpointPair<V> e, double weight)
This method always throws anUnsupportedOperationExceptionsince the adapter works one-way from values to weights. Adjusting the weights can be done by adjusting the values in the underlyingValueGraphwhich will automatically be propagated using the provided converter.
-
clone
public java.lang.Object clone()
Returns a shallow copy of this graph instance. Neither edges nor vertices are cloned.- Overrides:
clonein classjava.lang.Object- Returns:
- a shallow copy of this graph.
- Throws:
java.lang.RuntimeException- in case the clone is not supported- See Also:
Object.clone()
-
-