Refactoring lib

This commit is contained in:
Luca Frosini 2021-03-18 15:24:36 +01:00
parent 261b0b9d8d
commit eddcb0b451
3 changed files with 15 additions and 105 deletions

10
pom.xml
View File

@ -58,6 +58,11 @@
<version>42.2.19</version>
</dependency>
<!-- Test Dependencies -->
<dependency>
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@ -69,11 +74,6 @@
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -3,14 +3,10 @@
*/
package org.gcube.documentstore.persistence;
import java.io.Serializable;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import org.gcube.accounting.utility.postgresql.PostgreSQLQuery;
import org.gcube.accounting.utility.postgresql.RecordToDBMapping;
import org.gcube.documentstore.records.AggregatedRecord;
import org.gcube.documentstore.records.Record;
@ -25,12 +21,6 @@ public class PersistencePostgreSQL extends PersistenceBackend {
protected static final Logger logger = LoggerFactory.getLogger(PersistencePostgreSQL.class);
public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS Z";
public static final String URL_PROPERTY_KEY = "URL";
public static final String USERNAME_PROPERTY_KEY = "username";
public static final String PASSWORD_PROPERTY_KEY = "password";
protected StatementMap statementMap;
@Override
@ -54,92 +44,11 @@ public class PersistencePostgreSQL extends PersistenceBackend {
}
protected void appendString(StringBuffer values, String string) {
values.append("'");
values.append(string);
values.append("'");
}
protected void appendValue(StringBuffer values, Serializable serializable) {
if(serializable instanceof Number) {
values.append(serializable.toString());
return;
}
if(serializable instanceof Calendar) {
Calendar calendar = (Calendar) serializable;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);
String date = simpleDateFormat.format(calendar.getTime());
appendString(values, date);
return;
}
if(serializable instanceof Enum) {
Enum<?> e = (Enum<?>) serializable;
appendString(values, e.name());
return;
}
// String, URI etc
appendString(values, serializable.toString());
}
protected void appendKey(StringBuffer sql, String key) {
int lenght = key.length();
boolean lastLowerCase = true;
for (int i=0; i<lenght; i++) {
Character ch = key.charAt(i); /*traversing String one by one*/
if (Character.isUpperCase(ch)) {
if(lastLowerCase) {
sql.append("_");
}
lastLowerCase = false;
}else {
lastLowerCase = true;
}
sql.append(Character.toLowerCase(ch));
}
}
protected String getSQLInsertCommand(Record record) {
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO ");
sql.append(record.getRecordType().toLowerCase()); // tableNme == RecordType.toLowerCase()
boolean first = true;
SortedSet<String> keys = new TreeSet<>(record.getRequiredFields());
StringBuffer values = new StringBuffer();
for(String key : keys) {
if(first) {
sql.append(" (");
values.append(" (");
first = false;
}else {
sql.append(",");
values.append(",");
}
appendKey(sql, key);
switch (key) {
case "creationTime": case "startTime": case "endTime":
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis((long) record.getResourceProperty(key));
appendValue(values, calendar);
break;
default:
appendValue(values, record.getResourceProperty(key));
break;
}
}
sql.append(") VALUES");
sql.append(values);
sql.append(");");
return sql.toString();
}
@Override
protected void reallyAccount(Record record) throws Exception {
Statement statement = statementMap.getStatement(record);
String sqlCommand = getSQLInsertCommand(record);
PostgreSQLQuery postgreSQLQuery = new PostgreSQLQuery();
String sqlCommand = postgreSQLQuery.getSQLInsertCommand(record);
statement.executeUpdate(sqlCommand);
}

View File

@ -19,6 +19,7 @@ import org.gcube.accounting.datamodel.usagerecords.PortletUsageRecord;
import org.gcube.accounting.datamodel.usagerecords.ServiceUsageRecord;
import org.gcube.accounting.datamodel.usagerecords.StorageStatusRecord;
import org.gcube.accounting.datamodel.usagerecords.StorageUsageRecord;
import org.gcube.accounting.utility.postgresql.PostgreSQLQuery;
import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
import org.junit.Assert;
import org.junit.Test;
@ -201,26 +202,26 @@ public class PersistencePostgreSQLTest extends ContextTest {
@Test
public void testSQLStatementString() throws Exception {
PersistencePostgreSQL persistencePostgreSQL = new PersistencePostgreSQL();
UsageRecord usageRecord = getTestAggregatedJobUsageRecord();
String sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
PostgreSQLQuery postgreSQLQuery = new PostgreSQLQuery();
String sql = postgreSQLQuery.getSQLInsertCommand(usageRecord);
logger.debug(sql);
usageRecord = getTestAggregatedPortletUsageRecord();
sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
sql = postgreSQLQuery.getSQLInsertCommand(usageRecord);
logger.debug(sql);
usageRecord = getTestAggregatedServiceUsageRecord();
sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
sql = postgreSQLQuery.getSQLInsertCommand(usageRecord);
logger.debug(sql);
usageRecord = getTestAggregatedStorageStatusRecord();
sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
sql = postgreSQLQuery.getSQLInsertCommand(usageRecord);
logger.debug(sql);
usageRecord = getTestAggregatedStorageUsageRecord();
sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
sql = postgreSQLQuery.getSQLInsertCommand(usageRecord);
logger.debug(sql);
}