Author: dain
Date: Fri Jan 11 00:47:47 2008
New Revision: 611106

URL: http://svn.apache.org/viewvc?rev=611106&view=rev
Log:
Fixed resouce sorting algorithm

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=611106&r1=611105&r2=611106&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 Fri Jan 11 00:47:47 2008
@@ -813,6 +813,9 @@
 
     public static class ResourceInfoComparator implements 
Comparator<ResourceInfo> {
         private final List<String> ids;
+        private static final int EQUAL = 0;
+        private static final int GREATER = 1;
+        private static final int LESS = -1;
 
         public ResourceInfoComparator(List<ResourceInfo> resources){
             ids = new ArrayList<String>();
@@ -826,36 +829,39 @@
             String refB = getReference(b);
 
             // both null or the same id
-            if (refA == refB) return 0;
-
-            // b is null
-            if (refA != null && refB == null){
-                return 1;
-            }
-
-            // a is null
-            if (refB != null && refA == null){
-                return -1;
+            if (refA == null && refB == null ||
+                    refA != null && refA.equals(refB)) {
+                return EQUAL;
             }
 
             // b is referencing a
             if (a.id.equals(refB)) {
-                return 1;
+                return LESS;
             }
 
             // a is referencing b
             if (b.id.equals(refA)) {
-                return 1;
+                return GREATER;
+            }
+
+            // a has a ref and b doesn't
+            if (refA != null && refB == null){
+                return GREATER;
+            }
+
+            // b has a ref and a doesn't
+            if (refB != null && refA == null){
+                return LESS;
             }
 
-            return 0;
+            return EQUAL;
         }
 
         public int hasReference(ResourceInfo info){
             for (Object value : info.properties.values()) {
-                if (ids.contains(value)) return 1;
+                if (ids.contains(value)) return GREATER;
             }
-            return 0;
+            return EQUAL;
         }
 
         public String getReference(ResourceInfo info){

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java?rev=611106&r1=611105&r2=611106&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java
 Fri Jan 11 00:47:47 2008
@@ -60,4 +60,66 @@
         assertEquals("Yellow", resources.get(3).id);
 
     }
+
+    public void testRealWorld() throws Exception {
+        List<ResourceInfo> resources = new ArrayList<ResourceInfo>();
+
+        resources.add(new ResourceInfo());
+        resources.get(0).id = "My DataSource";
+        resources.get(0).properties = new Properties();
+
+        resources.add(new ResourceInfo());
+        resources.get(1).id = "My Unmanaged DataSource";
+        resources.get(1).properties = new Properties();
+
+        resources.add(new ResourceInfo());
+        resources.get(2).id = "My JMS Resource Adapter";
+        resources.get(2).properties = new Properties();
+        resources.get(2).properties.put("DataSource", "My Unmanaged 
DataSource");
+
+        resources.add(new ResourceInfo());
+        resources.get(3).id = "My JMS Connection Factory";
+        resources.get(3).properties = new Properties();
+        resources.get(3).properties.put("ResourceAdapter", "My JMS Resource 
Adapter");
+
+        Collections.sort(resources, new 
ConfigurationFactory.ResourceInfoComparator(resources));
+
+        assertEquals("My DataSource", resources.get(0).id);
+        assertEquals("My Unmanaged DataSource", resources.get(1).id);
+        assertEquals("My JMS Resource Adapter", resources.get(2).id);
+        assertEquals("My JMS Connection Factory", resources.get(3).id);
+
+    }
+
+    public void testRealWorld2() throws Exception {
+        List<ResourceInfo> resources = new ArrayList<ResourceInfo>();
+
+        resources.add(new ResourceInfo());
+        resources.get(0).id = "My JMS Connection Factory";
+        resources.get(0).properties = new Properties();
+        resources.get(0).properties.put("ResourceAdapter", "My JMS Resource 
Adapter");
+
+        resources.add(new ResourceInfo());
+        resources.get(1).id = "My JMS Resource Adapter";
+        resources.get(1).properties = new Properties();
+        resources.get(1).properties.put("DataSource", "My Unmanaged 
DataSource");
+
+        resources.add(new ResourceInfo());
+        resources.get(2).id = "My Unmanaged DataSource";
+        resources.get(2).properties = new Properties();
+
+        resources.add(new ResourceInfo());
+        resources.get(3).id = "My DataSource";
+        resources.get(3).properties = new Properties();
+
+
+        Collections.sort(resources, new 
ConfigurationFactory.ResourceInfoComparator(resources));
+
+        // since unmanaged is first in the "file" it should be first here
+        assertEquals("My Unmanaged DataSource", resources.get(0).id);
+        assertEquals("My DataSource", resources.get(1).id);
+        assertEquals("My JMS Resource Adapter", resources.get(2).id);
+        assertEquals("My JMS Connection Factory", resources.get(3).id);
+
+    }
 }


Reply via email to