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