Author: [email protected]
Date: Fri May 20 10:16:49 2011
New Revision: 1148

Log:


Added:
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/pom.xml
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/osgi/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/osgi/Activator.java
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/TokenColumnFamilyProvider.java
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/
   sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/
   
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java

Added: sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/pom.xml
==============================================================================
--- (empty file)
+++ sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/pom.xml       Fri May 
20 10:16:49 2011
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.amdatu.cassandra</groupId>
+    <artifactId>org.amdatu.cassandra</artifactId>
+    <version>0.2.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>org.amdatu.cassandra.store.token</artifactId>
+  <packaging>bundle</packaging>
+  <name>Amdatu Cassandra - Token Store</name>
+  <description>Provides an implementation of a Token Store</description>
+
+  <properties>
+    <amdatu.auth.version>0.2.0-SNAPSHOT</amdatu.auth.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.listener</artifactId>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.application</artifactId>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.persistencemanager</artifactId>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.core</groupId>
+      <artifactId>org.amdatu.core.tenant</artifactId>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.auth</groupId>
+      <artifactId>org.amdatu.auth.tokenprovider</artifactId>
+      <version>${amdatu.auth.version}</version>
+      <type>bundle</type>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+      <version>20090211</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.cassandra</groupId>
+      <artifactId>org.amdatu.cassandra.test.unit</artifactId>
+      <version>${project.version}</version>
+      <type>jar</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-source-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            
<Bundle-Activator>org.amdatu.cassandra.store.token.osgi.Activator</Bundle-Activator>
+            
<Bundle-SymbolicName>org.amdatu.cassandra.store.token</Bundle-SymbolicName>
+            <Export-Package>org.amdatu.cassandra.store.token</Export-Package>
+            <Embed-Dependency>*;scope=compile</Embed-Dependency>
+            <Embed-Transitive>true</Embed-Transitive>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/osgi/Activator.java
==============================================================================
--- (empty file)
+++ 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/osgi/Activator.java
    Fri May 20 10:16:49 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.store.token.osgi;
+
+import org.amdatu.authentication.tokenprovider.TokenStorageProvider;
+import org.amdatu.cassandra.listener.ColumnFamilyAvailable;
+import org.amdatu.cassandra.listener.ColumnFamilyProvider;
+import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
+import 
org.amdatu.cassandra.store.token.service.CassandraTokenStorageProviderImpl;
+import org.amdatu.cassandra.store.token.service.TokenColumnFamilyProvider;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.log.LogService;
+
+/**
+ * This is the bundle activator for the Cassandra token store bundle.
+ */
+public class Activator extends DependencyActivatorBase {
+
+    public void init(final BundleContext context, final DependencyManager 
manager) {
+        // First define a service that provides the Service consumer 
ColumnFamily we need
+        manager.add(createComponent()
+            .setInterface(new String[]{ColumnFamilyProvider.class.getName()}, 
null)
+            .setImplementation(TokenColumnFamilyProvider.class));
+
+        // Create and register the Cassandra Service consumer storage provider
+        String keyspaceFilter = "(" + 
CassandraPersistenceManager.KEYSPACE_AWARE_KEY + "="
+        + CassandraPersistenceManager.DEFAULT_KEYSPACE + ")";
+        String consumerCFFilter =  "(&" + keyspaceFilter + "(" + 
ColumnFamilyAvailable.FILTER_NAME
+        + "=" + TokenColumnFamilyProvider.CF_TOKEN + "))";
+        manager.add(
+            createComponent()
+            .setImplementation(CassandraTokenStorageProviderImpl.class)
+            .setInterface(TokenStorageProvider.class.getName(), null)
+            
.add(createServiceDependency().setService(LogService.class).setRequired(true))
+            
.add(createServiceDependency().setService(CassandraPersistenceManager.class, 
keyspaceFilter).setRequired(true))
+            
.add(createServiceDependency().setService(ColumnFamilyAvailable.class, 
consumerCFFilter).setRequired(true)));
+    }
+
+    @Override
+    public void destroy(final BundleContext context, final DependencyManager 
manager) throws Exception {
+    }
+}

Added: 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
==============================================================================
--- (empty file)
+++ 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/CassandraTokenStorageProviderImpl.java
 Fri May 20 10:16:49 2011
