Author: [email protected]
Date: Fri Sep 16 11:04:44 2011
New Revision: 1383

Log:
[AMDATUCASSANDRA-82] Added super column support in exists, setValue and 
getValue methods of the mocked PM. getSuperRow and getSuperRows remains to be 
done.

Added:
   trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/
   trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/
   trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/
   trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/
   
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/
   
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/test/
   
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/test/unit/
   
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/test/unit/CassandraGadgetStoreTest.java
   
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Column.java
   
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Row.java
   
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/SuperColumn.java
Modified:
   trunk/amdatu-cassandra/cassandra-gadgetstore/pom.xml
   
trunk/amdatu-cassandra/cassandra-gadgetstore/src/main/java/org/amdatu/cassandra/gadgetstore/service/CassandraGadgetStorageProviderImpl.java
   
trunk/amdatu-cassandra/cassandra-persistencemanager/src/main/java/org/amdatu/cassandra/persistencemanager/CassandraPersistenceManager.java
   
trunk/amdatu-cassandra/cassandra-store-consumer/src/main/java/org/amdatu/cassandra/store/consumer/service/ConsumerColumnFamilyProvider.java
   trunk/amdatu-cassandra/release/src/main/resources/README
   
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/ColumnFamily.java
   
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Keyspace.java

Modified: trunk/amdatu-cassandra/cassandra-gadgetstore/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/cassandra-gadgetstore/pom.xml        (original)
+++ trunk/amdatu-cassandra/cassandra-gadgetstore/pom.xml        Fri Sep 16 
11:04:44 2011
@@ -50,6 +50,11 @@
       <scope>provided</scope>
       <type>bundle</type>
     </dependency>
+    <dependency>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.test.unit</artifactId>
+      <type>jar</type>
+    </dependency>
   </dependencies>
 
   <build>

Modified: 
trunk/amdatu-cassandra/cassandra-gadgetstore/src/main/java/org/amdatu/cassandra/gadgetstore/service/CassandraGadgetStorageProviderImpl.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-gadgetstore/src/main/java/org/amdatu/cassandra/gadgetstore/service/CassandraGadgetStorageProviderImpl.java
 (original)
+++ 
trunk/amdatu-cassandra/cassandra-gadgetstore/src/main/java/org/amdatu/cassandra/gadgetstore/service/CassandraGadgetStorageProviderImpl.java
 Fri Sep 16 11:04:44 2011
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.amdatu.cassandra.gadgetstore.service;
-
+package org.amdatu.cassandra.gadgetstore.service;
+
 import static 
org.amdatu.cassandra.gadgetstore.service.GadgetColumnFamilyProvider.CF_GADGET;
 import static 
org.amdatu.cassandra.gadgetstore.service.GadgetColumnFamilyProvider.CF_GADGETCATEGORY;
 
@@ -31,67 +31,86 @@
 import org.amdatu.opensocial.gadgetmanagement.GadgetStorageException;
 import org.amdatu.opensocial.gadgetmanagement.GadgetStorageProvider;
 import org.osgi.service.log.LogService;
