package org.gcube.application.cms.concessioni.plugins; import lombok.extern.slf4j.Slf4j; import org.bson.BsonDocument; import org.bson.BsonString; import org.bson.BsonValue; import org.bson.Document; import org.gcube.application.cms.plugins.*; import org.gcube.application.cms.plugins.faults.*; import org.gcube.application.cms.plugins.implementations.Default3PhaseManager; import org.gcube.application.cms.plugins.model.ComparableVersion; import org.gcube.application.cms.plugins.reports.*; import org.gcube.application.cms.plugins.requests.*; import org.gcube.application.cms.serialization.Serialization; import org.gcube.application.cms.custom.gna.concessioni.model.ProfiledConcessione; import org.gcube.application.cms.plugins.model.PluginDescriptor; import org.gcube.application.geoportal.common.model.document.*; import org.gcube.application.geoportal.common.model.document.access.Access; import org.gcube.application.geoportal.common.model.document.access.AccessPolicy; 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.document.lifecycle.TriggeredEvents; import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.utils.Files; @Slf4j /** Overrides 3 Phases lifecycle with override of default values * */ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements LifecycleManager { public ConcessioniLifeCycleManager() { DESCRIPTOR.setId("GNA-CONCESSIONI-LC"); DESCRIPTOR.setDescription("GNA Concessioni. This plugin supports custom lifecycle management for the GNA Concessioni UseCase."); DESCRIPTOR.setVersion(new ComparableVersion("1.0.0")); } // STATIC ROUTINES private static final Project setDefaults(Project document){ ProfiledConcessione c=Serialization.convert(document,ProfiledConcessione.class); Document doc=c.getTheDocument(); doc.putIfAbsent(ProfiledConcessione.SOGGETTO,new String[]{"Research Excavation","Archaeology"}); doc.putIfAbsent(ProfiledConcessione.DSCRIZIONE_CONTENUTO,"Relazione di fine scavo e relativo abstract; selezione di immagini rappresentative;" + " posizionamento topografico dell'area indagata, pianta di fine scavo."); // Super Section c.getInfo().getAccess().setLicense( ConstraintCheck.defaultFor(c.getInfo().getAccess().getLicense(), "CC0-1.0").evaluate()); //RELAZIONE // TODO NB provare se object gia' presente sia usando Document che sub Object doc.putIfAbsent(ProfiledConcessione.RELAZIONE_SCAVO,new Document()); Document rel=Serialization.convert(doc.get(ProfiledConcessione.RELAZIONE_SCAVO), Document.class); rel.putIfAbsent(ProfiledConcessione.Sections.TITOLO,doc.getString(ProfiledConcessione.NOME)+" relazione di scavo"); rel.putIfAbsent(ProfiledConcessione.SOGGETTO,doc.get(ProfiledConcessione.SOGGETTO)); rel.putIfAbsent(RegisteredFileSet.CREATION_INFO,c.getInfo().getCreationInfo()); rel.putIfAbsent(RegisteredFileSet.ACCESS,c.getInfo().getAccess()); Access relAccess=Serialization.convert(rel.get(RegisteredFileSet.ACCESS),Access.class); relAccess.setLicense(ConstraintCheck.defaultFor(relAccess.getLicense(),"CC-BY-4.0").evaluate()); relAccess.setPolicy(ConstraintCheck.defaultFor(relAccess.getPolicy(), AccessPolicy.OPEN).evaluate()); //ABSTRACT Relazione doc.putIfAbsent(ProfiledConcessione.ABSTRACT_RELAZIONE,new Document()); Document abs=Serialization.convert(doc.get(ProfiledConcessione.ABSTRACT_RELAZIONE),Document.class); abs.putIfAbsent(ProfiledConcessione.Sections.TITOLO,doc.getString(ProfiledConcessione.NOME)+" abstract relazione di scavo"); abs.putIfAbsent(RegisteredFileSet.CREATION_INFO,c.getInfo().getCreationInfo()); abs.putIfAbsent(RegisteredFileSet.ACCESS,c.getInfo().getAccess()); Access absAccess=Serialization.convert(abs.get(RegisteredFileSet.ACCESS),Access.class); absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate()); absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate()); //TODO complete setDefaults //IMMAGINI RAPPRESENTATIVE if(doc.containsKey(ProfiledConcessione.IMMAGINI_RAPPRESENTATIVE)) { for (BsonValue bsonValue : doc.toBsonDocument(null, null). getArray(ProfiledConcessione.IMMAGINI_RAPPRESENTATIVE)) { BsonDocument imgDocument = bsonValue.asDocument(); imgDocument.putIfAbsent(ProfiledConcessione.SOGGETTO,new BsonString(doc.getString(ProfiledConcessione.SOGGETTO))); // imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo()); // imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,new BsonDocument(new Document())); // imgDocument.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess()); // Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class); // absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate()); // absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate()); } } return c; } }