gcube-cms-suite/use-cases/src/test/java/org/gcube/application/cms/usecases/legacyConcessioni/ConcessioniManagementUtils....

86 lines
3.4 KiB
Java

package org.gcube.application.cms.usecases.legacyConcessioni;
import lombok.Data;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.client.utils.Serialization;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.utils.Files;
import java.io.File;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
@Slf4j
public class ConcessioniManagementUtils {
@Data
public static class ImportFolder {
private Map<String, ArrayList<Concessione>> RelationshipMap=new HashMap<>();
private AtomicLong loadedCount=new AtomicLong(0l);
Comparator<Concessione> comparator = new Comparator<Concessione>() {
@Override
public int compare(Concessione o1, Concessione o2) {
return o1.getDataInizioProgetto().compareTo(o2.getDataInizioProgetto());
}
};
public String sort(){
StringBuilder reportBuilder=new StringBuilder();
// order lists
getRelationshipMap().forEach((s,l) ->{
log.info("Sorting {} ({} elements)",s,l.size());
Collections.sort(l,comparator);
l.forEach(concessione -> reportBuilder.append(concessione.getMongo_id()+ ",\"" +concessione.getNome()+"\","+ concessione.getDataInizioProgetto()+"\n"));
});
return reportBuilder.toString();
}
}
public static final ImportFolder loadImportFolder(File sourceDir){
ImportFolder toReturn = new ImportFolder();
for(File elementFolder:sourceDir.listFiles()){
if(elementFolder!=null&&!elementFolder.getName().equals("relationships.csv")) {
if (elementFolder.isFile() && elementFolder.getName().endsWith(".json")) {
Concessione c = read(elementFolder);
if (!toReturn.getRelationshipMap().containsKey(c.getNome()))
toReturn.getRelationshipMap().put(c.getNome(), new ArrayList<>());
toReturn.getRelationshipMap().get(c.getNome()).add(c);
toReturn.getLoadedCount().incrementAndGet();
} else
try{
for (File jsonFile : elementFolder.listFiles((dir1, name) -> {
return name!=null&&name.endsWith(".json");
})) {
Concessione c = read(jsonFile);
if (!toReturn.getRelationshipMap().containsKey(c.getNome()))
toReturn.getRelationshipMap().put(c.getNome(), new ArrayList<>());
toReturn.getRelationshipMap().get(c.getNome()).add(c);
toReturn.getLoadedCount().incrementAndGet();
}
}catch (Throwable t){
log.warn("Error while using "+elementFolder.getAbsolutePath(),t);
}
}
}
System.out.println("Loaded "+toReturn.getLoadedCount()+" elements from "+sourceDir.getAbsolutePath());
return toReturn;
}
@SneakyThrows
private static final Concessione read(File jsonFile) {
log.info("Reading "+jsonFile.getAbsolutePath());
String json= Files.readFileAsString(jsonFile.getAbsolutePath(), Charset.defaultCharset());
return Serialization.read(json,Concessione.class);
}
}