@@ -0,0 +1,78 @@
+/*
+ * 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.store.token.service;
+
+import static 
org.amdatu.cassandra.store.token.service.TokenColumnFamilyProvider.CF_TOKEN;
+
+import org.amdatu.authentication.tokenprovider.TokenStorageProvider;
+import org.amdatu.cassandra.persistencemanager.CassandraException;
+import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
+import org.osgi.service.log.LogService;
+
+/**
+ * This class implements a Cassandra based Token storage provider.
+ * 
+ * @author ivol
+ */
+public class CassandraTokenStorageProviderImpl implements TokenStorageProvider 
{
+    // Service dependencies, injected by the dependency manager
+    private volatile CassandraPersistenceManager m_pm;
+    private volatile LogService m_logService;
+
+    // Column names
+    private static final String C_TOKEN = "token";
+
+    /**
+     * Constructor used by the Unit test.
+     * 
+     * @param pm
+     * @param logService
+     */
+    public CassandraTokenStorageProviderImpl(CassandraPersistenceManager pm, 
LogService logService) {
+        m_pm = pm;
+        m_logService = logService;
+    }
+
+    public void addToken(final String token) {
+        try {
+            // We use the token also as row key
+            m_pm.setValue(CF_TOKEN, token, null, C_TOKEN, token);
+        }
+        catch (CassandraException e) {
+            m_logService.log(LogService.LOG_ERROR, "Could not store token '" + 
token + "'", e);
+        }
+    }
+
+    public boolean hasToken(final String token) {
+        try {
+            String value = m_pm.getValue(CF_TOKEN, token, null, C_TOKEN, 
String.class);
+            return value != null && !value.isEmpty();
+        }
+        catch (CassandraException e) {
+            m_logService.log(LogService.LOG_ERROR, "Could not retrieve token 
'" + token + "'", e);
+        }
+        return false;
+    }
+
+    public void removeToken(final String token) {
+        try {
+            m_pm.deleteRow(CF_TOKEN, C_TOKEN);
+        }
+        catch (CassandraException e) {
+            m_logService.log(LogService.LOG_ERROR, "Could not remove token '" 
+ token + "'", e);
+        }
+    }
+}

Added: 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/TokenColumnFamilyProvider.java
==============================================================================
--- (empty file)
+++ 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/main/java/org/amdatu/cassandra/store/token/service/TokenColumnFamilyProvider.java
 Fri May 20 10:16:49 2011
@@ -0,0 +1,40 @@
+/*
+ * 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.store.token.service;
+
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition.ColumnType;
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition.CompareType;
+import org.amdatu.cassandra.listener.ColumnFamilyProvider;
+import org.amdatu.cassandra.persistencemanager.CassandraPersistenceManager;
+
+public class TokenColumnFamilyProvider implements ColumnFamilyProvider {
+    /**
+     * ColumnFamily that stores the tokens.
+     */
+    public static final String CF_TOKEN = "AmdatuToken";
+    
+    @Override
+    public ColumnFamilyDefinition[] getColumnFamilies() {
+        return new ColumnFamilyDefinition[] {
+            new ColumnFamilyDefinition(
+                CF_TOKEN,
+                    new String[] 
{CassandraPersistenceManager.DEFAULT_KEYSPACE},
+                    ColumnType.STANDARD,
+                    CompareType.BYTESTYPE,
+                    CompareType.BYTESTYPE)};
+    }
+}

Added: 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java
==============================================================================
--- (empty file)
+++ 
sandbox/ivol/AMDATUCASSANDRA-42/cassandra-store-token/src/test/java/org/amdatu/cassandra/test/unit/CassandraTokenStoreTest.java
     Fri May 20 10:16:49 2011
@@ -0,0 +1,47 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.cassandra.test.unit;
+
+import org.amdatu.cassandra.listener.ColumnFamilyDefinition;
+import 
org.amdatu.cassandra.store.token.service.CassandraTokenStorageProviderImpl;
+import org.amdatu.cassandra.store.token.service.TokenColumnFamilyProvider;
+import 
org.amdatu.cassandra.test.unit.framework.mock.CassandraPersistenceManagerMock;
+import org.amdatu.cassandra.test.unit.framework.mock.LogServiceMock;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CassandraTokenStoreTest {
+    @Test
+    public void test() throws Exception {
+     // Create the mock objects
+        LogServiceMock logService = new LogServiceMock();
+        CassandraPersistenceManagerMock pm = new 
CassandraPersistenceManagerMock("Default");
+        ColumnFamilyDefinition[] colDefs = new 
TokenColumnFamilyProvider().getColumnFamilies();
+        pm.addColumnFamily(colDefs);
+
+        // And the store under test itself
+        CassandraTokenStorageProviderImpl tokenStore = new 
CassandraTokenStorageProviderImpl(pm, logService);
+        
+        // OK, I agree, this will not be the most complex unit test...
+        String token = "lwhfsbfgkl!@#$%^&*()~\\ \"[]{}0";
+        Assert.assertFalse(tokenStore.hasToken(token));
+        tokenStore.addToken(token);
+        Assert.assertTrue(tokenStore.hasToken(token));
+        tokenStore.removeToken(token);
+        Assert.assertFalse(tokenStore.hasToken(token));
+    }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to