From 28499b6a2bb3dfbfbe28e2f8483ac7047b002808 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 18 Nov 2020 18:06:38 +0100 Subject: [PATCH] Mongo --- .../geoportal/service/ServiceConstants.java | 6 + .../engine/ProjectsArchiveManager.java | 51 ------- .../engine/ProjectsArchiveManagerI.java | 19 --- .../engine/mongo/DefaultMongoProvider.java | 56 ++++++++ .../engine/mongo/MongoClientProvider.java | 3 +- .../service/engine/mongo/MongoManager.java | 61 ++++++--- .../geoportal/service/model/Profile.java | 29 ---- .../geoportal/service/model/Project.java | 5 - .../geoportal/service/model/Section.java | 5 - .../model/internal/db/MongoConnection.java | 16 +++ .../geoportal/service/rest/Projects.java | 2 +- .../geoportal/service/rest/Sections.java | 77 +++++------ .../geoportal/service/utils/ISUtils.java | 124 ++++++++++++++++++ .../service/utils/Serialization.java | 24 ++++ .../geoportal/service/legacy/MongoTests.java | 57 ++++++++ src/test/resources/Concessione.json | 3 + src/test/resources/fakeProfile.json | 29 ++++ 17 files changed, 397 insertions(+), 170 deletions(-) delete mode 100644 src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManager.java delete mode 100644 src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManagerI.java create mode 100644 src/main/java/org/gcube/application/geoportal/service/engine/mongo/DefaultMongoProvider.java delete mode 100644 src/main/java/org/gcube/application/geoportal/service/model/Profile.java delete mode 100644 src/main/java/org/gcube/application/geoportal/service/model/Project.java delete mode 100644 src/main/java/org/gcube/application/geoportal/service/model/Section.java create mode 100644 src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java create mode 100644 src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java create mode 100644 src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java create mode 100644 src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java create mode 100644 src/test/resources/Concessione.json create mode 100644 src/test/resources/fakeProfile.json diff --git a/src/main/java/org/gcube/application/geoportal/service/ServiceConstants.java b/src/main/java/org/gcube/application/geoportal/service/ServiceConstants.java index db3ed7d..8b46015 100644 --- a/src/main/java/org/gcube/application/geoportal/service/ServiceConstants.java +++ b/src/main/java/org/gcube/application/geoportal/service/ServiceConstants.java @@ -3,6 +3,12 @@ package org.gcube.application.geoportal.service; public class ServiceConstants { + public static final String SE_GNA_DB_FLAG="GNA_DB"; + public static final String SE_GNA_DB_CATEGORY="Database"; + + public static final String MONGO_SE_PLATFORM="mongodb"; + public static final String MONGO_SE_GNA_FLAG="internal-db"; + diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManager.java b/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManager.java deleted file mode 100644 index 9c88fd4..0000000 --- a/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManager.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.gcube.application.geoportal.service.engine; - -import java.util.Collection; - -import org.gcube.application.geoportal.service.model.Project; - -public class ProjectsArchiveManager implements ProjectsArchiveManagerI { - - - - - - @Override - public Project getByID(String ID) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Collection getByFilters() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Project addSection() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Project createNew(Project toCreate) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Project publish(String id) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Project validate(String id) { - // TODO Auto-generated method stub - return null; - } - - - -} diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManagerI.java b/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManagerI.java deleted file mode 100644 index bcd3091..0000000 --- a/src/main/java/org/gcube/application/geoportal/service/engine/ProjectsArchiveManagerI.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.gcube.application.geoportal.service.engine; - -import java.util.Collection; - -import org.gcube.application.geoportal.service.model.Project; - -public interface ProjectsArchiveManagerI { - - public Project getByID(String id); - - public Collection getByFilters(); - - public Project addSection(); - - public Project createNew(Project toCreate); - - public Project publish(String id); - public Project validate(String id); -} diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/DefaultMongoProvider.java b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/DefaultMongoProvider.java new file mode 100644 index 0000000..65705a4 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/DefaultMongoProvider.java @@ -0,0 +1,56 @@ +package org.gcube.application.geoportal.service.engine.mongo; + +import java.util.Arrays; + +import org.gcube.application.geoportal.model.fault.ConfigurationException; +import org.gcube.application.geoportal.service.ServiceConstants; +import org.gcube.application.geoportal.service.model.internal.db.MongoConnection; +import org.gcube.application.geoportal.service.utils.ISUtils; + +import com.mongodb.MongoClient; +import com.mongodb.MongoClientOptions; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; + +import lombok.Synchronized; + +public class DefaultMongoProvider implements MongoClientProvider { + + public DefaultMongoProvider() { + // TODO Auto-generated constructor stub + } + + @Override + public void init() { + + } + + @Override + public void shustdown() { + // TODO Auto-generated method stub + + } + + + private static MongoClient instance=null; + @Override + @Synchronized + public MongoClient getClient() throws ConfigurationException{ + if(instance==null) { + MongoConnection conn= ISUtils.queryForMongoDB(ServiceConstants.MONGO_SE_PLATFORM, ServiceConstants.MONGO_SE_GNA_FLAG); + + + MongoCredential credential = MongoCredential.createCredential(conn.getUser(), conn.getDatabase(), + conn.getPassword().toCharArray()); + + MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true).build(); + + instance = new MongoClient(new ServerAddress(conn.getHosts().get(0),conn.getPort()), + credential, + options); + } + + return instance; + } + +} diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoClientProvider.java b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoClientProvider.java index 35c75ee..bdd236b 100644 --- a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoClientProvider.java +++ b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoClientProvider.java @@ -1,5 +1,6 @@ package org.gcube.application.geoportal.service.engine.mongo; +import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.service.engine.Engine; import com.mongodb.MongoClient; @@ -7,7 +8,7 @@ import com.mongodb.MongoClient; public interface MongoClientProvider extends Engine{ - public MongoClient getClient(); + public MongoClient getClient() throws ConfigurationException; } diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java index 0dd42be..a9b61b5 100644 --- a/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java +++ b/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManager.java @@ -1,39 +1,68 @@ package org.gcube.application.geoportal.service.engine.mongo; +import org.bson.Document; +import org.gcube.application.geoportal.common.model.profile.Profile; +import org.gcube.application.geoportal.common.model.project.Project; +import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.service.engine.ImplementationProvider; -import org.gcube.application.geoportal.service.model.Project; import com.mongodb.MongoClient; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; public class MongoManager { private MongoClient client=null; - public MongoManager() { + public MongoManager() throws ConfigurationException { client=ImplementationProvider.get().getMongoClientProvider().getClient(); + + // init profile } + private MongoDatabase getDatabase() { + return client.getDatabase("gna-db"); + } //*********** PROJECTS -// public Project insert(Project proj) { -// // TODO check if existing DB -// // TODO check if existing collection -// client. -// -// } + public void insert(Project proj, Profile profile) { + MongoDatabase database=getDatabase(); + // TODO check if existing DB + + String collectionName=profile.getName(); + + MongoCollection collection = database.getCollection(collectionName); + // TODO check if existing collection + + + collection.insertOne(Document.parse(proj.toString())); + + + } // public Project update(Project proj) { // // } -// -// public void delete(String id) { -// -// } -// public Project load(String id) { -// -// } + + public void delete(String id) { + + } + public Document getById(String id,Profile p) { + MongoDatabase database=getDatabase(); + MongoCollection coll=database.getCollection(p.getName()); + + return coll.find(new Document("id",id)).first(); + } + + public FindIterable iterate(Document filter,Profile p) { + MongoDatabase database=getDatabase(); + MongoCollection coll=database.getCollection(p.getName()); + + return coll.find(filter); + } //********** PROFILES - // + } diff --git a/src/main/java/org/gcube/application/geoportal/service/model/Profile.java b/src/main/java/org/gcube/application/geoportal/service/model/Profile.java deleted file mode 100644 index 9b89579..0000000 --- a/src/main/java/org/gcube/application/geoportal/service/model/Profile.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.gcube.application.geoportal.service.model; - -public class Profile { - -/** - * Profile{ - _id : - fields :[ - field : { - label : - description : - type: String,Numeric,Date, - File,Document,Layer - cardinality: - defaultValue : - validation :{type : // e.g. regexp, list} - } - ] - default_compiler:{type : //XSLT,JAVA_CLAS} - validator: {“} - iso_mapper: {“} - centroid_fields : {“} - index_definition : } - - * - * - */ - -} diff --git a/src/main/java/org/gcube/application/geoportal/service/model/Project.java b/src/main/java/org/gcube/application/geoportal/service/model/Project.java deleted file mode 100644 index f7f8490..0000000 --- a/src/main/java/org/gcube/application/geoportal/service/model/Project.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.gcube.application.geoportal.service.model; - -public class Project { - -} diff --git a/src/main/java/org/gcube/application/geoportal/service/model/Section.java b/src/main/java/org/gcube/application/geoportal/service/model/Section.java deleted file mode 100644 index 2202b53..0000000 --- a/src/main/java/org/gcube/application/geoportal/service/model/Section.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.gcube.application.geoportal.service.model; - -public class Section { - -} diff --git a/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java b/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java new file mode 100644 index 0000000..8fbe005 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java @@ -0,0 +1,16 @@ +package org.gcube.application.geoportal.service.model.internal.db; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; + +@Data +public class MongoConnection { + + private String user; + private String password; + private String database; + private List hosts=new ArrayList(); + private int port; +} diff --git a/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java b/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java index bec5645..2704b8b 100644 --- a/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java +++ b/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java @@ -9,8 +9,8 @@ import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; +import org.gcube.application.geoportal.common.model.project.Project; import org.gcube.application.geoportal.common.rest.InterfaceConstants; -import org.gcube.application.geoportal.service.model.Project; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/org/gcube/application/geoportal/service/rest/Sections.java b/src/main/java/org/gcube/application/geoportal/service/rest/Sections.java index 3cf2f1a..63b9ae0 100644 --- a/src/main/java/org/gcube/application/geoportal/service/rest/Sections.java +++ b/src/main/java/org/gcube/application/geoportal/service/rest/Sections.java @@ -1,18 +1,9 @@ package org.gcube.application.geoportal.service.rest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; import org.gcube.application.geoportal.common.rest.InterfaceConstants; -import org.gcube.application.geoportal.service.model.Project; -import org.gcube.application.geoportal.service.model.Section; import lombok.extern.slf4j.Slf4j; @@ -24,38 +15,38 @@ public class Sections { // Add Section to Project Document - @PUT - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - public Section registerNewSection(Section toRegister) { - try { - log.info("Creating new Section [PROJECT_ID:{}]",projectID); - throw new RuntimeException("Feature not yet available"); - }catch(WebApplicationException e){ - log.warn("Unable to serve request",e); - throw e; - }catch(Throwable e){ - log.warn("Unable to serve request",e); - throw new WebApplicationException("Unable to serve request", e); - } - } - - - // Remove Section to Project Document - @DELETE - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @Path("{"+InterfaceConstants.Parameters.SECTION_ID+"}") - public Project deleteSection(@QueryParam(InterfaceConstants.Parameters.SECTION_ID) String sectionID) { - try { - log.info("Deleting Section [ID : {}, PROJECT_ID:{}]",projectID,sectionID); - throw new RuntimeException("Feature not yet available"); - }catch(WebApplicationException e){ - log.warn("Unable to serve request",e); - throw e; - }catch(Throwable e){ - log.warn("Unable to serve request",e); - throw new WebApplicationException("Unable to serve request", e); - } - } +// @PUT +// @Produces(MediaType.APPLICATION_JSON) +// @Consumes(MediaType.APPLICATION_JSON) +// public Section registerNewSection(Section toRegister) { +// try { +// log.info("Creating new Section [PROJECT_ID:{}]",projectID); +// throw new RuntimeException("Feature not yet available"); +// }catch(WebApplicationException e){ +// log.warn("Unable to serve request",e); +// throw e; +// }catch(Throwable e){ +// log.warn("Unable to serve request",e); +// throw new WebApplicationException("Unable to serve request", e); +// } +// } +// +// +// // Remove Section to Project Document +// @DELETE +// @Produces(MediaType.APPLICATION_JSON) +// @Consumes(MediaType.APPLICATION_JSON) +// @Path("{"+InterfaceConstants.Parameters.SECTION_ID+"}") +// public Project deleteSection(@QueryParam(InterfaceConstants.Parameters.SECTION_ID) String sectionID) { +// try { +// log.info("Deleting Section [ID : {}, PROJECT_ID:{}]",projectID,sectionID); +// throw new RuntimeException("Feature not yet available"); +// }catch(WebApplicationException e){ +// log.warn("Unable to serve request",e); +// throw e; +// }catch(Throwable e){ +// log.warn("Unable to serve request",e); +// throw new WebApplicationException("Unable to serve request", e); +// } +// } } diff --git a/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java b/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java new file mode 100644 index 0000000..90e2e76 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java @@ -0,0 +1,124 @@ +package org.gcube.application.geoportal.service.utils; + +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +import java.util.List; +import java.util.Map; + +import org.gcube.application.geoportal.model.db.DatabaseConnection; +import org.gcube.application.geoportal.model.fault.ConfigurationException; +import org.gcube.application.geoportal.service.ServiceConstants; +import org.gcube.application.geoportal.service.model.internal.db.MongoConnection; +import org.gcube.common.encryption.encrypter.StringEncrypter; +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.Property; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; + +public class ISUtils { + + public static DatabaseConnection queryForDB(String platform,String flag) throws ConfigurationException { + + List found=getAP(platform, flag); + if(found.size()>1) { + throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flag); + }else if (found.isEmpty()){ + throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flag); + } + AccessPoint point=found.get(0); + + + return new DatabaseConnection(point.username(),decryptString(point.password()),point.address()); + + } + + + public static List getAP(String platform,String flag) { + SimpleQuery query = queryFor(ServiceEndpoint.class); + + query.addCondition("$resource/Profile/Category/text() eq '"+ServiceConstants.SE_GNA_DB_CATEGORY+"'") + .addCondition("$resource/Profile/Platform/Name/text() eq '"+platform+"'") + .addCondition("$resource/Profile/AccessPoint//Property[Name/text() eq '"+ + ServiceConstants.SE_GNA_DB_FLAG+"'][Value/text() eq '"+flag+"']") + .setResult("$resource/Profile/AccessPoint"); + + DiscoveryClient client = clientFor(AccessPoint.class); + return client.submit(query); + } + + public static MongoConnection queryForMongoDB(String platform,String flag) throws ConfigurationException { + + List found=getAP(platform, flag); + if(found.size()>1) { + throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flag); + }else if (found.isEmpty()){ + throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flag); + } + AccessPoint point=found.get(0); + MongoConnection toReturn=new MongoConnection(); + for(Property prop:point.properties()) { + switch(prop.name()) { + case "host" : { + toReturn.getHosts().add(prop.value()); + break;} + } + } + toReturn.getHosts().add(point.address()); + Map props=point.propertyMap(); + toReturn.setDatabase(props.get("database").value()); + toReturn.setPassword(decryptString(point.password())); + toReturn.setPort(Integer.parseInt(props.get("port").value())); + toReturn.setUser(point.username()); + + return toReturn; + } + + + + public static String getToken() throws ConfigurationException { + SimpleQuery query = queryFor(ServiceEndpoint.class); + + query.addCondition("$resource/Profile/Category/text() eq 'Application'") + .addCondition("$resource/Profile/Name/text() eq 'GNA-APP'") + .setResult("$resource/Profile/AccessPoint"); + + DiscoveryClient client = clientFor(AccessPoint.class); + + List found= client.submit(query); + if(found.size()>1) { + throw new ConfigurationException("Multiple Token SE found ["+found.size()+"] for Category : Application name : GNA-APP"); + }else if (found.isEmpty()){ + throw new ConfigurationException("No Token SE found ["+found.size()+"] for Category : Application name : GNA-APP"); + } + + AccessPoint point=found.get(0); + return decryptString(point.password()); + + } + + + public static String decryptString(String toDecrypt){ + try{ + return StringEncrypter.getEncrypter().decrypt(toDecrypt); + }catch(Exception e) { + throw new RuntimeException("Unable to decrypt : "+toDecrypt,e); + } + } + + + public static String getgCubeBaseEndpoint(String category,String name) { + + SimpleQuery query = queryFor(ServiceEndpoint.class); + + query.addCondition("$resource/Profile/Category/text() eq '"+category+"'") + .addCondition("$resource/Profile/Name/text() eq '"+name+"'"); + DiscoveryClient client = clientFor(ServiceEndpoint.class); + + AccessPoint point=client.submit(query).get(0).profile().accessPoints().asCollection().iterator().next(); + + return point.address(); + } + +} diff --git a/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java b/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java new file mode 100644 index 0000000..2246ba6 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java @@ -0,0 +1,24 @@ +package org.gcube.application.geoportal.service.utils; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +public class Serialization { + + public static ObjectMapper mapper; + + static { + mapper=new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); + mapper.registerModule(new JavaTimeModule()); + } + + public static T read(String jsonString,Class clazz) throws JsonProcessingException, IOException { + return mapper.readerFor(clazz).readValue(jsonString); + } + +} diff --git a/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java b/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java new file mode 100644 index 0000000..1c8199e --- /dev/null +++ b/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java @@ -0,0 +1,57 @@ +package org.gcube.application.geoportal.service.legacy; + +import java.io.IOException; + +import org.bson.Document; +import org.gcube.application.geoportal.common.model.legacy.Concessione; +import org.gcube.application.geoportal.common.model.profile.Profile; +import org.gcube.application.geoportal.common.utils.Files; +import org.gcube.application.geoportal.model.fault.ConfigurationException; +import org.gcube.application.geoportal.service.engine.ImplementationProvider; +import org.gcube.application.geoportal.service.engine.mongo.DefaultMongoProvider; +import org.gcube.application.geoportal.service.engine.mongo.MongoManager; +import org.gcube.application.geoportal.service.utils.Serialization; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.mongodb.Block; +import com.mongodb.MongoClient; + +public class MongoTests { + + @BeforeClass + public static final void init() { + ImplementationProvider.get().setMongoClientProvider(new DefaultMongoProvider() { + @Override + public MongoClient getClient() throws ConfigurationException { + TokenSetter.set("/gcube/devNext/NextNext"); + return super.getClient(); + } + }); + } + + + Block printBlock = new Block() { + @Override + public void apply(final Document document) { + System.out.println(document.toJson()); + } + }; + + @Test + public void listProfiles() throws JsonProcessingException, IOException, ConfigurationException { + MongoManager manager=new MongoManager(); + Profile f=Serialization.mapper.readerFor(Profile.class).readValue( + Files.getFileFromResources("fakeProfile.json")); + + manager.iterate(new Document(),f).forEach(printBlock); + } + +// @Test +// public void writeProject() { +// MongoManager manager=new MongoManager(); +// Concessione f=Serialization.mapper.readerFor(Concessione.class).readValue( +// Files.getFileFromResources("fakeProfile.json")); +// } +} diff --git a/src/test/resources/Concessione.json b/src/test/resources/Concessione.json new file mode 100644 index 0000000..4eb7c3f --- /dev/null +++ b/src/test/resources/Concessione.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/src/test/resources/fakeProfile.json b/src/test/resources/fakeProfile.json new file mode 100644 index 0000000..85e2c2b --- /dev/null +++ b/src/test/resources/fakeProfile.json @@ -0,0 +1,29 @@ +{ + "name" : "Concessioni", + "_id" : "", + "fields" :[ + { "name" : "introduzione", "label" : "Introduzione", "type" : "STRING"}, + { "label" : "Descrizione Contenuto", "type" : "STRING"}, + { "label" : "Autori", "type" : "STRING", "cardinality" : "MULTIPLE"}, + { "label" : "Contributore", "type" : "STRING"}, + { "label" : "Titolari", "type" : "STRING", "cardinality" : "MULTIPLE"}, + + { "name":"relazioneScavo", "label" : "Relazione di Scavo", "type" : "DOCUMENT"}, + { "name":"posizionameno", + "label" : "Posizionamento Scavo", + "type" : "DOCUMENT", + "fields":[ + { "label" : "Descrizione Contenuto", "type" : "STRING"}, + { "label" : "Autori", "type" : "STRING", "cardinality" : "MULTIPLE"}, + { "label" : "Contributore", "type" : "STRING"} + ] + } + ], + + "validators" : [ + {"name":"Validator Concessioni", + "type":"JAVA", + "qName":"org.gcube.application.concessioni.Validator"} + ] + +} \ No newline at end of file