Project interface

This commit is contained in:
Fabio Sinibaldi 2020-12-04 18:37:15 +01:00
parent f4be76d930
commit 70287f45ef
12 changed files with 292 additions and 104 deletions

View File

@ -4,6 +4,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
## [v1.0.1-SNAPSHOT] 2020-11-11 ## [v1.0.1-SNAPSHOT] 2020-11-11
Project interface
## [v1.0.0] 2020-11-11 ## [v1.0.0] 2020-11-11
First release First release

View File

@ -96,7 +96,7 @@
<dependency> <dependency>
<groupId>org.gcube.application</groupId> <groupId>org.gcube.application</groupId>
<artifactId>geoportal-logic</artifactId> <artifactId>geoportal-logic</artifactId>
<version>[1.0.4,2.0.0)</version> <version>[1.0.4-SNAPSHOT,2.0.0)</version>
</dependency> </dependency>

View File

@ -1,6 +1,5 @@
package org.gcube.application.geoportal.service.engine; package org.gcube.application.geoportal.service.engine;
import java.util.Collections;
import java.util.Map; import java.util.Map;
import org.gcube.application.geoportal.common.model.profile.Profile; import org.gcube.application.geoportal.common.model.profile.Profile;
@ -27,10 +26,8 @@ public class ProfileMapCache extends AbstractScopedMap<Map<String,Profile>> {
@Override @Override
protected Map<String, Profile> retrieveObject() throws ConfigurationException { protected Map<String, Profile> retrieveObject() throws ConfigurationException {
//TODO load from IS // TODO Auto-generated method stub
// Profile fakeProfile=new Profile(); return null;
return Collections.singletonMap(null, null);
} }
} }

View File

