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 );
+
+    }
 }