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 { + +}