Implemented persistence

This commit is contained in:
Luca Frosini 2021-03-22 18:08:35 +01:00
parent a6455ab4a9
commit 68738aca6d
4 changed files with 78 additions and 7 deletions

View File

@ -3,6 +3,7 @@
*/ */
package org.gcube.accounting.analytics.persistence.postgresql; package org.gcube.accounting.analytics.persistence.postgresql;
import java.io.Serializable;
import java.sql.Connection; import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Statement; import java.sql.Statement;
@ -263,7 +264,46 @@ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersisten
@Override @Override
public Record getRecord(String recordId, String type) throws Exception { public Record getRecord(String recordId, String type) throws Exception {
return null; Class<? extends AggregatedRecord<?, ?>> aggregatedRecordClass = RecordUtility.getAggregatedRecordClass(type);
Connection connection = getConnection(aggregatedRecordClass);
try {
Statement statement = connection.createStatement();
Query query = new Query(aggregatedRecordClass);
query.setRecordId("fa573711-ceb6-44ba-9c83-bd47e0915b80");
String sql = query.getRecordQuery();
RecordToDBFields recordToDBMapper = query.getRecordToDBMapper();
ResultSet resultSet = statement.executeQuery(sql);
resultSet.next();
AggregatedRecord<?, ?> instance = aggregatedRecordClass.newInstance();
Set<String> requiredFields = instance.getRequiredFields();
for(String recordField : requiredFields) {
String tableField = recordToDBMapper.getTableField(recordField);
Serializable serializable;
switch (recordField) {
case AggregatedRecord.START_TIME: case AggregatedRecord.END_TIME: case AggregatedRecord.CREATION_TIME:
OffsetDateTime offsetDateTime = resultSet.getObject(tableField, OffsetDateTime.class);
Calendar calendar = getCalendar(offsetDateTime);
serializable = calendar.getTimeInMillis();
break;
default:
serializable = resultSet.getObject(tableField).toString();
break;
}
instance.setResourceProperty(recordField, serializable);
}
return instance;
}finally {
connection.close();
}
} }
@Override @Override

View File

@ -34,7 +34,8 @@ public class Query extends PostgreSQLQuery {
private String fieldOfRequesteValues; private String fieldOfRequesteValues;
private String orderByField; private String orderByField;
private Integer limit; private Integer limit;
private String recordId;
public Query(Class<? extends AggregatedRecord<?, ?>> clz) throws Exception { public Query(Class<? extends AggregatedRecord<?, ?>> clz) throws Exception {
this.clz = clz; this.clz = clz;
@ -76,7 +77,11 @@ public class Query extends PostgreSQLQuery {
contexts.add(context); contexts.add(context);
} }
public void setRecordId(String recordId) {
this.recordId = recordId;
}
public RecordToDBFields getRecordToDBMapper() { public RecordToDBFields getRecordToDBMapper() {
return recordToDBFields; return recordToDBFields;
} }
@ -300,4 +305,15 @@ public class Query extends PostgreSQLQuery {
return stringBuffer.toString(); return stringBuffer.toString();
} }
public String getRecordQuery(){
newQuery();
stringBuffer.append("* ");
stringBuffer.append(" FROM ");
stringBuffer.append(recordToDBFields.getTableName());
stringBuffer.append(" WHERE ");
stringBuffer.append(" id=");
appendString(recordId);
return stringBuffer.toString();
}
} }

View File

@ -21,6 +21,8 @@ import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQu
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery; import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord; import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
import org.gcube.accounting.utility.postgresql.RecordToDBMapping;
import org.gcube.documentstore.records.Record;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -204,8 +206,13 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest {
Info info = timeseries.get(c); Info info = timeseries.get(c);
logger.debug("{}", info); logger.debug("{}", info);
} }
} }
}
@Test
public void testGetRecord() throws Exception {
String type = RecordToDBMapping.getRecordTypeByClass(AggregatedServiceUsageRecord.class);
Record record = accountingPersistenceQueryPostgreSQL.getRecord("fa573711-ceb6-44ba-9c83-bd47e0915b80", type);
logger.debug("{}", record);
} }
} }

View File

@ -85,7 +85,15 @@ public class QueryTest extends ContextTest {
query.setOrderByField(AccountingPersistenceQuery.getDefaultOrderingProperties(AggregatedServiceUsageRecord.class)); query.setOrderByField(AccountingPersistenceQuery.getDefaultOrderingProperties(AggregatedServiceUsageRecord.class));
ret = query.getNextPossibleValueQuery(); ret = query.getNextPossibleValueQuery();
logger.debug(ret); logger.debug(ret);
}
@Test
public void testGetRecordQuery() throws Exception {
Query query = new Query(AggregatedServiceUsageRecord.class);
query.setRecordId("fa573711-ceb6-44ba-9c83-bd47e0915b80");
String ret = query.getRecordQuery();
logger.debug(ret);
} }
} }