2021-03-18 10:32:08 +01:00
|
|
|
package org.gcube.accounting.utility.postgresql;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
import org.gcube.documentstore.records.Record;
|
|
|
|
|
|
|
|
public class RecordToDBFields {
|
|
|
|
|
2021-03-18 10:33:46 +01:00
|
|
|
public static String getKey(String fieldName) {
|
2021-03-18 10:32:08 +01:00
|
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|
|
|
int lenght = fieldName.length();
|
|
|
|
boolean lastLowerCase = true;
|
|
|
|
for (int i=0; i<lenght; i++) {
|
|
|
|
Character ch = fieldName.charAt(i); /*traversing String one by one*/
|
|
|
|
if (Character.isUpperCase(ch)) {
|
|
|
|
if(lastLowerCase) {
|
|
|
|
stringBuffer.append("_");
|
|
|
|
}
|
|
|
|
lastLowerCase = false;
|
|
|
|
}else {
|
|
|
|
lastLowerCase = true;
|
|
|
|
}
|
|
|
|
stringBuffer.append(Character.toLowerCase(ch));
|
|
|
|
}
|
|
|
|
return stringBuffer.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected final Class<? extends Record> clz;
|
|
|
|
|
|
|
|
protected final String typeName;
|
|
|
|
protected final String tableName;
|
|
|
|
|
|
|
|
protected final Map<String, String> tableFieldToRecordField;
|
|
|
|
protected final Map<String, String> recordFieldToTableField;
|
|
|
|
|
|
|
|
public RecordToDBFields(String typeName, Class<? extends Record> clz) throws Exception {
|
|
|
|
this.clz = clz;
|
|
|
|
this.typeName = typeName;
|
|
|
|
this.tableName = typeName.toLowerCase();
|
|
|
|
this.tableFieldToRecordField = new HashMap<>();
|
|
|
|
this.recordFieldToTableField = new HashMap<>();
|
|
|
|
mapFields();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected void mapFields() throws Exception {
|
|
|
|
Set<String> requiredFields = clz.newInstance().getRequiredFields();
|
|
|
|
for(String usageRecordField : requiredFields) {
|
|
|
|
String dbField = getKey(usageRecordField);
|
|
|
|
tableFieldToRecordField.put(dbField, usageRecordField);
|
|
|
|
recordFieldToTableField.put(usageRecordField, dbField);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getTableField(String recordField) {
|
|
|
|
return recordFieldToTableField.get(recordField);
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getRecordField(String tableField) {
|
|
|
|
String ret = tableFieldToRecordField.get(tableField);
|
|
|
|
if(ret==null && recordFieldToTableField.keySet().contains(tableField)) {
|
|
|
|
ret = tableField;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getTypeName() {
|
|
|
|
return typeName;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getTableName() {
|
|
|
|
return tableName;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|