diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java
index 63cd40f..ad59b66 100644
--- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java
@@ -3,10 +3,12 @@ package org.gcube.application.cms.plugins;
import org.gcube.application.cms.plugins.faults.StepException;
import org.gcube.application.cms.plugins.reports.ExecutionReport;
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
public interface LifecycleManager extends InitializablePlugin{
// Lifecycle operations
public ExecutionReport performStep(StepExecutionRequest request)throws StepException;
+
}
diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/model/PluginDescriptor.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/model/PluginDescriptor.java
index c086957..8df26c6 100644
--- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/model/PluginDescriptor.java
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/model/PluginDescriptor.java
@@ -12,7 +12,7 @@ import org.gcube.application.geoportal.common.model.document.ComparableVersion;
public class PluginDescriptor {
@NonNull
- private String ID;
+ private String id;
@NonNull
private String type;
private String label;
diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/requests/StepExecutionRequest.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/requests/StepExecutionRequest.java
index ba64f67..c00a653 100644
--- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/requests/StepExecutionRequest.java
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/requests/StepExecutionRequest.java
@@ -8,6 +8,19 @@ import org.gcube.application.geoportal.common.model.profile.Profile;
@Data
public class StepExecutionRequest {
+ public static class Steps{
+ public static final String ON_INIT_DOCUMENT="@@@INIT_DOCUMENT@@";
+ public static final String ON_UPDATE_DOCUMENT="@@@UPDATE_DOCUMENT@@";
+ public static final String ON_DELETE_DOCUMENT="@@@UPDATE_DOCUMENT@@";
+
+ public static final String ON_MATERIALIZE_DOCUMENT="@@@MATERIALIZE_DOCUMENT@@";
+ public static final String ON_DEMATERIALIZE_DOCUMENT="@@@DEMATERIALIZE_DOCUMENT@@";
+
+ public static final String ON_INDEX_DOCUMENT="@@@INDEX_DOCUMENT@@";
+ public static final String ON_DEINDEX_DOCUMENT="@@@DEINDEX_DOCUMENT@@";
+ }
+
+
Profile profile;
ProfiledDocument document;
String step;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
index 61d24fd..3b83cd7 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
@@ -13,7 +13,7 @@ import org.bson.Document;
public class ProfiledDocument {
// CORE METADATA
- private String id;
+ private String _id;
private ComparableVersion version;
// Publication Info
diff --git a/geoportal-service/pom.xml b/geoportal-service/pom.xml
index 4431742..f4f0824 100644
--- a/geoportal-service/pom.xml
+++ b/geoportal-service/pom.xml
@@ -87,6 +87,11 @@
geoportal-common
+
+ org.gcube.application
+ cms-plugin-framework
+
+
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java
index 1786426..cb47855 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java
@@ -2,9 +2,11 @@ package org.gcube.application.geoportal.service.engine.mongo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mongodb.client.MongoDatabase;
+import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.bson.types.ObjectId;
+import org.gcube.application.cms.plugins.LifecycleManager;
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.legacy.report.ValidationReport;
@@ -14,6 +16,7 @@ import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.geoportal.service.utils.UserUtils;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
@@ -30,16 +33,41 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
Profile profile;
+ MongoDatabase db=null;
+
+ LifecycleManager lfManager;
+
public ProfiledMongoManager(String profileId) throws ConfigurationException {
+ log.info("Loading profile ID {} ",profileId);
if(profileId==null) throw new InvalidParameterException("Profile ID cannot be null");
Map profiles=ImplementationProvider.get().getProfiles().getObject();
- if(!profiles.containsKey(profileId))
- throw new WebApplicationException("Profile "+profileId+" not registered", Response.Status.NOT_FOUND);
+ 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);
+ }
+ profile=profiles.get(profileId);
+ log.debug("Loaded Profile {} ",profile);
+
+
+ String toUseDB=super.client.getConnection().getDatabase();
+ log.info("Connecting to DB {} ",toUseDB);
+
+ // TODO MAP OF DATABASES?
+ db=client.getTheClient().getDatabase(toUseDB);
}
+
+
+
private ProfiledDocument onUpdate(ProfiledDocument updatedDocument){
- throw new RuntimeException("Implement Me");
+
+ UserUtils.AuthenticatedUser u = UserUtils.getCurrent();
+ updatedDocument.getInfo().setLastEditInfo(u.asInfo());
+
+ // TODO invoke lifecycle manager
+
+ return updatedDocument;
}
private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
@@ -51,12 +79,12 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
private String getCollectionName(){
- return null;
+ return profile.getId();
}
@Override
- protected MongoDatabase getDatabase() {
- return null;
+ public MongoDatabase getDatabase(){
+ return db;
}
@Override
@@ -66,27 +94,36 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
//TODO initialize ProfiledDocument values
- insert(asDocument(toRegister),getCollectionName());
-
- log.trace("Going to register {} ",toRegister);
- toRegister=onUpdate(toRegister);
- log.trace("Concessione with defaults is {}",toRegister);
- ObjectId id=insert(asDocument(toRegister), getCollectionName());
-
- log.trace("Obtained id {}",id);
- ProfiledDocument toReturn=asProfiledDocument(getById(id,getCollectionName()));
- toReturn.setId(asString(id));
- toReturn = asProfiledDocument(replace(asDocument(toReturn),getCollectionName()));
- log.debug("Registered {} ",toReturn);
- return toReturn;
+ // TODO Apply Lifecycle
+
+
+
+ ObjectId id =insert(asDocument(toRegister),getCollectionName());
+
+// log.trace("Going to register {} ",toRegister);
+// toRegister=onUpdate(toRegister);
+// log.trace("Concessione with defaults is {}",toRegister);
+// ObjectId id=insert(asDocument(toRegister), getCollectionName());
+//
+// log.trace("Obtained id {}",id);
+// ProfiledDocument toReturn=asProfiledDocument(getById(id,getCollectionName()));
+// toReturn.setId(asString(id));
+//
+//
+// toReturn = asProfiledDocument(replace(asDocument(toReturn),getCollectionName()));
+// log.debug("Registered {} ",toReturn);
+ return getByID(id.toHexString());
}
@Override
public ProfiledDocument update(String id, ProfiledDocument toSet) throws IOException {
log.trace("Replacing {} ",toSet);
+ // DEFAULT ON UPDATE
toSet=onUpdate(toSet);
+ // TODO SPECIFIC ON UPDATE
+
return asProfiledDocument(replace(asDocument(toSet),getCollectionName()));
}
@@ -96,6 +133,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
try{
ProfiledDocument doc =getByID(id);
+ // TODO INVOKE LIFECYCLE
//if(!force&&isPublished(id)) throw new Exception("Cannot delete published documents. Unpublish it or use force = true");
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java
new file mode 100644
index 0000000..741a179
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java
@@ -0,0 +1,25 @@
+package org.gcube.application.geoportal.service.engine.providers;
+
+import org.gcube.application.cms.plugins.Plugin;
+import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
+
+import java.util.Map;
+
+public class PluginManager implements Engine