Added historic field on mapping condition

This commit is contained in:
Fabio Sinibaldi 2020-01-28 18:34:00 +01:00
parent 8da417ff85
commit d6ddd74c2f
2 changed files with 25 additions and 12 deletions

View File

@ -4,8 +4,8 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.gcube.application.perform.service.engine.model.DBField;
@ -22,8 +22,8 @@ public class CSVRecordConverter {
}
private Map<String,Map<String,String>> mappings=new HashMap<>();
private String conditionField=null;
private Set<String> conditionValues=new HashSet<>();
private Map<DBField,Set<Object>> condition=new HashMap<>();
// private Set<String> conditionValues=new HashSet<>();
private boolean isAlwaysMap=false;
@ -48,10 +48,17 @@ public class CSVRecordConverter {
mappings.put(actualFieldName, mapping);
}
public void setCondition(String field, Set<String> values) {
this.conditionField=labels.get(field).getFieldName();
conditionField=conditionField.substring(1, conditionField.length()-1);
this.conditionValues=values;
// public void setCondition(String field, Set<String> values) {
// this.conditionField=labels.get(field).getFieldName();
// conditionField=conditionField.substring(1, conditionField.length()-1);
// this.conditionValues=values;
// }
public void addCondition(DBField conditionField,Set<Object> values) {
String label=labels.get(conditionField.getFieldName()).getFieldName();
DBField labelledField=new DBField(conditionField.getType(),label.substring(1,label.length()-1));
this.condition.put(labelledField, values);
}
public void setAlwaysMap(boolean isAlwaysMap) {
@ -67,10 +74,13 @@ public class CSVRecordConverter {
if(isAlwaysMap) return true;
// DefaultBehaviour
if(conditionField==null) return false;
if(condition.isEmpty()) return false;
else {
String currentValue=rs.getString(conditionField);
return conditionValues.contains(currentValue);
for(Entry<DBField,Set<Object>> entry:condition.entrySet()) {
Object obj=rs.getObject(entry.getKey().getFieldName());
if(!entry.getValue().contains(obj)) return false;
}
return true;
}
}

View File

@ -12,6 +12,7 @@ import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -315,10 +316,12 @@ public class ImportedTable {
queryConverter.setMapping(schema.getBatchUUIDField(), batchMapping);
}
// Set mapping condition NB only farm supported at the moment
// Set mapping condition
if(schema.getFarmUUIDField()!=null)
queryConverter.setCondition(schema.getFarmUUIDField(), farmMapping.keySet());
queryConverter.addCondition(new DBField(Types.VARCHAR,schema.getFarmUUIDField()), Collections.singleton(farmMapping.keySet()));
if(hasSNAPSHOT())
queryConverter.addCondition(getSNAPSHOTField(), Collections.singleton(request.getIncludeHistoric()));
log.trace("Performing actual query towards {} ",tablename);