Refactoring to Projects and UCD

This commit is contained in:
Fabio Sinibaldi 2022-03-04 14:23:20 +01:00
parent 8b5f25cb75
commit 148554d3c9
50 changed files with 433 additions and 413 deletions

View File

@ -1,13 +1,8 @@
package org.gcube.application.cms.plugins;
import org.gcube.application.cms.plugins.faults.InvalidProfileException;
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.model.PluginDescriptor;
import org.gcube.application.cms.plugins.reports.DocumentHandlingReport;
import org.gcube.application.cms.plugins.requests.BaseExecutionRequest;
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.List;
import java.util.Map;
@ -18,11 +13,11 @@ public abstract class AbstractPlugin implements Plugin{
protected HandlerDeclaration getConfigurationFromProfile(Profile profile) throws InvalidProfileException{
return getMultipleDeclarationsFromProfile(profile).get(0);
protected HandlerDeclaration getConfigurationFromProfile(UseCaseDescriptor useCaseDescriptor) throws InvalidProfileException{
return getMultipleDeclarationsFromProfile(useCaseDescriptor).get(0);
}
protected List<HandlerDeclaration> getMultipleDeclarationsFromProfile(Profile p)throws InvalidProfileException {
protected List<HandlerDeclaration> getMultipleDeclarationsFromProfile(UseCaseDescriptor p)throws InvalidProfileException {
Map<String,List<HandlerDeclaration>> map = p.getHandlersMapByID();
if(map.containsKey(getDescriptor().getId()))
return map.get(getDescriptor().getId());

View File

@ -3,14 +3,12 @@ package org.gcube.application.cms.plugins.reports;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.requests.BaseExecutionRequest;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
@ -45,11 +43,11 @@ public class DocumentHandlingReport<T extends BaseExecutionRequest> extends Repo
}
}
public ProfiledDocument prepareResult() throws JsonProcessingException, PluginExecutionException {
public Project prepareResult() throws JsonProcessingException, PluginExecutionException {
log.trace("Preparing document ID {} from report ... ",theRequest.getDocument().getId());
this.validate();
ProfiledDocument toReturn = theRequest.getDocument();
Project toReturn = theRequest.getDocument();
toReturn.setTheDocument(resultingDocument);
toReturn.setLifecycleInformation(toSetLifecycleInformation);

View File

@ -1,11 +1,8 @@
package org.gcube.application.cms.plugins.reports;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.Data;
import lombok.ToString;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.requests.EventExecutionRequest;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
@ToString(callSuper = true)

View File

@ -7,7 +7,7 @@ import lombok.Setter;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.requests.IndexDocumentRequest;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference;
import org.gcube.application.geoportal.common.model.document.temporal.TemporalReference;
@ -24,8 +24,8 @@ public class IndexDocumentReport extends DocumentHandlingReport<IndexDocumentReq
}
@Override
public ProfiledDocument prepareResult() throws JsonProcessingException, PluginExecutionException {
ProfiledDocument toReturn= super.prepareResult();
public Project prepareResult() throws JsonProcessingException, PluginExecutionException {
Project toReturn= super.prepareResult();
if(toSetSpatialReference != null) toReturn.setSpatialReference(toSetSpatialReference);
if(toSetTemporalReference != null) toReturn.setTemporalReference(toSetTemporalReference);
return toReturn;

View File

@ -1,10 +1,8 @@
package org.gcube.application.cms.plugins.reports;
import lombok.Data;
import lombok.NonNull;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.requests.MaterializationRequest;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
public class MaterializationReport extends DocumentHandlingReport<MaterializationRequest>{

View File

@ -4,7 +4,6 @@ import lombok.*;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.requests.EventExecutionRequest;
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import java.util.ArrayList;
import java.util.List;

View File

@ -3,15 +3,14 @@ package org.gcube.application.cms.plugins.requests;
import lombok.Data;
import org.bson.Document;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
@Data
public class BaseExecutionRequest {
Profile profile;
ProfiledDocument document;
UseCaseDescriptor useCaseDescriptor;
Project document;
Document callParameters;
public final String getMandatory(String param) throws InvalidPluginRequestException {
@ -24,7 +23,7 @@ public class BaseExecutionRequest {
}
public void validate() throws InvalidPluginRequestException {
if(profile==null)throw new InvalidPluginRequestException("Profile cannot be null ");
if(useCaseDescriptor ==null)throw new InvalidPluginRequestException("UseCaseDescriptor cannot be null ");
if(document==null) throw new InvalidPluginRequestException("Document cannot be null");
}
}

View File

@ -2,10 +2,6 @@ package org.gcube.application.cms.plugins.requests;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
@Data
@ToString(callSuper = true)

View File

@ -1,10 +1,6 @@
package org.gcube.application.cms.plugins.requests;
import lombok.Data;
import lombok.ToString;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
@ToString(callSuper = true)
public class MaterializationRequest extends BaseExecutionRequest{

View File

@ -2,11 +2,8 @@ package org.gcube.application.cms.plugins.requests;
import lombok.Data;
import lombok.ToString;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.accounting.Context;
import org.gcube.application.geoportal.common.model.document.accounting.User;
import org.gcube.application.geoportal.common.model.profile.Profile;
@Data
@ToString(callSuper = true)

View File

@ -11,7 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.gcube.application.cms.plugins.model.ComparableVersion;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import java.io.IOException;
@ -85,10 +85,10 @@ public class Serialization {
return Document.parse(mapper.writeValueAsString(obj));
}
public static final Document asDocumentWithId(ProfiledDocument doc) throws JsonProcessingException {
public static final Document asDocumentWithId(Project doc) throws JsonProcessingException {
Document toReturn =Document.parse(mapper.writeValueAsString(doc));
if(doc.getId()!=null)
toReturn.put(ProfiledDocument.ID,new ObjectId(doc.getId()));
toReturn.put(Project.ID,new ObjectId(doc.getId()));
return toReturn;
}

View File

@ -1,8 +1,7 @@
package org.gcube.application.cms.tests;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.utils.Files;
import java.io.File;
@ -12,15 +11,15 @@ import java.util.HashMap;
public class TestDocuments {
public static File BASE_FOLDER =new File("../test-data/profiledDocuments");
public static final HashMap<String, ProfiledDocument> documentMap =new HashMap<>();
public static final HashMap<String, Project> documentMap =new HashMap<>();
static{
for(File f:BASE_FOLDER.listFiles()){
try {
if(!f.isDirectory()) {
ProfiledDocument p = Serialization.read(
Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()), ProfiledDocument.class);
Project p = Serialization.read(
Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()), Project.class);
documentMap.put(f.getName(), p);
}
} catch (IOException e) {

View File

@ -1,7 +1,7 @@
package org.gcube.application.cms.tests;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.Files;
import java.io.File;
@ -13,14 +13,14 @@ public class TestProfiles {
public static File BASE_FOLDER =new File("../test-data/profiledDocuments/profiles");
public static final HashMap<String, Profile> profiles =new HashMap<>();
public static final HashMap<String, UseCaseDescriptor> profiles =new HashMap<>();
static{
for(File f:BASE_FOLDER.listFiles()){
try {
Profile p =Serialization.read(
Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()),Profile.class);
UseCaseDescriptor p =Serialization.read(
Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()), UseCaseDescriptor.class);
profiles.put(p.getId(), p);
} catch (IOException e) {
throw new RuntimeException("Unable to read "+f.getAbsolutePath(),e);

View File

@ -6,8 +6,6 @@ import java.io.IOException;
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
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.profile.Profile;
import org.junit.Assert;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@ -37,9 +35,9 @@ public class SerializationTest {
// @Test
// public void readProfile() throws JsonProcessingException, IOException {
//
// Profile concessione=mapper.readerFor(Profile.class).readValue(new File(TestConcessioniModel.getBaseFolder(),"ProfileConcessioni.json"));
// UseCaseDescriptor concessione=mapper.readerFor(UseCaseDescriptor.class).readValue(new File(TestConcessioniModel.getBaseFolder(),"ProfileConcessioni.json"));
//
// System.out.println("Profile is "+mapper.writeValueAsString(concessione));
// System.out.println("UseCaseDescriptor is "+mapper.writeValueAsString(concessione));
//
// //Assert.assertTrue(concessione .getFields().size()>0);
//

View File

@ -110,9 +110,9 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
//Materialize layers
MaterializationRequest matReq = new MaterializationRequest();
matReq.setDocument(request.getDocument());
matReq.setProfile(request.getProfile());
matReq.setUseCaseDescriptor(request.getUseCaseDescriptor());
Document params = new Document();
String workspace = request.getProfile().getId() + request.getContext().getId();
String workspace = request.getUseCaseDescriptor().getId() + request.getContext().getId();
params.put("workspace", Files.fixFilename(workspace));
@ -161,7 +161,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
IndexDocumentRequest indexRequest = new IndexDocumentRequest();
indexRequest.setDocument(request.getDocument());
indexRequest.setProfile(request.getProfile());
indexRequest.setUseCaseDescriptor(request.getUseCaseDescriptor());
Document callParameters = new Document();
callParameters.put("workspace",Files.fixFilename("gna_concessioni_"+request.getContext().getId()));
callParameters.put("indexName",Files.fixFilename("gna_concessioni_centroids_"+request.getContext().getId()));
@ -263,7 +263,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
// STATIC ROUTINES
private static final ProfiledDocument setDefaults(ProfiledDocument document){
private static final Project setDefaults(Project document){
ProfiledConcessione c=Serialization.convert(document,ProfiledConcessione.class);

View File

@ -1,10 +1,10 @@
package org.gcube.application.cms.custom.gna.concessioni.model;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
public class ProfiledConcessione extends ProfiledDocument {
public class ProfiledConcessione extends Project {
public static final String NOME="nome";
//Introduzione (descrizione del progetto)

View File

@ -5,14 +5,13 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.client.utils.Serialization;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
import org.gcube.application.geoportal.common.rest.Projects;
import org.gcube.common.clients.Call;
import org.gcube.common.clients.delegates.ProxyDelegate;
@ -21,13 +20,12 @@ import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Iterator;
@RequiredArgsConstructor
@Slf4j
public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implements ProfiledDocumentsI<T> {
public class DefaultProfiledDocumentsClient<T extends Project> implements Projects<T> {
@NonNull
protected final ProxyDelegate<WebTarget> delegate;
@ -44,7 +42,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T createNew(Document toCreate) throws RemoteException {
try {
log.debug("Creating Profiled Document (class {}, profile {}) with content {} ",
log.debug("Creating Profiled Document (class {}, useCaseDescriptor {}) with content {} ",
getManagedClass(),profileID, toCreate);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).request(MediaType.APPLICATION_JSON).
@ -70,14 +68,14 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public void deleteById(String id, Boolean force) throws RemoteException {
try {
log.debug("Deleting ID {}  profile {}  force {} ", id, profileID, force);
log.debug("Deleting ID {}  useCaseDescriptor {}  force {} ", id, profileID, force);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(id).
queryParam(InterfaceConstants.Parameters.FORCE,force).
request(MediaType.APPLICATION_JSON).delete(),getManagedClass());
};
delegate.make(call);
log.info("Deleted ID {}  profile {}  force {} ", id, profileID, force);
log.info("Deleted ID {}  useCaseDescriptor {}  force {} ", id, profileID, force);
}catch(RemoteException e){
log.error("Unexpected error ",e);
throw e;
@ -90,7 +88,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T getById(String id) throws RemoteException {
try {
log.info("Loading Document ID {} (class {}, profile {})",
log.info("Loading Document ID {} (class {}, useCaseDescriptor {})",
id, getManagedClass(),profileID);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(id).
@ -109,7 +107,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public Configuration getConfiguration() throws RemoteException {
try {
log.info("Loading Configuration for profile {}", profileID);
log.info("Loading Configuration for useCaseDescriptor {}", profileID);
Call<WebTarget, Configuration> call = endpoint -> {
return check(endpoint.path(profileID).path(InterfaceConstants.Methods.CONFIGURATION_PATH).
request(MediaType.APPLICATION_JSON).get(), Configuration.class);
@ -145,7 +143,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public String queryForJSON(QueryRequest request) throws RemoteException {
try {
log.debug("Querying profile {}  for {}",profileID,request);
log.debug("Querying useCaseDescriptor {}  for {}",profileID,request);
Call<WebTarget, String> call = endpoint -> {
return check(endpoint.path(profileID).path(InterfaceConstants.Methods.QUERY_PATH).
request(MediaType.APPLICATION_JSON).get(), String.class);
@ -163,14 +161,14 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T performStep(String id, StepExecutionRequest request) throws RemoteException{
try {
log.debug("Executing step on {} (class {}, profile {}) with request {} ",
log.debug("Executing step on {} (class {}, useCaseDescriptor {}) with request {} ",
id, getManagedClass(),profileID, request);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(request, MediaType.APPLICATION_JSON)),getManagedClass());
};
T toReturn = delegate.make(call);
log.info("Executed STEP {} on {} [profile {}, class {}] ",request.getStepID(),
log.info("Executed STEP {} on {} [useCaseDescriptor {}, class {}] ",request.getStepID(),
id,profileID,getManagedClass());
return toReturn;
}catch(RemoteException e){
@ -185,7 +183,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T registerFileSet(String id, RegisterFileSetRequest req) throws RemoteException {
try {
log.debug("Registering FileSet on {} (class {}, profile {}) with request {} ",
log.debug("Registering FileSet on {} (class {}, useCaseDescriptor {}) with request {} ",
id, getManagedClass(),profileID, req);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(InterfaceConstants.Methods.REGISTER_FILES_PATH)
@ -193,7 +191,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
post(Entity.entity(req, MediaType.APPLICATION_JSON)),getManagedClass());
};
T toReturn = delegate.make(call);
log.info("Registered FileSet on {} [profile {}, class {}]  with {}",
log.info("Registered FileSet on {} [useCaseDescriptor {}, class {}]  with {}",
id,profileID,getManagedClass(),req);
return toReturn;
}catch(RemoteException e){
@ -208,7 +206,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T deleteFileSet(String id, String path, Boolean force) throws RemoteException {
try {
log.debug("Deleting Fileset for ID {}  [profile {}  , class {}] at {} (force {} )",
log.debug("Deleting Fileset for ID {}  [useCaseDescriptor {}  , class {}] at {} (force {} )",
id, profileID,getManagedClass(),path, force);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(InterfaceConstants.Methods.DELETE_FILES_PATH).
@ -217,7 +215,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
post(Entity.entity(path, MediaType.APPLICATION_JSON)),getManagedClass());
};
T toReturn=delegate.make(call);
log.info("Deleted ID {}  profile {}  force {} ", id, profileID, force);
log.info("Deleted ID {}  useCaseDescriptor {}  force {} ", id, profileID, force);
return toReturn;
}catch(RemoteException e){
log.error("Unexpected error ",e);
@ -231,7 +229,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
@Override
public T updateDocument(String id, Document updatedDocument) throws RemoteException {
try {
log.debug("Updateing {}  [profile {}  , class {}] with ",
log.debug("Updateing {}  [useCaseDescriptor {}  , class {}] with ",
id, profileID,getManagedClass(),updatedDocument);
Call<WebTarget, T> call = endpoint -> {
return check(endpoint.path(profileID).path(id).
@ -239,7 +237,7 @@ public class DefaultProfiledDocumentsClient<T extends ProfiledDocument> implemen
put(Entity.entity(updatedDocument, MediaType.APPLICATION_JSON)),getManagedClass());
};
T toReturn=delegate.make(call);
log.info("Updated ID {}  profile {}  ", id, profileID);
log.info("Updated ID {}  useCaseDescriptor {}  ", id, profileID);
return toReturn;
}catch(RemoteException e){
log.error("Unexpected error ",e);

View File

@ -6,11 +6,11 @@ import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
import org.gcube.application.geoportal.client.legacy.ConcessioniPlugin;
import org.gcube.application.geoportal.client.legacy.MongoConcessioniPlugin;
import org.gcube.application.geoportal.client.legacy.StatefulMongoConcessioniPlugin;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.rest.ConcessioniI;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
import org.gcube.application.geoportal.common.rest.Projects;
import org.gcube.common.clients.Plugin;
import org.gcube.common.clients.ProxyBuilder;
import org.gcube.common.clients.ProxyBuilderImpl;
@ -24,25 +24,25 @@ public abstract class GeoportalAbstractPlugin <S, P> implements Plugin<S, P>{
public static ProxyBuilder<ProfiledDocumentsI<ProfiledDocument>> profiledDocuments(String profileID) {
public static ProxyBuilder<Projects<Project>> profiledDocuments(String profileID) {
ProjectsInterfacePlugin plugin=new ProjectsInterfacePlugin(profileID);
return new ProxyBuilderImpl<WebTarget, ProfiledDocumentsI<ProfiledDocument>>(plugin);
return new ProxyBuilderImpl<WebTarget, Projects<Project>>(plugin);
}
public static <C extends ProfiledDocumentsI<ProfiledDocument>> ProxyBuilder<C> profiledDocuments(String profileID, Class<C> customClient) {
public static <C extends Projects<Project>> ProxyBuilder<C> profiledDocuments(String profileID, Class<C> customClient) {
ProjectsInterfacePlugin plugin=new ProjectsInterfacePlugin(profileID);
plugin.setCustomClientImplementation(customClient);
return new ProxyBuilderImpl<WebTarget, C>(plugin);
}
public static <P extends ProfiledDocument> ProxyBuilder<ProfiledDocumentsI<P>>
public static <P extends Project> ProxyBuilder<Projects<P>>
profiledModel(String profileID, Class<P> customModel ) {
ProjectsInterfacePlugin plugin=new ProjectsInterfacePlugin(profileID);
plugin.setProfiledModel(customModel);
return new ProxyBuilderImpl<WebTarget, ProfiledDocumentsI<P>>(plugin);
return new ProxyBuilderImpl<WebTarget, Projects<P>>(plugin);
}
public static <P extends ProfiledDocument,C extends ProfiledDocumentsI<P>> ProxyBuilder<C>
public static <P extends Project,C extends Projects<P>> ProxyBuilder<C>
profiledModel(String profileID, Class<P> customModel ,Class<C> customClient) {
ProjectsInterfacePlugin plugin=new ProjectsInterfacePlugin(profileID);
plugin.setProfiledModel(customModel);

View File

@ -10,9 +10,9 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
import org.gcube.application.geoportal.common.rest.Projects;
import org.gcube.common.calls.jaxrs.GcubeService;
import org.gcube.common.calls.jaxrs.TargetFactory;
import org.gcube.common.clients.config.ProxyConfig;
@ -21,7 +21,7 @@ import org.w3c.dom.Node;
@Slf4j
@RequiredArgsConstructor
public class ProjectsInterfacePlugin<C extends DefaultProfiledDocumentsClient,P extends ProfiledDocument> extends GeoportalAbstractPlugin<WebTarget, ProfiledDocumentsI<P>>{
public class ProjectsInterfacePlugin<C extends DefaultProfiledDocumentsClient,P extends Project> extends GeoportalAbstractPlugin<WebTarget, Projects<P>>{
@NonNull
private String profileID;
@ -40,7 +40,7 @@ public class ProjectsInterfacePlugin<C extends DefaultProfiledDocumentsClient,P
@SneakyThrows //no such constructor
@Override
public ProfiledDocumentsI<P> newProxy(ProxyDelegate<WebTarget> delegate) {
public Projects<P> newProxy(ProxyDelegate<WebTarget> delegate) {
return customClientImplementation.getConstructor(ProxyDelegate.class,String.class,Class.class).
newInstance(delegate,profileID,profiledModel);
}

View File

@ -1,12 +1,10 @@
package org.gcube.application.geoportal.clients;
import lombok.Data;
import org.apache.commons.beanutils.MutableDynaClass;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
public class ProfiledConcessioniTest {
@ -18,7 +16,7 @@ public class ProfiledConcessioniTest {
public void test(){
Profile p=null;
UseCaseDescriptor p=null;
HandlerDeclaration h = p.getHandlersMapByID().get("MyID").get(0);

View File

@ -1,11 +1,10 @@
package org.gcube.application.geoportal.clients;
import com.fasterxml.jackson.databind.ser.std.StdKeySerializers;
import org.gcube.application.geoportal.client.DefaultProfiledDocumentsClient;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.ProfiledDocumentsI;
import org.gcube.application.geoportal.common.rest.Projects;
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
import org.junit.Test;
@ -16,19 +15,19 @@ import static junit.framework.TestCase.assertTrue;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.*;
import static org.junit.Assume.assumeTrue;
public class ProfiledDocumentsTest<M extends ProfiledDocument,C extends ProfiledDocumentsI<M>> extends BasicVreTests{
public class ProfiledDocumentsTest<M extends Project,C extends Projects<M>> extends BasicVreTests{
protected String getProfileID(){return "profiledConcessioni";}
protected C getClient(){
return (C) profiledModel(getProfileID(),ProfiledDocument.class,DefaultProfiledDocumentsClient.class).build();
return (C) profiledModel(getProfileID(), Project.class,DefaultProfiledDocumentsClient.class).build();
}
@Test
public void getConfiguration() throws Exception {
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
ProfiledDocumentsI<M> client = (ProfiledDocumentsI<M>) getClient();
Projects<M> client = (Projects<M>) getClient();
Configuration config=client.getConfiguration();
System.out.println("Configuration is "+ config);
}
@ -37,7 +36,7 @@ public class ProfiledDocumentsTest<M extends ProfiledDocument,C extends Profiled
@Test
public void list() throws Exception {
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
ProfiledDocumentsI<M> client = (ProfiledDocumentsI<M>) getClient();
Projects<M> client = (Projects<M>) getClient();
AtomicLong counter=new AtomicLong(0);
client.query(new QueryRequest()).forEachRemaining( M -> counter.incrementAndGet());
System.out.println("Found "+counter.get()+" elements");
@ -48,7 +47,7 @@ public class ProfiledDocumentsTest<M extends ProfiledDocument,C extends Profiled
@Test
public void scanStatusByID() throws Exception {
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
ProfiledDocumentsI<M> client = (ProfiledDocumentsI<M>) getClient();
Projects<M> client = (Projects<M>) getClient();
AtomicLong counter=new AtomicLong(0);
client.query(new QueryRequest()).forEachRemaining( m -> {
System.out.print(counter.incrementAndGet()+ ", ID : "+m.getId());

View File

@ -1,15 +1,11 @@
package org.gcube.application.geoportal.clients.serialization;
import ch.qos.logback.core.net.SyslogOutputStream;
import com.fasterxml.jackson.core.JsonProcessingException;
import junit.framework.Assert;
import org.gcube.application.cms.tests.TestProfiles;
import org.gcube.application.geoportal.client.utils.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.Files;
import org.junit.Test;
@ -22,10 +18,10 @@ import java.util.Map;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
public class Profiles {
public class UseCaseDescriptors {
private static Profile readProfile(String file) throws IOException {
return Serialization.read(getJSON(file), Profile.class);
private static UseCaseDescriptor readProfile(String file) throws IOException {
return Serialization.read(getJSON(file), UseCaseDescriptor.class);
}
private static String getJSON(String file) throws IOException {
@ -35,17 +31,17 @@ public class Profiles {
@Test
public void read () throws IOException {
for (Map.Entry<String, Profile> entry : TestProfiles.profiles.entrySet()) {
for (Map.Entry<String, UseCaseDescriptor> entry : TestProfiles.profiles.entrySet()) {
String s = entry.getKey();
Profile profile = entry.getValue();
UseCaseDescriptor useCaseDescriptor = entry.getValue();
System.out.println("Checking " + s);
validate(profile);
System.out.println(profile);
Profile converted = Serialization.convert(profile, Profile.class);
assertEquals(profile, converted);
JSONPathWrapper wrapper = new JSONPathWrapper(Serialization.asDocument(profile).toJson());
List<List> foundObjects = wrapper.getByPath("$." + Profile.HANDLERS, List.class);
validate(useCaseDescriptor);
System.out.println(useCaseDescriptor);
UseCaseDescriptor converted = Serialization.convert(useCaseDescriptor, UseCaseDescriptor.class);
assertEquals(useCaseDescriptor, converted);
JSONPathWrapper wrapper = new JSONPathWrapper(Serialization.asDocument(useCaseDescriptor).toJson());
List<List> foundObjects = wrapper.getByPath("$." + UseCaseDescriptor.HANDLERS, List.class);
foundObjects.get(0).forEach(o -> {
HandlerDeclaration h = Serialization.convert(o, HandlerDeclaration.class);
@ -57,12 +53,12 @@ public class Profiles {
}
private void validate(Profile profile){
assertTrue(profile.getId()!=null);
if(profile.getHandlers()!=null)
profile.getHandlers().forEach(handlerDeclaration -> validate(handlerDeclaration));
if(profile.getSchema()!=null)
validate(profile.getSchema());
private void validate(UseCaseDescriptor useCaseDescriptor){
assertTrue(useCaseDescriptor.getId()!=null);
if(useCaseDescriptor.getHandlers()!=null)
useCaseDescriptor.getHandlers().forEach(handlerDeclaration -> validate(handlerDeclaration));
if(useCaseDescriptor.getSchema()!=null)
validate(useCaseDescriptor.getSchema());
}
private void validate(HandlerDeclaration handler){

View File

@ -15,7 +15,7 @@ import org.gcube.application.geoportal.common.model.document.temporal.TemporalRe
@Getter
@Setter
@ToString
public class ProfiledDocument {
public class Project {
public static final String ID="_id";
public static final String VERSION="_version";
@ -39,7 +39,7 @@ public class ProfiledDocument {
@JsonProperty(INFO)
private PublicationInfo info;
// Profile reference
// UseCaseDescriptor reference
@JsonProperty(PROFILE_ID)
private String profileID;
@JsonProperty(PROFILE_VERSION)

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.common.model.profile;
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.common.model.profile;
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
import lombok.*;
import org.bson.Document;

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.common.model.profile;
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
import java.util.ArrayList;
import java.util.HashMap;

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.common.model.profile;
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package org.gcube.application.geoportal.common.model.profile;
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
import java.util.ArrayList;
import java.util.HashMap;
@ -19,7 +19,7 @@ import org.gcube.application.geoportal.common.model.document.accounting.Accounti
@NoArgsConstructor
@XmlRootElement
@Slf4j
public class Profile{
public class UseCaseDescriptor {
public static final String ID="_id";
public static final String VERSION="_version";
@ -65,7 +65,7 @@ public class Profile{
if(!toReturn.containsKey(h.getType()))
toReturn.put(h.getType(),new ArrayList<>());
toReturn.get(h.getType()).add(h);
}catch (Throwable t){log.error("Invalid profile : unable to get Handler Map by Type with {} in profile [ID {}]",h,this.getId(),t);}
}catch (Throwable t){log.error("Invalid useCaseDescriptor : unable to get Handler Map by Type with {} in useCaseDescriptor [ID {}]",h,this.getId(),t);}
});
return toReturn;
}
@ -82,7 +82,7 @@ public class Profile{
toReturn.put(h.getId(), new ArrayList<>());
toReturn.get(h.getId()).add(h);
}catch (Throwable t){
log.error("Invalid profile : unable to get Handler Map by ID with {} in profile [ID {}]",h,this.getId(),t);}
log.error("Invalid useCaseDescriptor : unable to get Handler Map by ID with {} in useCaseDescriptor [ID {}]",h,this.getId(),t);}
});
return toReturn;
}

View File

@ -1,7 +1,7 @@
package org.gcube.application.geoportal.common.rest;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
@ -10,7 +10,7 @@ import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
import java.rmi.RemoteException;
import java.util.Iterator;
public interface ProfiledDocumentsI<P extends ProfiledDocument> {
public interface Projects<P extends Project> {
public Class<P> getManagedClass();

View File

@ -0,0 +1,21 @@
package org.gcube.application.geoportal.common.rest;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.rmi.RemoteException;
public interface UseCaseDescriptors {
public UseCaseDescriptor create(Document toCreate)throws RemoteException;
public Iterable<UseCaseDescriptor> query(QueryRequest request)throws RemoteException;
public void deleteById(String id,boolean force)throws RemoteException;
public UseCaseDescriptor update(String ID, Document toSet)throws RemoteException;
public UseCaseDescriptor getById(String id)throws RemoteException;
}

View File

@ -42,11 +42,11 @@ public class ISUtils {
public static List<AccessPoint> performGetAP(String category,String platform,String flagName,String flagValue) {
SimpleQuery query = queryFor(ServiceEndpoint.class);
query.addCondition("$resource/Profile/Category/text() eq '"+category+"'")
.addCondition("$resource/Profile/Platform/Name/text() eq '"+platform+"'")
.addCondition("$resource/Profile/AccessPoint//Property[Name/text() eq '"+
query.addCondition("$resource/UseCaseDescriptor/Category/text() eq '"+category+"'")
.addCondition("$resource/UseCaseDescriptor/Platform/Name/text() eq '"+platform+"'")
.addCondition("$resource/UseCaseDescriptor/AccessPoint//Property[Name/text() eq '"+
flagName+"'][Value/text() eq '"+flagValue+"']")
.setResult("$resource/Profile/AccessPoint");
.setResult("$resource/UseCaseDescriptor/AccessPoint");
DiscoveryClient<AccessPoint> client = clientFor(AccessPoint.class);
return client.submit(query);

View File

@ -1,20 +1,10 @@
package org.gcube.application.geoportal.common.model;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;
import org.bson.Document;
import org.gcube.application.geoportal.common.JSONSerializationProvider;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.filesets.Materialization;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.lifecycle.TriggeredEvents;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.utils.Files;
import org.junit.Test;
@ -38,7 +28,7 @@ public class JSONPathTests {
return new JSONPathWrapper(Files.readFileAsString(new File(baseFolder, filename).getAbsolutePath(), Charset.defaultCharset()));
}
private ProfiledDocument getDocument(String filename){
private Project getDocument(String filename){
return null;
}

View File

@ -1,22 +0,0 @@
package org.gcube.application.geoportal.service.engine.mongo;
import org.bson.Document;
import org.gcube.application.cms.caches.Engine;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import java.util.Iterator;
public interface ProfileManager {
public Profile create(Document toCreate);
public Iterable<Profile> query(QueryRequest request);
public void deleteById(String id,boolean force);
public Profile update(String ID, Document toSet);
public Profile getById(String id);
}

View File

@ -26,9 +26,9 @@ import org.gcube.application.geoportal.common.model.document.filesets.Registered
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
@ -59,33 +59,33 @@ import java.util.function.Consumer;
import static org.gcube.application.cms.serialization.Serialization.*;
@Slf4j
public class ProfiledMongoManager extends MongoManager implements MongoManagerI<ProfiledDocument>{
public class ProfiledMongoManager extends MongoManager implements MongoManagerI<Project>{
@Getter
Profile profile;
UseCaseDescriptor useCaseDescriptor;
MongoDatabase db=null;
public ProfiledMongoManager(String profileId) throws ConfigurationException {
// Check Profile ID
log.info("Loading profile ID {} ",profileId);
if(profileId==null) throw new InvalidParameterException("Profile ID cannot be null");
Map<String,Profile> profiles=ImplementationProvider.get().getEngineByClass(ProfileMapCache.ProfileMap.class);
// Check UseCaseDescriptor ID
log.info("Loading useCaseDescriptor ID {} ",profileId);
if(profileId==null) throw new InvalidParameterException("UseCaseDescriptor ID cannot be null");
Map<String, UseCaseDescriptor> profiles=ImplementationProvider.get().getEngineByClass(ProfileMapCache.ProfileMap.class);
if(!profiles.containsKey(profileId)) {
log.debug("Asked profile {} not found. Available ones are {} ",profileId,profiles.keySet());
throw new WebApplicationException("Profile " + profileId + " not registered", Response.Status.NOT_FOUND);
log.debug("Asked useCaseDescriptor {} not found. Available ones are {} ",profileId,profiles.keySet());
throw new WebApplicationException("UseCaseDescriptor " + profileId + " not registered", Response.Status.NOT_FOUND);
}
profile=profiles.get(profileId);
log.debug("Loaded Profile {} ",profile);
useCaseDescriptor =profiles.get(profileId);
log.debug("Loaded UseCaseDescriptor {} ", useCaseDescriptor);
// Connect to DB
String toUseDB=super.client.getConnection().getDatabase();
log.info("Connecting to DB {} ",toUseDB);
// TODO MAP OF DATABASES?
db=client.getTheClient().getDatabase(toUseDB);
}
@ -95,10 +95,10 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
private LifecycleManager getLCManager() {
try{
LifecycleManager toReturn=null;
//Getting Lifecycle Manager declaration from Profile
List<HandlerDeclaration> handlerDeclarations= profile.getHandlersMapByType().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for profile ID "+profile.getId());
if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in profile ID "+profile.getId());
//Getting Lifecycle Manager declaration from UseCaseDescriptor
List<HandlerDeclaration> handlerDeclarations= useCaseDescriptor.getHandlersMapByType().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for useCaseDescriptor ID "+ useCaseDescriptor.getId());
if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in useCaseDescriptor ID "+ useCaseDescriptor.getId());
HandlerDeclaration lcHandlerDeclaration=handlerDeclarations.get(0);
@ -116,9 +116,9 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
private String getCollectionName(){
// TODO Profile can directly specify, use ID only as default
// TODO UseCaseDescriptor can directly specify, use ID only as default
return profile.getId();
return useCaseDescriptor.getId();
}
@Override
@ -127,17 +127,17 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
@Override
public ProfiledDocument registerNew(Document toRegisterDoc) throws IOException, StepException, EventException {
log.info("Registering new document in {} ",profile.getId());
public Project registerNew(Document toRegisterDoc) throws IOException, StepException, EventException {
log.info("Registering new document in {} ", useCaseDescriptor.getId());
log.debug("Going to register {}",toRegisterDoc.toJson());
ProfiledDocument toRegister = new ProfiledDocument();
Project toRegister = new Project();
toRegister.setTheDocument(toRegisterDoc);
PublicationInfo pubInfo=new PublicationInfo();
pubInfo.setCreationInfo(UserUtils.getCurrent().asInfo());
// TODO Set Access From Profile
// TODO Set Access From UseCaseDescriptor
Access access=new Access();
access.setLicense("");
access.setPolicy(AccessPolicy.OPEN);
@ -145,8 +145,8 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
toRegister.setInfo(pubInfo);
toRegister.setProfileID(profile.getId());
toRegister.setProfileVersion(profile.getVersion());
toRegister.setProfileID(useCaseDescriptor.getId());
toRegister.setProfileVersion(useCaseDescriptor.getVersion());
toRegister.setVersion(new Semver("1.0.0"));
@ -169,20 +169,20 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
@Override
public ProfiledDocument update(String id, Document toSet) throws IOException, EventException {
public Project update(String id, Document toSet) throws IOException, EventException {
log.trace("Replacing {} ",toSet);
ProfiledDocument toUpdate=getByID(id);
Project toUpdate=getByID(id);
toUpdate.setTheDocument(toSet);
toUpdate.getLifecycleInformation().cleanState();
toUpdate=onUpdate(toUpdate);
ProfiledDocument toReturn =convert(replace(asDocumentWithId(toUpdate),new ObjectId(id),getCollectionName()),ProfiledDocument.class);
log.debug("Updated ProfiledDocument is {}",toReturn);
Project toReturn =convert(replace(asDocumentWithId(toUpdate),new ObjectId(id),getCollectionName()), Project.class);
log.debug("Updated Project is {}",toReturn);
return toReturn;
}
private ProfiledDocument onUpdate(ProfiledDocument toUpdate) throws EventException {
private Project onUpdate(Project toUpdate) throws EventException {
UserUtils.AuthenticatedUser u = UserUtils.getCurrent();
toUpdate.getInfo().setLastEditInfo(u.asInfo());
toUpdate.setVersion(toUpdate.getVersion().withIncPatch());
@ -194,7 +194,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
public void delete(String id,boolean force) throws DeletionException {
log.debug("Deleting by ID {}, force {}",id,force);
try{
ProfiledDocument doc =getByID(id);
Project doc =getByID(id);
// TODO INVOKE LIFECYCLE
@ -220,10 +220,10 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
@Override
public ProfiledDocument getByID(String id) throws WebApplicationException{
public Project getByID(String id) throws WebApplicationException{
Document doc=super.getById(asId(id),getCollectionName());
if(doc==null) throw new WebApplicationException("No document with ID "+id);
return convert(doc,ProfiledDocument.class);
return convert(doc, Project.class);
}
@Override
@ -239,7 +239,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
@Override
public Iterable<ProfiledDocument> filter(QueryRequest queryRequest) {
public Iterable<Project> filter(QueryRequest queryRequest) {
log.info("Searching concessione for filter {} ",queryRequest);
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
query(queryRequest,getCollectionName()).forEach(
@ -252,13 +252,13 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
@Override
public ProfiledDocument performStep(String id, String step, Document options) throws StepException, JsonProcessingException {
ProfiledDocument document = getByID(id);
public Project performStep(String id, String step, Document options) throws StepException, JsonProcessingException {
Project document = getByID(id);
try{
document.getLifecycleInformation().cleanState();
document = step(document, step, options);
} catch(Throwable t){
log.error("[Profile {} ] ERROR Invoking Step {} on document {}" ,profile.getId(),step,id,t);
log.error("[UseCaseDescriptor {} ] ERROR Invoking Step {} on document {}" , useCaseDescriptor.getId(),step,id,t);
LifecycleInformation info = new LifecycleInformation();
info.setPhase(document.getLifecycleInformation().getPhase());
info.setLastOperationStatus(LifecycleInformation.Status.ERROR);
@ -266,11 +266,11 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
info.setLastInvokedStep(step);
document.setLifecycleInformation(info);
}finally{
log.info("Storing {} [Profile {}] After Step {}, Status : {} " ,id,profile.getId(),
log.info("Storing {} [UseCaseDescriptor {}] After Step {}, Status : {} " ,id, useCaseDescriptor.getId(),
step,document.getLifecycleInformation().getLastOperationStatus());
log.debug("LifecycleInformation is {} ",document.getLifecycleInformation());
if(log.isTraceEnabled())log.trace("Document is {} ",Serialization.write(document));
return convert(replace(asDocumentWithId(document),new ObjectId(id),getCollectionName()),ProfiledDocument.class);
return convert(replace(asDocumentWithId(document),new ObjectId(id),getCollectionName()), Project.class);
}
}
@ -289,12 +289,12 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
*
*/
@Override
public ProfiledDocument registerFileSet(String id,RegisterFileSetRequest request) throws ConfigurationException, StorageHubException, StorageException, StepException, JsonProcessingException, DeletionException, EventException {
log.info("Registering Fileset for {} [profile ID {}], Request is {} ",id,profile.getId(),request);
public Project registerFileSet(String id, RegisterFileSetRequest request) throws ConfigurationException, StorageHubException, StorageException, StepException, JsonProcessingException, DeletionException, EventException {
log.info("Registering Fileset for {} [useCaseDescriptor ID {}], Request is {} ",id, useCaseDescriptor.getId(),request);
List<TempFile> files=request.getStreams();
Document attributes =request.getAttributes();
ProfiledDocument doc=getByID(id);
Project doc=getByID(id);
doc.getLifecycleInformation().cleanState();
doc.getLifecycleInformation().setLastOperationStatus(LifecycleInformation.Status.OK);
@ -302,8 +302,8 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
StorageUtils storage=ImplementationProvider.get().getEngineByClass(StorageUtils.class);
log.debug("Checking field {} definition in {}",request.getFieldDefinitionPath(),profile.getId());
Field fieldDefinition=getFieldDefinition(profile,request.getFieldDefinitionPath());
log.debug("Checking field {} definition in {}",request.getFieldDefinitionPath(), useCaseDescriptor.getId());
Field fieldDefinition=getFieldDefinition(useCaseDescriptor,request.getFieldDefinitionPath());
JSONPathWrapper docWrapper=new JSONPathWrapper(doc.getTheDocument().toJson());
@ -331,8 +331,8 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
if(!(toDelete == null)&&!(toDelete.isEmpty()))
deleteFileSetRoutine(toDelete,false,ws);
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(),profile.getId(), request.getAttributes(),files,storage,ws);
log.debug("Registered Fileset for [ID {} profile {}] is {} ",fs,doc.getId(),doc.getProfileID());
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(), useCaseDescriptor.getId(), request.getAttributes(),files,storage,ws);
log.debug("Registered Fileset for [ID {} useCaseDescriptor {}] is {} ",fs,doc.getId(),doc.getProfileID());
docWrapper.putElement(parentMatchingPath,request.getFieldName(),fs);
break;}
case MERGE_EXISTING: {
@ -342,15 +342,15 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
// MERGE ATTRIBUTES AND PUT
Document toUseAttributes=request.getAttributes();
if(original!=null) toUseAttributes.putAll(original);
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(),profile.getId(), toUseAttributes,files,storage,ws);
log.debug("Registered Fileset for [ID {} profile {}] is {} ",fs,doc.getId(),doc.getProfileID());
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(), useCaseDescriptor.getId(), toUseAttributes,files,storage,ws);
log.debug("Registered Fileset for [ID {} useCaseDescriptor {}] is {} ",fs,doc.getId(),doc.getProfileID());
docWrapper.putElement(parentMatchingPath,request.getFieldName(),fs);
break;}
case APPEND: {
if(!fieldDefinition.isCollection())
throw new WebApplicationException("Cannot add to single field "+request.getFieldDefinitionPath()+".",Response.Status.BAD_REQUEST);
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(),profile.getId(), request.getAttributes(),files,storage,ws);
log.debug("Registered Fileset for [ID {} profile {}] is {} ",fs,doc.getId(),doc.getProfileID());
RegisteredFileSet fs = prepareRegisteredFileSet(doc.getInfo(),doc.getId(), useCaseDescriptor.getId(), request.getAttributes(),files,storage,ws);
log.debug("Registered Fileset for [ID {} useCaseDescriptor {}] is {} ",fs,doc.getId(),doc.getProfileID());
docWrapper.addElementToArray(String.format("%1ds['%2$s']",parentMatchingPath,request.getFieldName()),fs);
break;}
@ -363,14 +363,14 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
doc=onUpdate(doc);
return convert(replace(asDocumentWithId(doc),new ObjectId(id),getCollectionName()),ProfiledDocument.class);
return convert(replace(asDocumentWithId(doc),new ObjectId(id),getCollectionName()), Project.class);
}
@Override
public ProfiledDocument deleteFileSet(String id, String path, Boolean force) throws ConfigurationException, StorageHubException, JsonProcessingException, DeletionException, EventException {
log.info("Deleting Fileset for {} [profile ID {}], at {} [force {} ]",id,profile.getId(),path,force);
public Project deleteFileSet(String id, String path, Boolean force) throws ConfigurationException, StorageHubException, JsonProcessingException, DeletionException, EventException {
log.info("Deleting Fileset for {} [useCaseDescriptor ID {}], at {} [force {} ]",id, useCaseDescriptor.getId(),path,force);
ProfiledDocument doc = getByID(id);
Project doc = getByID(id);
doc.getLifecycleInformation().cleanState();
doc.getLifecycleInformation().cleanState().setLastOperationStatus(LifecycleInformation.Status.OK);
@ -385,25 +385,25 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
log.debug("Removing FS from document [ID : ] by path {}",id,path);
wrapper.setElement(path,null);
doc=onUpdate(doc);
return convert(replace(asDocumentWithId(doc),new ObjectId(id),getCollectionName()),ProfiledDocument.class);
return convert(replace(asDocumentWithId(doc),new ObjectId(id),getCollectionName()), Project.class);
}
@Override
public Configuration getConfiguration() throws ConfigurationException {
log.debug("Asking configuration for {} in {} ",profile.getId(), UserUtils.getCurrent().getContext());
log.debug("Asking configuration for {} in {} ", useCaseDescriptor.getId(), UserUtils.getCurrent().getContext());
Configuration toReturn= getManager().getCurrentConfiguration();
log.debug("Returning current configuration {}",toReturn);
return toReturn;
}
private ProfiledDocument step(ProfiledDocument theDocument, String step, Document callParameters){
private Project step(Project theDocument, String step, Document callParameters){
try{
log.info("[Profile {}] Invoking Step {} on {}" ,profile.getId(),step,getManager().getDescriptor());
log.info("[UseCaseDescriptor {}] Invoking Step {} on {}" , useCaseDescriptor.getId(),step,getManager().getDescriptor());
StepExecutionRequest request=new StepExecutionRequest();
request.setCallParameters(callParameters);
request.setDocument(theDocument);
request.setProfile(profile);
request.setUseCaseDescriptor(useCaseDescriptor);
request.setStep(step);
AccountingInfo user= UserUtils.getCurrent().asInfo();
request.setUser(user.getUser());
@ -411,7 +411,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
log.debug("Requesting Step Execution {}",request);
StepExecutionReport report= getManager().performStep(request);
ProfiledDocument toReturn = report.prepareResult();
Project toReturn = report.prepareResult();
// EVENTS
if(report.getToTriggerEvents()!=null) {
@ -443,12 +443,12 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
}
private ProfiledDocument triggerEvent(ProfiledDocument theDocument, String event, Document parameters) {
private Project triggerEvent(Project theDocument, String event, Document parameters) {
try{
log.info("[Profile {}] triggering event {} on {}" ,profile.getId(),event,getManager().getDescriptor());
log.info("[UseCaseDescriptor {}] triggering event {} on {}" , useCaseDescriptor.getId(),event,getManager().getDescriptor());
EventExecutionRequest request= new EventExecutionRequest();
request.setEvent(event);
request.setProfile(profile);
request.setUseCaseDescriptor(useCaseDescriptor);
request.setCallParameters(parameters);
request.setDocument(theDocument);
log.debug("Triggering {}",request);
@ -479,7 +479,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
FolderContainer sectionFolder=null;
if(folderID==null || folderID.isEmpty()) {
FolderContainer base = ws.createFolder(new WorkspaceManager.FolderOptions(
docID, "Base Folder for profiled document. Profile " + profileID, null));
docID, "Base Folder for profiled document. UseCaseDescriptor " + profileID, null));
sectionFolder = ws.createFolder(new WorkspaceManager.FolderOptions(
docID + "_" + uuid, "Registered Fileset uuid " + uuid, base));
toReturn.put(RegisteredFileSet.FOLDER_ID, sectionFolder.getId());
@ -531,16 +531,16 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
private static Field getFieldDefinition(Profile profile,String fieldPath)throws WebApplicationException{
JSONPathWrapper schemaWrapper= new JSONPathWrapper(profile.getSchema().toJson());
private static Field getFieldDefinition(UseCaseDescriptor useCaseDescriptor, String fieldPath)throws WebApplicationException{
JSONPathWrapper schemaWrapper= new JSONPathWrapper(useCaseDescriptor.getSchema().toJson());
List<Field> fieldDefinitions=schemaWrapper.getByPath(fieldPath,Field.class);
if(fieldDefinitions==null || fieldDefinitions.isEmpty())
throw new WebApplicationException("No Field found in schema "+profile.getId()+" at "+fieldPath, Response.Status.BAD_REQUEST);
throw new WebApplicationException("No Field found in schema "+ useCaseDescriptor.getId()+" at "+fieldPath, Response.Status.BAD_REQUEST);
if(fieldDefinitions.size()>1)
throw new WebApplicationException("Multiple field definitions ("+fieldDefinitions.size()+") found in "+profile.getId()+" for "+fieldPath,Response.Status.BAD_REQUEST);
throw new WebApplicationException("Multiple field definitions ("+fieldDefinitions.size()+") found in "+ useCaseDescriptor.getId()+" for "+fieldPath,Response.Status.BAD_REQUEST);
Field fieldDefinition=Serialization.convert(fieldDefinitions.get(0),Field.class);
if(fieldDefinition==null)
throw new WebApplicationException("Found field is null ["+profile.getId()+" for "+fieldPath+"]",Response.Status.BAD_REQUEST);
throw new WebApplicationException("Found field is null ["+ useCaseDescriptor.getId()+" for "+fieldPath+"]",Response.Status.BAD_REQUEST);
log.trace("Field definition is {}",fieldDefinition);
return fieldDefinition;
}

View File

@ -0,0 +1,81 @@
package org.gcube.application.geoportal.service.engine.mongo;
import com.mongodb.client.MongoDatabase;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
@Slf4j
public class UCDManager extends MongoManager implements UCDManagerI {
MongoDatabase db=null;
public UCDManager() throws ConfigurationException {
log.info("Init useCaseDescriptor Manager");
}
@Override
public MongoDatabase getDatabase(){
if(db == null) {
log.debug("Getting client for {}",getCollectionName());
db = client.getTheClient().getDatabase(getCollectionName());
}
return db;
}
private String getCollectionName(){
return "profiles_"+ContextUtils.getCurrentScope();
}
@Override
public UseCaseDescriptor create(Document toCreate) {
// Validate
// NB Check for existing ID
// INSERT
// force update cache
throw new WebApplicationException("TO BE IMPLEMENTED", Response.Status.INTERNAL_SERVER_ERROR);
}
@Override
public Iterable<UseCaseDescriptor> query(QueryRequest queryRequest) {
log.info("Querying {} ",queryRequest);
LinkedBlockingQueue queue=new LinkedBlockingQueue<UseCaseDescriptor>();
query(queryRequest,getCollectionName()).forEach(
(Consumer<? super Document>) (Document d)->{try{
queue.put(d);
}catch(Throwable t){log.warn("Unable to translate "+d);}});
log.info("Returned {} elements ",queue.size());
return queue;
}
@Override
public void deleteById(String id, boolean force) {
// NB Check for existing ID
// Check Force (existing documents)
throw new WebApplicationException("TO BE IMPLEMENTED", Response.Status.INTERNAL_SERVER_ERROR);
}
@Override
public UseCaseDescriptor update(String ID, Document toSet) {
// NB Check for existing ID
// Validate
// INSERT
// force update cache
throw new WebApplicationException("TO BE IMPLEMENTED", Response.Status.INTERNAL_SERVER_ERROR);
}
@Override
public UseCaseDescriptor getById(String id) {
// GET from mongo cache
// IF void try from ProfileEngine
throw new WebApplicationException("TO BE IMPLEMENTED", Response.Status.INTERNAL_SERVER_ERROR);
}
}

View File

@ -0,0 +1,18 @@
package org.gcube.application.geoportal.service.engine.mongo;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
public interface UCDManagerI {
public UseCaseDescriptor create(Document toCreate);
public Iterable<UseCaseDescriptor> query(QueryRequest request);
public void deleteById(String id,boolean force);
public UseCaseDescriptor update(String ID, Document toSet);
public UseCaseDescriptor getById(String id);
}

View File

@ -1,7 +1,5 @@
package org.gcube.application.geoportal.service.engine.providers;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.plugins.*;
@ -9,17 +7,10 @@ import org.gcube.application.cms.plugins.faults.InitializationException;
import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.faults.ShutDownException;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.reflections.Reflections;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class PluginManager extends AbstractScopedMap<PluginManager.PluginMap> implements PluginManagerInterface {

View File

@ -2,10 +2,9 @@ package org.gcube.application.geoportal.service.engine.providers;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.cms.serialization.Serialization;
@ -13,13 +12,12 @@ import org.gcube.application.cms.serialization.Serialization;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class ProfileMapCache extends AbstractScopedMap<ProfileMapCache.ProfileMap> {
@AllArgsConstructor
public static class ProfileMap extends HashMap<String,Profile>{
public static class ProfileMap extends HashMap<String, UseCaseDescriptor>{
}
public ProfileMapCache() {
@ -45,8 +43,8 @@ public class ProfileMapCache extends AbstractScopedMap<ProfileMapCache.ProfileMa
ProfileMap toReturn=new ProfileMap();
try {
Profile p=Serialization.read(Files.
readFileAsString(Files.getFileFromResources("profiles/profiledConcessioni.json").getAbsolutePath(), Charset.defaultCharset()), Profile.class);
UseCaseDescriptor p=Serialization.read(Files.
readFileAsString(Files.getFileFromResources("profiles/profiledConcessioni.json").getAbsolutePath(), Charset.defaultCharset()), UseCaseDescriptor.class);
log.debug("Loaded "+p.getName()+" ID "+p.getId());
toReturn.put(p.getId(),p);

View File

@ -2,7 +2,7 @@ package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
@ -48,13 +48,13 @@ public class ProfiledDocuments {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ProfiledDocument createNew(Document d) {
return new GuardedMethod<ProfiledDocument>() {
public Project createNew(Document d) {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Creating new ProfiledDocument ({})",manager.getProfile().getId());
ProfiledDocument toReturn= manager.registerNew(d);
log.info("Created new ProfiledDocument ({}, ID {})",manager.getProfile().getId(),toReturn.getId());
protected Project run() throws Exception, WebApplicationException {
log.info("Creating new Project ({})",manager.getUseCaseDescriptor().getId());
Project toReturn= manager.registerNew(d);
log.info("Created new Project ({}, ID {})",manager.getUseCaseDescriptor().getId(),toReturn.getId());
return toReturn;
}
}.execute().getResult();
@ -65,11 +65,11 @@ public class ProfiledDocuments {
@Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ProfiledDocument update(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String documentId, Document d) {
return new GuardedMethod<ProfiledDocument>() {
public Project update(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String documentId, Document d) {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Updating ProfiledDocument ({}, ID {})",manager.getProfile().getId(),documentId);
protected Project run() throws Exception, WebApplicationException {
log.info("Updating Project ({}, ID {})",manager.getUseCaseDescriptor().getId(),documentId);
return manager.update(documentId,d);
}
}.execute().getResult();
@ -85,7 +85,7 @@ public class ProfiledDocuments {
return new GuardedMethod<Boolean>() {
@Override
protected Boolean run() throws Exception, WebApplicationException {
log.info("Deleting ProfiledDocument ({}, ID {}). Force is {}",manager.getProfile().getId(),id,force);
log.info("Deleting Project ({}, ID {}). Force is {}",manager.getUseCaseDescriptor().getId(),id,force);
manager.delete(id,force);
return true;
}
@ -96,14 +96,14 @@ public class ProfiledDocuments {
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/"+InterfaceConstants.Methods.REGISTER_FILES_PATH+"/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public ProfiledDocument registerFileSet(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,
RegisterFileSetRequest request) {
return new GuardedMethod<ProfiledDocument>() {
public Project registerFileSet(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,
RegisterFileSetRequest request) {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Registering {} file(s) for ProfiledDocument ({}, ID {}) with {}",
protected Project run() throws Exception, WebApplicationException {
log.info("Registering {} file(s) for Project ({}, ID {}) with {}",
request.getStreams().size(),
manager.getProfile().getId(),
manager.getUseCaseDescriptor().getId(),
id,request);
request.validate();
return manager.registerFileSet(id,request);
@ -115,16 +115,16 @@ public class ProfiledDocuments {
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/"+InterfaceConstants.Methods.DELETE_FILES_PATH+"/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public ProfiledDocument deleteFileSet(
public Project deleteFileSet(
@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,
@DefaultValue("false")
@QueryParam(InterfaceConstants.Parameters.FORCE) Boolean force,
String path) {
return new GuardedMethod<ProfiledDocument>() {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Deleting FileSet of ProfiledDocument ({}, ID {}) at path {}. Force is {}",
manager.getProfile().getId(),
protected Project run() throws Exception, WebApplicationException {
log.info("Deleting FileSet of Project ({}, ID {}) at path {}. Force is {}",
manager.getUseCaseDescriptor().getId(),
id,path,force);
return manager.deleteFileSet(id,path,force);
}
@ -136,15 +136,15 @@ public class ProfiledDocuments {
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/"+InterfaceConstants.Methods.STEP+"/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public ProfiledDocument performStep(
public Project performStep(
@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,
StepExecutionRequest request) {
return new GuardedMethod<ProfiledDocument>() {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
log.info("Executing step {} on ProfiledDocument ({},ID,{}) with options {}",
protected Project run() throws Exception, WebApplicationException {
log.info("Executing step {} on Project ({},ID,{}) with options {}",
request.getStepID(),
manager.getProfile().getId(),
manager.getUseCaseDescriptor().getId(),
id,request.getOptions());
return manager.performStep(id,request.getStepID(),request.getOptions());
}
@ -167,10 +167,10 @@ public class ProfiledDocuments {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
public ProfiledDocument getById(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
return new GuardedMethod<ProfiledDocument>() {
public Project getById(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
return new GuardedMethod<Project>() {
@Override
protected ProfiledDocument run() throws Exception, WebApplicationException {
protected Project run() throws Exception, WebApplicationException {
return manager.getByID(id);
}
}.execute().getResult();

View File

@ -3,10 +3,9 @@ package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.engine.mongo.ProfileManager;
import org.gcube.application.geoportal.service.engine.mongo.UCDManagerI;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@ -15,19 +14,19 @@ import javax.ws.rs.core.MediaType;
@Slf4j
public class UseCaseDescriptors {
private ProfileManager profileEngine;
private UCDManagerI profileEngine;
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Profile createNew(Document toCreate) {
return new GuardedMethod<Profile>() {
public UseCaseDescriptor createNew(Document toCreate) {
return new GuardedMethod<UseCaseDescriptor>() {
@Override
protected Profile run() throws Exception, WebApplicationException {
log.info("Creating new Profile ({})",toCreate);
Profile toReturn= profileEngine.create(toCreate);
log.info("Created new Profile (ID {})",toReturn.getId());
protected UseCaseDescriptor run() throws Exception, WebApplicationException {
log.info("Creating new UseCaseDescriptor ({})",toCreate);
UseCaseDescriptor toReturn= profileEngine.create(toCreate);
log.info("Created new UseCaseDescriptor (ID {})",toReturn.getId());
return toReturn;
}
}.execute().getResult();
@ -37,11 +36,11 @@ public class UseCaseDescriptors {
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Profile update(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profileId, Document d) {
return new GuardedMethod<Profile>() {
public UseCaseDescriptor update(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profileId, Document d) {
return new GuardedMethod<UseCaseDescriptor>() {
@Override
protected Profile run() throws Exception, WebApplicationException {
log.warn("Updating Profile ({})",profileId);
protected UseCaseDescriptor run() throws Exception, WebApplicationException {
log.warn("Updating UseCaseDescriptor ({})",profileId);
return profileEngine.update(profileId,d);
}
}.execute().getResult();
@ -57,7 +56,7 @@ public class UseCaseDescriptors {
return new GuardedMethod<Boolean>() {
@Override
protected Boolean run() throws Exception, WebApplicationException {
log.warn("Deleting Profile (ID {}). Force is {}",id,force);
log.warn("Deleting UseCaseDescriptor (ID {}). Force is {}",id,force);
profileEngine.deleteById(id,force);
return true;
}
@ -69,10 +68,10 @@ public class UseCaseDescriptors {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
public Profile getById(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String id) {
return new GuardedMethod<Profile>() {
public UseCaseDescriptor getById(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String id) {
return new GuardedMethod<UseCaseDescriptor>() {
@Override
protected Profile run() throws Exception, WebApplicationException {
protected UseCaseDescriptor run() throws Exception, WebApplicationException {
return profileEngine.getById(id);
}
}.execute().getResult();

View File

@ -9,7 +9,7 @@ import javax.ws.rs.core.Response;
import static org.junit.Assert.assertEquals;
public class InexistentProfileTests extends AbstractProfiledDocumentsTests {
public class InexistentUseCaseDescriptorTests extends AbstractProfiledDocumentsTests {
@Override
protected WebTarget baseTarget() {
@ -21,7 +21,7 @@ public class InexistentProfileTests extends AbstractProfiledDocumentsTests {
@Test
public void testMissingProfile(){
Response resp = target(InterfaceConstants.Methods.PROJECTS)
.path("non-existent-profile").request().get();
.path("non-existent-useCaseDescriptor").request().get();
assertEquals(404,resp.getStatus());
}
}

View File

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

View File

@ -1,14 +1,11 @@
package org.gcube.application.geoportal.service.profiledDocuments;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.jayway.jsonpath.JsonPath;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.cms.tests.TokenSetter;
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
@ -26,9 +23,7 @@ import org.junit.Test;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.File;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
@ -61,8 +56,8 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
baseTarget().request(MediaType.APPLICATION_JSON).get(List.class).forEach(d ->{
try {
check(baseTarget().path((Serialization.convert(d,ProfiledDocument.class)).getId())
.request(MediaType.APPLICATION_JSON).get(),ProfiledDocument.class);
check(baseTarget().path((Serialization.convert(d, Project.class)).getId())
.request(MediaType.APPLICATION_JSON).get(), Project.class);
} catch (Exception e) {
e.printStackTrace(System.err);
Assert.fail(e.getMessage());
@ -91,15 +86,15 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
// @@@@@@@@@@@@@@@ Routines
protected ProfiledDocument createNew(Document content) throws Exception {
ProfiledDocument doc =check(baseTarget().request(MediaType.APPLICATION_JSON).
post(Entity.entity(content, MediaType.APPLICATION_JSON)),ProfiledDocument.class);
protected Project createNew(Document content) throws Exception {
Project doc =check(baseTarget().request(MediaType.APPLICATION_JSON).
post(Entity.entity(content, MediaType.APPLICATION_JSON)), Project.class);
validate(doc);
assertTrue(doc.getLifecycleInformation().getPhase().equals(LifecycleInformation.DRAFT_PHASE));
return doc;
}
protected void validate (ProfiledDocument doc){
protected void validate (Project doc){
assertTrue(doc!=null);
assertTrue(doc.getId()!=null);
assertTrue(doc.getLifecycleInformation().getPhase()!=null);
@ -134,21 +129,21 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
}
protected ProfiledDocument update(String id, Document newContent)throws Exception {
ProfiledDocument doc = check(baseTarget().path(id).request(MediaType.APPLICATION_JSON).
put(Entity.entity(newContent, MediaType.APPLICATION_JSON)),ProfiledDocument.class);
protected Project update(String id, Document newContent)throws Exception {
Project doc = check(baseTarget().path(id).request(MediaType.APPLICATION_JSON).
put(Entity.entity(newContent, MediaType.APPLICATION_JSON)), Project.class);
validate(doc);
return doc;
}
protected ProfiledDocument upload(StorageUtils storage,
String id,
String parentPath,
String fieldName,
String fieldDefinitionPath,
Document attributes,
RegisterFileSetRequest.ClashOptions clashPolicy,
String ...files) throws Exception {
protected Project upload(StorageUtils storage,
String id,
String parentPath,
String fieldName,
String fieldDefinitionPath,
Document attributes,
RegisterFileSetRequest.ClashOptions clashPolicy,
String ...files) throws Exception {
FileSets.RequestBuilder builder = FileSets.build(parentPath,fieldName,fieldDefinitionPath);
builder.setClashPolicy(clashPolicy).setAttributes(attributes);
@ -156,19 +151,19 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
for(String file:files)
builder.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file));
ProfiledDocument doc = check(baseTarget().path(InterfaceConstants.Methods.REGISTER_FILES_PATH).path(id).request(MediaType.APPLICATION_JSON).
Project doc = check(baseTarget().path(InterfaceConstants.Methods.REGISTER_FILES_PATH).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(Serialization.write(builder.getTheRequest()),
MediaType.APPLICATION_JSON)),ProfiledDocument.class);
MediaType.APPLICATION_JSON)), Project.class);
validate(doc);
return doc;
}
protected ProfiledDocument step(String id, StepExecutionRequest request) throws Exception {
ProfiledDocument toReturn= check(baseTarget().
protected Project step(String id, StepExecutionRequest request) throws Exception {
Project toReturn= check(baseTarget().
path(InterfaceConstants.Methods.STEP).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(Serialization.write(request),
MediaType.APPLICATION_JSON)),ProfiledDocument.class);
MediaType.APPLICATION_JSON)), Project.class);
validate(toReturn);
assertTrue(toReturn.getLifecycleInformation().getLastInvokedStep().equals(request.getStepID()));
return toReturn;

View File

@ -3,14 +3,10 @@ package org.gcube.application.geoportal.service.profiledDocuments;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.filesets.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.document.filesets.Materialization;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.BasicServiceTestUnit;
@ -20,11 +16,10 @@ import org.junit.Test;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
public class DummyProjectTest extends AbstractProfiledDocumentsTests{
@Override
protected WebTarget baseTarget() {
@ -36,7 +31,7 @@ public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
@Test
public void registerNew() throws Exception {
ProfiledDocument doc = createNew(new Document("field","value"));
Project doc = createNew(new Document("field","value"));
assertTrue(doc.getTheDocument().containsKey("field"));
assertTrue(doc.getTheDocument().getString("field").equals("value"));
@ -45,13 +40,13 @@ public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
@Test
public void edit() throws Exception {
ProfiledDocument doc=createNew(new Document());
Project doc=createNew(new Document());
String beforeJson=doc.getTheDocument().toJson();
doc.getTheDocument().put("someStrangeField","someOtherRandomValue");
String edited=doc.getTheDocument().toJson();
Assert.assertNotEquals(beforeJson,doc.getTheDocument().toJson());
doc= BasicServiceTestUnit.check(baseTarget().path(doc.getId()).request(MediaType.APPLICATION_JSON).
put(Entity.entity(doc.getTheDocument(), MediaType.APPLICATION_JSON)),ProfiledDocument.class);
put(Entity.entity(doc.getTheDocument(), MediaType.APPLICATION_JSON)), Project.class);
Assert.assertEquals(edited,doc.getTheDocument().toJson());
}
@ -61,7 +56,7 @@ public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
Document baseDoc=new Document();
baseDoc.put("relazioneScavo",new Document("title","My Title"));
ProfiledDocument doc = createNew(baseDoc);
Project doc = createNew(baseDoc);
assertTrue(doc.getTheDocument().containsKey("relazioneScavo"));
@ -95,7 +90,7 @@ public class DummyProfiledDocumentTest extends AbstractProfiledDocumentsTests{
// @Test
// public void testSDI() throws Exception {
// // Create new
// ProfiledDocument doc = createNew(new Document("posizionamentoScavo",new Document("title","Mio pos")));
// Project doc = createNew(new Document("posizionamentoScavo",new Document("title","Mio pos")));
//
// // register filesets
// doc = upload(

View File

@ -2,9 +2,9 @@ package org.gcube.application.geoportal.service.profiledDocuments;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
@ -32,7 +32,7 @@ public class ProfiledConcessioniTests extends AbstractProfiledDocumentsTests{
"\"posizionamentoScavo\" :{\n" +
"\t\"titolo\" : \"mio titolo\"}}");
ProfiledDocument doc = createNew(theDoc);
Project doc = createNew(theDoc);

View File

@ -1,19 +1,12 @@
package org.gcube.application.cms.sdi.engine;
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.cms.sdi.faults.SDIInteractionException;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
import org.gcube.application.geoportal.common.utils.Files;
import java.net.MalformedURLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@ -34,30 +27,30 @@ public class PostgisIndexer {
@NonNull
SDIManagerWrapper manager;
@NonNull
Profile profile;
UseCaseDescriptor useCaseDescriptor;
@NonNull
DatabaseConnection connectionParameters;
PostgisDBManagerI dbManager=null;
public PostgisIndexer(SDIManagerWrapper manager, Profile profile,
public PostgisIndexer(SDIManagerWrapper manager, UseCaseDescriptor useCaseDescriptor,
DatabaseConnection postgisConnection) throws SQLException {
log.info("POSTGIS Index for {} Connecting to {} ",profile.getId(),postgisConnection);
log.info("POSTGIS Index for {} Connecting to {} ", useCaseDescriptor.getId(),postgisConnection);
this.connectionParameters=postgisConnection;
dbManager=new PostgisDBManager(DriverManager.
getConnection(connectionParameters.getUrl(),
connectionParameters.getUser(),
connectionParameters.getPwd()));
this.manager=manager;
this.profile = profile;
this.useCaseDescriptor = useCaseDescriptor;
}
PostgisTable table = null;
public void initIndex(String indexName, List<PostgisTable.Field> fields, String workspace,String storeName) throws SQLException, SDIInteractionException {
log.info("Check/init index for {} ",profile.getId());
log.info("Check/init index for {} ", useCaseDescriptor.getId());
table = new PostgisTable(indexName,fields, PostgisTable.GeometryType.POINT);
log.trace("Index Postgis Table is {} ",table);
log.debug("Create if missing..");

View File

@ -39,7 +39,7 @@ public class SDIManagerWrapper extends SDIManager{
* - "workspace"
* - "layerTitle"
* - "documentID"
* - "basePersistencePath" (profile specific, e.g. "GNA")
* - "basePersistencePath" (useCaseDescriptor specific, e.g. "GNA")
*
* @param fileSet
* @param params

View File

@ -19,10 +19,10 @@ import org.gcube.application.cms.sdi.faults.SDIInteractionException;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.cms.plugins.model.ComparableVersion;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.filesets.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import java.util.ArrayList;
import java.util.List;
@ -82,8 +82,8 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
log.info("Indexer {} : Performing {} ",this.getDescriptor().getId(),request);
ProfiledDocument profiledDocument=request.getDocument();
Profile profile = request.getProfile();
Project project =request.getDocument();
UseCaseDescriptor useCaseDescriptor = request.getUseCaseDescriptor();
Document requestArguments=request.getCallParameters();
IndexDocumentReport report= new IndexDocumentReport(request);
@ -93,19 +93,19 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
try{
// ********* INIT INDEX
// TODO CACHE
PostgisIndexer indexer = new PostgisIndexer(sdiCache.getObject(),profile,postgisCache.getObject());
PostgisIndexer indexer = new PostgisIndexer(sdiCache.getObject(), useCaseDescriptor,postgisCache.getObject());
Document profileConfiguration =getConfigurationFromProfile(profile).getConfiguration();
log.debug("Profile Configuration is {} ",profileConfiguration);
Document profileConfiguration =getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
log.debug("UseCaseDescriptor Configuration is {} ",profileConfiguration);
// SCHEMA
log.debug("Profile {} : Evaluating Index schema.. ",profile.getId());
List<PostgisTable.Field> fields = new ArrayList<>(); // TODO From Profile
log.debug("UseCaseDescriptor {} : Evaluating Index schema.. ", useCaseDescriptor.getId());
List<PostgisTable.Field> fields = new ArrayList<>(); // TODO From UseCaseDescriptor
fields.add(new PostgisTable.Field("geom", PostgisTable.FieldType.GEOMETRY));
fields.add(new PostgisTable.Field("projectid", PostgisTable.FieldType.TEXT));
List mappingObjs= profileConfiguration.get("explicitFieldMapping",List.class);
log.trace("Loading mappings from profile.. ");
log.trace("Loading mappings from useCaseDescriptor.. ");
List<MappingObject> mappingObjects= new ArrayList<>();
if(mappingObjs!=null){
for (Object mappingObj : mappingObjs) {
@ -131,31 +131,31 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
// ************* PREPARE RECORD
JSONPathWrapper documentNavigator=new JSONPathWrapper(Serialization.write(profiledDocument));
JSONPathWrapper documentNavigator=new JSONPathWrapper(Serialization.write(project));
Document centroidDoc = new Document();
if(requestArguments.containsKey("centroidRecord"))
centroidDoc.putAll(requestArguments.get("centroidRecords",Document.class));
// DEFAULT VALUES
centroidDoc.put("projectid",profiledDocument.getId());
centroidDoc.put("projectid", project.getId());
// ********************** EVALAUTE POSITION
log.debug("indexing Profile {} : Evaluating Centroid... ",profile.getId());
if(profiledDocument.getSpatialReference()!=null){
log.debug("Using user defined spatial reference "+profiledDocument.getSpatialReference());
log.debug("indexing UseCaseDescriptor {} : Evaluating Centroid... ", useCaseDescriptor.getId());
if(project.getSpatialReference()!=null){
log.debug("Using user defined spatial reference "+ project.getSpatialReference());
//TODO USE GEOJSON Position
throw new Exception("Not yet implemented");
}else {
log.debug("Profile {} : Getting evaluation paths from profile.. ",profile.getId());
log.debug("UseCaseDescriptor {} : Getting evaluation paths from useCaseDescriptor.. ", useCaseDescriptor.getId());
List bboxEvaluationPaths = profileConfiguration.get("bboxEvaluation",List.class);
if(bboxEvaluationPaths==null || bboxEvaluationPaths.isEmpty())
throw new Exception("Missing configuration bboxEvaluation");
GCubeSDILayer.BBOX toSet = null;
for(Object pathObj : bboxEvaluationPaths){
log.debug("Profile {} : Evaluating path {} ",profile.getId(),pathObj);
log.debug("UseCaseDescriptor {} : Evaluating path {} ", useCaseDescriptor.getId(),pathObj);
List<Object> bboxObjects = documentNavigator.getByPath(pathObj.toString());
log.debug("Profile {} : Evaluating path {} .. results {} ",profile.getId(),pathObj,bboxObjects);
log.debug("UseCaseDescriptor {} : Evaluating path {} .. results {} ", useCaseDescriptor.getId(),pathObj,bboxObjects);
for(Object bboxObject : bboxObjects) {
log.info("Matched path {}, value is {} ",pathObj.toString(),bboxObject);
GCubeSDILayer.BBOX box = Serialization.convert(bboxObject, GCubeSDILayer.BBOX.class);
@ -187,7 +187,7 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin
//*********** Additional Values from profile
//*********** Additional Values from useCaseDescriptor
log.info("Setting additional values to centroid from mappings ..");
for(MappingObject m : mappingObjects){

View File

@ -20,10 +20,10 @@ import org.gcube.application.cms.plugins.requests.MaterializationRequest;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.cms.plugins.model.ComparableVersion;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
import org.gcube.application.geoportal.common.utils.ContextUtils;
import java.util.HashMap;
@ -90,17 +90,17 @@ public class SDIMaterializerPlugin extends AbstractPlugin implements Materializa
@Override
public MaterializationReport materialize(MaterializationRequest request) throws MaterializationException, InvalidPluginRequestException {
log.info("Materializer {} : Performing {} ",this.getDescriptor().getId(),request);
ProfiledDocument profiledDocument=request.getDocument();
Profile profile = request.getProfile();
Project project =request.getDocument();
UseCaseDescriptor useCaseDescriptor = request.getUseCaseDescriptor();
Document requestArguments=request.getCallParameters();
MaterializationReport report= new MaterializationReport(request);
try{
Document profileConfiguration =getConfigurationFromProfile(profile).getConfiguration();
log.debug("Profile Configuration is {} ",profileConfiguration);
JSONPathWrapper documentNavigator=new JSONPathWrapper(profiledDocument.getTheDocument().toJson());
JSONPathWrapper schemaNavigator=new JSONPathWrapper(profile.getSchema().toJson());
Document profileConfiguration =getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
log.debug("UseCaseDescriptor Configuration is {} ",profileConfiguration);
JSONPathWrapper documentNavigator=new JSONPathWrapper(project.getTheDocument().toJson());
JSONPathWrapper schemaNavigator=new JSONPathWrapper(useCaseDescriptor.getSchema().toJson());
for(Object fsConfigObj : profileConfiguration.get("registeredFileSetPaths", List.class)){
log.debug("Managing {} ",fsConfigObj);
@ -120,14 +120,14 @@ public class SDIMaterializerPlugin extends AbstractPlugin implements Materializa
for(Object fsObject : documentNavigator.getByPath(fsConfig.getDocumentPath())){
RegisteredFileSet fs = Serialization.convert(fsObject,RegisteredFileSet.class);
log.debug("Found {} ",fs);
requestArguments.putIfAbsent("basePersistencePath",profile.getId());
requestArguments.putIfAbsent("documentID",profiledDocument.getId());
requestArguments.putIfAbsent("basePersistencePath", useCaseDescriptor.getId());
requestArguments.putIfAbsent("documentID", project.getId());
if(requestArguments.containsKey("titleField"))
requestArguments.putIfAbsent("layerTitle",fs.getString(requestArguments.getString("titleField")));
else requestArguments.putIfAbsent("layerTitle",fs.getUUID());
//Add FS uuid at ws_baseName
requestArguments.put("workspace",request.getMandatory("workspace")+"_"+ profiledDocument.getId());
requestArguments.put("workspace",request.getMandatory("workspace")+"_"+ project.getId());
// Actually materializing
RegisteredFileSet obtained = getSDIManager().materializeLayer(fs,requestArguments);

View File

@ -7,13 +7,11 @@ import org.gcube.application.cms.plugins.faults.PluginExecutionException;
import org.gcube.application.cms.plugins.reports.IndexDocumentReport;
import org.gcube.application.cms.plugins.reports.Report;
import org.gcube.application.cms.plugins.requests.IndexDocumentRequest;
import org.gcube.application.cms.sdi.plugins.SDIIndexerPlugin;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.cms.tests.BasicPluginTest;
import org.gcube.application.cms.tests.TestDocuments;
import org.gcube.application.cms.tests.TestProfiles;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
import org.junit.Test;
@ -27,8 +25,8 @@ public class IndexerTest extends BasicPluginTest {
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
IndexDocumentRequest request=new IndexDocumentRequest();
ProfiledDocument doc= TestDocuments.documentMap.get("profiledConcessioniExample.json");
request.setProfile(TestProfiles.profiles.get(doc.getProfileID()));
Project doc= TestDocuments.documentMap.get("profiledConcessioniExample.json");
request.setUseCaseDescriptor(TestProfiles.profiles.get(doc.getProfileID()));
request.setDocument(doc);
Document parameters = new Document();
parameters.put("workspace", "testing_workspace");