@ -1,17 +1,17 @@
package org.gcube.application.geoportal.service.engine.mongo; package org.gcube.application.geoportal.service.engine.mongo;
import org.bson.Document; import org.bson.Document;
import org.gcube.application.geoportal.common.model.profile.Profile; import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.project.Project; import org.gcube.application.geoportal.common.model.project.Project;
import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.model.fault.ConfigurationException;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable; import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoDatabase;
public class MongoManager { public abstract class MongoManager {
private MongoClient client=null; private MongoClient client=null;
@ -19,14 +19,16 @@ public class MongoManager {
public MongoManager() throws ConfigurationException { public MongoManager() throws ConfigurationException {
client=ImplementationProvider.get().getMongoClientProvider().getObject(); // client=ImplementationProvider.get().getMongoClientProvider().getObject();
// init profile // init profile
} }
private MongoDatabase getDatabase() { // private abstract MongoDatabase getDatabase() {
return client.getDatabase("gna-db"); // return client.getDatabase("gna-db");
} // }
protected abstract MongoDatabase getDatabase();
//*********** PROJECTS //*********** PROJECTS
public void insert(Project proj, Profile profile) { public void insert(Project proj, Profile profile) {

View File

@ -0,0 +1,5 @@
package org.gcube.application.geoportal.service.engine.mongo;
public class ProfiledMongoManager {
}

View File

@ -0,0 +1,8 @@
package org.gcube.application.geoportal.service.rest;
public class Commons {
}

View File

@ -0,0 +1,33 @@
package org.gcube.application.geoportal.service.rest;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class GuardedMethod<T> {
private T result=null;
public GuardedMethod<T> execute() throws WebApplicationException{
try {
result=run();
return this;
}catch(WebApplicationException e) {
throw e;
}catch(Throwable t) {
log.error("Unexpected error ",t);
throw new WebApplicationException("Unexpected internal error", t,Status.INTERNAL_SERVER_ERROR);
}
}
public T getResult() {
return result;
}
protected abstract T run() throws Exception,WebApplicationException;
}

View File

@ -1,7 +1,11 @@
package org.gcube.application.geoportal.service.rest; package org.gcube.application.geoportal.service.rest;
import java.util.Collections;
import java.util.List;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT; import javax.ws.rs.PUT;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
@ -9,6 +13,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException; import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.project.Project; import org.gcube.application.geoportal.common.model.project.Project;
import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.InterfaceConstants;
@ -18,61 +23,105 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class Projects { public class Projects {
// GET BY ID //***************** GENERIC PROJECTS
// GET ALL
@GET @GET
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}") public List<Project> getAll() {
public Project getByID(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) { return new GuardedMethod<List<Project>>() {
try { protected List<Project> run() throws Exception ,WebApplicationException {
log.info("Looking for profile [ID :{} ]",id); return Collections.singletonList(new Project());
throw new RuntimeException("Feature not yet available"); };
}catch(WebApplicationException e){ }.execute().getResult();
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);
}
} }
@POST
// GET ALL (Filters apply) @Consumes(MediaType.APPLICATION_JSON)
@GET
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public Project getAll() { @Path("/search")
try { public List<Project> getFilteredAll(Document filter){
log.info("Loading all projects.."); return new GuardedMethod<List<Project>>() {
throw new RuntimeException("Feature not yet available"); protected List<Project> run() throws Exception ,WebApplicationException {
}catch(WebApplicationException e){ return Collections.singletonList(new Project());
log.warn("Unable to serve request",e); };
throw e; }.execute().getResult();
}catch(Throwable e){
log.warn("Unable to serve request",e);
throw new WebApplicationException("Unable to serve request", e);
}
} }
//***************** BY PROFILE ID
// Create new Project // Create new Project
@PUT @PUT
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
public Project registerNew(Project toRegister) { @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
try { public Project registerNew(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId,
log.info("Loading all projects.."); Document toRegister) {
throw new RuntimeException("Feature not yet available"); return new GuardedMethod<Project>() {
}catch(WebApplicationException e){ @Override
log.warn("Unable to serve request",e); protected Project run() throws Exception, WebApplicationException {
throw e; return new Project();
}catch(Throwable e){ }
log.warn("Unable to serve request",e); }.execute().getResult();
throw new WebApplicationException("Unable to serve request", e); }
}
// GET ALL (Filters apply)
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/search/{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
public List<Project> getFilteredAllInProfiles(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId,
Document filters) {
return new GuardedMethod<List<Project>>() {
protected List<Project> run() throws Exception ,WebApplicationException {
return Collections.singletonList(new Project());
};
}.execute().getResult();
}
// GET ALL
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
public List<Project> getAllinProfile(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId) {
return new GuardedMethod<List<Project>>() {
protected List<Project> run() throws Exception ,WebApplicationException {
return Collections.singletonList(new Project());
};
}.execute().getResult();
}
//***************** BY PROFILE ID + PROJECT ID
// GET BY ID
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public Project getByID(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profile,
@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
Project toReturn=new GuardedMethod<Project>() {
@Override
protected Project run() throws Exception ,WebApplicationException{
return new Project();
}
}.execute().getResult();
return toReturn;
}
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public Project updateDocument(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profile,
@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,Document toSetDocument) {
Project toReturn=new GuardedMethod<Project>() {
@Override
protected Project run() throws Exception ,WebApplicationException{
return new Project();
}
}.execute().getResult();
return toReturn;
} }
// Modify Project Document
// Delete Project
} }

View File

@ -0,0 +1,51 @@
package org.gcube.application.geoportal.service;
import javax.persistence.EntityManagerFactory;
import javax.ws.rs.core.Application;
import org.gcube.application.geoportal.managers.AbstractRecordManager;
import org.gcube.application.geoportal.model.fault.ConfigurationException;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.ScopedEMFProvider;
import org.gcube.application.geoportal.service.engine.StorageClientProvider;
import org.gcube.application.geoportal.service.legacy.TokenSetter;
import org.gcube.contentmanagement.blobstorage.service.IClient;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.BeforeClass;
public class BasicServiceTestUnit extends JerseyTest {
@Override
protected Application configure() {
return new GeoPortalService();
}
@BeforeClass
public static void init() {
String scope="/gcube/devsec/devVRE";
AbstractRecordManager.setDefaultProvider(
new ScopedEMFProvider(){
@Override
public EntityManagerFactory getFactory() {
// System.err.println("***********************SETTING DEBUG CONTEXT******************");
TokenSetter.set(scope);
return super.getFactory();
}
});
ImplementationProvider.get().setStorageProvider(new StorageClientProvider() {
@Override
public IClient getObject() throws ConfigurationException {
TokenSetter.set(scope);
return super.getObject();
}
});
}
}

View File

@ -0,0 +1,79 @@
package org.gcube.application.geoportal.service;
import java.util.Collections;
import java.util.List;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.project.Project;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.junit.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ProjectTests extends BasicServiceTestUnit{
String testProfileId="profiled_concessione";
String projectId="asdlkjgdasfjklgadjhkl";
@Test
public void getAll() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
System.out.println(target.request(MediaType.APPLICATION_JSON).get(List.class));
}
@Test
public void getFilteredAll() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
Document document =new Document(Collections.singletonMap("key", "value"));
System.out.println(target.path("search").request(MediaType.APPLICATION_JSON).
post(Entity.entity(document, MediaType.APPLICATION_JSON)));
}
@Test
public void getAllByProfile() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
System.out.println(target.path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class));
}
@Test
public void getFilteredByProfile() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
Document document =new Document(Collections.singletonMap("key", "value"));
System.out.println(target.path("search").path(testProfileId).request(MediaType.APPLICATION_JSON).
post(Entity.entity(document, MediaType.APPLICATION_JSON)));
}
@Test
public void getById() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).get().readEntity(String.class));
}
@Test
public void registerNew() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
Document document =new Document(Collections.singletonMap("key", "value"));
System.out.println(target.path(testProfileId).request(MediaType.APPLICATION_JSON).
put(Entity.entity(document, MediaType.APPLICATION_JSON)));
}
@Test
public void updateDocument() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
Document document =new Document(Collections.singletonMap("key", "value"));
System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).
put(Entity.entity(document, MediaType.APPLICATION_JSON)));
}
}

