From 2efd3e3d095c84a2c5eda073415da3cf381e1376 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Mon, 22 Mar 2021 19:08:31 +0100 Subject: [PATCH] Implementing library --- .../AccountingPersistenceQueryPostgreSQL.java | 33 +++++++++++++++---- .../persistence/postgresql/Query.java | 23 ++++++++++--- .../persistence/postgresql/QueryTest.java | 2 +- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQL.java b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQL.java index 8f1e508..b24fcdf 100644 --- a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQL.java +++ b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/AccountingPersistenceQueryPostgreSQL.java @@ -30,6 +30,7 @@ import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQu import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration; import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; +import org.gcube.accounting.datamodel.aggregation.AggregatedStorageStatusRecord; import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord; import org.gcube.accounting.persistence.AccountingPersistenceConfiguration; import org.gcube.accounting.utility.postgresql.RecordToDBConnection; @@ -196,7 +197,7 @@ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersisten query.setTemporalConstraint(temporalConstraint); query.setFilters(filters); query.setContexts(contexts); - query.setFieldOfRequesteValues(key); + query.setTableFieldToRequest(key); query.setOrderByField(orderingProperty); query.setLimit(limit); @@ -301,6 +302,31 @@ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersisten } + @Override + public SortedSet getSpaceProvidersIds() throws Exception { + Class> aggregatedRecordClass = AggregatedStorageStatusRecord.class; + Connection connection = getConnection(aggregatedRecordClass); + try { + Statement statement = connection.createStatement(); + + Query query = new Query(aggregatedRecordClass); + query.setTableFieldToRequest(AggregatedStorageStatusRecord.PROVIDER_ID); + String sql = query.getDinstinctValuesQuery(); + + SortedSet providersIds = new TreeSet<>(); + ResultSet resultSet = statement.executeQuery(sql); + + while (resultSet.next()) { + String id = resultSet.getString(1); + providersIds.add(id); + } + + return providersIds; + }finally { + connection.close(); + } + } + @Override public List getUsageValueQuotaTotal(List listUsage) throws Exception { return null; @@ -312,11 +338,6 @@ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersisten return null; } - @Override - public SortedSet getSpaceProvidersIds() throws Exception { - return null; - } - @Override public void close() throws Exception { // OK diff --git a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java index 6287126..4213750 100644 --- a/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java +++ b/src/main/java/org/gcube/accounting/analytics/persistence/postgresql/Query.java @@ -31,7 +31,7 @@ public class Query extends PostgreSQLQuery { protected List filters; protected Set contexts; - private String fieldOfRequesteValues; + private String tableFieldToRequest; private String orderByField; private Integer limit; @@ -58,8 +58,8 @@ public class Query extends PostgreSQLQuery { this.contexts = contexts; } - public void setFieldOfRequesteValues(String fieldOfRequesteValues) { - this.fieldOfRequesteValues = fieldOfRequesteValues; + public void setTableFieldToRequest(String tableFieldToRequest) { + this.tableFieldToRequest = tableFieldToRequest; } public void setOrderByField(String orderByField) { @@ -234,7 +234,7 @@ public class Query extends PostgreSQLQuery { protected void addGroupAndOrderByForOrderByField() { stringBuffer.append(" GROUP BY "); - String dbField = getTableField(fieldOfRequesteValues); + String dbField = getTableField(tableFieldToRequest); stringBuffer.append(dbField); stringBuffer.append(" ORDER BY "); stringBuffer.append(orderByField); @@ -251,7 +251,7 @@ public class Query extends PostgreSQLQuery { } protected void addRequestedField() { - String dbField = getTableField(fieldOfRequesteValues); + String dbField = getTableField(tableFieldToRequest); stringBuffer.append(dbField); requestedTableField.add(dbField); stringBuffer.append(", SUM("); @@ -315,5 +315,18 @@ public class Query extends PostgreSQLQuery { appendString(recordId); return stringBuffer.toString(); } + + public String getDinstinctValuesQuery() { + String dbField = getTableField(tableFieldToRequest); + requestedTableField.add(dbField); + + newQuery(); + stringBuffer.append("DISTINCT "); + stringBuffer.append(dbField); + stringBuffer.append(" FROM "); + stringBuffer.append(recordToDBFields.getTableName()); + + return stringBuffer.toString(); + } } diff --git a/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/QueryTest.java b/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/QueryTest.java index 2bcbea6..e68bd3c 100644 --- a/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/QueryTest.java +++ b/src/test/java/org/gcube/accounting/analytics/persistence/postgresql/QueryTest.java @@ -81,7 +81,7 @@ public class QueryTest extends ContextTest { query.setTemporalConstraint(temporalConstraint); query.setFilters(filters); query.setContexts(contexts); - query.setFieldOfRequesteValues(ServiceUsageRecord.CALLED_METHOD); + query.setTableFieldToRequest(ServiceUsageRecord.CALLED_METHOD); query.setOrderByField(AccountingPersistenceQuery.getDefaultOrderingProperties(AggregatedServiceUsageRecord.class)); ret = query.getNextPossibleValueQuery(); logger.debug(ret);