Author: rickdn
Date: Mon Mar 26 16:20:27 2012
New Revision: 1305427

URL: http://svn.apache.org/viewvc?rev=1305427&view=rev
Log:
OODT-427 #resolve fixed  QueryResult.toString handles empty metadata, test 
cases adjusted accordingly


Added:
    oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/
    
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResult.java
Modified:
    oodt/trunk/CHANGES.txt
    
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResult.java
    
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/cli/action/TestSqlQueryCliAction.java

Modified: oodt/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/oodt/trunk/CHANGES.txt?rev=1305427&r1=1305426&r2=1305427&view=diff
==============================================================================
--- oodt/trunk/CHANGES.txt (original)
+++ oodt/trunk/CHANGES.txt Mon Mar 26 16:20:27 2012
@@ -4,6 +4,9 @@ Apache OODT Change Log
 Release 0.4: Current Development
 --------------------------------------------
 
+* OODT-427 filemgr query throws "String index out of range: -1" when some 
products have undefined
+  metadata values (rickdn)
+
 * OODT-405 Introduced new syntax for environment variable replacement in 
opendapps module (luca)
 
 * OODT-425 CAS-PGE logger unit-test fails because it sometimes finds logger 
lock file (bfoster)

Modified: 
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResult.java
URL: 
http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResult.java?rev=1305427&r1=1305426&r2=1305427&view=diff
==============================================================================
--- 
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResult.java
 (original)
+++ 
oodt/trunk/filemgr/src/main/java/org/apache/oodt/cas/filemgr/structs/query/QueryResult.java
 Mon Mar 26 16:20:27 2012
@@ -18,9 +18,8 @@
 package org.apache.oodt.cas.filemgr.structs.query;
 
 //JDK imports
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
-import java.util.Map.Entry;
 
 import org.springframework.util.StringUtils;
 
@@ -76,23 +75,48 @@ public class QueryResult {
         return convertMetadataToString(this.metadata, this.toStringFormat);
     }
     
-    private static String convertMetadataToString(Metadata metadata,
-            String format) {
+    private static String convertMetadataToString(Metadata metadata, String 
format) {
         if (format == null)
             return concatMetadataIntoString(metadata);
         String outputString = format;
-        for (Entry<String, Object> entry : (Set<Entry<String, Object>>) 
metadata
-                .getHashtable().entrySet())
-            outputString = outputString.replaceAll("\\$" + entry.getKey(), 
StringUtils.collectionToDelimitedString((List<String>)entry.getValue(), ","));
+        for (String key : metadata.getAllKeys())
+            outputString = outputString.replaceAll("\\$" + key,
+                
StringUtils.collectionToCommaDelimitedString(metadata.getAllMetadata(key)));
         return outputString;
     }
     
     private static String concatMetadataIntoString(Metadata metadata) {
-        String outputString = "";
-        for (Entry<String, Object> entry : (Set<Entry<String, Object>>) 
metadata
-                .getHashtable().entrySet()) 
-            outputString += 
StringUtils.collectionToDelimitedString((List<String>)entry.getValue(), ",") + 
",";
-        return outputString.substring(0, outputString.length() - 1);
+        List<String> outputString = new ArrayList<String>();
+        for (String key : metadata.getAllKeys())
+            
outputString.add(StringUtils.collectionToCommaDelimitedString(metadata.getAllMetadata(key)));
+        return StringUtils.collectionToCommaDelimitedString(outputString);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      if (this == obj)
+        return true;
+      if (obj == null)
+        return false;
+      if (getClass() != obj.getClass())
+        return false;
+      QueryResult other = (QueryResult) obj;
+      if (metadata == null) {
+        if (other.metadata != null)
+          return false;
+      } else if (!metadata.equals(other.metadata))
+        return false;
+      if (product == null) {
+        if (other.product != null)
+          return false;
+      } else if (!product.equals(other.product))
+        return false;
+      if (toStringFormat == null) {
+        if (other.toStringFormat != null)
+          return false;
+      } else if (!toStringFormat.equals(other.toStringFormat))
+        return false;
+      return true;
     }
-    
+
 }

