gCube CMS Suite -------------------------------------------------- gCube CMS Suite is a distributed full stack application for publication management in a gCube Hybrid e-infrastructure. Check wiki [here](https://sublime-and-sphinx-guide.readthedocs.io) [](https://geoportal.cloud.d4science.org/geoportal-service/docs/index.html) Rationale : Publication involves lots of common features as well as custom behaviour and formats. The service implements the basic common logic, delegating to installed plugin both custom and configurable functions ranging from validation, data manifestation, indexing and lifecycle management. **Lifecycle management** is itself an extension allowing for both common and complex ad-hoc workflows. **High modularity of plugins** allows for the composition of ad hoc use cases with maximized re-usability. The suite comes with a set of pre-built plugins and GUIs that communities can easily extend and / or reuse. ## Built with * [gCube SmartGears](https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework * [OpenJDK](https://openjdk.java.net/) - The JDK used * [JAX-RS](https://github.com/eclipse-ee4j/jaxrs-api) - Java™ API for RESTful Web Services * [Jersey](https://jersey.github.io/) - JAX-RS runtime * [Maven](https://maven.apache.org/) - Dependency Management * [Enunciate](http://enunciate.webcohesion.com/) - API Documentation ## General Architecture [](https://geoportal.cloud.d4science.org/geoportal-service/docs/architecture.html) ## Lifecycle Managements Document Lifecycle Managements in action: ##### Single Step (no moderation) ```mermaid flowchart LR New[New Project] -..-> DRAFT(DRAFT) Update[Update Project] -..-> DRAFT(DRAFT) DRAFT ==>|publish| Published(Published) Published ==>|unpublish| DRAFT classDef noteClass fill:#ffe4b5,stroke:none,font-style:italic,font-size:14px; classDef box-b fill:#3D6BA6,stroke:#12407B,stroke-width:1px,color:#fff,font-size:16px; classDef box-g fill:#3BBF9E,stroke:#03926E,stroke-width:1px,color:#fff,font-size:16px; class New,Update noteClass class DRAFT box-b class Published box-g ``` ##### 3 Phases (content moderation) ```mermaid flowchart LR New[New Project] -..-> DRAFT(DRAFT) Update[Update Project] -..-> DRAFT(DRAFT) DRAFT ==>|submit-for-review| PendingApproval(Pending
Approval) PendingApproval ==> |approve-submitted| Published(Published) PendingApproval ==>|reject-draft| DRAFT Published ==>|unpublish| DRAFT classDef noteClass fill:#ffe4b5,stroke:none,font-style:italic,font-size:14px; classDef box-b fill:#3D6BA6,stroke:#12407B,stroke-width:1px,color:#fff,font-size:16px; classDef box-g fill:#3BBF9E,stroke:#03926E,stroke-width:1px,color:#fff,font-size:16px; classDef box-o fill:#FF904E,stroke:#E15604,stroke-width:1px,color:#fff,font-size:16px; class New,Update noteClass class DRAFT box-b class PendingApproval box-o class Published box-g ``` ## Plugins Plugins in action: * [Lifecycle Manager](/gCubeSystem/gcube-cms-suite/src/branch/master/default-lc-managers) * [Spatial Data Infrastructure "SDI"](/gCubeSystem/gcube-cms-suite/src/branch/master/sdi-plugins) * [Notifications](/gCubeSystem/gcube-cms-suite/src/branch/master/notifications-plugins) * [Catalogue Binding](/gCubeSystem/gcube-cms-suite/src/branch/event_manager/catalogue-binding-plugin) ## Use Case ##### The D4GNA ["Dataset per il Geoportale Nazionale per l'Archeologia"](https://gna.d4science.org) ###### D4GNA Component diagram ```mermaid graph TB subgraph Geoportal [D4GNA Components] geoportalservice[ Geoportal Service] mongo[ Mongo DB] postgis[ PostGIS DB] geoserver[ Geoserver] note-gs-to-mongo[Geoportal Service:
creates/reads Profiled Documents and UCDs
creates/reads Plugins configured
on Mongo DB] note-gs-to-geoserver[Geoportal Service:
creates/reads Workspaces,Stores,Layers,Styles
on Geoserver] note-gs-to-geoserver2[Geoportal Service:
READS via GS Rest Interface
e.g. the GeoServerRESTReader.class reads from REST path
geoserver_endpoint/rest/layers/profiledconcessioni_gna:profiledconcessioni_gna_centroids.xml
WRITES via FeatureTypes
e.g. the SDIManagerWrapper.class creates the index layer via FTE] note-gs-to-postgis[Geoportal Service:
creates/reads Index Layers
as Tables on PostGIS for Profile Document ID.
Add the Index Layers Store/Workspace to Geoserver] note-to-featuretypes[A feature type is a vector based spatial resource
or data set that originates from a data store.
In some cases, such as with a shapefile,
a feature type has a one-to-one relationship
with its data store.
In other cases, such as PostGIS,
the relationship of feature type
to data store is many-to-one,
feature types corresponding to a table in the database,
see https://docs.geoserver.org/main/en/user/rest/api/featuretypes.html] end subgraph Storage [Cloud Storage] shub[SHUB] disk1[Storage] end geoportalservice -->|uses| geoserver geoportalservice -->|stores docs| mongo geoportalservice -->|sends data| shub geoportalservice -->|uses| postgis geoserver -->|uses| postgis shub -->|stores data| disk1 note-gs-to-mongo -.-> mongo note-gs-to-geoserver -.-> geoserver note-gs-to-geoserver2 -.-> geoserver note-gs-to-postgis -.-> postgis classDef noteClass fill:#ffe4b5,stroke:#000,stroke-dasharray: 1 5,font-style:italic,font-size:12px; classDef note2Class fill:#aaccdd,stroke:#000,stroke-dasharray: 1 5,font-style:italic,font-size:12px; class note-gs-to-mongo,note-gs-to-geoserver,note-gs-to-geoserver2,note-gs-to-postgis noteClass class note-to-featuretypes note2Class ``` ###### D4GNA Architecture [![](https://mermaid.ink/img/pako:eNqFk1FPgzAQx79Kc08sYQtsQ7QPJs4l00SNkfni2EMHJ2scLSnFqMu-uwUqm0umPNBy9_tf_z3aLSQyRaDAVLLmGhNdKeyvULNYEPNkSlYFyVAWUmm2cbjQqATq3mI6nj1ckWuZF1Kg0OXyUFBqqViGTrKRVdpbXNcDidqgAVu0RPXOE9xXtwGnHlH1FrOfBInazJJwsceP6-RSZNJJmWYrVmJvcV9_k-nkWHWoKWSpM14eqB5NZHYb_aMz4dblodl2-rfJcl2tOk1089yuYvv1G015-eY79duQtne_YNvxo_bRJ9LvX5I72nk8wd013BNt-naCmdtate0TyMQitpUd1a5t0_N92m7SFOycNjutM-BCjipnPDVHcluTMeg15hgDNdMUX1m10THEYmdQVmkZfYoEqFYVumCOXrYG-lp7c6EqzE_FKWeZYnkXLZh4kTL_kWDKTTfv2zvQXIUGAbqFD6CBdzYYexdD3xt6gRee-y58Ah2d-YPhcBSEfhiGo_EoDHYufDVFvUGw-wYEyyGG?type=png)](https://mermaid.live/edit#pako:eNqFk1FPgzAQx79Kc08sYQtsQ7QPJs4l00SNkfni2EMHJ2scLSnFqMu-uwUqm0umPNBy9_tf_z3aLSQyRaDAVLLmGhNdKeyvULNYEPNkSlYFyVAWUmm2cbjQqATq3mI6nj1ckWuZF1Kg0OXyUFBqqViGTrKRVdpbXNcDidqgAVu0RPXOE9xXtwGnHlH1FrOfBInazJJwsceP6-RSZNJJmWYrVmJvcV9_k-nkWHWoKWSpM14eqB5NZHYb_aMz4dblodl2-rfJcl2tOk1089yuYvv1G015-eY79duQtne_YNvxo_bRJ9LvX5I72nk8wd013BNt-naCmdtate0TyMQitpUd1a5t0_N92m7SFOycNjutM-BCjipnPDVHcluTMeg15hgDNdMUX1m10THEYmdQVmkZfYoEqFYVumCOXrYG-lp7c6EqzE_FKWeZYnkXLZh4kTL_kWDKTTfv2zvQXIUGAbqFD6CBdzYYexdD3xt6gRee-y58Ah2d-YPhcBSEfhiGo_EoDHYufDVFvUGw-wYEyyGG) ## Documentation * [Dedicated Wiki](https://geoportal.d4science.org/geoportal-service/docs/index.html#) - powered by [Sphynx](https://www.sphinx-doc.org/en/master/) * [Service Interactive API](https://geoportal.d4science.org/geoportal-service/api-docs/index.html) - powered by [Enunciate](http://enunciate.webcohesion.com/) * [Gcube System Wiki](https://gcube.wiki.gcube-system.org/gcube/GeoPortal). * [Guide Notebooks](use-cases) - powered by [Jupyter](https://jupyter.org/) ## Change log See [CHANGELOG.md](CHANGELOG.md). ## Authors * **Fabio Sinibaldi** as "Architect", "Developer" ([ORCID](https://orcid.org/0000-0003-1013-6203)) Computer Scientist at ISTI-CNR * **Francesco Mangiacrapa** as "Architect", "Developer" and "Maintainer" ([ORCID](https://orcid.org/0000-0002-6528-664X)) Computer Scientist at [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience) ## License This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details. ## About the gCube Framework This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an open-source software toolkit used for building and operating Hybrid Data Infrastructures enabling the dynamic deployment of Virtual Research Environments by favouring the realisation of reuse oriented policies. The projects leading to this software have received funding from a series of European Union programmes including: - the Sixth Framework Programme for Research and Technological Development - DILIGENT (grant no. 004260). - the Seventh Framework Programme for research, technological development and demonstration - D4Science (grant no. 212488); - D4Science-II (grant no.239019); - ENVRI (grant no. 283465); - iMarine(grant no. 283644); - EUBrazilOpenBio (grant no. 288754). - the H2020 research and innovation programme - SoBigData (grant no. 654024); - PARTHENOS (grant no. 654119); - EGIEngage (grant no. 654142); - ENVRIplus (grant no. 654182); - BlueBRIDGE (grant no. 675680); - PerformFish (grant no. 727610); - AGINFRAplus (grant no. 731001); - DESIRA (grant no. 818194); - ARIADNEplus (grant no. 823914); - RISIS2 (grant no. 824091);