-
-/**
- * This class provides a Cassandra implementation of the GadgetStore. The 
GadgetStore is responsible for storing
- * gadget definitions and categories.
- *
- * @author ivol
- */
-public class CassandraGadgetStorageProviderImpl implements 
GadgetStorageProvider {
-    // ColumnFamily for gadget store
-    private static final String SC_BASIC = "Basic";
-    private static final String C_GADGETURL = "gadgeturl";
-    private static final String C_DEFAULTVISIBLE = "defaultvisible";
-    private static final String C_CALLBACKURL = "callbackurl";
-    private static final String C_SERVICENAME = "servicename";
-    private static final String C_CONSUMERKEY = "consumerkey";
-    private static final String C_CONSUMERSECRET = "consumersecret";
-    private static final String C_KEYTYPE = "keytype";
-    private static final String C_CATEGORY = "category";
-
-    private static final String C_NAME = "name";
-
-    private volatile CassandraPersistenceManager m_pm;
-    private volatile LogService m_logService;
-
-    // Locks
-    private ReentrantReadWriteLock m_cassandraLock = new 
ReentrantReadWriteLock();
-
-    public void start() {
-        m_logService.log(LogService.LOG_DEBUG, "Service " + 
this.getClass().getName() + " is now available");
-    }
-
-    public void addGadget(final GadgetDefinition gadget) throws 
GadgetStorageException {
-        try {
-            m_cassandraLock.writeLock().lock();
-            String rowKey = gadget.getUrl();
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_GADGETURL, 
gadget.getUrl());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_GADGETURL, 
gadget.getUrl());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_DEFAULTVISIBLE,
-                new Boolean(gadget.isDefaultVisible()).toString());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CATEGORY, 
gadget.getCategory().getId());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CALLBACKURL, 
gadget.getCallbackUrl());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_SERVICENAME, 
gadget.getServiceName());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CONSUMERKEY, 
gadget.getConsumerPrivateKey());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CONSUMERSECRET, 
gadget.getConsumerPublicKey());
-            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_KEYTYPE, 
gadget.getKeyType());
-        }
-        finally {
-            m_cassandraLock.writeLock().unlock();
-        }
-    }
+
+/**
+ * This class provides a Cassandra implementation of the GadgetStore. The 
GadgetStore is responsible for storing
+ * gadget definitions and categories.
+ * 
+ * @author ivol
+ */
+public class CassandraGadgetStorageProviderImpl implements 
GadgetStorageProvider {
+    // ColumnFamily for gadget store
+    private static final String SC_BASIC = "Basic";
+    private static final String C_GADGETURL = "gadgeturl";
+    private static final String C_DEFAULTVISIBLE = "defaultvisible";
+    private static final String C_CALLBACKURL = "callbackurl";
+    private static final String C_SERVICENAME = "servicename";
+    private static final String C_CONSUMERKEY = "consumerkey";
+    private static final String C_CONSUMERSECRET = "consumersecret";
+    private static final String C_KEYTYPE = "keytype";
+    private static final String C_CATEGORY = "category";
+
+    private static final String C_NAME = "name";
+
+    private volatile CassandraPersistenceManager m_pm;
+    private volatile LogService m_logService;
+
+    // Locks
+    private ReentrantReadWriteLock m_cassandraLock = new 
ReentrantReadWriteLock();
+
+    /**
+     * Default constructor.
+     */
+    public CassandraGadgetStorageProviderImpl() {
+    }
+
+    /**
+     * Constructor used by the Unit test.
+     * 
+     * @param pm
+     *        The Cassandra persistence manager mock
+     * @param logService
+     *        The Log service mock
+     */
+    public CassandraGadgetStorageProviderImpl(CassandraPersistenceManager pm, 
LogService logService) {
+        m_pm = pm;
+        m_logService = logService;
+    }
+
+    public void start() {
+        m_logService.log(LogService.LOG_DEBUG, "Service " + 
this.getClass().getName() + " is now available");
+    }
+
+    public void addGadget(final GadgetDefinition gadget) throws 
GadgetStorageException {
+        try {
+            m_cassandraLock.writeLock().lock();
+            String rowKey = gadget.getUrl();
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_GADGETURL, 
gadget.getUrl());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_GADGETURL, 
gadget.getUrl());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_DEFAULTVISIBLE,
+                new Boolean(gadget.isDefaultVisible()).toString());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CATEGORY, 
gadget.getCategory().getId());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CALLBACKURL, 
gadget.getCallbackUrl());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_SERVICENAME, 
gadget.getServiceName());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CONSUMERKEY, 
gadget.getConsumerPrivateKey());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_CONSUMERSECRET, 
gadget.getConsumerPublicKey());
+            m_pm.setValue(CF_GADGET, rowKey, SC_BASIC, C_KEYTYPE, 
gadget.getKeyType());
+        }
+        finally {
+            m_cassandraLock.writeLock().unlock();
+        }
+    }
 
     @Override
     public GadgetDefinition getGadget(String id) throws GadgetStorageException 
{
         GadgetDefinition gadget = null;
         String url = m_pm.getValue(CF_GADGET, id, SC_BASIC, C_GADGETURL, 
String.class);
-        String categoryId = m_pm.getValue(CF_GADGET,id, SC_BASIC, C_CATEGORY, 
String.class);
+        String categoryId = m_pm.getValue(CF_GADGET, id, SC_BASIC, C_CATEGORY, 
String.class);
         GadgetCategory category = getCategory(categoryId);
         boolean defaultVisible =
             "true"
-            .equalsIgnoreCase(m_pm.getValue(CF_GADGET, id, SC_BASIC,
-                C_DEFAULTVISIBLE, String.class));
+                .equalsIgnoreCase(m_pm.getValue(CF_GADGET, id, SC_BASIC,
+                    C_DEFAULTVISIBLE, String.class));
         if (category != null) {
             gadget = new GadgetDefinition(url, category, defaultVisible);
         }
@@ -108,137 +127,137 @@
         gadget.setKeyType(m_pm.getValue(CF_GADGET, id, SC_BASIC, C_KEYTYPE, 
String.class));
         return gadget;
     }
