/** * */ package org.gcube.accounting.analytics.persistence; import java.util.Calendar; import java.util.List; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeSet; import org.gcube.accounting.analytics.Filter; import org.gcube.accounting.analytics.Info; import org.gcube.accounting.analytics.NumberedFilter; import org.gcube.accounting.analytics.TemporalConstraint; import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedStorageUsageRecord; import org.gcube.documentstore.records.AggregatedRecord; import org.gcube.documentstore.records.Record; /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ public class AccountingPersistenceQuery { private static final AccountingPersistenceQuery accountingPersistenceQuery; private AccountingPersistenceQuery() { } static { accountingPersistenceQuery = new AccountingPersistenceQuery(); } protected static synchronized AccountingPersistenceQuery getInstance() { return accountingPersistenceQuery; } public static SortedSet getQuerableKeys( @SuppressWarnings("rawtypes") AggregatedRecord instance) throws Exception { SortedSet properties = new TreeSet<>( instance.getRequiredFields()); properties.removeAll(instance.getAggregatedFields()); properties.removeAll(instance.getComputedFields()); properties.remove(Record.ID); properties.remove(Record.CREATION_TIME); properties.remove(Record.RECORD_TYPE); properties.remove(UsageRecord.SCOPE); return properties; } public static SortedSet getQuerableKeys( Class> aggregatedRecordClass) throws Exception { AggregatedRecord instance = aggregatedRecordClass.newInstance(); return getQuerableKeys(instance); } public SortedMap getTimeSeries( Class> aggregatedRecordClass, TemporalConstraint temporalConstraint, List filters) throws Exception { return AccountingPersistenceBackendQueryFactory.getInstance() .getTimeSeries(aggregatedRecordClass, temporalConstraint, filters); } public static String getDefaultOrderingProperties(Class> recordClass){ if(recordClass.isAssignableFrom(AggregatedStorageUsageRecord.class)){ return AggregatedStorageUsageRecord.DATA_VOLUME; } return AggregatedRecord.OPERATION_COUNT; } public static SortedMap> getTopValues( Class> aggregatedRecordClass, TemporalConstraint temporalConstraint, List filters) throws Exception { return AccountingPersistenceBackendQueryFactory.getInstance() .getTopValues(aggregatedRecordClass, temporalConstraint, filters); } public static SortedSet getNextPossibleValues( Class> aggregatedRecordClass, TemporalConstraint temporalConstraint, List filters) throws Exception { return AccountingPersistenceBackendQueryFactory.getInstance() .getNextPossibleValues(aggregatedRecordClass, temporalConstraint, filters); } /** * Close the connection to persistence * * @throws Exception * if the close fails */ public void close() throws Exception { AccountingPersistenceBackendQueryFactory.getInstance().close(); } }