You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by kw...@apache.org on 2007/07/31 17:43:43 UTC

svn commit: r561363 - in /openjpa/trunk/openjpa-lib/src: main/java/org/apache/openjpa/lib/graph/ test/java/org/apache/openjpa/lib/graph/

Author: kwsutter
Date: Tue Jul 31 08:43:39 2007
New Revision: 561363

URL: http://svn.apache.org/viewvc?view=rev&rev=561363
Log:
OPENJPA-304.  Changes to DepthFirstAnalysis and associated classes and testcases to resolve IBM JDK and Sun JDK differences.

Modified:
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/DepthFirstAnalysis.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Edge.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Graph.java
    openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/graph/TestDepthFirstAnalysis.java

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/DepthFirstAnalysis.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/DepthFirstAnalysis.java?view=diff&rev=561363&r1=561362&r2=561363
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/DepthFirstAnalysis.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/DepthFirstAnalysis.java Tue Jul 31 08:43:39 2007
@@ -216,13 +216,13 @@
         
         List cycle;
         int pos = 0;
-        if (path != null && edge.getFrom() != edge.getTo()) {
+        if (path != null && !edge.getFrom().equals(edge.getTo())) {
             // Not a single edge loop
             pos = findNodeInPath(edge.getTo(), path);
             assert (pos >= 0): _loc.get("node-not-on-path", edge, edge.getTo()); 
         } else {
-            assert (edge.getFrom() == edge.getTo()): 
-                    _loc.get("edge-no-loop", edge).getMessage();
+            assert (edge.getFrom().equals(edge.getTo())): 
+                _loc.get("edge-no-loop", edge).getMessage();
             path = null;
         }
         cycle = buildCycle(edge, path, pos); 
@@ -249,8 +249,8 @@
             Edge edge = (Edge) itr.next();
             Object other = edge.getOther(node);
             // Single edge loops are ignored
-            if (node != other) {
-                if (other == cycleTo) {
+            if (!node.equals(other)) {
+                if (other.equals(cycleTo)) {
                     // Cycle complete
                     path.add(edge);
                     found = true;
@@ -279,7 +279,7 @@
         int pos = -1;
         if (path != null) {
             for (int i = 0; i < path.size(); i++) {
-                if (((Edge)path.get(i)).getFrom() == node) {
+                if (((Edge)path.get(i)).getFrom().equals(node)) {
                     pos = i;
                 }
             }

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Edge.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Edge.java?view=diff&rev=561363&r1=561362&r2=561363
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Edge.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Edge.java Tue Jul 31 08:43:39 2007
@@ -106,9 +106,9 @@
      * given node is not part of this edge.
      */
     public Object getOther(Object node) {
-        if (_to == node)
+        if (_to.equals(node))
             return _from;
-        if (_from == node)
+        if (_from.equals(node))
             return _to;
         return null;
     }
@@ -118,7 +118,7 @@
      * this method returns true if either side is equal to the given node.
      */
     public boolean isTo(Object node) {
-        return _to == node || (!_directed && _from == node);
+        return _to.equals(node) || (!_directed && _from.equals(node));
     }
 
     /**
@@ -127,7 +127,7 @@
      * node.
      */
     public boolean isFrom(Object node) {
-        return _from == node || (!_directed && _to == node);
+        return _from.equals(node) || (!_directed && _to.equals(node));
     }
 
     /**

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Graph.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Graph.java?view=diff&rev=561363&r1=561362&r2=561363
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Graph.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/graph/Graph.java Tue Jul 31 08:43:39 2007
@@ -21,9 +21,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
@@ -36,8 +36,11 @@
  */
 public class Graph {
 
-    // map each node to list of edges from that node
-    private final Map _nodes = new HashMap();
+    /**
+     * Map each node to list of edges from that node.
+     * Using a LinkedHashMap to ensure order of iterator processing.
+     */ 
+    private final Map _nodes = new LinkedHashMap();
 
     /**
      * Clear the graph.

Modified: openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/graph/TestDepthFirstAnalysis.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/graph/TestDepthFirstAnalysis.java?view=diff&rev=561363&r1=561362&r2=561363
==============================================================================
--- openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/graph/TestDepthFirstAnalysis.java (original)
+++ openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/graph/TestDepthFirstAnalysis.java Tue Jul 31 08:43:39 2007
@@ -58,23 +58,23 @@
 
     public void setUpGraph2() {
         Graph graph = new Graph();
-        Integer node1 = new Integer(5);
-        Integer node2 = new Integer(4);
+        Integer node1 = new Integer(1);
+        Integer node2 = new Integer(2);
         Integer node3 = new Integer(3);
-        Integer node4 = new Integer(2);
-        Integer node5 = new Integer(1);
-        graph.addNode(node1);
-        graph.addNode(node2);
-        graph.addNode(node3);
-        graph.addNode(node4);
+        Integer node4 = new Integer(4);
+        Integer node5 = new Integer(5);
+        graph.addNode(node2);  // has to be first node for testcase
         graph.addNode(node5);
-        graph.addEdge(new Edge(node1, node2, true));
-        graph.addEdge(new Edge(node2, node3, true));
+        graph.addNode(node4);
+        graph.addNode(node3);
+        graph.addNode(node1);
+        graph.addEdge(new Edge(node5, node4, true));
+        graph.addEdge(new Edge(node4, node3, true));
         graph.addEdge(new Edge(node3, node3, true));
-        graph.addEdge(new Edge(node3, node4, true));
-        graph.addEdge(new Edge(node4, node1, true));
-        graph.addEdge(new Edge(node4, node2, true));
-        graph.addEdge(new Edge(node5, node2, true));
+        graph.addEdge(new Edge(node3, node2, true));
+        graph.addEdge(new Edge(node2, node5, true));
+        graph.addEdge(new Edge(node2, node4, true));
+        graph.addEdge(new Edge(node1, node4, true));
         _dfa = new DepthFirstAnalysis(graph);
     }
 
@@ -97,8 +97,8 @@
         Iterator itr = edges.iterator();
         Edge edge0 = (Edge) itr.next();
         Edge edge1 = (Edge) itr.next();
-        assertTrue((edge0.getTo() == edge0.getFrom())
-            || edge1.getTo() == edge1.getFrom());
+        assertTrue((edge0.getTo().equals(edge0.getFrom()))
+                || edge1.getTo().equals(edge1.getFrom()));
     }
 
     public void testBackEdges() {
@@ -108,17 +108,17 @@
         Iterator itr = edges.iterator();
         Edge edge0 = (Edge) itr.next();
         Edge edge1 = (Edge) itr.next();
-        if (edge0.getTo() == edge0.getFrom()) {
+        if (edge0.getTo().equals(edge0.getFrom())) {
             assertTrue(edge0.getCycle() != null && edge0.getCycle().size() == 1);
             List cycle = edge1.getCycle();
             assertTrue(cycle != null && cycle.size() == 4);
-            assertTrue(((Edge)cycle.get(0)).getFrom() == ((Edge)cycle.get(3)).getTo());
-        } else if (edge1.getTo() == edge1.getFrom()) {
+            assertTrue(((Edge)cycle.get(0)).getFrom().equals(((Edge)cycle.get(3)).getTo()));
+        } else if (edge1.getTo().equals(edge1.getFrom())) {
             assertTrue(edge1.getCycle() != null && edge1.getCycle().size() == 1);            
             assertTrue(edge1 == edge1.getCycle());
             List cycle = edge0.getCycle();
             assertTrue(cycle != null && cycle.size() == 4);
-            assertTrue(((Edge)cycle.get(0)).getFrom() == ((Edge)cycle.get(3)).getTo());
+            assertTrue(((Edge)cycle.get(0)).getFrom().equals(((Edge)cycle.get(3)).getTo()));
         } else {
             // should not happen
             assertFalse(true);
@@ -135,11 +135,11 @@
         if (edge0.getCycle() == null) {
             List cycle = edge1.getCycle();
             assertTrue(cycle != null && cycle.size() == 3);
-            assertTrue(((Edge)cycle.get(0)).getFrom() == ((Edge)cycle.get(2)).getTo());
+            assertTrue(((Edge)cycle.get(0)).getFrom().equals(((Edge)cycle.get(2)).getTo()));
         } else if (edge1.getCycle() == null) {
             List cycle = edge0.getCycle();
             assertTrue(cycle != null && cycle.size() == 3);
-            assertTrue(((Edge)cycle.get(0)).getFrom() == ((Edge)cycle.get(2)).getTo());
+            assertTrue(((Edge)cycle.get(0)).getFrom().equals(((Edge)cycle.get(2)).getTo()));
         } else {
             // should not happen
             assertFalse(true);