You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2010/02/04 20:36:43 UTC

svn commit: r906613 - in /tuscany/sca-java-2.x/trunk/modules/databinding/src: main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java

Author: rfeng
Date: Thu Feb  4 19:36:42 2010
New Revision: 906613

URL: http://svn.apache.org/viewvc?rev=906613&view=rev
Log:
Fix for TUSCANY-3456 (only register direct transformer with lower weight)

Modified:
    tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java
    tuscany/sca-java-2.x/trunk/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java?rev=906613&r1=906612&r2=906613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java Thu Feb  4 19:36:42 2010
@@ -27,6 +27,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Logger;
 
 /**
  * Directed, weighted graph
@@ -37,6 +38,7 @@
  * @version $Rev$ $Date$
  */
 public class DirectedGraph<V, E> implements Cloneable {
+    private final static Logger logger = Logger.getLogger(DirectedGraph.class.getName());
     private final Map<V, Vertex> vertices = new HashMap<V, Vertex>();
 
     /**
@@ -199,6 +201,21 @@
     }
 
     public void addEdge(V source, V target, E edgeValue, int weight, boolean publicEdge) {
+        // Fix for TUSCANY-3456 
+        // First check if we already has an edge
+        Edge edge = getEdge(source, target);
+        if (edge != null) {
+            // An existing edge has higher weight, let's replace it
+            if (edge.weight > weight) {
+                logger.warning("An edge exists with higher weight: " + edge);
+                removeEdge(edge);
+            } else {
+                // Don't add this edge
+                logger.warning("An edge exists with lower weight: " + edge);
+                return;
+            }
+        }
+
         Vertex s = getVertex(source);
         if (s == null) {
             s = new Vertex(source);
@@ -209,7 +226,7 @@
             t = new Vertex(target);
             vertices.put(target, t);
         }
-        Edge edge = new Edge(s, t, edgeValue, weight, publicEdge);
+        edge = new Edge(s, t, edgeValue, weight, publicEdge);
         s.outEdges.put(t, edge);
         t.inEdges.put(s, edge);
     }

Modified: tuscany/sca-java-2.x/trunk/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java?rev=906613&r1=906612&r2=906613&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DirectedGraphTestCase.java Thu Feb  4 19:36:42 2010
@@ -44,7 +44,11 @@
 
     @Test
     public void testGraph() {
+        graph.addEdge("a", "b", null, 4, true);
+        graph.addEdge("a", "b", null, 5, true);
+        Assert.assertEquals(4, graph.getEdge("a", "b").getWeight());
         graph.addEdge("a", "b", null, 3, true);
+        Assert.assertEquals(3, graph.getEdge("a", "b").getWeight());
         graph.addEdge("b", "c", null, 1, true);
         // graph.addEdge("a", "c", null, 8, true);
         graph.addEdge("a", "d", null, 3, true);