Path embedded support
This commit is contained in:
parent
888c14ad69
commit
f6756413d6
|
@ -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<? extends AssociatedContent> 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<? extends AssociatedContent> 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<? extends AssociatedContent> 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<? extends AssociatedContent> 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<LayerConcessione>();
|
||||
pianteFineScavo.add((LayerConcessione) toSet);
|
||||
break;
|
||||
}
|
||||
case Paths.IMMAGINI: {
|
||||
if(immaginiRappresentative==null)immaginiRappresentative=new ArrayList<UploadedImage>();
|
||||
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();
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<c.getPianteFineScavo().size();i++) {
|
||||
LayerConcessione l=(LayerConcessione) c.getContentByPath(Paths.piantaByIndex(i));
|
||||
assertEquals(c.getPianteFineScavo().get(i),l);
|
||||
}
|
||||
|
||||
for(int i=0;i<c.getImmaginiRappresentative().size();i++) {
|
||||
UploadedImage l=(UploadedImage) c.getContentByPath(Paths.imgByIndex(i));
|
||||
assertEquals(c.getImmaginiRappresentative().get(i),l);
|
||||
}
|
||||
|
||||
|
||||
for(int i=0;i<c.getPianteFineScavo().size();i++) {
|
||||
LayerConcessione layer=c.getPianteFineScavo().get(i);
|
||||
LayerConcessione l=(LayerConcessione) c.getContentByPath(Paths.piantaById(layer.getMongo_id()));
|
||||
assertEquals(layer,l);
|
||||
}
|
||||
|
||||
|
||||
|
||||
for(int i=0;i<c.getImmaginiRappresentative().size();i++) {
|
||||
UploadedImage layer=c.getImmaginiRappresentative().get(i);
|
||||
UploadedImage l=(UploadedImage) c.getContentByPath(Paths.imgById(layer.getMongo_id()));
|
||||
assertEquals(layer,l);
|
||||
}
|
||||
|
||||
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
package org.gcube.application.geoportal.common.model;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
|
||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||
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;
|
||||
|
||||
public class TestModel {
|
||||
|
||||
private static final String rnd() {
|
||||
return UUID.randomUUID().toString().replace("-", "_");
|
||||
}
|
||||
|
||||
|
||||
public static final Concessione setIds(Concessione c) {
|
||||
c.setMongo_id(rnd());
|
||||
c.getRelazioneScavo().setMongo_id(rnd());
|
||||
c.getPosizionamentoScavo().setMongo_id(rnd());
|
||||
c.getPianteFineScavo().forEach((LayerConcessione l)->{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<UploadedImage> 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<LayerConcessione> piante=new ArrayList<LayerConcessione>();
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue