/** * */ package org.gcube.accounting.analytics.persistence.postgresql; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.time.OffsetDateTime; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; 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.analytics.UsageValue; import org.gcube.accounting.analytics.exception.DuplicatedKeyFilterException; import org.gcube.accounting.analytics.exception.KeyException; import org.gcube.accounting.analytics.exception.ValueException; import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQuery; import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord; import org.gcube.accounting.persistence.AccountingPersistenceConfiguration; import org.gcube.documentstore.records.AggregatedRecord; import org.gcube.documentstore.records.RecordUtility; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersistenceBackendQuery { private static final Logger logger = LoggerFactory.getLogger(AccountingPersistenceQueryPostgreSQL.class); public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS Z"; public static final String URL_PROPERTY_KEY = AccountingPersistenceConfiguration.URL_PROPERTY_KEY; public static final String PASSWORD_PROPERTY_KEY = AccountingPersistenceConfiguration.PASSWORD_PROPERTY_KEY; protected AccountingPersistenceBackendQueryConfiguration configuration; protected Map connectionMap; static { // One Record per package is enough RecordUtility.addRecordPackage(ServiceUsageRecord.class.getPackage()); RecordUtility.addRecordPackage(AggregatedServiceUsageRecord.class.getPackage()); Map>> aggregatedRecords = RecordUtility.getAggregatedRecordClassesFound(); for(String typeName : aggregatedRecords.keySet()) { try { Class> clz = aggregatedRecords.get(typeName); UsageRecordToDBMapping.getRecordToDB(clz); } catch (Exception e) { new RuntimeException(e); } } } @Override public void prepareConnection(AccountingPersistenceBackendQueryConfiguration configuration) throws Exception { logger.trace("prepareConnection"); // String url = configuration.getProperty(URL_PROPERTY_KEY); this.configuration = configuration; this.connectionMap = new HashMap<>(); } @Override public SortedMap getTimeSeries(Class> clz, TemporalConstraint temporalConstraint, List filters) throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { // TODO Auto-generated method stub return null; } protected Calendar getCalendar(OffsetDateTime offsetDateTime) { Calendar calendar = Calendar.getInstance(); long epochMillis = offsetDateTime.toInstant().toEpochMilli(); calendar.setTimeInMillis(epochMillis); return calendar; } @Override public SortedMap getNoContextTimeSeries(Class> clz, TemporalConstraint temporalConstraint, List filters) throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { Connection connection = null; Statement statement = connection.createStatement(); SortedMap result = new TreeMap<>(); Query query = new Query(clz); query.setTemporalConstraint(temporalConstraint); query.setFilters(filters); String sql = query.getNoContextTimeSeriesQuery(); List requestedTableField = query.getRequestedTableField(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { OffsetDateTime offsetDateTime = resultSet.getObject(Query.DATE_OF_TIMESERIES_AS_FIELD, OffsetDateTime.class); Calendar calendar = getCalendar(offsetDateTime); } return null; } @Override public SortedMap> getTopValues( Class> clz, TemporalConstraint temporalConstraint, List filters, String topKey, String orderingProperty) throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { // TODO Auto-generated method stub return null; } @Override public SortedSet getNextPossibleValues(Class> clz, TemporalConstraint temporalConstraint, List filters, String key, String orderingProperty) throws DuplicatedKeyFilterException, KeyException, ValueException, Exception { // TODO Auto-generated method stub return null; } @Override public SortedSet getNextPossibleValuesWithMap(Class> clz, TemporalConstraint temporalConstraint, List filters, String key, String orderingProperty) throws Exception { // TODO Auto-generated method stub return null; } @Override public void close() throws Exception { // TODO Auto-generated method stub } @Override public SortedSet getFilterValues(Class> clz, TemporalConstraint temporalConstraint, List filters, String key) throws Exception { // TODO Auto-generated method stub return null; } @Override public SortedSet getFilterValues(Class> clz, TemporalConstraint temporalConstraint, List filters, String key, Integer limit) throws Exception { // TODO Auto-generated method stub return null; } @Override public JSONObject getUsageValue(Class> clz, TemporalConstraint temporalConstraint, Filter applicant) throws Exception { // TODO Auto-generated method stub return null; } @Override public List getUsageValueQuotaTotal(List listUsage) throws Exception { // TODO Auto-generated method stub return null; } @Override public SortedMap> getContextTimeSeries( Class> clz, TemporalConstraint temporalConstraint, List filters, List contexts) throws Exception { // TODO Auto-generated method stub return null; } @Override public String getRecord(String recordId, String type) throws Exception { // TODO Auto-generated method stub return null; } @Override public SortedSet getSpaceProvidersIds() throws Exception { // TODO Auto-generated method stub return null; } @Override public SortedMap> getSpaceTimeSeries(Class> clz, TemporalConstraint temporalConstraint, List filters, List providersId) throws Exception { // TODO Auto-generated method stub return null; } @Override public boolean isConnectionActive() throws Exception { // TODO Auto-generated method stub return false; } }