diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java index 38f0b8e..4ea0792 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java @@ -87,6 +87,107 @@ public class Concessione extends Record{ } + public static class Paths{ + public final static String RELAZIONE="relazione"; + public final static String POSIZIONAMENTO="posizionamentoScavo"; + public final static String PIANTE="piante"; + public final static String IMMAGINI="immagini"; + + public static final String MONGO_ID="mongo_id"; + + public final static String piantaByIndex(int index) {return makeByIndex(PIANTE,index);}; + public final static String imgByIndex(int index) {return makeByIndex(IMMAGINI,index);}; + + public final static String piantaById(String id) {return makeByStringField(PIANTE, MONGO_ID, id);}; + public final static String imgById(String id) {return makeByStringField(IMMAGINI, MONGO_ID, id);}; + + + + private static String makeByIndex(String base,int value) {return String.format("%1$s[%2$d]",base,value);} + private static String makeByStringField(String base,String field,String value) + {return String.format("%1$s.%2$s:\"%3$s\"",base,field,value);} + } + + @Override + public AssociatedContent getContentByPath(String path) { + switch(path) { + case Paths.RELAZIONE : return getRelazioneScavo(); + case Paths.POSIZIONAMENTO : return getPosizionamentoScavo(); + } + if(path.matches("\\w+\\[\\d+\\]")) { + // Array section + String field=path.substring(0,path.lastIndexOf("[")); + Integer index=Integer.parseInt(path.substring(path.lastIndexOf("[")+1,path.lastIndexOf("]"))); + List list=null; + switch (field) { + case Paths.IMMAGINI : list = immaginiRappresentative; break; + case Paths.PIANTE : list = pianteFineScavo; break; + } + return getByIndex(list,index); + + } + if(path.matches("\\w+\\.\\w+\\s*\\:\\s*\\\"\\w+\\\"")) { + // Map section + String field=path.substring(0,path.lastIndexOf(".")); + String subField=path.substring(path.indexOf(".")+1,path.lastIndexOf(":")).trim(); + String value=path.substring(path.indexOf("\"")+1,path.lastIndexOf("\"")); + List list=null; + switch (field) { + case Paths.IMMAGINI : list = immaginiRappresentative; break; + case Paths.PIANTE : list = pianteFineScavo; break; + } + return getByFieldValue(list, subField, value); + } + return null; + } + + private static AssociatedContent getByIndex(List list, int index) { + if(list == null )return null; + return list.get(index); + } + +// NB only mongo_id is supported in this impl. + private static AssociatedContent getByFieldValue(List list, String field, Object value) { + for(AssociatedContent c: list) { + switch(field) { + case Paths.MONGO_ID : { + if(c.getMongo_id()!=null&&c.getMongo_id().equals(value)) + return c; + } + } + } + return null; + } + + + @Override + public void setAtPath(AssociatedContent toSet, String path) { + switch(path) { + case Paths.RELAZIONE : { + setRelazioneScavo((RelazioneScavo) toSet); + break; + } + case Paths.POSIZIONAMENTO : { + setRelazioneScavo((RelazioneScavo) toSet); + break; + } + case Paths.PIANTE : { + if(pianteFineScavo==null)pianteFineScavo=new ArrayList(); + pianteFineScavo.add((LayerConcessione) toSet); + break; + } + case Paths.IMMAGINI: { + if(immaginiRappresentative==null)immaginiRappresentative=new ArrayList(); + pianteFineScavo.add((LayerConcessione) toSet); + break; + } + + //TODO MATCH if()case Paths.PIANTa : return + //TODO MATCH if()case Paths.Img : return + } + + } + @Override public ValidationReport validate() { ValidationReport validator= super.validate(); diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java index 7ef1669..80cf158 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java @@ -66,6 +66,8 @@ public abstract class Record { setLicenzaID(ConstraintCheck.defaultFor(getLicenzaID(),"CC-BY").evaluate()); } - + + public abstract AssociatedContent getContentByPath(String path); + public abstract void setAtPath(AssociatedContent toSet,String path); } diff --git a/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java b/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java new file mode 100644 index 0000000..01b3295 --- /dev/null +++ b/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java @@ -0,0 +1,67 @@ +package org.gcube.application.geoportal.common.model; + +import static org.junit.Assert.assertEquals; + +import java.util.UUID; + +import org.gcube.application.geoportal.common.model.legacy.Concessione; +import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths; +import org.gcube.application.geoportal.common.model.legacy.LayerConcessione; +import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo; +import org.gcube.application.geoportal.common.model.legacy.UploadedImage; +import org.junit.Test; + + +public class PathsTest { + + + @Test + public void embeddedPaths() { + Concessione c=TestModel.prepareConcessione(); + c=TestModel.setIds(c); + + + + LayerConcessione p=(LayerConcessione) c.getContentByPath(Paths.POSIZIONAMENTO); + assertEquals(c.getPosizionamentoScavo(), p); + + RelazioneScavo rel=(RelazioneScavo) c.getContentByPath(Paths.RELAZIONE); + assertEquals(c.getRelazioneScavo(), rel); + + for(int i=0;i{l.setMongo_id(rnd());}); + c.getImmaginiRappresentative().forEach((UploadedImage i)->{i.setMongo_id(rnd());}); + return c; + } + + public static Concessione prepareEmptyConcessione() { + Concessione concessione=new Concessione(); + + // Generic fields + + // Concessione fields + + + + + concessione.setNome("MONGO Italia, forse, ma su "); + concessione.setIntroduzione("This is my MONGO project"); + concessione.setDescrizioneContenuto("It contains this and that"); + + concessione.setAuthors(Arrays.asList(new String[] {"Some one","Some, oneelse"})); + + concessione.setContributore("Contrib 1"); + concessione.setTitolari(Arrays.asList(new String[] {"Some one","Some, oneelse"})); + concessione.setResponsabile("Someone"); + concessione.setEditore("Editore"); + + concessione.setFontiFinanziamento(Arrays.asList(new String[] {"Big pharma","Pentagon"})); + + + concessione.setSoggetto(Arrays.asList(new String[] {"Research Excavation","Archeology"})); + + + concessione.setDataInizioProgetto(LocalDateTime.now()); + concessione.setDataFineProgetto(LocalDateTime.now()); + + concessione.setLicenzaID("CC-BY"); + + concessione.setTitolareLicenza(Arrays.asList(new String[] {"Qualcun altro"})); + concessione.setTitolareCopyright(Arrays.asList(new String[] {"Chiedilo in giro"})); + + concessione.setParoleChiaveLibere(Arrays.asList(new String[] {"Robba","Stuff"})); + concessione.setParoleChiaveICCD(Arrays.asList(new String[] {"vattelapesca","somthing something"})); + + + concessione.setCentroidLat(43.0); //N-S + concessione.setCentroidLong(9.0); //E-W + + return concessione; + } + + public static Concessione prepareConcessione() { + + Concessione concessione=prepareEmptyConcessione(); + + + + // Attachments + + // Relazione scavo + RelazioneScavo relScavo=new RelazioneScavo(); + + relScavo.setAbstractSection("simple abstract section"); + relScavo.setResponsabili(concessione.getAuthors()); + + concessione.setRelazioneScavo(relScavo); + //Immagini rappresentative + ArrayList imgs=new ArrayList<>(); + for(int i=0;i<5;i++) { + UploadedImage img=new UploadedImage(); + img.setTitolo("My image number "+i); + img.setDidascalia("You can see my image number "+i); + img.setFormat("TIFF"); + img.setCreationTime(LocalDateTime.now()); + img.setResponsabili(concessione.getAuthors()); + imgs.add(img); + + } + concessione.setImmaginiRappresentative(imgs); + //Posizionamento + LayerConcessione posizionamento=new LayerConcessione(); + posizionamento.setValutazioneQualita("Secondo me si"); + posizionamento.setMetodoRaccoltaDati("Fattobbene"); + posizionamento.setScalaAcquisizione("1:10000"); + posizionamento.setAuthors(concessione.getAuthors()); + concessione.setPosizionamentoScavo(posizionamento); + + // Piante fine scavo + ArrayList piante=new ArrayList(); + for(int i=0;i<4;i++) { + LayerConcessione pianta=new LayerConcessione(); + pianta.setValutazioneQualita("Secondo me si"); + pianta.setMetodoRaccoltaDati("Fattobbene"); + pianta.setScalaAcquisizione("1:10000"); + pianta.setAuthors(concessione.getAuthors()); + pianta.setPolicy(AccessPolicy.RESTRICTED); + piante.add(pianta); + } + concessione.setPianteFineScavo(piante); + + return concessione; + } + +}