You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2012/02/16 22:56:35 UTC
svn commit: r1245198 - in /commons/sandbox/graph/trunk/src:
main/java/org/apache/commons/graph/model/
test/java/org/apache/commons/graph/model/
Author: marcosperanza
Date: Thu Feb 16 21:56:34 2012
New Revision: 1245198
URL: http://svn.apache.org/viewvc?rev=1245198&view=rev
Log:
[SANDBOX-391] - removeEdge method: missing implementation
Modified:
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/BaseMutableGraph.java
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/DirectedMutableGraph.java
commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/UndirectedMutableGraph.java
commons/sandbox/graph/trunk/src/test/java/org/apache/commons/graph/model/BaseMutableGraphTestCase.java
Modified: commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/BaseMutableGraph.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/BaseMutableGraph.java?rev=1245198&r1=1245197&r2=1245198&view=diff
==============================================================================
--- commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/BaseMutableGraph.java (original)
+++ commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/BaseMutableGraph.java Thu Feb 16 21:56:34 2012
@@ -105,7 +105,7 @@ public abstract class BaseMutableGraph<V
{
getAdjacencyList().get( head ).add( tail );
- VertexPair<V> vertexPair = new VertexPair<V>( head, tail );
+ final VertexPair<V> vertexPair = new VertexPair<V>( head, tail );
getIndexedEdges().put( vertexPair, e );
if ( !getIndexedVertices().containsKey( e ) )
@@ -113,10 +113,16 @@ public abstract class BaseMutableGraph<V
getIndexedVertices().put( e, vertexPair );
}
}
+
+ protected void internalRemoveEdge( V head, E e, V tail )
+ {
+ final VertexPair<V> vertexPair = new VertexPair<V>( head, tail );
+ getIndexedVertices().remove( e );
+ getIndexedEdges().remove( vertexPair );
+ getAdjacencyList().get( vertexPair.getHead() ).remove( vertexPair.getTail() );
+ }
/**
- *
- *
* @param e
*/
protected abstract void decorateAddEdge( V head, E e, V tail );
@@ -127,10 +133,14 @@ public abstract class BaseMutableGraph<V
public final void removeEdge( E e )
{
checkGraphCondition( e != null, "Impossible to remove a null Edge from the Graph" );
-
- // TODO to be completed
+
+ final VertexPair<V> vertexPair = getVertices( e );
+ checkGraphCondition( vertexPair != null, "Edge '%s' not present in the Graph", e );
decorateRemoveEdge( e );
+ internalRemoveEdge( vertexPair.getHead(), e, vertexPair.getTail() );
+ getAllEdges().remove( e );
+
}
/**
Modified: commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/DirectedMutableGraph.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/DirectedMutableGraph.java?rev=1245198&r1=1245197&r2=1245198&view=diff
==============================================================================
--- commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/DirectedMutableGraph.java (original)
+++ commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/DirectedMutableGraph.java Thu Feb 16 21:56:34 2012
@@ -27,6 +27,7 @@ import java.util.Set;
import org.apache.commons.graph.DirectedGraph;
import org.apache.commons.graph.Edge;
import org.apache.commons.graph.Vertex;
+import org.apache.commons.graph.VertexPair;
/**
* A memory-based implementation of a mutable directed Graph.
@@ -121,7 +122,9 @@ public class DirectedMutableGraph<V exte
@Override
protected void decorateRemoveEdge( E e )
{
- // TODO complete me
+ final VertexPair<V> vertices = getVertices( e );
+ inbound.get( vertices.getTail() ).remove( vertices.getHead() );
+ outbound.get( vertices.getHead() ).remove( vertices.getTail() );
}
}
Modified: commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/UndirectedMutableGraph.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/UndirectedMutableGraph.java?rev=1245198&r1=1245197&r2=1245198&view=diff
==============================================================================
--- commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/UndirectedMutableGraph.java (original)
+++ commons/sandbox/graph/trunk/src/main/java/org/apache/commons/graph/model/UndirectedMutableGraph.java Thu Feb 16 21:56:34 2012
@@ -77,7 +77,7 @@ public class UndirectedMutableGraph<V ex
@Override
protected void decorateRemoveEdge( E e )
{
- // do nothing
+ internalRemoveEdge( getVertices( e ).getTail(), e, getVertices( e ).getHead() );
}
}
Modified: commons/sandbox/graph/trunk/src/test/java/org/apache/commons/graph/model/BaseMutableGraphTestCase.java
URL: http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/src/test/java/org/apache/commons/graph/model/BaseMutableGraphTestCase.java?rev=1245198&r1=1245197&r2=1245198&view=diff
==============================================================================
--- commons/sandbox/graph/trunk/src/test/java/org/apache/commons/graph/model/BaseMutableGraphTestCase.java (original)
+++ commons/sandbox/graph/trunk/src/test/java/org/apache/commons/graph/model/BaseMutableGraphTestCase.java Thu Feb 16 21:56:34 2012
@@ -267,4 +267,102 @@ public class BaseMutableGraphTestCase
g.getEdge( source, target );
}
+
+ /**
+ * Test method for
+ * {@link org.apache.commons.graph.model.BaseMutableGraph#removeEdge(org.apache.commons.graph.Edge)}
+ */
+ @Test
+ public final void testDirectedGraphRemoveEdge()
+ {
+ // Test a complete undirect graph.
+ final DirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge> g = new DirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge>();
+
+ final BaseLabeledVertex source = new BaseLabeledVertex( valueOf( 1 ) );
+ final BaseLabeledVertex target = new BaseLabeledVertex( valueOf( 2 ) );
+
+ buildCompleteGraph( 10, g );
+
+ BaseLabeledEdge e = g.getEdge( source, target );
+ g.removeEdge( e );
+
+ BaseLabeledEdge edge = g.getEdge( source, target );
+ assertNull( edge );
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.commons.graph.model.BaseMutableGraph#removeEdge(org.apache.commons.graph.Edge)}
+ */
+ @Test
+ public final void testUndirectedGraphRemoveEdge()
+ {
+ // Test a complete undirect graph.
+ final UndirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge> g =
+ new UndirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge>();
+
+ final BaseLabeledVertex source = new BaseLabeledVertex( valueOf( 1 ) );
+ final BaseLabeledVertex target = new BaseLabeledVertex( valueOf( 2 ) );
+
+ buildCompleteGraph( 10, g );
+
+ BaseLabeledEdge e = g.getEdge( source, target );
+ g.removeEdge( e );
+
+ BaseLabeledEdge edge = g.getEdge( source, target );
+
+ assertNull( edge );
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.commons.graph.model.BaseMutableGraph#removeEdge(org.apache.commons.graph.Edge)}
+ */
+ @Test( expected = GraphException.class )
+ public final void testUndirectedGraphRemoveEdgeNotExists()
+ {
+ // Test a complete undirect graph.
+ UndirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge> g = null;
+ BaseLabeledEdge e = null;
+ try
+ {
+ g = new UndirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge>();
+ buildCompleteGraph( 10, g );
+
+ e = new BaseLabeledEdge( "NOT EXIST" );
+ }
+ catch ( GraphException ex )
+ {
+ fail( ex.getMessage() );
+ }
+
+ g.removeEdge( e );
+
+ }
+
+ /**
+ * Test method for
+ * {@link org.apache.commons.graph.model.BaseMutableGraph#removeEdge(org.apache.commons.graph.Edge)}
+ */
+ @Test( expected = GraphException.class )
+ public final void testDirectedGraphRemoveEdgeNotExists()
+ {
+ // Test a complete undirect graph.
+ DirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge> g = null;
+ BaseLabeledEdge e = null;
+ try
+ {
+ g = new DirectedMutableGraph<BaseLabeledVertex, BaseLabeledEdge>();
+ buildCompleteGraph( 10, g );
+
+ e = new BaseLabeledEdge( "NOT EXIST" );
+ }
+ catch ( GraphException ex )
+ {
+ fail( ex.getMessage() );
+ }
+
+ g.removeEdge( e );
+
+ }
}