diff --git a/pom.xml b/pom.xml index 6b3ffd2..3f718ed 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,7 @@ org.gcube.core common-encryption + 1.0.0-SNAPSHOT diff --git a/src/main/java/org/gcube/application/perform/service/engine/impl/ExportCSVQuery.java b/src/main/java/org/gcube/application/perform/service/engine/impl/ExportCSVQuery.java index 93f4f14..ea02204 100644 --- a/src/main/java/org/gcube/application/perform/service/engine/impl/ExportCSVQuery.java +++ b/src/main/java/org/gcube/application/perform/service/engine/impl/ExportCSVQuery.java @@ -20,13 +20,17 @@ public class ExportCSVQuery extends Query { private Map actualStructure; - public ExportCSVQuery(String query, DBField[] fields, CSVExportRequest theRequest, SchemaDefinition schema, Map actualStructure) { - super(query, fields); + private ArrayList exportCSVFieldOrder; + + public ExportCSVQuery(String query, DBField[] queryParams, CSVExportRequest theRequest, + SchemaDefinition schema, Map actualStructure, ArrayList exportFieldsOrder) { + super(query, queryParams); this.theRequest=theRequest; this.schema=schema; this.actualStructure=actualStructure; - - + + exportCSVFieldOrder=exportFieldsOrder; + } @@ -45,8 +49,8 @@ public class ExportCSVQuery extends Query { @Override public String getQuery() { - String selectedFields=replaceWithMappings(getFieldList()); - +// String selectedFields=replaceWithMappings(getFieldList()); + String selectedFields=getFieldList(); String conditionString =getConditionString(); if(conditionString.length()>0) conditionString= "WHERE "+conditionString; @@ -64,7 +68,8 @@ public class ExportCSVQuery extends Query { log.debug("Creating query for fields {} against table {} ",b,tablename); - String selectedFields=replaceWithMappings(b.toString()); +// String selectedFields=replaceWithMappings(b.toString()); + String selectedFields=b.toString(); String condition=getFilterWithMapping(filterMappingKey); @@ -80,15 +85,16 @@ public class ExportCSVQuery extends Query { String actualField=actualField(mappingFilterKey); log.debug("Setting filter By Mappings for field {}, size {} ",actualField,mappings.get(mappingFilterKey).size()); - + conditionBuilder.append("("); for(Entry mappingFilter:mappings.get(mappingFilterKey).entrySet()) { conditionBuilder.append(String.format("%1$s = '%2$s' OR", actualField,mappingFilter.getKey())); } conditionBuilder.setLength(conditionBuilder.lastIndexOf("OR")); + conditionBuilder.append(")"); // Add selection filter.. String filteringCondition=getConditionString(); - if(filteringCondition.length()>0) conditionBuilder.append(" AND "+filteringCondition); + if(filteringCondition.length()>0) conditionBuilder.append(" AND ("+filteringCondition+")"); }else { log.debug("No mappings to search For "); conditionBuilder.append("FALSE"); @@ -97,25 +103,26 @@ public class ExportCSVQuery extends Query { } - private String replaceWithMappings(String selectionFields) { - String toReturn=selectionFields; - // fieldLabel -> (uuid->name) - for(Entry> mapping: mappings.entrySet()) { - if(exists(mapping.getKey())) { - String actualMapped=actualField(mapping.getKey()); - if(toReturn.contains(actualMapped)) { - StringBuilder caseBuilder=new StringBuilder("CASE "+actualMapped); - for(Entry condition: mapping.getValue().entrySet()) - caseBuilder.append(String.format("WHEN '%1$s' THEN '%2$s'", condition.getKey(),condition.getValue())); - caseBuilder.append("END AS "+actualMapped); - - toReturn=toReturn.replace(actualMapped, caseBuilder.toString()); - } - } - } - - return toReturn.toString(); - } +// private String replaceWithMappings(String selectionFields) { +// String toReturn=selectionFields; +// // fieldLabel -> (uuid->name) +// for(Entry> mapping: mappings.entrySet()) { +// if(exists(mapping.getKey())) { +// String actualMapped=actualField(mapping.getKey()); +// if(toReturn.contains(actualMapped)) { +// StringBuilder caseBuilder=new StringBuilder("CASE "+actualMapped); +// for(Entry condition: mapping.getValue().entrySet()) +// caseBuilder.append(String.format("WHEN '%1$s' THEN '%2$s'", condition.getKey(),condition.getValue())); +// +// caseBuilder.append(String.format(" ELSE %1$s END AS %1$s", actualMapped)); +// +// toReturn=toReturn.replace(actualMapped, caseBuilder.toString()); +// } +// } +// } +// +// return toReturn.toString(); +// } private String getConditionString() { @@ -141,7 +148,7 @@ public class ExportCSVQuery extends Query { StringBuilder toReturn=new StringBuilder(""); for(String orGroup:orGroups) { - toReturn.append(orGroup+ " AND "); + toReturn.append("("+orGroup+") AND "); } if(toReturn.length()>0) @@ -155,8 +162,10 @@ public class ExportCSVQuery extends Query { private String getFieldList() { StringBuilder b=new StringBuilder(); - for(DBField f:actualStructure.values()) + for(String label:exportCSVFieldOrder) { + DBField f = actualStructure.get(label); b.append(f.getFieldName()+","); + } return b.toString().substring(0,b.lastIndexOf(",")); } diff --git a/src/main/java/org/gcube/application/perform/service/engine/impl/PerformanceManagerImpl.java b/src/main/java/org/gcube/application/perform/service/engine/impl/PerformanceManagerImpl.java index abb2e8b..e6a98dc 100644 --- a/src/main/java/org/gcube/application/perform/service/engine/impl/PerformanceManagerImpl.java +++ b/src/main/java/org/gcube/application/perform/service/engine/impl/PerformanceManagerImpl.java @@ -258,20 +258,7 @@ public class PerformanceManagerImpl implements PerformanceManager{ }); }); -// CSVRecord record=parser.getRecords().get(0); -// -// for(Entry header:headers.entrySet()) { -// String value=record.get(header.getKey()); -// String name=header.getKey(); -// int type=Types.VARCHAR; -// -// //Deanonimized fields will always contain strings -// if(!deanonimizationLabels.contains(name)) { -// //NB INT will be managed as real in order to deal with Dataminer output format -// if(value.matches(FLOAT_REGEX)||value.matches(INTEGER_REGEX)) type=Types.REAL; -// } -// toReturn.add(new DBField(type, name)); -// } + return toReturn; }finally{ diff --git a/src/main/java/org/gcube/application/perform/service/engine/impl/SchemaDefinition.java b/src/main/java/org/gcube/application/perform/service/engine/impl/SchemaDefinition.java index 4696b8d..bc2494e 100644 --- a/src/main/java/org/gcube/application/perform/service/engine/impl/SchemaDefinition.java +++ b/src/main/java/org/gcube/application/perform/service/engine/impl/SchemaDefinition.java @@ -14,11 +14,19 @@ public class SchemaDefinition { private static final String BATCH="batch"; private static final String COMPANY="company"; private static final String ROUTINE_ID="routine"; + private static final String AREA="area"; + private static final String SPECIES="species"; + private static final String PERIOD="period"; + private static final String QUARTER="quarter"; + private static final String CSV="csv"; private static final String ENABLE_ANALYSIS="enable_analysis"; private static final String REPORT_FIELDS="report_fields"; private static final String REPORT_LABELS="report_labels"; + + + public String getRelatedDescription() { return relatedDescription; } @@ -83,7 +91,14 @@ public class SchemaDefinition { this.associationUUIDField = props.getProperty(ASSOCIATION); this.batchUUIDField = props.getProperty(BATCH); this.companyUUIDField = props.getProperty(COMPANY); - this.routineIdFieldName=props.getProperty(ROUTINE_ID); + this.routineIdFieldName=props.getProperty(ROUTINE_ID); + this.areaField=props.getProperty(AREA); + this.speciesField=props.getProperty(SPECIES); + this.quarterField=props.getProperty(QUARTER); + this.periodField=props.getProperty(PERIOD); + + + this.analysisEnabled=Boolean.parseBoolean(props.getProperty(ENABLE_ANALYSIS, "false")); if(props.containsKey(REPORT_FIELDS)) { @@ -117,8 +132,8 @@ public class SchemaDefinition { private ArrayList toReportLabels=new ArrayList<>(); - private String areaField="area"; - private String periodField="period"; - private String quarterField="quarter"; - private String speciesField="species"; + private String areaField; + private String periodField; + private String quarterField; + private String speciesField; } diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/importer/CSVRecordConverter.java b/src/main/java/org/gcube/application/perform/service/engine/model/importer/CSVRecordConverter.java new file mode 100644 index 0000000..3dad05b --- /dev/null +++ b/src/main/java/org/gcube/application/perform/service/engine/model/importer/CSVRecordConverter.java @@ -0,0 +1,94 @@ +package org.gcube.application.perform.service.engine.model.importer; + +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.Set; + +import org.gcube.application.perform.service.engine.model.DBField; + +public class CSVRecordConverter { + + private Map labels; + + + + public CSVRecordConverter(Map labels) { + super(); + this.labels = labels; + } + + private Map> mappings=new HashMap<>(); + private String conditionField=null; + private Set conditionValues=new HashSet<>(); + private boolean isAlwaysMap=false; + + + private ResultSetMetaData rsMeta=null; + + + public Object[] convert(ResultSet rs)throws SQLException{ + if(rsMeta==null)rsMeta=rs.getMetaData(); + Object[] toReturn=new Object[rsMeta.getColumnCount()]; + if(mappingCondition(rs)) return map(rs,toReturn); + else + for(int i=0;i mapping) { + String actualFieldName=labels.get(field).getFieldName(); + actualFieldName=actualFieldName.substring(1, actualFieldName.length()-1); + mappings.put(actualFieldName, mapping); + } + + public void setCondition(String field, Set values) { + this.conditionField=labels.get(field).getFieldName(); + conditionField=conditionField.substring(1, conditionField.length()-1); + this.conditionValues=values; + } + + public void setAlwaysMap(boolean isAlwaysMap) { + this.isAlwaysMap = isAlwaysMap; + } + + public void reset() { + rsMeta=null; + } + + private boolean mappingCondition(ResultSet rs) throws SQLException{ + // Optimized pass-all + if(isAlwaysMap) return true; + + // DefaultBehaviour + if(conditionField==null) return false; + else { + String currentValue=rs.getString(conditionField); + return conditionValues.contains(currentValue); + } + } + + private Object[] map(ResultSet rs,Object[] toReturn) throws SQLException{ + + for(int i=0;i fieldMapping=mappings.get(field); + String value=rs.getString(i+1); + if(value!=null&&fieldMapping.containsKey(value)) + toReturn[i]=fieldMapping.get(value); + } + } + + return toReturn; + } + +} diff --git a/src/main/java/org/gcube/application/perform/service/engine/model/importer/ImportedTable.java b/src/main/java/org/gcube/application/perform/service/engine/model/importer/ImportedTable.java index eb6675d..633af4b 100644 --- a/src/main/java/org/gcube/application/perform/service/engine/model/importer/ImportedTable.java +++ b/src/main/java/org/gcube/application/perform/service/engine/model/importer/ImportedTable.java @@ -86,10 +86,10 @@ public class ImportedTable { check(schema.getCompanyUUIDField()); check(schema.getFarmUUIDField()); -// check(schema.getAreaField()); -// check(schema.getPeriodField()); -// check(schema.getQuarterField()); -// check(schema.getSpeciesField()); + check(schema.getAreaField()); + check(schema.getPeriodField()); + check(schema.getQuarterField()); + check(schema.getSpeciesField()); for(String f:schema.getToReportFields()) check(f); @@ -216,7 +216,8 @@ public class ImportedTable { Connection conn= DataBaseManager.get().getConnection(); try { - ExportCSVQuery exportQuery=new ExportCSVQuery("",null,request,schema,labels); + CSVRecordConverter queryConverter=new CSVRecordConverter(labels); + ExportCSVQuery exportQuery=new ExportCSVQuery("",null,request,schema,labels,csvFields); exportQuery.setTablename(tablename); Map farmMapping=new HashMap<>(); @@ -244,23 +245,34 @@ public class ImportedTable { } } + // Set mappings for query and csv printer + if(schema.getAssociationUUIDField()!=null) { log.debug("Setting Association Mapping : "+associationMapping); exportQuery.setMapping(schema.getAssociationUUIDField(), associationMapping); + queryConverter.setMapping(schema.getAssociationUUIDField(), associationMapping); } if(schema.getCompanyUUIDField()!=null) { log.debug("Setting Company Mapping : "+companyMapping); exportQuery.setMapping(schema.getCompanyUUIDField(), companyMapping); + queryConverter.setMapping(schema.getCompanyUUIDField(), companyMapping); } if(schema.getFarmUUIDField()!=null) { log.debug("Setting Farm Mapping : "+farmMapping); exportQuery.setMapping(schema.getFarmUUIDField(), farmMapping); + queryConverter.setMapping(schema.getFarmUUIDField(), farmMapping); } if(schema.getBatchUUIDField()!=null) { log.debug("Setting Batch Mapping : "+batchMapping); exportQuery.setMapping(schema.getBatchUUIDField(), batchMapping); + queryConverter.setMapping(schema.getBatchUUIDField(), batchMapping); } + // Set mapping condition NB only farm supported at the moment + if(schema.getFarmUUIDField()!=null) + queryConverter.setCondition(schema.getFarmUUIDField(), farmMapping.keySet()); + + log.trace("Performing actual query towards {} ",tablename); @@ -274,29 +286,36 @@ public class ImportedTable { - toReturn.put(this.schema.getRelatedDescription(), putIntoStorage(csvRs, csvFields.toArray(new String[csvFields.size()]))); + toReturn.put(this.schema.getRelatedDescription(), putIntoStorage(csvRs, + csvFields.toArray(new String[csvFields.size()]),queryConverter)); + + + if(schema.getToReportFields().size()>0) { - ArrayList personalLabels=schema.getToReportFields(); - + ArrayList toExtractCSVFields=schema.getToReportFields(); + + queryConverter.reset(); + log.trace("Extracting {} from {} ",tablename); // Extract personal found values from same query - ArrayList toExtractFields=new ArrayList(); - for(String label:personalLabels) { - toExtractFields.add(labels.get(label).getFieldName()); + String[] toExtractFields=new String[toExtractCSVFields.size()]; + + + for(String label:toExtractCSVFields) { + String fieldName=labels.get(label).getFieldName(); + toExtractFields[toExtractCSVFields.indexOf(label)]=fieldName; } - - String sqlPersonal=exportQuery.getQueryForMappedFields(schema.getFarmUUIDField(), - toExtractFields.toArray(new String[toExtractFields.size()])); + toExtractFields); log.debug("Query is {} ",sqlPersonal); csvRs=stmt.executeQuery(sqlPersonal); - - + + toReturn.put(this.schema.getRelatedDescription()+"_internal", putIntoStorage(csvRs, - schema.getToReportLabels().toArray(new String[schema.getToReportLabels().size()]))); + schema.getToReportLabels().toArray(new String[schema.getToReportLabels().size()]),queryConverter)); } @@ -331,14 +350,15 @@ public class ImportedTable { } - private static final String putIntoStorage(ResultSet toExport,String...headers) throws IOException, SQLException { + private static final String putIntoStorage(ResultSet toExport,String[] headers, CSVRecordConverter converter) throws IOException, SQLException { CSVPrinter printer=null; File dataFile=null; try { dataFile=File.createTempFile("csv_out", ".csv"); printer = CSVFormat.DEFAULT.withHeader(headers).print(new FileWriter(dataFile)); - - printer.printRecords(toExport); + while(toExport.next()) { + printer.printRecord(converter.convert(toExport)); + } printer.flush(); return StorageUtils.putOntoStorage(dataFile); }finally { diff --git a/src/main/webapp/WEB-INF/schema/GROW_OUT_AGGREGATED/Batches.properties b/src/main/webapp/WEB-INF/schema/GROW_OUT_AGGREGATED/Batches.properties index 031c04c..85c9a5b 100644 --- a/src/main/webapp/WEB-INF/schema/GROW_OUT_AGGREGATED/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/GROW_OUT_AGGREGATED/Batches.properties @@ -3,6 +3,9 @@ farm=farm_id company=company_id association=producer_association_affiliation batch=aggregated_batch_id +species=species +quarter=quarter +area=area routine=internal_routine_id csv=csv/GROW_OUT_AGGREGATED.csv enable_analysis=true diff --git a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Anagraphic.properties b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Anagraphic.properties index 4446733..f1e7c43 100644 --- a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Anagraphic.properties +++ b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Anagraphic.properties @@ -1,3 +1,3 @@ description=AnagraphicTable routine=internal_routine_id -csv=csv/GROW_OUT_INDIVIDUAL_anagraphic.csv \ No newline at end of file +csv=csv/GROW_OUT_INDIVIDUAL_anagraphic.csv diff --git a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Batches.properties b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Batches.properties index 16c5f7b..6c497c3 100644 --- a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL/Batches.properties @@ -4,6 +4,9 @@ company=company_id association=producer_association_affiliation batch=batch_id routine=internal_routine_id +species=species_stocking +area=area +quarter=quarter csv=csv/GROW_OUT_INDIVIDUAL.csv enable_analysis=true report_fields=batch_id,farm_id,area diff --git a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL_CLOSED_BATCHES/Batches.properties b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL_CLOSED_BATCHES/Batches.properties index 16c5f7b..b448e58 100644 --- a/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL_CLOSED_BATCHES/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/GROW_OUT_INDIVIDUAL_CLOSED_BATCHES/Batches.properties @@ -3,6 +3,9 @@ farm=farm_id company=company_id association=producer_association_affiliation batch=batch_id +species=species_stocking +area=area +quarter=quarter routine=internal_routine_id csv=csv/GROW_OUT_INDIVIDUAL.csv enable_analysis=true diff --git a/src/main/webapp/WEB-INF/schema/HATCHERY_AGGREGATED/Batches.properties b/src/main/webapp/WEB-INF/schema/HATCHERY_AGGREGATED/Batches.properties index 15046a0..8f904ac 100644 --- a/src/main/webapp/WEB-INF/schema/HATCHERY_AGGREGATED/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/HATCHERY_AGGREGATED/Batches.properties @@ -3,6 +3,8 @@ farm=farm_id company=company_id association=producer_association_affiliation batch=aggregated_batches_id +species=species +period=stocking_period routine=internal_routine_id csv=csv/HATCHERY_AGGREGATED.csv enable_analysis=true diff --git a/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL/Batches.properties b/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL/Batches.properties index 44dae27..986bebf 100644 --- a/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL/Batches.properties @@ -2,6 +2,8 @@ description=BatchesTable farm=farm_id company=company_id batch=batch_id +species=species +period=stocking_period routine=internal_routine_id csv=csv/HATCHERY_INDIVIDUAL.csv enable_analysis=true diff --git a/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL_CLOSED_BATCHES/Batches.properties b/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL_CLOSED_BATCHES/Batches.properties index 44dae27..986bebf 100644 --- a/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL_CLOSED_BATCHES/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/HATCHERY_INDIVIDUAL_CLOSED_BATCHES/Batches.properties @@ -2,6 +2,8 @@ description=BatchesTable farm=farm_id company=company_id batch=batch_id +species=species +period=stocking_period routine=internal_routine_id csv=csv/HATCHERY_INDIVIDUAL.csv enable_analysis=true diff --git a/src/main/webapp/WEB-INF/schema/PRE_ONGROWING/Batches.properties b/src/main/webapp/WEB-INF/schema/PRE_ONGROWING/Batches.properties index fa7812a..afc4cf5 100644 --- a/src/main/webapp/WEB-INF/schema/PRE_ONGROWING/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/PRE_ONGROWING/Batches.properties @@ -3,6 +3,9 @@ farm=farm_id company=company_id batch=batch_id routine=internal_routine_id +species=species +area=area +period=period csv=csv/PRE_ONGROWING.csv enable_analysis=true report_fields=batch_id,farm_id diff --git a/src/main/webapp/WEB-INF/schema/PRE_ONGROWING_CLOSED_BATCHES/Batches.properties b/src/main/webapp/WEB-INF/schema/PRE_ONGROWING_CLOSED_BATCHES/Batches.properties index fa7812a..afc4cf5 100644 --- a/src/main/webapp/WEB-INF/schema/PRE_ONGROWING_CLOSED_BATCHES/Batches.properties +++ b/src/main/webapp/WEB-INF/schema/PRE_ONGROWING_CLOSED_BATCHES/Batches.properties @@ -3,6 +3,9 @@ farm=farm_id company=company_id batch=batch_id routine=internal_routine_id +species=species +area=area +period=period csv=csv/PRE_ONGROWING.csv enable_analysis=true report_fields=batch_id,farm_id diff --git a/src/test/java/org/gcube/application/perform/service/DeleteSchema.java b/src/test/java/org/gcube/application/perform/service/DeleteSchema.java index 52a9b53..6bc6bf8 100644 --- a/src/test/java/org/gcube/application/perform/service/DeleteSchema.java +++ b/src/test/java/org/gcube/application/perform/service/DeleteSchema.java @@ -10,6 +10,7 @@ import java.util.Set; import org.gcube.application.perform.service.engine.DataBaseManager; import org.gcube.application.perform.service.engine.impl.PerformanceManagerImpl; +import org.gcube.application.perform.service.engine.model.DBField; import org.gcube.application.perform.service.engine.model.InternalException; import org.gcube.application.perform.service.engine.model.importer.AnalysisType; import org.gcube.application.perform.service.engine.model.importer.ImportedTable; @@ -26,11 +27,18 @@ public class DeleteSchema { Connection conn=DataBaseManager.get().getConnection(); Statement stmt=conn.createStatement(); + + + + + for(Entry> entry:PerformanceManagerImpl.getAnalysisConfiguration().entrySet()) { for(ImportedTable t:entry.getValue()) { stmt.execute("DROP TABLE "+t.getTableName()); } } + // CLEAN IMPORTS + stmt.executeUpdate("DELETE FROM "+DBField.ImportRoutine.TABLE); conn.commit(); // throw new RuntimeException("Uncomment commit to really perform cleanup"); diff --git a/src/test/java/org/gcube/application/perform/service/LoadSchemaTest.java b/src/test/java/org/gcube/application/perform/service/LoadSchemaTest.java index e2ef466..58aded7 100644 --- a/src/test/java/org/gcube/application/perform/service/LoadSchemaTest.java +++ b/src/test/java/org/gcube/application/perform/service/LoadSchemaTest.java @@ -48,10 +48,7 @@ public class LoadSchemaTest { // // } - // CLEAN IMPORTS - Connection conn = DataBaseManager.get().getConnection(); - conn.createStatement().executeUpdate("DELETE FROM "+DBField.ImportRoutine.TABLE); - conn.commit(); + diff --git a/src/test/java/org/gcube/application/perform/service/PerformanceTest.java b/src/test/java/org/gcube/application/perform/service/PerformanceTest.java index 56d9f9b..5697e2b 100644 --- a/src/test/java/org/gcube/application/perform/service/PerformanceTest.java +++ b/src/test/java/org/gcube/application/perform/service/PerformanceTest.java @@ -1,29 +1,71 @@ package org.gcube.application.perform.service; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map.Entry; + import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; +import org.apache.commons.io.IOUtils; +import org.gcube.application.perform.service.engine.impl.PerformanceManagerImpl; +import org.gcube.application.perform.service.engine.model.importer.AnalysisType; import org.junit.Test; -public class PerformanceTest extends CommonTest{ - - - - - @Test - public void getPerformance() { - WebTarget target= - target(ServiceConstants.Performance.PATH). - queryParam(ServiceConstants.Performance.AREA_PARAMETER, "A1","A2"). - queryParam(ServiceConstants.Performance.QUARTER_PARAMETER, "Q1","Q2"). - queryParam(ServiceConstants.Performance.SPECIES_ID_PARAMETER, "Gadilidae","Tonno"). - queryParam(ServiceConstants.Performance.PERIOD_PARAMETER, "First","Spring"). - queryParam(ServiceConstants.Performance.FARM_ID_PARAMETER, "13625424","1233556","12346"). - queryParam(ServiceConstants.Performance.BATCH_TYPE_PARAMETER, "GROW_OUT_AGGREGATED"); +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import com.vividsolutions.jts.util.Assert; - System.out.println(target.getUri()); - Response resp=target.request().get(); - System.out.println(resp.getStatus() + " : "+ resp.readEntity(String.class)); +public class PerformanceTest extends CommonTest{ + + + + + @Test + public void getPerformance() throws IOException { + File folder= Files.createTempDir(); + + + for(AnalysisType analysis:PerformanceManagerImpl.getAnalysisConfiguration().keySet()) { +// AnalysisType analysis=new AnalysisType("GROW_OUT_INDIVIDUAL","GROW_OUT_INDIVIDUAL"); + WebTarget target= + target(ServiceConstants.Performance.PATH). +// queryParam(ServiceConstants.Performance.AREA_PARAMETER, "A1","A2"). +//// queryParam(ServiceConstants.Performance.QUARTER_PARAMETER, "Q1","Q2"). +// queryParam(ServiceConstants.Performance.SPECIES_ID_PARAMETER, "Gadilidae","Tonno"). +// queryParam(ServiceConstants.Performance.PERIOD_PARAMETER, "First","Spring"). + queryParam(ServiceConstants.Performance.FARM_ID_PARAMETER, "13625424"). + queryParam(ServiceConstants.Performance.BATCH_TYPE_PARAMETER, analysis.getId()); + + System.out.println(target.getUri()); + Response resp=target.request().get(); + Assert.isTrue(resp.getStatus()==200); + + File subFolder= new File(folder,analysis.getId()); + subFolder.mkdirs(); + for(Entry entry : resp.readEntity(new GenericType>() { }).entrySet()) { + URL csvUrl=new URL(entry.getValue()); + File csv=new File(subFolder,entry.getKey()+".csv"); + csv.createNewFile(); + BufferedWriter writer=Files.newWriter(csv, Charsets.UTF_8); + IOUtils.copy(csvUrl.openStream(), writer); + writer.close(); + } +// System.out.println(analysis.getId()+" "+resp.getStatus() + " : "+ resp.readEntity(String.class)); + + + } + System.out.println("Wrote to : "+ folder.getAbsolutePath()); } + + + + + + }