From f0a4588f162cda34b2d0ae141ae1715dc5d379e7 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 19 Jun 2015 15:51:11 +0000 Subject: [PATCH] fixes #275: Create CouchDB connector for persistence accounting as separated project https://support.d4science.org/issues/275 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@115445 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 5 + .settings/org.eclipse.core.resources.prefs | 1 + .settings/org.eclipse.wst.validation.prefs | 2 + pom.xml | 16 --- .../persistence/CouchDBPersistence.java | 116 ------------------ .../persistence/MongoDBPersistence.java | 17 --- .../accounting/persistence/Persistence.java | 11 +- ...geRecordTest.java => UsageRecordTest.java} | 2 +- .../persistence/CouchDBPersistenceTest.java | 33 ----- 9 files changed, 13 insertions(+), 190 deletions(-) create mode 100644 .settings/org.eclipse.wst.validation.prefs delete mode 100644 src/main/java/org/gcube/accounting/persistence/CouchDBPersistence.java delete mode 100644 src/main/java/org/gcube/accounting/persistence/MongoDBPersistence.java rename src/test/java/org/gcube/accounting/datamodel/{RawUsageRecordTest.java => UsageRecordTest.java} (98%) delete mode 100644 src/test/java/org/gcube/accounting/datamodel/persistence/CouchDBPersistenceTest.java diff --git a/.classpath b/.classpath index a673149..4132584 100644 --- a/.classpath +++ b/.classpath @@ -23,5 +23,10 @@ + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index f9fe345..cdfe4f1 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 encoding/=UTF-8 diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/pom.xml b/pom.xml index 38dc2d6..b1bbad1 100644 --- a/pom.xml +++ b/pom.xml @@ -45,21 +45,6 @@ slf4j-api provided - - - - org.ektorp - org.ektorp - 1.3.0 - jar - - - org.codehaus.jackson - jackson-core-asl - 1.9.7 - jar - - junit @@ -73,7 +58,6 @@ 1.0.13 test - \ No newline at end of file diff --git a/src/main/java/org/gcube/accounting/persistence/CouchDBPersistence.java b/src/main/java/org/gcube/accounting/persistence/CouchDBPersistence.java deleted file mode 100644 index 46d2920..0000000 --- a/src/main/java/org/gcube/accounting/persistence/CouchDBPersistence.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * - */ -package org.gcube.accounting.persistence; - -import java.io.Serializable; -import java.util.Map; - -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; -import org.ektorp.CouchDbConnector; -import org.ektorp.CouchDbInstance; -import org.ektorp.ViewQuery; -import org.ektorp.ViewResult; -import org.ektorp.http.HttpClient; -import org.ektorp.http.StdHttpClient; -import org.ektorp.http.StdHttpClient.Builder; -import org.ektorp.impl.StdCouchDbConnector; -import org.ektorp.impl.StdCouchDbInstance; -import org.gcube.accounting.datamodel.BasicUsageRecord; -import org.gcube.accounting.datamodel.UsageRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ - * - */ -public class CouchDBPersistence extends Persistence { - - private static final Logger logger = LoggerFactory.getLogger(CouchDBPersistence.class); - - protected CouchDbInstance couchDbInstance; - protected CouchDbConnector couchDbConnector; - - protected final static String HOST = "HOST"; - protected final static String DEFAULT_HOST = "localhost"; - protected final static String PORT = "PORT"; - protected final static String USERNAME = "USERNAME"; - protected final static String PASSWORD = "PASSWORD"; - - protected String host = "localhost"; - protected int port = 5984; - protected String username = ""; - protected String password = ""; - protected String dbName = "accounting"; - - protected CouchDBPersistence() throws Exception { - super(); - } - - protected HttpClient initHttpClient(String uri, int port, String username, String password){ - Builder builder = new StdHttpClient.Builder().host(uri).port(port); - if(username!=null && username.compareTo("")!=0 && - password!=null && password.compareTo("")!=0){ - builder.username(username).password(password); - } - HttpClient httpClient = builder.build(); - return httpClient; - } - - protected ViewResult query(ViewQuery query){ - ViewResult result = couchDbConnector.queryView(query); - return result; - } - - - @Override - public void close() throws Exception { - couchDbConnector.getConnection().shutdown(); - } - - /** - * {@inheritDoc} - */ - @Override - protected void prepareConnection() throws Exception { - logger.debug("Preparing Connection for {}", this.getClass().getSimpleName()); - HttpClient httpClient = initHttpClient(host, port, username, password); - couchDbInstance = new StdCouchDbInstance(httpClient); - couchDbConnector = new StdCouchDbConnector(dbName, couchDbInstance); - couchDbConnector.createDatabaseIfNotExists(); // TODO remove this - } - - protected void createItem(JsonNode node, String id) throws Exception { - if(id!=null && id.compareTo("")!=0){ - couchDbConnector.create(id, node); - }else{ - couchDbConnector.create(node); - } - } - - /** - * {@inheritDoc} - */ - @Override - protected void reallyAccount(UsageRecord usageRecord) throws Exception { - JsonNode node = usageRecordToJsonNode(usageRecord); - createItem(node, usageRecord.getId()); - } - - public static JsonNode usageRecordToJsonNode(UsageRecord usageRecord) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - JsonNode node = mapper.valueToTree(usageRecord.getResourceProperties()); - return node; - } - - public static UsageRecord jsonNodeToUsageRecord(JsonNode jsonNode) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - @SuppressWarnings("unchecked") - Map result = mapper.convertValue(jsonNode, Map.class); - UsageRecord usageRecord = BasicUsageRecord.getUsageRecord(result); - return usageRecord; - } - -} diff --git a/src/main/java/org/gcube/accounting/persistence/MongoDBPersistence.java b/src/main/java/org/gcube/accounting/persistence/MongoDBPersistence.java deleted file mode 100644 index 20928a5..0000000 --- a/src/main/java/org/gcube/accounting/persistence/MongoDBPersistence.java +++ /dev/null @@ -1,17 +0,0 @@ -/** - * - */ -package org.gcube.accounting.persistence; - -/** - * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ - * - */ -public class MongoDBPersistence { - - protected MongoDBPersistence(){ - super(); - } - - -} diff --git a/src/main/java/org/gcube/accounting/persistence/Persistence.java b/src/main/java/org/gcube/accounting/persistence/Persistence.java index 10f39b8..43f6d1c 100644 --- a/src/main/java/org/gcube/accounting/persistence/Persistence.java +++ b/src/main/java/org/gcube/accounting/persistence/Persistence.java @@ -4,6 +4,7 @@ package org.gcube.accounting.persistence; import java.io.File; +import java.util.ServiceLoader; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -54,7 +55,6 @@ public abstract class Persistence { protected static void init() { setFallbackLocation(null); try { - /* ServiceLoader serviceLoader = ServiceLoader.load(Persistence.class); for (Persistence foundPersistence : serviceLoader) { if(foundPersistence.getClass().isInstance(FallbackPersistence.class)){ @@ -66,19 +66,16 @@ public abstract class Persistence { persistence = foundPersistence; break; } catch (Exception e) { - logger.debug(String.format("%s not initialized correctly. It will not be used", persistence.getClass().getSimpleName())); + logger.debug(String.format("%s not initialized correctly. It will not be used", foundPersistence.getClass().getSimpleName())); } } if(persistence==null){ persistence = fallback; } - */ - persistence = new CouchDBPersistence(); - persistence.prepareConnection(); persistence.account(createTestUsageRecord()); } catch(Exception e){ - logger.error("Unable to instance {}. Using fallback as default", - CouchDBPersistence.class.getSimpleName()); + logger.error("Unable to instance a Persistence Implementation. Using fallback as default", + e.getCause()); persistence = fallback; } } diff --git a/src/test/java/org/gcube/accounting/datamodel/RawUsageRecordTest.java b/src/test/java/org/gcube/accounting/datamodel/UsageRecordTest.java similarity index 98% rename from src/test/java/org/gcube/accounting/datamodel/RawUsageRecordTest.java rename to src/test/java/org/gcube/accounting/datamodel/UsageRecordTest.java index 99fa847..8928f4c 100644 --- a/src/test/java/org/gcube/accounting/datamodel/RawUsageRecordTest.java +++ b/src/test/java/org/gcube/accounting/datamodel/UsageRecordTest.java @@ -11,7 +11,7 @@ import org.junit.Test; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class RawUsageRecordTest { +public class UsageRecordTest { @Test public void testCompareToSameObject(){ diff --git a/src/test/java/org/gcube/accounting/datamodel/persistence/CouchDBPersistenceTest.java b/src/test/java/org/gcube/accounting/datamodel/persistence/CouchDBPersistenceTest.java deleted file mode 100644 index 2769b0c..0000000 --- a/src/test/java/org/gcube/accounting/datamodel/persistence/CouchDBPersistenceTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * - */ -package org.gcube.accounting.datamodel.persistence; - -import org.codehaus.jackson.JsonNode; -import org.gcube.accounting.datamodel.UsageRecord; -import org.gcube.accounting.persistence.CouchDBPersistence; -import org.gcube.accounting.persistence.Persistence; -import org.junit.Assert; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ - * - */ -public class CouchDBPersistenceTest { - - private static final Logger logger = LoggerFactory.getLogger(CouchDBPersistenceTest.class); - - @Test - public void TestJsonNodeUsageRecordConversions() throws Exception { - UsageRecord usageRecord = Persistence.createTestUsageRecord(); - logger.debug("UsageRecord : {}", usageRecord.toString()); - JsonNode node = CouchDBPersistence.usageRecordToJsonNode(usageRecord); - logger.debug("Node : {}", node.toString()); - UsageRecord ur = CouchDBPersistence.jsonNodeToUsageRecord(node); - Assert.assertEquals(0, usageRecord.compareTo(ur)); - Assert.assertEquals(0, ur.compareTo(usageRecord)); - } -}