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;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
@ -263,7 +264,46 @@ public class AccountingPersistenceQueryPostgreSQL implements AccountingPersisten
@Override
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

View File

@ -34,7 +34,8 @@ public class Query extends PostgreSQLQuery {
private String fieldOfRequesteValues;
private String orderByField;
private Integer limit;
private String recordId;
public Query(Class<? extends AggregatedRecord<?, ?>> clz) throws Exception {
this.clz = clz;
@ -76,7 +77,11 @@ public class Query extends PostgreSQLQuery {
contexts.add(context);
}
public void setRecordId(String recordId) {
this.recordId = recordId;
}
public RecordToDBFields getRecordToDBMapper() {
return recordToDBFields;
}
@ -300,4 +305,15 @@ public class Query extends PostgreSQLQuery {
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.datamodel.UsageRecord;
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.Test;
import org.slf4j.Logger;
@ -204,8 +206,13 @@ public class AccountingPersistenceQueryPostgreSQLTest extends ContextTest {
Info info = timeseries.get(c);
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));
ret = query.getNextPossibleValueQuery();
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);
}
}