-    
-    public GadgetDefinition[] getGadgets() throws GadgetStorageException {
-        try {
-            m_cassandraLock.readLock().lock();
-            List<String> rows = m_pm.getRowKeys(CF_GADGET);
-            GadgetDefinition[] gadgets = new GadgetDefinition[rows.size()];
-            for (int i = 0; i < rows.size(); i++) {
-                gadgets[i] = getGadget(rows.get(i));
-            }
-            return orderGadgets(gadgets);
-        }
-        finally {
-            m_cassandraLock.readLock().unlock();
-        }
-    }
-
-    public void removeGadget(final GadgetDefinition gadget) throws 
GadgetStorageException {
-        try {
-            m_cassandraLock.writeLock().lock();
-            String rowKey = gadget.getUrl();
-            m_pm.deleteRow(CF_GADGET, rowKey);
-        }
-        finally {
-            m_cassandraLock.writeLock().unlock();
-        }
-    }
-
-    public boolean addCategory(final GadgetCategory category) throws 
GadgetStorageException {
-        try {
-            m_cassandraLock.readLock().lock();
-            if (!m_pm.exists(CF_GADGETCATEGORY, category.getId())) {
-                m_pm.setValue(CF_GADGETCATEGORY, category.getId(), SC_BASIC, 
C_NAME, category.getName());
-                return true;
-            }
-            else {
-                return false;
-            }
-        }
-        finally {
-            m_cassandraLock.readLock().unlock();
-        }
-    }
-
-    public GadgetCategory getCategory(final String categoryId) throws 
GadgetStorageException {
-        try {
-            m_cassandraLock.readLock().lock();
-            if (m_pm.exists(CF_GADGETCATEGORY, categoryId)) {
-                String catName = m_pm.getValue(CF_GADGETCATEGORY, categoryId, 
SC_BASIC, C_NAME, String.class);
+
+    public GadgetDefinition[] getGadgets() throws GadgetStorageException {
+        try {
+            m_cassandraLock.readLock().lock();
+            List<String> rows = m_pm.getRowKeys(CF_GADGET);
+            GadgetDefinition[] gadgets = new GadgetDefinition[rows.size()];
+            for (int i = 0; i < rows.size(); i++) {
+                gadgets[i] = getGadget(rows.get(i));
+            }
+            return orderGadgets(gadgets);
+        }
+        finally {
+            m_cassandraLock.readLock().unlock();
+        }
+    }
+
+    public void removeGadget(final GadgetDefinition gadget) throws 
GadgetStorageException {
+        try {
+            m_cassandraLock.writeLock().lock();
+            String rowKey = gadget.getUrl();
+            m_pm.deleteRow(CF_GADGET, rowKey);
+        }
+        finally {
+            m_cassandraLock.writeLock().unlock();
+        }
+    }
+
+    public boolean addCategory(final GadgetCategory category) throws 
GadgetStorageException {
+        try {
+            m_cassandraLock.readLock().lock();
+            if (!m_pm.exists(CF_GADGETCATEGORY, category.getId())) {
+                m_pm.setValue(CF_GADGETCATEGORY, category.getId(), SC_BASIC, 
C_NAME, category.getName());
+                return true;
+            }
+            else {
+                return false;
+            }
+        }
+        finally {
+            m_cassandraLock.readLock().unlock();
+        }
+    }
+
+    public GadgetCategory getCategory(final String categoryId) throws 
GadgetStorageException {
+        try {
+            m_cassandraLock.readLock().lock();
+            if (m_pm.exists(CF_GADGETCATEGORY, categoryId)) {
+                String catName = m_pm.getValue(CF_GADGETCATEGORY, categoryId, 
SC_BASIC, C_NAME, String.class);
                 GadgetCategory category = new GadgetCategory(categoryId, 
catName);
                 category.setGadgetCount(countGadgets(category));
-                return category;
-            }
-            else {
-                return null;
-            }
-
-        }
-        finally {
-            m_cassandraLock.readLock().unlock();
-        }
-    }
-
-    public GadgetCategory[] getCategories() throws GadgetStorageException {
-        try {
-            m_cassandraLock.readLock().lock();
-            List<String> rows = m_pm.getRowKeys(CF_GADGETCATEGORY);
-            if (rows != null) {
-                GadgetCategory[] categories = new GadgetCategory[rows.size()];
-                int i = 0;
-                for (String row : rows) {
-                    String catName = m_pm.getValue(CF_GADGETCATEGORY, row, 
SC_BASIC, C_NAME, String.class);
+                return category;
+            }
+            else {
+                return null;
+            }
+
+        }
+        finally {
+            m_cassandraLock.readLock().unlock();
+        }
+    }
+
+    public GadgetCategory[] getCategories() throws GadgetStorageException {
+        try {
+            m_cassandraLock.readLock().lock();
+            List<String> rows = m_pm.getRowKeys(CF_GADGETCATEGORY);
+            if (rows != null) {
+                GadgetCategory[] categories = new GadgetCategory[rows.size()];
+                int i = 0;
+                for (String row : rows) {
+                    String catName = m_pm.getValue(CF_GADGETCATEGORY, row, 
SC_BASIC, C_NAME, String.class);
                     categories[i] = new GadgetCategory(row, catName);
-                    categories[i].setGadgetCount(countGadgets(categories[i]));
-                    i++;
-                }
-                return categories;
-            }
-            else {
-                return new GadgetCategory[0];
-            }
-        }
-        finally {
-            m_cassandraLock.readLock().unlock();
-        }
-    }
-
+                    categories[i].setGadgetCount(countGadgets(categories[i]));
+                    i++;
+                }
+                return categories;
+            }
+            else {
+                return new GadgetCategory[0];
+            }
+        }
+        finally {
+            m_cassandraLock.readLock().unlock();
+        }
+    }
+
     private int countGadgets(GadgetCategory category) throws 
