You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ri...@apache.org on 2012/03/26 18:22:41 UTC
svn commit: r1305428 - in /oodt/trunk: CHANGES.txt
filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java
filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java
Author: rickdn
Date: Mon Mar 26 16:22:40 2012
New Revision: 1305428
URL: http://svn.apache.org/viewvc?rev=1305428&view=rev
Log:
OODT-429 #resolve fixed When comparator encounters null value, nulls appear last
Added:
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java
Modified:
oodt/trunk/CHANGES.txt
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java
Modified: oodt/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/oodt/trunk/CHANGES.txt?rev=1305428&r1=1305427&r2=1305428&view=diff
==============================================================================
--- oodt/trunk/CHANGES.txt (original)
+++ oodt/trunk/CHANGES.txt Mon Mar 26 16:22:40 2012
@@ -4,6 +4,8 @@ Apache OODT Change Log
Release 0.4: Current Development
--------------------------------------------
+* OODT-429 filemgr query throws NPE when sorting by key with possibly empty values (rickdn)
+
* OODT-427 filemgr query throws "String index out of range: -1" when some products have undefined
metadata values (rickdn)
Modified: oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java
URL: http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java?rev=1305428&r1=1305427&r2=1305428&view=diff
==============================================================================
--- oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java (original)
+++ oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResultComparator.java Mon Mar 26 16:22:40 2012
@@ -33,7 +33,7 @@ import java.util.Comparator;
public class QueryResultComparator implements Comparator<QueryResult> {
private String sortByMetKey;
-
+
public String getSortByMetKey() {
return sortByMetKey;
}
@@ -41,10 +41,18 @@ public class QueryResultComparator imple
public void setSortByMetKey(String sortByMetKey) {
this.sortByMetKey = sortByMetKey;
}
-
+
public int compare(QueryResult qr1, QueryResult qr2) {
- return qr1.getMetadata().getMetadata(this.sortByMetKey).compareTo(
- qr2.getMetadata().getMetadata(sortByMetKey));
+ String m1 = qr1.getMetadata().getMetadata(sortByMetKey);
+ String m2 = qr2.getMetadata().getMetadata(sortByMetKey);
+ if (m1 == m2)
+ return 0;
+ // return null last, since they are the least interesting
+ if (m1 == null)
+ return 1;
+ if (m2 == null)
+ return -1;
+ return m1.compareTo(m2);
}
}
Added: oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java
URL: http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java?rev=1305428&view=auto
==============================================================================
--- oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java (added)
+++ oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResultComparator.java Mon Mar 26 16:22:40 2012
@@ -0,0 +1,75 @@
+package org.apache.oodt.cas.filemgr.structs.query;
+
+import org.apache.oodt.cas.filemgr.metadata.CoreMetKeys;
+import org.apache.oodt.cas.filemgr.structs.Product;
+import org.apache.oodt.cas.metadata.Metadata;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class TestQueryResultComparator extends TestCase {
+
+ private QueryResult qr1;
+ private QueryResult qr2;
+ private QueryResult qrfilename;
+ private QueryResult qrowners;
+ private QueryResult qrnull;
+ private QueryResult qrnull2;
+
+ @Override
+ protected void setUp() throws Exception {
+ Product p = new Product();
+ p.setProductId("TestProductID");
+ Metadata m = new Metadata();
+ m.addMetadata(CoreMetKeys.FILENAME, "datafile.dat");
+ m.addMetadata("Owners", Arrays.asList("Chad", "Cam"));
+ qr1 = new QueryResult(p, m);
+
+ Metadata m2 = new Metadata();
+ m2.addMetadata(CoreMetKeys.FILENAME, "textfile.dat");
+ m2.addMetadata("Owners", Arrays.asList("Bob", "Billy"));
+ qr2 = new QueryResult(p, m2);
+
+ Metadata filename = new Metadata();
+ filename.addMetadata(CoreMetKeys.FILENAME, "foo.txt");
+ qrfilename = new QueryResult(p, filename);
+
+ Metadata owners = new Metadata();
+ owners.addMetadata("Owners", Arrays.asList("Dave", "Dan"));
+ qrowners = new QueryResult(p, owners);
+
+ qrnull = new QueryResult(p, new Metadata());
+ qrnull2 = new QueryResult(p, new Metadata());
+ }
+
+ public void testCompare() {
+ List<QueryResult> list = Arrays.asList(qr1, qrowners, qrnull2, qr2, qrnull, qrfilename);
+ QueryResultComparator c = new QueryResultComparator();
+ c.setSortByMetKey(CoreMetKeys.FILENAME);
+
+ Collections.sort(list, c);
+ assertEquals(qr1, list.get(0));
+ assertEquals(qrfilename, list.get(1));
+ assertEquals(qr2, list.get(2));
+ List<QueryResult> sub = list.subList(3, list.size());
+ assertEquals(3, sub.size());
+ assertTrue(sub.contains(qrnull));
+ assertTrue(sub.contains(qrnull2));
+ assertTrue(sub.contains(qrowners));
+
+ c.setSortByMetKey("Owners");
+ Collections.sort(list, c);
+ assertEquals(qr2, list.get(0));
+ assertEquals(qr1, list.get(1));
+ assertEquals(qrowners, list.get(2));
+ sub = list.subList(3, list.size());
+ assertEquals(3, sub.size());
+ assertTrue(sub.contains(qrfilename));
+ assertTrue(sub.contains(qrnull));
+ assertTrue(sub.contains(qrnull2));
+ }
+
+}