gcube-cms-suite/use-cases/src/main/java/org/gcube/application/cms/usecases/mocks/MockFromFolder.java

163 lines
6.2 KiB
Java

package org.gcube.application.cms.usecases.mocks;
import com.opencsv.CSVReader;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.tests.model.TestModel;
import org.gcube.application.cms.tests.TokenSetter;
import org.gcube.application.geoportal.common.utils.FileSets;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import java.io.*;
import java.util.*;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni;
import static org.junit.Assert.assertTrue;
@Slf4j
public class MockFromFolder {
public static void main(String[] args) throws Exception {
//PARAMS
String context="/gcube/devsec/devVRE";
//Concessioni 04-03
//String packageBaseDir="/Users/fabioisti/Documents/Concessioni 04-03/";
//String csvDescriptor="src/test/resources/concessioni/concessioni04-03.csv";
//DATASET_GNA_01
// String packageBaseDir="/Users/fabioisti/Documents/DATASET_GNA_01";
// String csvDescriptor="src/test/resources/concessioni/DATASET_GNA_01.csv";
//DATASET_GNA_02
//String packageBaseDir="/Users/fabioisti/Documents/DATASET_GNA_02";
//String csvDescriptor="src/test/resources/concessioni/DATASET_GNA_02.csv";
// invio_08_02
// String packageBaseDir="/Users/fabioisti/Documents/invio_08_05";
// String csvDescriptor="src/test/resources/concessioni/invio_08_05.csv";
// concessioni 23_04
String packageBaseDir="/Users/fabioisti/Documents/Concessioni_23_04";
String csvDescriptor="src/test/resources/concessioni/concessioni_23_04.csv";
TokenSetter.set(context);
MongoConcessioni client=mongoConcessioni().build();
StorageUtils storage=new StorageUtils();
long publishedCount=0l;
long successcount=0l;
long entrycount=0l;
//Parse CSV descriptor
File baseDir=new File(packageBaseDir);
ArrayList<Concessione> pushed=new ArrayList<>();
CSVReader reader = new CSVReader(new FileReader(csvDescriptor));
String [] nextLine;
//reads one line at a time
while ((nextLine = reader.readNext()) != null)
{
entrycount++;
//Create new
String projectName = nextLine[0];
String positionPath = nextLine[1];
String piantePath = nextLine[2];
try {
//NB raggruppa per file
Map.Entry<String,List<File>> posSets = clusterizeFiles(positionPath, baseDir).entrySet().stream().findFirst().get();
Map<String, List<File>> pianteSets = clusterizeFiles(piantePath, baseDir);
// Sometimes they are the same
if(positionPath.equals(piantePath))
pianteSets.remove(posSets.getKey());
log.debug("Entry {} pos Size {} piante {} ",projectName,posSets.getValue().size(),pianteSets.size());
Concessione c = createMock(projectName, pianteSets, posSets.getValue(), client, storage);
publishedCount++;
if (c.getReport().getStatus().equals(ValidationReport.ValidationStatus.PASSED))
successcount++;
pushed.add(c);
}catch(Throwable t){
System.err.println("Problematic entry "+projectName);
t.printStackTrace(System.err);
}
}
System.out.println("Done "+publishedCount+" [SUCCESS : "+successcount+"] \t OUT OF :"+entrycount+" entries");
pushed.forEach(c -> {
try{
System.out.println(c.getNome()+"\t"+c.getMongo_id()+"\t"+c.getReport().getStatus());
}catch(Throwable t){
System.out.println(c.getNome()+"\t"+c.getMongo_id()+"\t PROBLEMATIC, NO REPORT");
}
});
}
private static Map<String,List<File>> clusterizeFiles(String basePath,File packageFolder) throws IOException {
log.debug("Clusterizing "+basePath);
HashMap<String,List<File>> toReturn = new HashMap<>();
File baseDir=new File(packageFolder,basePath);
for(File shp:baseDir.listFiles((dir,name)->{return name.endsWith(".shp");})) {
String basename=shp.getName().substring(0,shp.getName().lastIndexOf("."));
List<File> fileset=new ArrayList<>();
for (File shpSet : baseDir.listFiles((dir, name) -> {return name.startsWith(basename);}))
fileset.add(shpSet);
log.debug("SHP {} Set size {} ",basename,fileset.size());
toReturn.put(basename,fileset);
}
return toReturn;
}
private static Concessione createMock(String baseName,Map<String,List<File>> piante, List<File> pos,
MongoConcessioni client, StorageUtils storage) throws Exception {
Concessione c= TestModel.prepareConcessione(piante.size(), 2);
c.setNome("Mock for "+baseName);
c= client.createNew(c);
String mongoId=c.getMongo_id();
// TEST DATA, DO NOT CARE
client.registerFileSet(mongoId, FileSets.prepareRequest(storage,
Concessione.Paths.RELAZIONE,new File ("src/test/resources/concessioni/relazione.pdf")));
client.registerFileSet(mongoId, FileSets.prepareRequest(storage,
Concessione.Paths.imgByIndex(0),new File("src/test/resources/concessioni/immagine.png")));
// POSIZIONAMENTO
client.registerFileSet(mongoId, FileSets.prepareRequest(storage,
Concessione.Paths.POSIZIONAMENTO,pos.toArray(new File[pos.size()])));
Map.Entry<String,List<File>>[] entries= piante.entrySet().toArray(new Map.Entry[0]);
for( int i= 0; i< piante.size();i++)
client.registerFileSet(mongoId, FileSets.prepareRequest(storage,
Concessione.Paths.piantaByIndex(i),entries[i].getValue().toArray(new File[0])));
c=client.publish(mongoId);
System.out.println("@@@ Concessione "+c.getNome()+"\t STATUS : "+ c.getReport().getStatus());
return c;
}
}