GadgetStorageException {
-        int count = 0;
-        for (String row : m_pm.getRowKeys(CF_GADGET)) {
-            String catId = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_CATEGORY, 
String.class);
-            if (category.getId().equals(catId)) {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    public Map<String, String> getGadgetURLCategoryMap() throws 
GadgetStorageException {
-        Map<String, String> map = new HashMap<String, String>();
-        for (String row : m_pm.getRowKeys(CF_GADGET)) {
-            String url = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_GADGETURL, 
String.class);
-            String catId = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_CATEGORY, 
String.class);
-            map.put(url, catId);
-        }
-        return map;
-    }
-
-    public boolean removeCategory(final GadgetCategory category) throws 
GadgetStorageException {
-        try {
-            m_cassandraLock.readLock().lock();
-            if (m_pm.exists(CF_GADGETCATEGORY, category.getId())) {
-                m_pm.deleteRow(CF_GADGETCATEGORY, category.getId());
-                return true;
-            }
-            else {
-                return false;
-            }
-
-        }
-        finally {
-            m_cassandraLock.readLock().unlock();
-        }
-    }
-
-    private GadgetDefinition[] orderGadgets(final GadgetDefinition[] gadgets) {
-        Comparator<GadgetDefinition> comparator = new 
Comparator<GadgetDefinition>() {
-            public int compare(final GadgetDefinition o1, final 
GadgetDefinition o2) {
-                return o1.compareTo(o2);
-            }
-        };
-        Arrays.sort(gadgets, comparator);
-        return gadgets;
-    }
-}
+        int count = 0;
+        for (String row : m_pm.getRowKeys(CF_GADGET)) {
+            String catId = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_CATEGORY, 
String.class);
+            if (category.getId().equals(catId)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    public Map<String, String> getGadgetURLCategoryMap() throws 
GadgetStorageException {
+        Map<String, String> map = new HashMap<String, String>();
+        for (String row : m_pm.getRowKeys(CF_GADGET)) {
+            String url = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_GADGETURL, 
String.class);
+            String catId = m_pm.getValue(CF_GADGET, row, SC_BASIC, C_CATEGORY, 
String.class);
+            map.put(url, catId);
+        }
+        return map;
+    }
+
+    public boolean removeCategory(final GadgetCategory category) throws 
GadgetStorageException {
+        try {
+            m_cassandraLock.readLock().lock();
+            if (m_pm.exists(CF_GADGETCATEGORY, category.getId())) {
+                m_pm.deleteRow(CF_GADGETCATEGORY, category.getId());
+                return true;
+            }
+            else {
+                return false;
+            }
+
+        }
+        finally {
+            m_cassandraLock.readLock().unlock();
+        }
+    }
+
+    private GadgetDefinition[] orderGadgets(final GadgetDefinition[] gadgets) {
+        Comparator<GadgetDefinition> comparator = new 
Comparator<GadgetDefinition>() {
+            public int compare(final GadgetDefinition o1, final 
GadgetDefinition o2) {
+                return o1.compareTo(o2);
+            }
+        };
+        Arrays.sort(gadgets, comparator);
+        return gadgets;
+    }
+}

Added: 
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/test/unit/CassandraGadgetStoreTest.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/cassandra-gadgetstore/src/test/java/org/amdatu/cassandra/test/unit/CassandraGadgetStoreTest.java
     Fri Sep 16 11:04:44 2011
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2010, 2011 The Amdatu Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.amdatu.cassandra.test.unit;
+
+import junit.framework.Assert;
+
+import 
org.amdatu.cassandra.gadgetstore.service.CassandraGadgetStorageProviderImpl;
+import org.amdatu.cassandra.gadgetstore.service.GadgetColumnFamilyProvider;
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+import 
org.amdatu.cassandra.test.unit.framework.mock.CassandraPersistenceManagerMock;
+import org.amdatu.cassandra.test.unit.framework.mock.LogServiceMock;
+import org.amdatu.opensocial.gadgetmanagement.GadgetCategory;
+import org.amdatu.opensocial.gadgetmanagement.GadgetDefinition;
+import org.junit.Test;
+
+public class CassandraGadgetStoreTest {
+    @Test
+    public void test() {
+        // Create the mock objects
+        LogServiceMock logService = new LogServiceMock();
+        CassandraPersistenceManagerMock pm = new 
CassandraPersistenceManagerMock("Default");
+        ColumnFamilyDefinition[] colDefs = new 
GadgetColumnFamilyProvider().getColumnFamilies();
+        pm.addColumnFamily(colDefs);
+
+        // And the store under test itself
+        CassandraGadgetStorageProviderImpl gadgetStore = new 
CassandraGadgetStorageProviderImpl(pm, logService);
+
+        // Test CRUD API for categories
+        GadgetCategory cat1 = new GadgetCategory("test1", "Test category 1");
+        GadgetCategory cat2 = new GadgetCategory("test2", "Test category 2");
+        gadgetStore.addCategory(cat1);
+        gadgetStore.addCategory(cat2);
+        Assert.assertEquals(cat1.getId(), 
gadgetStore.getCategory("test1").getId());
+        Assert.assertEquals(cat2.getId(), 
gadgetStore.getCategory("test2").getId());
+        gadgetStore.removeCategory(cat2);
+        
+        GadgetDefinition gadget1 = new GadgetDefinition("http://gadget1";, 
cat1, false);
+        GadgetDefinition gadget2 = new GadgetDefinition("http://gadget2";, 
cat1, false);
+        gadgetStore.addGadget(gadget1);
+        gadgetStore.addGadget(gadget2);
+        Assert.assertEquals("http://gadget1";, 
gadgetStore.getGadget("http://gadget1";).getUrl());
+        Assert.assertEquals("http://gadget2";, 
gadgetStore.getGadget("http://gadget2";).getUrl());
+        Assert.assertEquals(2, gadgetStore.getGadgets().length);
+        
+        //SuperRow<String, String, String, String> sr = 
pm.getSuperRow("Gadget", "http://gadget1";, String.class);
+        
+        gadgetStore.removeGadget(gadget1);
+        gadgetStore.removeGadget(gadget2);
+        gadgetStore.removeCategory(cat1);
+    }
+}

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
  Fri Sep 16 11:04:44 2011
