Author: [email protected]
Date: Wed Sep 14 13:58:52 2011
New Revision: 1361

Log:
[AMDATUCASSANDRA-83] Also added method <T> SuperRow<String, String, String, T> 
getSuperRow(String columnFamily, String rowKey, String superColumn, Class<T> 
clazz);

Modified:
   
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/CassandraPersistenceManager.java
   
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
   
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
   
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/CassandraPersistenceManagerMock.java

Modified: 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/CassandraPersistenceManager.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/CassandraPersistenceManager.java
  (original)
+++ 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/CassandraPersistenceManager.java
  Wed Sep 14 13:58:52 2011
@@ -202,6 +202,29 @@
     <T> T getValue(String columnFamily, String rowKey, String superColumn, 
String column, Class<T> expectedClazz);
 
     /**
+     * Returns the super row with the specified row key in the specified 
Column Family (which must be of type "Super")
+     * which contains only the Super Columns matching the specified name. This 
method assumes that the values
+     * stored in all Columns are of type T. If the specified ColumnFamily does 
not exist, an unchecked exception
+     * will be thrown.
+     * 
+     * @param <T>
+     *        The expected return type of the value contained by the specified 
column
+     * @param rowKey
+     *        
+     * @param columnFamily
+     *        The name of the ColumnFamily to retrieve all super rows for.
+     * @param superColumn
+     *        The name of the superColumns to retrieve
+     * @param clazz
+     *        The generic type T of all values being retrieved (i.e. 
String.class).
+     * @return Super row with the specified row key in the specified 
ColumnFamily but containing only the SuperColumns
+     *         matching the specified superColumn name and assuming all values 
are of type T.
+     *         Returns null if there is no row with the specified row key.
+     */
+    <T> SuperRow<String, String, String, T> getSuperRow(String columnFamily, 
String rowKey, String superColumn,
+        Class<T> clazz);
+    
+    /**
      * Returns an iterator over all super rows in the specified Column Family 
(which must be of type "Super")
      * which contains all Super Columns and Columns. This method assumes that 
the values stored in all Columns are of
      * type T. If the specified ColumnFamily does not exist, an unchecked 
exception will be thrown.

Modified: 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
        (original)
+++ 
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/service/HectorCassandraPersistenceManagerImpl.java
        Wed Sep 14 13:58:52 2011
@@ -167,7 +167,7 @@
         List<String> rowKeys = new ArrayList<String>();
         if (isSuperColumnFamily(columnFamilyName)) {
             Iterator<SuperRow<String, String, String, ByteBuffer>> iter =
-                getSuperRows(columnFamilyName, ByteBuffer.class, 1, column, 
superColumn);
+                getSuperRows(columnFamilyName, null, ByteBuffer.class, 1, 
column, superColumn);
             while (iter.hasNext()) {
                 SuperRow<String, String, String, ByteBuffer> row = iter.next();
                 int scSize = row.getSuperSlice().getSuperColumns().size();
@@ -303,15 +303,25 @@
             return null;
         }
     }
-
+    
+    public <T> SuperRow<String, String, String, T> getSuperRow(String 
columnFamilyName, String rowKey,
+        String superColumn, Class<T> clazz) {
+        Iterator<SuperRow<String, String, String, T>> superRows = 
getSuperRows(columnFamilyName, rowKey, clazz, COLUMN_LIMIT, null, superColumn);
+        if (superRows.hasNext()) {
+            return superRows.next();
+        } else {
+            return null;
+        }
+    }
+    
     public <T> Iterator<SuperRow<String, String, String, T>> 
getSuperRows(final String columnFamilyName,
         final Class<T> clazz) {
-        return getSuperRows(columnFamilyName, clazz, COLUMN_LIMIT, null, null);
+        return getSuperRows(columnFamilyName, null, clazz, COLUMN_LIMIT, null, 
null);
     }
     
     public <T> Iterator<SuperRow<String, String, String, T>> 
getSuperRows(String columnFamilyName, String superColumn,
         Class<T> clazz) {
-        return getSuperRows(columnFamilyName, clazz, COLUMN_LIMIT, null, 
superColumn);
+        return getSuperRows(columnFamilyName, null, clazz, COLUMN_LIMIT, null, 
superColumn);
     }
 
     public <T> Iterator<Row<String, String, T>> getRows(final String 
columnFamilyName, final Class<T> clazz) {
@@ -394,7 +404,7 @@
     }
     
     private <T> Iterator<SuperRow<String, String, String, T>> 
getSuperRows(final String columnFamilyName,
-        final Class<T> clazz, final int colLimit, final String column, final 
String superColumn) {
+        final String rowKey, final Class<T> clazz, final int colLimit, final 
String column, final String superColumn) {
         StringSerializer serializer = StringSerializer.get();
         Serializer<T> valueSerializer = getSerializer(clazz);
         RangeSuperSlicesQuery<String, String, String, T> rangeSlicesQuery =
@@ -403,6 +413,9 @@
                 .setKeys(null, null)
                 .setRange(superColumn, superColumn, false, colLimit)
                 .setRowCount(ROW_LIMIT);
+        if (rowKey != null) {
+            rangeSlicesQuery.setKeys(rowKey, rowKey);
+        }
         if (superColumn != null && column != null) {
             rangeSlicesQuery.setColumnNames(superColumn, column);
         }

Modified: 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
        (original)
+++ 
trunk/amdatu-cassandra/test-integration/tests/src/test/java/org/amdatu/cassandra/test/integration/tests/CassandraPersistenceManagerTest.java
        Wed Sep 14 13:58:52 2011
@@ -123,6 +123,11 @@
             Assert.assertTrue(count == 1);
             count++;
         }
+        
+        // Verify getSuperRow
+        SuperRow<String, String, String, String> superRow = 
m_pm.getSuperRow(COLUMNFAMILY, rowKey, "SuperColumn_" + (colSize-1), 
String.class);
+        Assert.assertTrue(superRow != null);
+        Assert.assertTrue(superRow.getSuperSlice().getSuperColumns().size() == 
1);
     }
 
     /**

Modified: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/CassandraPersistenceManagerMock.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/CassandraPersistenceManagerMock.java
   (original)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/CassandraPersistenceManagerMock.java
   Wed Sep 14 13:58:52 2011
@@ -188,6 +188,12 @@
         Class<T> clazz) {
         throw new IllegalArgumentException("This method is not (yet) 
implemented by this mock object");
     }
+    
+    @Override
+    public <T> SuperRow<String, String, String, T> getSuperRow(String 
columnFamily, String rowKey,
+        String superColumn, Class<T> clazz) {
+        throw new IllegalArgumentException("This method is not (yet) 
implemented by this mock object");
+    }
 
     @Override
     public <T> Iterator<me.prettyprint.hector.api.beans.Row<String, String, 
T>> getRows(String columnFamily,
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to