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