@@ -97,7 +97,8 @@
      *        The name of the SuperColumn to search for. Must be null if the 
specified ColumnFamily is not of
      *        type 'Super' and not null if it is
      * @param columnName
-     *        The name of the column to search for
+     *        The name of the column to search for. If the specified 
columnName is null and the ColumnFamily
+     *        is of type super, this method always returns false.
      * @return true if the specified ColumnFamily exists and if it contains a 
row with the specified row key with a
      *         SuperColumn and/or Column as specified.
      */

Modified: 
trunk/amdatu-cassandra/cassandra-store-consumer/src/main/java/org/amdatu/cassandra/store/consumer/service/ConsumerColumnFamilyProvider.java
==============================================================================
--- 
trunk/amdatu-cassandra/cassandra-store-consumer/src/main/java/org/amdatu/cassandra/store/consumer/service/ConsumerColumnFamilyProvider.java
 (original)
+++ 
trunk/amdatu-cassandra/cassandra-store-consumer/src/main/java/org/amdatu/cassandra/store/consumer/service/ConsumerColumnFamilyProvider.java
 Fri Sep 16 11:04:44 2011
@@ -33,7 +33,7 @@
             new ColumnFamilyDefinition(
                 CF_CONSUMER,
                     new String[] 
{CassandraPersistenceManager.DEFAULT_KEYSPACE},
-                    ColumnType.SUPER,
+                    ColumnType.STANDARD,
                     CompareType.BYTESTYPE,
                     CompareType.BYTESTYPE)};
     }

Modified: trunk/amdatu-cassandra/release/src/main/resources/README
==============================================================================
--- trunk/amdatu-cassandra/release/src/main/resources/README    (original)
+++ trunk/amdatu-cassandra/release/src/main/resources/README    Fri Sep 16 
11:04:44 2011
@@ -62,7 +62,7 @@
 http://www.amdatu.org/confluence/display/Amdatu/AC+-+Release+notes
 
 A detailed list of all resolved JIRA issues in this version and previous 
versions can be found in
-the CHANGELOG.txt located in this directory.
+the CHANGELOG located in this directory.
 
 
===================================================================================================
 -4- HARDWARE AND SOFTWARE REQUIREMENTS

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
   Fri Sep 16 11:04:44 2011
@@ -26,9 +26,8 @@
 import me.prettyprint.hector.api.exceptions.HInvalidRequestException;
 
 import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition.ColumnType;
 import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