View File

@ -8,17 +8,14 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import javax.persistence.EntityManagerFactory;
import javax.ws.rs.WebApplicationException; import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity; import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget; import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.Files; import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.managers.AbstractRecordManager;
import org.gcube.application.geoportal.model.concessioni.Concessione; import org.gcube.application.geoportal.model.concessioni.Concessione;
import org.gcube.application.geoportal.model.concessioni.LayerConcessione; import org.gcube.application.geoportal.model.concessioni.LayerConcessione;
import org.gcube.application.geoportal.model.content.AssociatedContent; import org.gcube.application.geoportal.model.content.AssociatedContent;
@ -26,58 +23,23 @@ import org.gcube.application.geoportal.model.content.UploadedImage;
import org.gcube.application.geoportal.model.fault.ConfigurationException; import org.gcube.application.geoportal.model.fault.ConfigurationException;
import org.gcube.application.geoportal.model.report.PublicationReport; import org.gcube.application.geoportal.model.report.PublicationReport;
import org.gcube.application.geoportal.model.report.ValidationReport.ValidationStatus; import org.gcube.application.geoportal.model.report.ValidationReport.ValidationStatus;
import org.gcube.application.geoportal.service.GeoPortalService; import org.gcube.application.geoportal.service.BasicServiceTestUnit;
import org.gcube.application.geoportal.service.engine.ImplementationProvider; import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.ScopedEMFProvider;
import org.gcube.application.geoportal.service.engine.StorageClientProvider;
import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest;
import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.SHUBFileDescriptor; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.SHUBFileDescriptor;
import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.Section; import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.Section;
import org.gcube.application.geoportal.service.utils.Serialization; import org.gcube.application.geoportal.service.utils.Serialization;
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException; import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
import org.gcube.contentmanagement.blobstorage.service.IClient;
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class ConcessioniTest extends JerseyTest { public class ConcessioniTest extends BasicServiceTestUnit {
@Override
protected Application configure() {
return new GeoPortalService();
}
@BeforeClass
public static void init() {
String scope="/gcube/devsec/devVRE";
AbstractRecordManager.setDefaultProvider(
new ScopedEMFProvider(){
@Override
public EntityManagerFactory getFactory() {
// System.err.println("***********************SETTING DEBUG CONTEXT******************");
TokenSetter.set(scope);
return super.getFactory();
}
});
ImplementationProvider.get().setStorageProvider(new StorageClientProvider() {
@Override
public IClient getObject() throws ConfigurationException {
TokenSetter.set(scope);
return super.getObject();
}
});
}
@Test @Test
public void readId() { public void readId() {

View File

@ -40,11 +40,11 @@ public class MongoTests {
@Test @Test
public void listProfiles() throws JsonProcessingException, IOException, ConfigurationException { public void listProfiles() throws JsonProcessingException, IOException, ConfigurationException {
MongoManager manager=new MongoManager(); // MongoManager manager=new MongoManager();
Profile f=Serialization.mapper.readerFor(Profile.class).readValue( // Profile f=Serialization.mapper.readerFor(Profile.class).readValue(
Files.getFileFromResources("fakeProfile.json")); // Files.getFileFromResources("fakeProfile.json"));
//
manager.iterate(new Document(),f).forEach(printBlock); // manager.iterate(new Document(),f).forEach(printBlock);
} }
// @Test // @Test