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