-import org.amdatu.cassandra.test.unit.framework.mock.ColumnFamily.Column;
-import org.amdatu.cassandra.test.unit.framework.mock.ColumnFamily.Row;
 
 /**
  * This class mocks the Cassandra Persistence Manager can can be used in 
Cassandra unit tests
@@ -48,7 +47,7 @@
      * Constructs a new PM for the specified keyspace.
      * 
      * @param keyspace
-     *        th ename of the keyspace to create this PM for
+     *        the name of the keyspace to create this PM for
      */
     public CassandraPersistenceManagerMock(String keyspace) {
         m_keyspace = new Keyspace(keyspace);
@@ -59,9 +58,11 @@
      * 
      * @param cf
      *        Name of the Column Family to add.
+     * @param type
+     *        Type of the Column Family to add (NORMAL or SUPER)
      */
-    public void addColumnFamily(String cf) {
-        m_keyspace.addColumnFamily(cf);
+    public void addColumnFamily(String cf, ColumnFamilyDefinition.ColumnType 
type) {
+        m_keyspace.addColumnFamily(cf, type);
     }
 
     /**
@@ -72,7 +73,7 @@
      */
     public void addColumnFamily(ColumnFamilyDefinition[] colDefs) {
         for (ColumnFamilyDefinition colDef : colDefs) {
-            m_keyspace.addColumnFamily(colDef.getName());
+            m_keyspace.addColumnFamily(colDef.getName(), 
colDef.getColumnType());
         }
     }
 
@@ -100,14 +101,26 @@
     }
 
     public boolean exists(String columnFamilyName, String rowKey, String 
superColumnName, String columnName) {
-        if (superColumnName != null) {
-            throw new IllegalArgumentException("Super columns are not yet 
implemented by this mock object");
-        }
         if (exists(columnFamilyName, rowKey)) {
-            if (columnName == null) {
-                throw new IllegalArgumentException("Column may not be null");
+            ColumnFamily columnFamily = 
m_keyspace.getColumnFamily(columnFamilyName);
+            List<Column> columns = null;
+            if (columnFamily.getType() == ColumnType.SUPER) {
+                if (superColumnName == null) {
+                    throw new IllegalArgumentException("SuperColumn may not be 
null");
+                }   
+                List<SuperColumn> superColumns = 
columnFamily.getSuperColumns(rowKey);
+                for (SuperColumn superColumn : superColumns) {
+                    if (superColumn.getName().equals(superColumnName)) {
+                        columns = superColumn.getColumns();
+                    }
+                }
+            }
+            else {
+                columns = columnFamily.getColumns(rowKey);
+            }
+            if (columnName == null || columns == null || columns.size() == 0) {
+                return false;
             }
-            List<Column> columns = 
m_keyspace.getColumnFamily(columnFamilyName).getColumns(rowKey);
             return columns.contains(columnName);
         }
         return false;
@@ -141,31 +154,63 @@
         if (cf != null) {
             Row row = cf.getRow(rowKey);
             if (row == null) {
-                row = cf.new Row(rowKey);
+                row = new Row(cf, rowKey);
                 cf.addRow(row);
             }
-            Column col = row.getColumn(column);
-            if (col == null) {
-                col = cf.new Column(column, value, System.currentTimeMillis());
+            if (superColumn != null) {
+                // Super Column case
+                SuperColumn superCol = row.getSuperColumn(superColumn);
+                if (superCol == null) {
+                    superCol = new SuperColumn(superColumn);
+                    row.addSuperColumn(superCol);
+                }
+                Column col = superCol.getColumn(column);
+                if (col == null) {
+                    col = new Column(column, value, 
System.currentTimeMillis());
+                    superCol.addColumn(col);
+                }
+                else {
+                    col.setValue(value);
+                }
             }
             else {
-                col.setValue(value);
+                // Column case
+                Column col = row.getColumn(column);
+                if (col == null) {
+                    col = new Column(column, value, 
System.currentTimeMillis());
+                    row.addColumn(col);
+                }
+                else {
+                    col.setValue(value);
+                }
             }
-            row.addColumn(col);
         }
     }
 
     @SuppressWarnings("unchecked")
     public <T> T getValue(String columnFamily, String rowKey, String 
superColumnName, String columnName,
         Class<T> expectedClazz) {
-        if (superColumnName != null) {
-            throw new IllegalArgumentException("Super columns are not (yet) 
implemented by this mock object");
-        }
         if (!exists(columnFamily)) {
             throw new HInvalidRequestException("ColumnFamily '" + columnFamily 
+ "' does not exist");
         }
         ColumnFamily cf = m_keyspace.getColumnFamily(columnFamily);
-        List<Column> columns = cf.getColumns(rowKey);
+        List<Column> columns = null;
+        if (superColumnName != null) {
+            List<SuperColumn> superColumns = cf.getSuperColumns(rowKey);
+            if (superColumns == null) {
+                // Return null if the row doesn't exist
+                return null;
+            }
+            for (SuperColumn superColumn : superColumns) {
+                if (superColumn.getName().equals(superColumnName)) {
+                    columns = superColumn.getColumns();
+                }
+            }
+        }
+        else {
+            columns = cf.getColumns(rowKey);
+        }
+
         if (columns == null) {
             // Return null if the row doesn't exist
             return null;
@@ -191,8 +236,128 @@
 
     @Override
     public <T> SuperRow<String, String, String, T> getSuperRow(String 
columnFamily, String rowKey, Class<T> clazz) {
+     /*   ColumnFamily cf = m_keyspace.getColumnFamily(columnFamily);
+        if (cf == null) {
+            throw new  IllegalArgumentException("No ColumnFamily exists named 
'" + columnFamily + "'");
+        }
+        final Row row = cf.getRow(rowKey);
+        if (row == null) {
+            return null;
+        }
+        
+        SuperRow sr = new SuperRow() {
+            public Object getKey() {
+                return row.getKey();
+            }
+
+            public SuperSlice getSuperSlice() {
+                return new SuperSlice() {
+                    public List getSuperColumns() {
+                        return null;
+                    }
+                    public HSuperColumn getColumnByName(Object columnName) {
+                        // TODO Auto-generated method stub
+                        return null;
+                    }
+                }
+            }
+            
+        };*/
+        
         throw new IllegalArgumentException("This method is not (yet) 
implemented by this mock object");
     }
+    /*
+    private SuperRow toSuperRow(final Row row) {
+        SuperRow superRow = new SuperRow() {
+            public Object getKey() {
+                return row.getKey();
+            }
+
+            public SuperSlice getSuperSlice() {
+                return new SuperSlice() {
+                    public List getSuperColumns() {
+                        return row.getSuperColumns();
+                    }
+                    public HSuperColumn getColumnByName(Object columnName) {
+                        return row.getSuperColumn(columnName.toString());
+                    }
+                }
+            }
+            
+        };
+        return superRow;
+    }
+    
+    private HSuperColumn toHSuperColumn(final SuperColumn superColumn) {
+        HSuperColumn hSuperColumn = new HSuperColumn() {
+
+            public HSuperColumn setName(Object name) {
+                throw new IllegalArgumentException("Cannot invoke SuperColumn 
setters on this Mock object");
+            }
+
+            public HSuperColumn setSubcolumns(List subcolumns) {
+                throw new IllegalArgumentException("Cannot invoke SuperColumn 
setters on this Mock object");
+            }
+
+            public HSuperColumn setClock(long clock) {
+                throw new IllegalArgumentException("Cannot invoke SuperColumn 
setters on this Mock object");
+            }
+
+            public long getClock() {
+                return 0;
+            }
+
+            public int getSize() {
+                return superColumn.getColumns().size();
+            }
+
+            public Object getName() {
+                return superColumn.getName();
+            }
+
+            public List getColumns() {
+                return superColumn.getColumns();
+            }
+
+            @Override
+            public HColumn get(int i) {
+                return toHColumn(superColumn.getColumns().get(i));
+            }
+
+            @Override
+            public Serializer getNameSerializer() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public byte[] getNameBytes() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public ByteBuffer getNameByteBuffer() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Serializer getSuperNameSerializer() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Serializer getValueSerializer() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+            
+        }
+    }
+    
+   */
 
     @Override
     public <T> SuperRow<String, String, String, T> getSuperRow(String 
columnFamily, String rowKey,

Added: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Column.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Column.java
    Fri Sep 16 11:04:44 2011
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010, 2011 The Amdatu Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.amdatu.cassandra.test.unit.framework.mock;
+
+import me.prettyprint.cassandra.model.HColumnImpl;
+import me.prettyprint.hector.api.beans.HColumn;
+
+public class Column {
+    private String m_name;
+    private Object m_value;
+    private long m_timestamp;
+
+    public Column(String name, Object value, long timestamp) {
+        m_name = name;
+        m_value = value;
+        m_timestamp = timestamp;
+    }
+
+    public String getName() {
+        return m_name;
+    }
+
+    public Object getValue() {
+        return m_value;
+    }
+
+    public void setValue(Object value) {
+        m_value = value;
+        m_timestamp = System.currentTimeMillis();
+    }
+
+    public long getTimestamp() {
+        return m_timestamp;
+    }
+
+    public <N, V> HColumn<N, V> toHColumn() {
+        N name = (N) m_name;
+        V value = (V) m_value;
+        HColumnImpl<N, V> hcol = new HColumnImpl<N, V>(name, value, 
System.currentTimeMillis());
+        return hcol;
+    }
+}

Modified: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/ColumnFamily.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/ColumnFamily.java
      (original)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/ColumnFamily.java
      Fri Sep 16 11:04:44 2011
@@ -18,8 +18,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import me.prettyprint.hector.api.exceptions.HInvalidRequestException;
+
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition.ColumnType;
+
 /**
- * This class represents an in-memory persistent Cassandra ColumnFamily. A 
ColumnFamily consists 
+ * This class represents an in-memory persistent Cassandra ColumnFamily. A 
ColumnFamily consists
  * of a name and a number of rows, where each row may have 0 or more columns. 
A column consists
  * of a name and a value.
  * 
@@ -28,26 +33,32 @@
 public class ColumnFamily {
     // Name of the column family
     private String m_name;
-    
+    private ColumnFamilyDefinition.ColumnType m_type;
+
     // Rows contained by the column family
     private List<Row> m_rows = new ArrayList<Row>();
-    
-    public ColumnFamily(String name) {
+
+    public ColumnFamily(String name, ColumnFamilyDefinition.ColumnType type) {
         m_name = name;
+        m_type = type;
     }
-    
+
     public String getName() {
         return m_name;
     }
-    
+
+    public ColumnFamilyDefinition.ColumnType getType() {
+        return m_type;
+    }
+
     public void addRow(Row row) {
         m_rows.add(row);
     }
-    
+
     public List<Row> getRows() {
         return m_rows;
     }
-    
+
     public void removeRow(String rowKey) {
         for (Row row : m_rows) {
             if (row.getKey().equals(rowKey)) {
@@ -56,7 +67,7 @@
             }
         }
     }
-    
+
     public Row getRow(String rowKey) {
         for (Row row : m_rows) {
             if (row.getKey().equals(rowKey)) {
@@ -65,72 +76,34 @@
         }
         return null;
     }
-    
-    public List<Column> getColumns(String rowKey) {
-        for (Row row : m_rows) {
-            if (row.getKey().equals(rowKey)) {
-                return row.getColumns();
+
+    public List<SuperColumn> getSuperColumns(String rowKey) {
+        if (m_type == ColumnType.SUPER) {
+            for (Row row : m_rows) {
+                if (row.getKey().equals(rowKey)) {
+                    return row.getSuperColumns();
+                }
             }
+            return null;
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve super columns from a ColumnFamily of type 
standard, retrieve columns instead");
         }
-        return null;
     }
-    
-    public class Row {
-        private String m_key;
-        private List<Column> m_columns = new ArrayList<Column>();
-        
-        public Row(String key) {
-            m_key = key;
-        }
-        
-        public String getKey() {
-            return m_key;
-        }
-        
-        public void addColumn(Column column) {
-            m_columns.add(column);
-        }
-        
-        public List<Column> getColumns() {
-            return m_columns;
-        }
-        
-        public Column getColumn(String name) {
-            for (Column column : m_columns) {
-                if (column.getName().equals(name)) {
-                    return column;
+
+    public List<Column> getColumns(String rowKey) {
+        if (m_type == ColumnType.STANDARD) {
+            for (Row row : m_rows) {
+                if (row.getKey().equals(rowKey)) {
+                    return row.getColumns();
                 }
             }
             return null;
         }
-    }
-    
-    public class Column {
-        private String m_name;
-        private Object m_value;
-        private long m_timestamp;
-        
-        public Column(String name, Object value, long timestamp) {
-            m_name = name;
-            m_value= value;
-            m_timestamp = timestamp;
-        }
-        
-        public String getName() {
-            return m_name;
-        }
-        
-        public Object getValue() {
-            return m_value;
-        }
-        
-        public void setValue(Object value) {
-            m_value = value;
-            m_timestamp = System.currentTimeMillis();
-        }
-        
-        public long getTimestamp() {
-            return m_timestamp;
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve columns from a ColumnFamily of type super, 
retrieve super columns instead");
         }
     }
 }

Modified: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Keyspace.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Keyspace.java
  (original)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Keyspace.java
  Fri Sep 16 11:04:44 2011
@@ -18,6 +18,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+
 /**
  * This class represents an in-memory persistent Cassandra keyspace. It 
consists of a name
  * and a list of ColumnFamily's.
@@ -36,9 +38,9 @@
         return m_name;
     }
     
-    public void addColumnFamily(String name) {
+    public void addColumnFamily(String name, ColumnFamilyDefinition.ColumnType 
type) {
         if (!exists(name)) {
-            m_columnFamilies.add(new ColumnFamily(name));
+            m_columnFamilies.add(new ColumnFamily(name, type));
         }
     }
     

Added: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Row.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/Row.java
       Fri Sep 16 11:04:44 2011
@@ -0,0 +1,95 @@
+package org.amdatu.cassandra.test.unit.framework.mock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import me.prettyprint.hector.api.exceptions.HInvalidRequestException;
+
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition.ColumnType;
+
+public class Row {
+    private ColumnFamily m_columnFamily;
+    private String m_key;
+    private List<Column> m_columns = new ArrayList<Column>();
+    private List<SuperColumn> m_superColumns = new ArrayList<SuperColumn>();
+
+    public Row(ColumnFamily columnFamily, String key) {
+        m_columnFamily = columnFamily;
+        m_key = key;
+    }
+
+    public String getKey() {
+        return m_key;
+    }
+
+    public void addSuperColumn(SuperColumn superColumn) {
+        if (m_columnFamily.getType() == ColumnType.SUPER) {
+            m_superColumns.add(superColumn);
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot append super columns to a row in a ColumnFamily of 
type standard, add columns instead");
+        }
+    }
+
+    public List<SuperColumn> getSuperColumns() {
+        if (m_columnFamily.getType() == ColumnType.SUPER) {
+            return m_superColumns;
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve super columns from a row in a ColumnFamily of 
type standard, retrieve columns instead");
+        }
+    }
+
+    public SuperColumn getSuperColumn(String name) {
+        if (m_columnFamily.getType() == ColumnType.SUPER) {
+            for (SuperColumn column : m_superColumns) {
+                if (column.getName().equals(name)) {
+                    return column;
+                }
+            }
+            return null;
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve super columns from a row in a ColumnFamily of 
type standard, retrieve columns instead");
+        }
+    }
+
+    public void addColumn(Column column) {
+        if (m_columnFamily.getType() == ColumnType.STANDARD) {
+            m_columns.add(column);
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot append columns to a row in a ColumnFamily of type 
super, add super columns instead");
+        }
+    }
+
+    public List<Column> getColumns() {
+        if (m_columnFamily.getType() == ColumnType.STANDARD) {
+            return m_columns;
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve columns from a row in a ColumnFamily of type 
super, retrieve super columns instead");
+        }
+    }
+
+    public Column getColumn(String name) {
+        if (m_columnFamily.getType() == ColumnType.STANDARD) {
+            for (Column column : m_columns) {
+                if (column.getName().equals(name)) {
+                    return column;
+                }
+            }
+            return null;
+        }
+        else {
+            throw new HInvalidRequestException(
+                "Cannot retrieve columns from a row in a ColumnFamily of type 
super, retrieve super columns instead");
+        }
+    }
+
+}

Added: 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/SuperColumn.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-unit/src/main/java/org/amdatu/cassandra/test/unit/framework/mock/SuperColumn.java
       Fri Sep 16 11:04:44 2011
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010, 2011 The Amdatu Foundation
+ * import java.util.ArrayList;
+import java.util.List;
+the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.amdatu.cassandra.test.unit.framework.mock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SuperColumn {
+    private String m_name;
+    private List<Column> m_columns = new ArrayList<Column>();
+
+    public SuperColumn(String name) {
+        m_name = name;
+    }
+
+    public String getName() {
+        return m_name;
+    }
+
+    public void addColumn(Column column) {
+        m_columns.add(column);
+    }
+
+    public List<Column> getColumns() {
+        return m_columns;
+    }
+
+    public Column getColumn(String name) {
+        for (Column column : m_columns) {
+            if (column.getName().equals(name)) {
+                return column;
+            }
+        }
+        return null;
+    }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to