From 63bc734999a0380e1a1d6bd344ff11d09b7c93ee Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 8 Jul 2015 13:24:32 +0000 Subject: [PATCH] refs #166: Create accouting-analytics library https://support.d4science.org/issues/166 Implementing Library git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-analytics@117085 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 1 + .../gcube/accounting/analytics/Filter.java | 12 +++ .../org/gcube/accounting/analytics/Info.java | 20 +++++ .../analytics/ResourceRecordQuery.java | 27 +++++++ .../analytics/ResourceRecordQueryFactory.java | 78 +++++++++++++++++++ .../analytics/TemporalConstraint.java | 12 +++ .../exception/NoAvailableScopeException.java | 32 ++++++++ ...UsableAccountingPersistenceQueryFound.java | 32 ++++++++ .../AccountingPersistenceQuery.java | 12 +++ 9 files changed, 226 insertions(+) create mode 100644 src/main/java/org/gcube/accounting/analytics/Filter.java create mode 100644 src/main/java/org/gcube/accounting/analytics/Info.java create mode 100644 src/main/java/org/gcube/accounting/analytics/ResourceRecordQuery.java create mode 100644 src/main/java/org/gcube/accounting/analytics/ResourceRecordQueryFactory.java create mode 100644 src/main/java/org/gcube/accounting/analytics/TemporalConstraint.java create mode 100644 src/main/java/org/gcube/accounting/analytics/exception/NoAvailableScopeException.java create mode 100644 src/main/java/org/gcube/accounting/analytics/exception/NoUsableAccountingPersistenceQueryFound.java create mode 100644 src/main/java/org/gcube/accounting/analytics/persistence/AccountingPersistenceQuery.java diff --git a/pom.xml b/pom.xml index 4e02aa3..83da09c 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ + org.slf4j slf4j-api diff --git a/src/main/java/org/gcube/accounting/analytics/Filter.java b/src/main/java/org/gcube/accounting/analytics/Filter.java new file mode 100644 index 0000000..bfdf751 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/Filter.java @@ -0,0 +1,12 @@ +/** + * + */ +package org.gcube.accounting.analytics; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class Filter { + +} diff --git a/src/main/java/org/gcube/accounting/analytics/Info.java b/src/main/java/org/gcube/accounting/analytics/Info.java new file mode 100644 index 0000000..be362d3 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/Info.java @@ -0,0 +1,20 @@ +/** + * + */ +package org.gcube.accounting.analytics; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public interface Info { + + public long getData(); + + public Number getInfo(); + + public String getUnity(); // Number of Occurrences, Kb, + + public String getUnityDescription(); // Total Kb accumulated, Single Operation Kb + +} diff --git a/src/main/java/org/gcube/accounting/analytics/ResourceRecordQuery.java b/src/main/java/org/gcube/accounting/analytics/ResourceRecordQuery.java new file mode 100644 index 0000000..aeb4f29 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/ResourceRecordQuery.java @@ -0,0 +1,27 @@ +/** + * + */ +package org.gcube.accounting.analytics; + +import java.util.List; + +import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery; +import org.gcube.accounting.datamodel.UsageRecord; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + */ +public class ResourceRecordQuery { + + protected AccountingPersistenceQuery accountingPersistenceQuery; + + protected ResourceRecordQuery(AccountingPersistenceQuery accountingPersistenceQuery){ + this.accountingPersistenceQuery = accountingPersistenceQuery; + } + + public List getInfo(Class usageRecordType, + TemporalConstraint temporalConstraint, List filters){ + return null; + } + +} diff --git a/src/main/java/org/gcube/accounting/analytics/ResourceRecordQueryFactory.java b/src/main/java/org/gcube/accounting/analytics/ResourceRecordQueryFactory.java new file mode 100644 index 0000000..66ac5fe --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/ResourceRecordQueryFactory.java @@ -0,0 +1,78 @@ +/** + * + */ +package org.gcube.accounting.analytics; + +import java.util.HashMap; +import java.util.Map; +import java.util.ServiceLoader; + +import org.gcube.accounting.analytics.exception.NoAvailableScopeException; +import org.gcube.accounting.analytics.exception.NoUsableAccountingPersistenceQueryFound; +import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery; +import org.gcube.common.scope.api.ScopeProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + */ +public abstract class ResourceRecordQueryFactory { + + private static Logger logger = LoggerFactory.getLogger(ResourceRecordQueryFactory.class); + + private static Map resourceRecordQueries; + + static { + resourceRecordQueries = new HashMap(); + } + + public synchronized static ResourceRecordQuery getInstance() throws NoAvailableScopeException, NoUsableAccountingPersistenceQueryFound { + String scope = ScopeProvider.instance.get(); + if(scope==null){ + new NoAvailableScopeException(); + } + + ResourceRecordQuery resourceRecordQuery = resourceRecordQueries.get(scope); + if(resourceRecordQuery==null){ + + try { + ServiceLoader serviceLoader = ServiceLoader.load(AccountingPersistenceQuery.class); + for (AccountingPersistenceQuery found : serviceLoader) { + try { + String foundClassName = found.getClass().getSimpleName(); + logger.debug("Testing {}", foundClassName); + + //AccountingPersistenceQueryConfiguration configuration = AccountingPersistenceQueryConfiguration.getConfiguration(foundClassName); + //found.prepareConnection(configuration); + + resourceRecordQuery = new ResourceRecordQuery(found); + + break; + } catch (Exception e) { + logger.debug(String.format("%s not initialized correctly. It will not be used", found.getClass().getSimpleName())); + } + } + } catch(Exception e){ + throw new NoUsableAccountingPersistenceQueryFound(); + } + + if(resourceRecordQuery==null){ + throw new NoUsableAccountingPersistenceQueryFound(); + } + + resourceRecordQueries.put(scope, resourceRecordQuery); + } + + return resourceRecordQuery; + } + + + protected ResourceRecordQueryFactory(){ + + } + + + + +} diff --git a/src/main/java/org/gcube/accounting/analytics/TemporalConstraint.java b/src/main/java/org/gcube/accounting/analytics/TemporalConstraint.java new file mode 100644 index 0000000..14df9a7 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/TemporalConstraint.java @@ -0,0 +1,12 @@ +/** + * + */ +package org.gcube.accounting.analytics; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public interface TemporalConstraint { + +} diff --git a/src/main/java/org/gcube/accounting/analytics/exception/NoAvailableScopeException.java b/src/main/java/org/gcube/accounting/analytics/exception/NoAvailableScopeException.java new file mode 100644 index 0000000..129344a --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/exception/NoAvailableScopeException.java @@ -0,0 +1,32 @@ +/** + * + */ +package org.gcube.accounting.analytics.exception; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class NoAvailableScopeException extends Exception { + + /** + * Generated serial Version UID + */ + private static final long serialVersionUID = -327144230654860518L; + + public NoAvailableScopeException() { + super(); + } + + public NoAvailableScopeException(String message) { + super(message); + } + + public NoAvailableScopeException(Throwable cause) { + super(cause); + } + + public NoAvailableScopeException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/gcube/accounting/analytics/exception/NoUsableAccountingPersistenceQueryFound.java b/src/main/java/org/gcube/accounting/analytics/exception/NoUsableAccountingPersistenceQueryFound.java new file mode 100644 index 0000000..1a37fb6 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/exception/NoUsableAccountingPersistenceQueryFound.java @@ -0,0 +1,32 @@ +/** + * + */ +package org.gcube.accounting.analytics.exception; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class NoUsableAccountingPersistenceQueryFound extends Exception { + + /** + * Generated serial Version UID + */ + private static final long serialVersionUID = -327144230654860518L; + + public NoUsableAccountingPersistenceQueryFound() { + super(); + } + + public NoUsableAccountingPersistenceQueryFound(String message) { + super(message); + } + + public NoUsableAccountingPersistenceQueryFound(Throwable cause) { + super(cause); + } + + public NoUsableAccountingPersistenceQueryFound(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/AccountingPersistenceQuery.java b/src/main/java/org/gcube/accounting/analytics/persistence/AccountingPersistenceQuery.java new file mode 100644 index 0000000..2921ca0 --- /dev/null +++ b/src/main/java/org/gcube/accounting/analytics/persistence/AccountingPersistenceQuery.java @@ -0,0 +1,12 @@ +/** + * + */ +package org.gcube.accounting.analytics.persistence; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class AccountingPersistenceQuery { + +}