Modified: 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/cli/action/TestSqlQueryCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/cli/action/TestSqlQueryCliAction.java?rev=1305427&r1=1305426&r2=1305427&view=diff
==============================================================================
--- 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/cli/action/TestSqlQueryCliAction.java
 (original)
+++ 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/cli/action/TestSqlQueryCliAction.java
 Mon Mar 26 16:20:27 2012
@@ -126,7 +126,10 @@ public class TestSqlQueryCliAction exten
       cliAction.setVersionConverter(VERSION_CONV);
       cliAction.execute(printer);
       assertEquals(2, printer.getPrintedMessages().size());
-      assertEquals("data.dat,Bob,Billy", printer.getPrintedMessages().get(0));
+      String msg = printer.getPrintedMessages().get(0);
+      assertTrue(msg.contains("data.dat"));
+      assertTrue(msg.contains("Bob,Billy"));
+      assertEquals(",", msg.replace("data.dat","").replace("Bob,Billy",""));
       assertEquals("\n", printer.getPrintedMessages().get(1));
       assertEquals(SORT_BY, clientSetComplexQuery.getSortByMetKey());
       assertNull(clientSetComplexQuery.getToStringResultFormat());

Added: 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResult.java
URL: 
http://svn.apache.org/viewvc/oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResult.java?rev=1305427&view=auto
==============================================================================
--- 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResult.java
 (added)
+++ 
oodt/trunk/filemgr/src/test/org/apache/oodt/cas/filemgr/structs/query/TestQueryResult.java
 Mon Mar 26 16:20:27 2012
@@ -0,0 +1,79 @@
+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.List;
+
+import junit.framework.TestCase;
+
+public class TestQueryResult extends TestCase {
+
+  private QueryResult qr;
+
+  @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("Bob", "Billy"));
+    qr = new QueryResult(p, m);
+  }
+
+  public void testToString() {
+    String str = qr.toString();
+    assertTrue(str.contains("datafile.dat"));
+    assertTrue(str.contains("Bob,Billy"));
+    assertEquals(",", str.replace("datafile.dat", "").replace("Bob,Billy",""));
+  }
+
+  public void testToStringFormat() {
+    qr.setToStringFormat("$Owners,$Filename");
+    assertEquals("Bob,Billy,datafile.dat", qr.toString());
+
+    qr.setToStringFormat("$Filename\t$Owners");
+    List<String> list = Arrays.asList(qr.toString().split("\t"));
+    assertEquals(2, list.size());
+    assertEquals("datafile.dat", list.get(0));
+    assertEquals("Bob,Billy", list.get(1));
+  }
+
+  public void testToStringEmpty() {
+    qr.setMetadata(new Metadata());
+    assertEquals("", qr.toString());
+  }
+
+  public void testEquals() {
+    assertEquals(qr, qr);
+    assertFalse(qr.equals(null));
+    assertFalse(qr.equals(0));
+
+    QueryResult metnull = new QueryResult(qr.getProduct(), null);
+    assertFalse(metnull.equals(qr));
+    assertFalse(qr.equals(metnull));
+    assertEquals(metnull, new QueryResult(qr.getProduct(), null));
+
+    QueryResult prodnull = new QueryResult(null, new 
Metadata(qr.getMetadata()));
+    assertFalse(prodnull.equals(qr));
+    assertFalse(qr.equals(prodnull));
+    assertEquals(prodnull, new QueryResult(null, new 
Metadata(qr.getMetadata())));
+
+    QueryResult equal = new QueryResult(qr.getProduct(), new 
Metadata(qr.getMetadata()));
+    assertEquals(qr, equal);
+    assertEquals(equal, qr);
+
+    QueryResult fmt = new QueryResult(qr.getProduct(), new 
Metadata(qr.getMetadata()));
+    fmt.setToStringFormat("blah");
+    assertFalse(qr.equals(fmt));
+    assertFalse(fmt.equals(qr));
+
+    QueryResult fmt2 = new QueryResult(qr.getProduct(), new 
Metadata(qr.getMetadata()));
+    fmt2.setToStringFormat("blah");
+    assertEquals(fmt, fmt2);
+    assertEquals(fmt2, fmt);
+  }
+
+}


Reply via email to