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
Project interface
## [v1.0.0] 2020-11-11
First release

View File

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

View File

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

View File

@ -1,17 +1,17 @@
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 com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MongoManager {
public abstract class MongoManager {
private MongoClient client=null;
@ -19,14 +19,16 @@ public class MongoManager {
public MongoManager() throws ConfigurationException {
client=ImplementationProvider.get().getMongoClientProvider().getObject();
// client=ImplementationProvider.get().getMongoClientProvider().getObject();
// init profile
}
private MongoDatabase getDatabase() {
return client.getDatabase("gna-db");
}
// private abstract MongoDatabase getDatabase() {
// return client.getDatabase("gna-db");
// }
protected abstract MongoDatabase getDatabase();
//*********** PROJECTS
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;
import java.util.Collections;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@ -9,6 +13,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
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;
@ -18,61 +23,105 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Projects {
// GET BY ID
//***************** GENERIC PROJECTS
// GET ALL
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public Project getByID(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
try {
log.info("Looking for profile [ID :{} ]",id);
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);
}
public List<Project> getAll() {
return new GuardedMethod<List<Project>>() {
protected List<Project> run() throws Exception ,WebApplicationException {
return Collections.singletonList(new Project());
};
}.execute().getResult();
}
// GET ALL (Filters apply)
@GET
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Project getAll() {
try {
log.info("Loading all projects..");
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);
}
@Path("/search")
public List<Project> getFilteredAll(Document filter){
return new GuardedMethod<List<Project>>() {
protected List<Project> run() throws Exception ,WebApplicationException {
return Collections.singletonList(new Project());
};
}.execute().getResult();
}
//***************** BY PROFILE ID
// Create new Project
@PUT
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Project registerNew(Project toRegister) {
try {
log.info("Loading all projects..");
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);
}
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
public Project registerNew(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId,
Document toRegister) {
return new GuardedMethod<Project>() {
@Override
protected Project run() throws Exception, WebApplicationException {
return new Project();
}
}.execute().getResult();
}
// 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.util.Collection;
import javax.persistence.EntityManagerFactory;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
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.LayerConcessione;
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.report.PublicationReport;
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.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.SHUBFileDescriptor;
import org.gcube.application.geoportal.service.model.internal.rest.AddSectionToConcessioneRequest.Section;
import org.gcube.application.geoportal.service.utils.Serialization;
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.glassfish.jersey.test.JerseyTest;
import org.junit.BeforeClass;
import org.junit.Test;
import lombok.extern.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
public void readId() {

View File

@ -40,11 +40,11 @@ public class MongoTests {
@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);
// MongoManager manager=new MongoManager();
// Profile f=Serialization.mapper.readerFor(Profile.class).readValue(
// Files.getFileFromResources("fakeProfile.json"));
//
// manager.iterate(new Document(),f).forEach(printBlock);
}
// @Test