suite_1.0.4 #9
|
@ -2,6 +2,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.spatial.data.gcube-sdi-suite
|
# Changelog for org.gcube.spatial.data.gcube-sdi-suite
|
||||||
|
|
||||||
|
## [v1.0.4] - 2023-01-10
|
||||||
|
- Updated plugin framework
|
||||||
|
|
||||||
## [v1.0.3] - 2022-12-07
|
## [v1.0.3] - 2022-12-07
|
||||||
- Updated plugin framework
|
- Updated plugin framework
|
||||||
- Introduced module default-lc-managers
|
- Introduced module default-lc-managers
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.ckan-plugin
|
# Changelog for org.gcube.application.cms.ckan-plugin
|
||||||
|
|
||||||
This library contains gcube-cms plugins for ckan materializations
|
## [v1.0.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.1] - 2022-12-07
|
## [v1.0.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : CKAN Plugins
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
This library is expected to contains gcube-cms plugins for ckan materializations.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
|
@ -11,15 +11,12 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md).
|
See [CHANGELOG.md](CHANGELOG.md).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||||
|
|
||||||
## About the gCube Framework
|
## About the gCube Framework
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>ckan-plugins</artifactId>
|
<artifactId>ckan-plugins</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.2</version>
|
||||||
<name>gCube CMS - CKAN Plugins</name>
|
<name>gCube CMS - CKAN Plugins</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms-plugin-framework
|
# Changelog for org.gcube.application.cms-plugin-framework
|
||||||
|
|
||||||
|
## [v1.0.3] - 2023-01-10
|
||||||
|
- UserUtils in framework
|
||||||
|
|
||||||
## [v1.0.2] 2022-01-17
|
## [v1.0.2] 2022-01-17
|
||||||
- Fixes #2435
|
- Fixes #2435
|
||||||
- Introduced module default-lc-managers
|
- Introduced module default-lc-managers
|
||||||
|
@ -10,4 +11,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- Serialization Features
|
- Serialization Features
|
||||||
|
|
||||||
## [v1.0.0] 2021-09-20
|
## [v1.0.0] 2021-09-20
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
CMS - Plugin Framework
|
CMS - Plugin Framework
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
CMS Plugin Framework is a library containing the definition of Java interfaces that plugins should implement
|
This module contains the definition of interfaces that server plugins are expected to implement.
|
||||||
|
Basic and abstract implementations are provided in different module default-lc-manager.
|
||||||
|
|
||||||
|
Basic providers (e.g. WSProvider, ISProvider) used both in test and by the service are implemented here for simplicity.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
|
@ -12,8 +15,8 @@ CMS Plugin Framework is a library containing the definition of Java interfaces t
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
<artifactId>cms-plugin-framework</artifactId>
|
||||||
<version>1.0.2</version>
|
<version>1.0.3</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,6 +67,12 @@
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.common</groupId>
|
||||||
|
<artifactId>authorization-utils</artifactId>
|
||||||
|
<version>[2.0.0, 3.0.0-SNAPSHOT)</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.application.cms.caches;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.common.utils.ContextUtils;
|
import org.gcube.application.geoportal.common.utils.ContextUtils;
|
||||||
|
|
||||||
|
@ -18,7 +19,10 @@ public abstract class AbstractScopedMap<T> extends TimedMap<String,T> implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T getObject() throws ConfigurationException {
|
public T getObject() throws ConfigurationException {
|
||||||
return get(ContextUtils.getCurrentScope());
|
UserUtils.AuthenticatedUser user = UserUtils.getCurrent();
|
||||||
|
String context = user.getContext();
|
||||||
|
log.debug(" {} : Accessing object under context {} ",name,context);
|
||||||
|
return get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.gcube.application.geoportal.service.utils;
|
package org.gcube.application.cms.implementations.utils;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
|
@ -1,7 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.cms-test-commons
|
# Changelog for org.gcube.application.cms.cms-test-commons
|
||||||
|
|
||||||
|
## [v1.0.4] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.3] - 2022-12-07
|
## [v1.0.3] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
|
@ -12,4 +13,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- Introduced profiled documents
|
- Introduced profiled documents
|
||||||
|
|
||||||
## [v1.0.0] - 2021-09-11
|
## [v1.0.0] - 2021-09-11
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
gCube CMS - test-commons
|
gCube CMS - test-commons
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
Common logic used by test cases
|
Common utilities for testing such as :
|
||||||
|
|
||||||
|
- access to test-resources Maps
|
||||||
|
- Test Credentials management
|
||||||
|
- Basic plugin Test Case implementations
|
||||||
|
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>cms-test-commons</artifactId>
|
<artifactId>cms-test-commons</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
<name>CMS Test Commons</name>
|
<name>CMS Test Commons</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import java.nio.charset.Charset;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class TestDocuments {
|
public class TestDocuments {
|
||||||
public static File BASE_FOLDER =new File("test-data/profiledDocuments");
|
public static File BASE_FOLDER =new File("../test-data/profiledDocuments");
|
||||||
public static final HashMap<String, Project> documentMap =new HashMap<>();
|
public static final HashMap<String, Project> documentMap =new HashMap<>();
|
||||||
|
|
||||||
static{
|
static{
|
||||||
|
|
|
@ -16,6 +16,19 @@ import java.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used in order to set gCube Credentials for tests that needs a gCube Infrastructure.
|
||||||
|
*
|
||||||
|
* The method TokenSetter.set(String context) is used in order to specify the context to test.
|
||||||
|
*
|
||||||
|
* The library expects a Properties file /tokens.properties in the classpath like the following example :
|
||||||
|
*
|
||||||
|
* /root/vo/vre1 = GCUBE-TOKEN
|
||||||
|
* ...
|
||||||
|
* /devRoot/vo = JWT-TOKEN
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TokenSetter {
|
public class TokenSetter {
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.concessioni-lifecycle
|
# Changelog for org.gcube.application.cms.concessioni-lifecycle
|
||||||
|
|
||||||
This library contains custom extensions for the support of GNA "concessioni" use case
|
## [v1.0.3] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
- Fixes default access
|
||||||
|
|
||||||
## [v1.0.2] - 2022-12-07
|
## [v1.0.2] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
@ -13,3 +13,5 @@ This library contains custom extensions for the support of GNA "concessioni" use
|
||||||
|
|
||||||
## [v1.0.0] - 2021-12-15
|
## [v1.0.0] - 2021-12-15
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : Concessioni Lifecycle
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
This library contains custom extensions for the support of GNA "concessioni" use case custom requirements.
|
||||||
|
It contains a Lifecycle Manager built on top of default 3-PHASE, extending :
|
||||||
|
|
||||||
|
- Default values setting / evaluation
|
||||||
|
- Indexing parameters :
|
||||||
|
- Relationship management : relationship chains on "follows" and "precedes" are evaluated in order to show only last published project in centroids map
|
||||||
|
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
||||||
|
@ -11,8 +17,8 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>concessioni-lifecycle</artifactId>
|
<artifactId>concessioni-lifecycle</artifactId>
|
||||||
<version>1.0.2</version>
|
<version>1.0.3</version>
|
||||||
<name>GNA Concessioni Lifecycle</name>
|
<name>GNA Concessioni Lifecycle</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -82,12 +82,6 @@ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements
|
||||||
log.debug("Concessione {}, managing relazione {}",document.getId(),rel);
|
log.debug("Concessione {}, managing relazione {}",document.getId(),rel);
|
||||||
rel.putIfAbsent(ProfiledConcessione.Sections.TITOLO,doc.getString(ProfiledConcessione.NOME)+" relazione di scavo");
|
rel.putIfAbsent(ProfiledConcessione.Sections.TITOLO,doc.getString(ProfiledConcessione.NOME)+" relazione di scavo");
|
||||||
rel.putIfAbsent(ProfiledConcessione.SOGGETTO,doc.get(ProfiledConcessione.SOGGETTO));
|
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());
|
|
||||||
rel.put(RegisteredFileSet.ACCESS,relAccess);
|
|
||||||
doc.put(ProfiledConcessione.RELAZIONE_SCAVO,rel);
|
doc.put(ProfiledConcessione.RELAZIONE_SCAVO,rel);
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,12 +90,6 @@ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements
|
||||||
Serialization.convert(doc.get(ProfiledConcessione.ABSTRACT_RELAZIONE), Document.class):new Document();
|
Serialization.convert(doc.get(ProfiledConcessione.ABSTRACT_RELAZIONE), Document.class):new Document();
|
||||||
log.debug("Concessione {}, managing abstract relazione {}",document.getId(),abs);
|
log.debug("Concessione {}, managing abstract relazione {}",document.getId(),abs);
|
||||||
abs.putIfAbsent(ProfiledConcessione.Sections.TITOLO,doc.getString(ProfiledConcessione.NOME)+" abstract relazione di scavo");
|
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());
|
|
||||||
abs.put(RegisteredFileSet.ACCESS,absAccess);
|
|
||||||
doc.put(ProfiledConcessione.ABSTRACT_RELAZIONE,abs);
|
doc.put(ProfiledConcessione.ABSTRACT_RELAZIONE,abs);
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,13 +108,6 @@ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements
|
||||||
// BBOX in registered filesets
|
// BBOX in registered filesets
|
||||||
|
|
||||||
pos.put(ProfiledConcessione.RESPONSABILE,doc.get(ProfiledConcessione.RESPONSABILE));
|
pos.put(ProfiledConcessione.RESPONSABILE,doc.get(ProfiledConcessione.RESPONSABILE));
|
||||||
|
|
||||||
pos.putIfAbsent(RegisteredFileSet.CREATION_INFO,c.getInfo().getCreationInfo());
|
|
||||||
pos.putIfAbsent(RegisteredFileSet.ACCESS,c.getInfo().getAccess());
|
|
||||||
Access posAccess=Serialization.convert(rel.get(RegisteredFileSet.ACCESS),Access.class);
|
|
||||||
posAccess.setLicense(ConstraintCheck.defaultFor(posAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
posAccess.setPolicy(ConstraintCheck.defaultFor(posAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
pos.put(RegisteredFileSet.ACCESS,posAccess);
|
|
||||||
doc.put(ProfiledConcessione.POSIZIONAMENTO_SCAVO,pos);
|
doc.put(ProfiledConcessione.POSIZIONAMENTO_SCAVO,pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,12 +120,7 @@ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements
|
||||||
for (int i = 0; i <imgs.size() ; i++) {
|
for (int i = 0; i <imgs.size() ; i++) {
|
||||||
Document imgDoc=Serialization.asDocument(imgs.get(i));
|
Document imgDoc=Serialization.asDocument(imgs.get(i));
|
||||||
imgDoc.putIfAbsent(ProfiledConcessione.SOGGETTO,doc.get(ProfiledConcessione.SOGGETTO));
|
imgDoc.putIfAbsent(ProfiledConcessione.SOGGETTO,doc.get(ProfiledConcessione.SOGGETTO));
|
||||||
imgDoc.putIfAbsent(RegisteredFileSet.CREATION_INFO,c.getInfo().getCreationInfo());
|
|
||||||
imgDoc.putIfAbsent(RegisteredFileSet.ACCESS,c.getInfo().getAccess());
|
|
||||||
Access imgAccess=Serialization.convert(imgDoc.get(RegisteredFileSet.ACCESS),Access.class);
|
|
||||||
imgAccess.setLicense(ConstraintCheck.defaultFor(imgAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
imgAccess.setPolicy(ConstraintCheck.defaultFor(imgAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
imgDoc.put(RegisteredFileSet.ACCESS,imgAccess);
|
|
||||||
wrapper.setElement("$."+ProfiledConcessione.IMMAGINI_RAPPRESENTATIVE+"["+i+"]",imgDoc);
|
wrapper.setElement("$."+ProfiledConcessione.IMMAGINI_RAPPRESENTATIVE+"["+i+"]",imgDoc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,12 +144,6 @@ public class ConcessioniLifeCycleManager extends Default3PhaseManager implements
|
||||||
|
|
||||||
piantaDoc.put(ProfiledConcessione.RESPONSABILE,doc.get(ProfiledConcessione.RESPONSABILE));
|
piantaDoc.put(ProfiledConcessione.RESPONSABILE,doc.get(ProfiledConcessione.RESPONSABILE));
|
||||||
|
|
||||||
piantaDoc.putIfAbsent(RegisteredFileSet.CREATION_INFO,c.getInfo().getCreationInfo());
|
|
||||||
piantaDoc.putIfAbsent(RegisteredFileSet.ACCESS,c.getInfo().getAccess());
|
|
||||||
Access posAccess=Serialization.convert(rel.get(RegisteredFileSet.ACCESS),Access.class);
|
|
||||||
posAccess.setLicense(ConstraintCheck.defaultFor(posAccess.getLicense(),"CC-BY-4.0").evaluate());
|
|
||||||
posAccess.setPolicy(ConstraintCheck.defaultFor(posAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
|
||||||
piantaDoc.put(RegisteredFileSet.ACCESS,posAccess);
|
|
||||||
wrapper.setElement("$."+ProfiledConcessione.PIANTE_FINE_SCAVO+"["+i+"]",piantaDoc);
|
wrapper.setElement("$."+ProfiledConcessione.PIANTE_FINE_SCAVO+"["+i+"]",piantaDoc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,13 +53,13 @@ public class ConcessioniPluginTests extends BasicPluginTest {
|
||||||
Document rel = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.RELAZIONE_SCAVO), Document.class);
|
Document rel = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.RELAZIONE_SCAVO), Document.class);
|
||||||
assertNotNull(rel.get(ProfiledConcessione.Sections.TITOLO));
|
assertNotNull(rel.get(ProfiledConcessione.Sections.TITOLO));
|
||||||
assertNotNull(rel.get(ProfiledConcessione.SOGGETTO));
|
assertNotNull(rel.get(ProfiledConcessione.SOGGETTO));
|
||||||
assertNotNull(rel.get(RegisteredFileSet.CREATION_INFO));
|
assertNull(rel.get(RegisteredFileSet.CREATION_INFO));
|
||||||
assertNotNull(rel.get(RegisteredFileSet.ACCESS));
|
assertNull(rel.get(RegisteredFileSet.ACCESS));
|
||||||
|
|
||||||
Document abs = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.ABSTRACT_RELAZIONE), Document.class);
|
Document abs = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.ABSTRACT_RELAZIONE), Document.class);
|
||||||
assertNotNull(abs.get(ProfiledConcessione.Sections.TITOLO));
|
assertNotNull(abs.get(ProfiledConcessione.Sections.TITOLO));
|
||||||
assertNotNull(abs.get(RegisteredFileSet.CREATION_INFO));
|
assertNull(abs.get(RegisteredFileSet.CREATION_INFO));
|
||||||
assertNotNull(abs.get(RegisteredFileSet.ACCESS));
|
assertNull(abs.get(RegisteredFileSet.ACCESS));
|
||||||
|
|
||||||
|
|
||||||
Document pos = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.POSIZIONAMENTO_SCAVO), Document.class);
|
Document pos = Serialization.convert(c.getTheDocument().get(ProfiledConcessione.POSIZIONAMENTO_SCAVO), Document.class);
|
||||||
|
@ -67,8 +67,8 @@ public class ConcessioniPluginTests extends BasicPluginTest {
|
||||||
assertNotNull(pos.get(ProfiledConcessione.Sections.ABSTRACT));
|
assertNotNull(pos.get(ProfiledConcessione.Sections.ABSTRACT));
|
||||||
assertNotNull(pos.get(ProfiledConcessione.Layers.TOPIC));
|
assertNotNull(pos.get(ProfiledConcessione.Layers.TOPIC));
|
||||||
assertNotNull(pos.get(ProfiledConcessione.Layers.SUB_TOPIC));
|
assertNotNull(pos.get(ProfiledConcessione.Layers.SUB_TOPIC));
|
||||||
assertNotNull(pos.get(RegisteredFileSet.CREATION_INFO));
|
assertNull(pos.get(RegisteredFileSet.CREATION_INFO));
|
||||||
assertNotNull(pos.get(RegisteredFileSet.ACCESS));
|
assertNull(pos.get(RegisteredFileSet.ACCESS));
|
||||||
|
|
||||||
|
|
||||||
JSONPathWrapper wrapper = new JSONPathWrapper(c.getTheDocument().toJson());
|
JSONPathWrapper wrapper = new JSONPathWrapper(c.getTheDocument().toJson());
|
||||||
|
@ -77,8 +77,8 @@ public class ConcessioniPluginTests extends BasicPluginTest {
|
||||||
try{
|
try{
|
||||||
Document img = Serialization.asDocument(o);
|
Document img = Serialization.asDocument(o);
|
||||||
assertNotNull(img.get(ProfiledConcessione.SOGGETTO));
|
assertNotNull(img.get(ProfiledConcessione.SOGGETTO));
|
||||||
assertNotNull(img.get(RegisteredFileSet.CREATION_INFO));
|
assertNull(img.get(RegisteredFileSet.CREATION_INFO));
|
||||||
assertNotNull(img.get(RegisteredFileSet.ACCESS));
|
assertNull(img.get(RegisteredFileSet.ACCESS));
|
||||||
}catch (Throwable t){
|
}catch (Throwable t){
|
||||||
System.out.println("Unable to read IMG "+o);
|
System.out.println("Unable to read IMG "+o);
|
||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
|
@ -94,8 +94,8 @@ public class ConcessioniPluginTests extends BasicPluginTest {
|
||||||
assertNotNull(pianta.get(ProfiledConcessione.Sections.ABSTRACT));
|
assertNotNull(pianta.get(ProfiledConcessione.Sections.ABSTRACT));
|
||||||
assertNotNull(pianta.get(ProfiledConcessione.Layers.TOPIC));
|
assertNotNull(pianta.get(ProfiledConcessione.Layers.TOPIC));
|
||||||
assertNotNull(pianta.get(ProfiledConcessione.Layers.SUB_TOPIC));
|
assertNotNull(pianta.get(ProfiledConcessione.Layers.SUB_TOPIC));
|
||||||
assertNotNull(pianta.get(RegisteredFileSet.CREATION_INFO));
|
assertNull(pianta.get(RegisteredFileSet.CREATION_INFO));
|
||||||
assertNotNull(pianta.get(RegisteredFileSet.ACCESS));
|
assertNull(pianta.get(RegisteredFileSet.ACCESS));
|
||||||
}catch (Throwable t){
|
}catch (Throwable t){
|
||||||
System.out.println("Unable to read pianta "+o);
|
System.out.println("Unable to read pianta "+o);
|
||||||
t.printStackTrace();
|
t.printStackTrace();
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.concessioni-model
|
# Changelog for org.gcube.application.cms.concessioni-model
|
||||||
|
|
||||||
This library contains custom BEANS for the support of GNA "concessioni" use case
|
## [v1.0.3] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.2] - 2022-12-07
|
## [v1.0.2] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
@ -13,3 +12,5 @@ This library contains custom BEANS for the support of GNA "concessioni" use case
|
||||||
|
|
||||||
## [v1.0.0] - 2021-12-15
|
## [v1.0.0] - 2021-12-15
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : Concessioni Model
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
This library contains custom class for GNA "concessioni" use case model.
|
||||||
|
|
||||||
|
It contains the class ProfiledConcessione extending Project, in order to facilitate custom logic integration.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
|
@ -11,8 +13,8 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,14 @@
|
||||||
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>concessioni-model</artifactId>
|
<artifactId>concessioni-model</artifactId>
|
||||||
<version>1.0.2</version>
|
<version>1.0.3</version>
|
||||||
<name>GNA Concessioni Model</name>
|
<name>GNA Concessioni Model</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.dataminer-plugins
|
# Changelog for org.gcube.application.cms.dataminer-plugins
|
||||||
|
|
||||||
This library contains gcube-cms plugins for processing via gCube Dataminer
|
## [v1.0.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.1] - 2022-12-07
|
## [v1.0.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : DataMiner Plugins
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
This library contains gcube-cms plugins for processing via gCube Dataminer
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
||||||
|
@ -11,8 +11,8 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>dataminer-plugins</artifactId>
|
<artifactId>dataminer-plugins</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.2</version>
|
||||||
<name>gCube CMS - Dataminer Plugins</name>
|
<name>gCube CMS - Dataminer Plugins</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.ckan-plugin
|
# Changelog for org.gcube.application.cms.ckan-plugin
|
||||||
|
|
||||||
This library contains default Lifecycle Managers handlers
|
## [v1.0.1] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
- ## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,9 +1,19 @@
|
||||||
gCube CMS Suite : default-lc-managers
|
gCube CMS Suite : default-lc-managers
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents called Projects defined in Use Case Descriptors.
|
|
||||||
|
|
||||||
This library contains the default Lifecycle Manager handler plugins.
|
This library contains default Lifecycle Managers handlers implementations :
|
||||||
|
|
||||||
|
- AbstractPlugin
|
||||||
|
- AbstractLifecycleManager
|
||||||
|
- Default3PhaseManager
|
||||||
|
- SimpleLifeCycleManager
|
||||||
|
|
||||||
|
It also contains utility like
|
||||||
|
|
||||||
|
- RoleManager : caller role evaluation utilities
|
||||||
|
- GuardedEventManager, GuardedStepExecution, GuardedExecution : simplicity class for safe implementations
|
||||||
|
|
||||||
|
Plugins SHOULD be defined extending the definitions provided in this module.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
|
@ -13,8 +23,8 @@ This library contains the default Lifecycle Manager handler plugins.
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>default-lc-managers</artifactId>
|
<artifactId>default-lc-managers</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1</version>
|
||||||
<name>gCube CMS - Default LC Managers</name>
|
<name>gCube CMS - Default LC Managers</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.gcube.application.cms.plugins.implementations;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.gcube.application.cms.implementations.ProjectAccess;
|
import org.gcube.application.cms.implementations.ProjectAccess;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
import org.gcube.application.cms.plugins.LifecycleManager;
|
||||||
import org.gcube.application.cms.plugins.PluginManagerInterface;
|
import org.gcube.application.cms.plugins.PluginManagerInterface;
|
||||||
import org.gcube.application.cms.plugins.faults.*;
|
import org.gcube.application.cms.plugins.faults.*;
|
||||||
|
@ -164,9 +165,10 @@ public abstract class AbstractLifeCycleManager extends AbstractPlugin implements
|
||||||
try{
|
try{
|
||||||
report.setStatus(Report.Status.OK);
|
report.setStatus(Report.Status.OK);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("Unable to initialize plugins in {} ", ContextUtils.getCurrentScope(),e);
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
log.error("Unable to initialize plugins in {} ", context,e);
|
||||||
report.setStatus(Report.Status.WARNING);
|
report.setStatus(Report.Status.WARNING);
|
||||||
report.putMessage("Unable to initialize plugins in "+ ContextUtils.getCurrentScope()+" : "+e.getMessage());
|
report.putMessage("Unable to initialize plugins in "+ context +" : "+e.getMessage());
|
||||||
}
|
}
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-client
|
# Changelog for org.gcube.application.geoportal-client
|
||||||
|
|
||||||
|
## [v1.1.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.1.1] - 2022-12-07
|
## [v1.1.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
|
@ -39,4 +40,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
-Excluded common-calls 1.2.0
|
-Excluded common-calls 1.2.0
|
||||||
|
|
||||||
## [v1.0.0] - 2020-11-11
|
## [v1.0.0] - 2020-11-11
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,14 +1,21 @@
|
||||||
GeoPortal - Client
|
gCube CMS Suite : GeoPortal Client
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
GeoPortal - Client is the java library wrapping Geoportal REST Service
|
This module contains the definition of the client library for interacting with geoportal-service.
|
||||||
|
|
||||||
|
It is built on top of gCube FW stack and allows to build the following clients :
|
||||||
|
- Project<? extends Document> entities management
|
||||||
|
- UseCaseDescriptor entites management
|
||||||
|
|
||||||
|
It also provides a utility class Serialization for fast marshalling / unmarshalling.
|
||||||
|
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-client</artifactId>
|
<artifactId>geoportal-client</artifactId>
|
||||||
<version>1.1.1</version>
|
<version>1.1.2</version>
|
||||||
<name>Geoportal Client</name>
|
<name>Geoportal Client</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,15 +46,6 @@
|
||||||
<artifactId>common-generic-clients</artifactId>
|
<artifactId>common-generic-clients</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>com.sun.xml.ws</groupId>-->
|
|
||||||
<!-- <artifactId>jaxws-ri</artifactId>-->
|
|
||||||
<!-- <version>2.3.2</version>-->
|
|
||||||
<!-- <type>pom</type>-->
|
|
||||||
<!-- <scope>provided</scope>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
|
<!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -52,16 +52,19 @@ public abstract class GenericUseCases extends BasicVreTests{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Project prepareWithFileSet(Project project) throws FileNotFoundException, InvalidRequestException, RemoteException {
|
protected Project prepareWithFileSet(Project project) throws FileNotFoundException, InvalidRequestException, RemoteException {
|
||||||
|
|
||||||
|
return getClient().registerFileSet(project.getId(), prepareRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RegisterFileSetRequest prepareRequest() throws FileNotFoundException {
|
||||||
String parentPath = "$.section";
|
String parentPath = "$.section";
|
||||||
String fieldName = "fileset";
|
String fieldName = "fileset";
|
||||||
String fieldDefinition = "$.section._children[?(@.fileset)]";
|
String fieldDefinition = "$.section._children[?(@.fileset)]";
|
||||||
|
|
||||||
// Prepare request
|
// Prepare request
|
||||||
RegisterFileSetRequest fsRequest = FileSets.
|
return FileSets.
|
||||||
prepareRequest(new StorageUtils(),
|
prepareRequest(new StorageUtils(),
|
||||||
parentPath,fieldName,fieldDefinition, new File(Tests.FOLDER_CONCESSIONI,"pos.shp"));
|
parentPath,fieldName,fieldDefinition, new File(Tests.FOLDER_CONCESSIONI,"pos.shp"));
|
||||||
|
|
||||||
|
|
||||||
return getClient().registerFileSet(project.getId(),fsRequest);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,17 @@ package org.gcube.application.geoportal.clients;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.cms.tests.TestDocuments;
|
import org.gcube.application.cms.tests.TestDocuments;
|
||||||
import org.gcube.application.cms.tests.Tests;
|
import org.gcube.application.cms.tests.Tests;
|
||||||
import org.gcube.application.geoportal.client.utils.Serialization;
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
|
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
|
||||||
|
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
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.rest.RegisterFileSetRequest;
|
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
|
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
|
||||||
|
@ -25,6 +30,9 @@ import java.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.rmi.RemoteException;
|
import java.rmi.RemoteException;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ProfiledConcessioniTest extends ProfiledDocumentsTest{
|
public class ProfiledConcessioniTest extends ProfiledDocumentsTest{
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -78,11 +86,28 @@ public class ProfiledConcessioniTest extends ProfiledDocumentsTest{
|
||||||
|
|
||||||
// Set relazione
|
// Set relazione
|
||||||
|
|
||||||
client.registerFileSet(project.getId(), FileSets.
|
|
||||||
|
Access toSetAccess = new Access();
|
||||||
|
toSetAccess.setPolicy(AccessPolicy.RESTRICTED);
|
||||||
|
toSetAccess.setLicense("CC0-1.0");
|
||||||
|
|
||||||
|
RegisterFileSetRequest request=FileSets.
|
||||||
prepareRequest(new StorageUtils(),
|
prepareRequest(new StorageUtils(),
|
||||||
"$.relazioneScavo","fileset",
|
"$.relazioneScavo","fileset",
|
||||||
"$.relazioneScavo."+Field.CHILDREN+"[?(@.fileset)]",
|
"$.relazioneScavo."+Field.CHILDREN+"[?(@.fileset)]",
|
||||||
new File(Tests.FOLDER_CONCESSIONI,"relazione.pdf")));
|
new File(Tests.FOLDER_CONCESSIONI,"relazione.pdf"));
|
||||||
|
request.setToSetAccess(toSetAccess);
|
||||||
|
|
||||||
|
project=client.registerFileSet(project.getId(), request);
|
||||||
|
|
||||||
|
String jsonDoc=project.getTheDocument().toJson();
|
||||||
|
log.info("Registered fileset. Result is {}", jsonDoc);
|
||||||
|
RegisteredFileSet f= Serialization.convert(new JSONPathWrapper(jsonDoc).getByPath(
|
||||||
|
request.getParentPath()).get(0),RegisteredFileSet.class);
|
||||||
|
|
||||||
|
assertEquals(Serialization.convert(f.getAccess(),Access.class).getPolicy(),toSetAccess.getPolicy());
|
||||||
|
assertEquals(Serialization.convert(f.getAccess(),Access.class).getLicense(),toSetAccess.getLicense());
|
||||||
|
|
||||||
|
|
||||||
// Set Abstract
|
// Set Abstract
|
||||||
|
|
||||||
|
|
|
@ -3,22 +3,35 @@ package org.gcube.application.geoportal.clients;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
import org.gcube.application.cms.tests.Tests;
|
||||||
|
import org.gcube.application.geoportal.client.utils.Serialization;
|
||||||
|
import org.gcube.application.geoportal.common.faults.InvalidRequestException;
|
||||||
|
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
||||||
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
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.relationships.RelationshipNavigationObject;
|
import org.gcube.application.geoportal.common.model.document.relationships.RelationshipNavigationObject;
|
||||||
import org.gcube.application.geoportal.common.model.rest.CreateRelationshipRequest;
|
import org.gcube.application.geoportal.common.model.rest.CreateRelationshipRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.DeleteRelationshipRequest;
|
import org.gcube.application.geoportal.common.model.rest.DeleteRelationshipRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
|
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
||||||
import org.gcube.application.geoportal.common.rest.Projects;
|
import org.gcube.application.geoportal.common.rest.Projects;
|
||||||
|
import org.gcube.application.geoportal.common.utils.FileSets;
|
||||||
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.rmi.RemoteException;
|
import java.rmi.RemoteException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static org.gcube.application.geoportal.client.utils.Serialization.write;
|
import static org.gcube.application.geoportal.client.utils.Serialization.write;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
|
@ -33,7 +46,7 @@ public class ProfiledDocumentsTest<M extends Project,C extends Projects<M>> exte
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void registerNew() throws RemoteException, JsonProcessingException {
|
public void registerNew() throws RemoteException, JsonProcessingException, FileNotFoundException, InvalidRequestException {
|
||||||
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
Projects<M> client = (Projects<M>) getClient();
|
Projects<M> client = (Projects<M>) getClient();
|
||||||
|
|
||||||
|
@ -46,6 +59,38 @@ public class ProfiledDocumentsTest<M extends Project,C extends Projects<M>> exte
|
||||||
Project p =client.createNew(theDoc);
|
Project p =client.createNew(theDoc);
|
||||||
|
|
||||||
log.debug("Registered project (AS JSON) : {}", write(p));
|
log.debug("Registered project (AS JSON) : {}", write(p));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAccess() throws FileNotFoundException, RemoteException, InvalidRequestException, JsonProcessingException {
|
||||||
|
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
Projects<M> client = (Projects<M>) getClient();
|
||||||
|
|
||||||
|
Document theDoc= Document.parse("{\n" +
|
||||||
|
"\"posizionamentoScavo\" :{\n" +
|
||||||
|
"\t\"titolo\" : \"mio titolo\"}}");
|
||||||
|
|
||||||
|
theDoc.put("startTime", LocalDateTime.now());
|
||||||
|
|
||||||
|
Project p =client.createNew(theDoc);
|
||||||
|
|
||||||
|
RegisterFileSetRequest fsRequest = prepareRequest();
|
||||||
|
|
||||||
|
Access access = new Access();
|
||||||
|
access.setLicense("CC0-1.0");
|
||||||
|
access.setPolicy(AccessPolicy.RESTRICTED);
|
||||||
|
fsRequest.setToSetAccess(access);
|
||||||
|
|
||||||
|
p=client.registerFileSet(p.getId(),fsRequest);
|
||||||
|
|
||||||
|
log.info("Registered fileset. Result is {}", Serialization.write(p));
|
||||||
|
RegisteredFileSet f= Serialization.convert(new JSONPathWrapper(p.getTheDocument().toJson()).getByPath(fsRequest.getParentPath()).get(0),RegisteredFileSet.class);
|
||||||
|
|
||||||
|
assertEquals(Serialization.convert(f.getAccess(),Access.class).getPolicy(),AccessPolicy.RESTRICTED);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-common
|
# Changelog for org.gcube.application.geoportal-common
|
||||||
|
|
||||||
|
## [v1.0.11] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.10] - 2022-12-07
|
## [v1.0.10] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
|
@ -50,4 +51,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- Model update
|
- Model update
|
||||||
|
|
||||||
## [v1.0.0] - 2020-11-11
|
## [v1.0.0] - 2020-11-11
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,14 +1,23 @@
|
||||||
GeoPortal - Common
|
gCube CMS Suite : GeoPortal Common
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
GeoPortal - Common is the java library containing basic classes (e.g. models) of gCube GeoPortal.
|
This module contains the definition of the interface expose by geoportal-service.
|
||||||
|
|
||||||
|
It contains both the methods, the constants, the model shared by service and clients (main classes are Project and UseCaseDescriptor).
|
||||||
|
|
||||||
|
It also provides the following utility classes :
|
||||||
|
|
||||||
|
- JSONPathWrapper : for JSON path parsing, built on top of com.jayway.jsonpath.json-path (https://github.com/json-path/JsonPath).
|
||||||
|
- FileSets : builder for FileSetRegistrationRequests
|
||||||
|
- StorageUtils : interface with gCube Storage
|
||||||
|
- ISUtils : Query to gCube IS
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
<version>1.0.10</version>
|
<version>1.0.11</version>
|
||||||
<name>Geoportal Common</name>
|
<name>Geoportal Common</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -8,33 +8,20 @@ import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
import static org.gcube.common.authorization.client.Constants.authorizationService;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Deprecated
|
||||||
public class ContextUtils {
|
public class ContextUtils {
|
||||||
|
|
||||||
|
|
||||||
public static String getCurrentScope(){
|
|
||||||
try{
|
|
||||||
String token=SecurityTokenProvider.instance.get();
|
|
||||||
log.trace("Token is : "+token.substring(0,2)+"..."+token.substring(token.length()-3));
|
|
||||||
if(token==null) throw new Exception("Security Token is null");
|
|
||||||
AuthorizationEntry entry = authorizationService().get(token);
|
|
||||||
return entry.getContext();
|
|
||||||
}catch(Exception e ){
|
|
||||||
log.trace("Unable to resolve token, checking scope provider..",e);
|
|
||||||
return ScopeProvider.instance.get();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static String getCurrentCaller(){
|
public static String getCurrentCaller(){
|
||||||
try{
|
try{
|
||||||
String token=SecurityTokenProvider.instance.get();
|
String token=SecurityTokenProvider.instance.get();
|
||||||
log.trace("Token is : "+token.substring(0,2)+"..."+token.substring(token.length()-3));
|
|
||||||
if(token==null) throw new Exception("Security Token is null");
|
if(token==null) throw new Exception("Security Token is null");
|
||||||
|
log.trace("Token is : "+token.substring(0,2)+"..."+token.substring(token.length()-3));
|
||||||
AuthorizationEntry entry = authorizationService().get(token);
|
AuthorizationEntry entry = authorizationService().get(token);
|
||||||
return entry.getClientInfo().getId();
|
return entry.getClientInfo().getId();
|
||||||
}catch(Exception e ){
|
}catch(Exception e ){
|
||||||
log.trace("Unable to resolve token, checking scope provider..",e);
|
log.warn("Unable to resolve token using legacy utils, using default ..",e);
|
||||||
return "Unidentified data-transfer user";
|
return "CMS_default_user";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,12 +92,12 @@ public class Files {
|
||||||
if(toFix.startsWith("\\."))
|
if(toFix.startsWith("\\."))
|
||||||
toFix=toFix.replaceFirst("\\.","_");
|
toFix=toFix.replaceFirst("\\.","_");
|
||||||
String extension="";
|
String extension="";
|
||||||
if(toFix.contains(".")) {
|
int extensionIndex=toFix.lastIndexOf(".");
|
||||||
|
if(extensionIndex>0) {
|
||||||
//preserve extension
|
//preserve extension
|
||||||
int index=toFix.indexOf(".");
|
extension=toFix.substring(extensionIndex);
|
||||||
extension=toFix.substring(index);
|
|
||||||
//only escape before extension
|
//only escape before extension
|
||||||
toFix=toFix.substring(0,toFix.indexOf("."));
|
toFix=toFix.substring(0,extensionIndex);
|
||||||
}
|
}
|
||||||
return toFix.toLowerCase().
|
return toFix.toLowerCase().
|
||||||
replaceAll("[\\-\\*\\+\\/\\\\ \\[\\]\\(\\)\\.\\\"\\:\\;\\|\\=]","_")+extension.toLowerCase();
|
replaceAll("[\\-\\*\\+\\/\\\\ \\[\\]\\(\\)\\.\\\"\\:\\;\\|\\=]","_")+extension.toLowerCase();
|
||||||
|
|
|
@ -17,7 +17,7 @@ public class GCubeTest {
|
||||||
|
|
||||||
testContext = "/pred4s/preprod/preVRE";
|
testContext = "/pred4s/preprod/preVRE";
|
||||||
// testContext = "/d4science.research-infrastructures.eu/D4OS/GNA";
|
// testContext = "/d4science.research-infrastructures.eu/D4OS/GNA";
|
||||||
testContext= "/gcube/devsec/devVRE";
|
// testContext= "/gcube/devsec/devVRE";
|
||||||
|
|
||||||
System.out.println("TEST CONTEXT = "+testContext);
|
System.out.println("TEST CONTEXT = "+testContext);
|
||||||
return testContext;
|
return testContext;
|
||||||
|
|
|
@ -6,6 +6,8 @@ import org.junit.Test;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -18,12 +20,18 @@ public class FilesTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNames(){
|
public void testNames(){
|
||||||
for(String name : baseFolder.list()){
|
|
||||||
|
ArrayList<String> toTestStrings=new ArrayList<>(Arrays.asList(baseFolder.list()));
|
||||||
|
toTestStrings.add("e. gna_topografia_timponedellamotta.qmd");
|
||||||
|
|
||||||
|
for(String name : toTestStrings){
|
||||||
if(name.contains(".")) {
|
if(name.contains(".")) {
|
||||||
String originalExtension = name.substring(name.indexOf("."));
|
int extensionIndex = name.lastIndexOf(".");
|
||||||
|
String originalExtension = extensionIndex>0?name.substring(extensionIndex):null;
|
||||||
String obtained = Files.fixFilename(name);
|
String obtained = Files.fixFilename(name);
|
||||||
log.info(name + "->" + obtained + "[" + originalExtension + "]");
|
log.info(name + "->" + obtained + "[" + originalExtension + "]");
|
||||||
assertTrue(obtained.endsWith(originalExtension));
|
if(originalExtension!=null)
|
||||||
|
assertTrue(obtained.endsWith(originalExtension));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-service
|
# Changelog for org.gcube.application.geoportal-service
|
||||||
|
|
||||||
|
## [v1.0.12] - 2023-01-10
|
||||||
|
- Refactored UserUtils into framework plugin
|
||||||
|
|
||||||
## [v1.0.11] - 2022-12-07
|
## [v1.0.11] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
- Introduced module default-lc-managers
|
- Introduced module default-lc-managers
|
||||||
|
@ -52,4 +53,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- Project interface
|
- Project interface
|
||||||
|
|
||||||
## [v1.0.0] 2020-11-11
|
## [v1.0.0] 2020-11-11
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
GeoPortal - Service
|
gCube CMS Suite : GeoPortal Service
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
GeoPortal - Service is the main component operating a gCube GeoPortal. It is a SmartGears web application based on top of gCube SDI
|
gCube CMS Service is a gCube REST-like Application developed on top of gCube SmartGears.
|
||||||
|
|
||||||
|
It implements the core business logic of gCube CMS Suite, exposing methods for the management of Projects, Use Case Descriptors and available server plugins.
|
||||||
|
|
||||||
|
It is built on top of Jersey Framework, it uses a MongoDB Document Store for JSON archiving and Querying.
|
||||||
|
It exploits the infrastructure StorageHub for archiving FileSets and the Information System in order to discover available resources.
|
||||||
|
|
||||||
|
Its main goal is to receive client calls and orchestrate plugins implementation in order to serve them according to the UCD defined in the caller context.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
||||||
|
@ -12,8 +19,8 @@ GeoPortal - Service is the main component operating a gCube GeoPortal. It is a S
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
Binary file not shown.
After Width: | Height: | Size: 45 KiB |
|
@ -1,810 +0,0 @@
|
||||||
.. _Anchor For ExampleRSTFile:
|
|
||||||
|
|
||||||
#################
|
|
||||||
Example .rst File
|
|
||||||
#################
|
|
||||||
|
|
||||||
NB https://sphinx-design.readthedocs.io/en/furo-theme/dropdowns.html
|
|
||||||
|
|
||||||
If you work with edX documentation source files, you might find this file
|
|
||||||
helpful as a reference. This file contains examples of .rst formatting.
|
|
||||||
|
|
||||||
Explanations and more context for each type of element are provided in
|
|
||||||
:ref:`Work with edX Documentation Source Files`.
|
|
||||||
|
|
||||||
This file covers the following topics.
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
:local:
|
|
||||||
:depth: 1
|
|
||||||
|
|
||||||
***************
|
|
||||||
Heading Levels
|
|
||||||
***************
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
#############
|
|
||||||
Heading 1
|
|
||||||
#############
|
|
||||||
|
|
||||||
*************
|
|
||||||
Heading 2
|
|
||||||
*************
|
|
||||||
|
|
||||||
===========
|
|
||||||
Heading 3
|
|
||||||
===========
|
|
||||||
|
|
||||||
Heading 4
|
|
||||||
************
|
|
||||||
|
|
||||||
Heading 5
|
|
||||||
===========
|
|
||||||
|
|
||||||
Heading 6
|
|
||||||
~~~~~~~~~~~
|
|
||||||
|
|
||||||
************************************************
|
|
||||||
Paragraph Text and Commented Text
|
|
||||||
************************************************
|
|
||||||
|
|
||||||
This is an example of regular text in paragraph form. There are no indents. As
|
|
||||||
a best practice, break lines at about 80 characters, so that each line has its
|
|
||||||
own line number for commenting in reviews.
|
|
||||||
|
|
||||||
.. warning:: Throughout text and code examples, make sure double quotation
|
|
||||||
marks and apostrophes are straight (") or ('), not curly quotatation marks
|
|
||||||
and apostrophes, which might be introduced when text is cut and pasted from
|
|
||||||
other sources or editors.
|
|
||||||
|
|
||||||
Boldface is used for labels that are visible in the user interface. The UI
|
|
||||||
text is surrounded by double asterisks. For example, **bold**.
|
|
||||||
|
|
||||||
Italics are rarely used. Text surrounded by single asterisks is rendered in
|
|
||||||
*italics*.
|
|
||||||
|
|
||||||
Monospace text is used for ``code examples``. Text surrounded by double grave
|
|
||||||
accent characters is rendered in monospace font.
|
|
||||||
|
|
||||||
``.. comments can be added in a file by starting a line with 2 periods and a space.``
|
|
||||||
|
|
||||||
In English source files, look for comments addressed to translators from writers.
|
|
||||||
|
|
||||||
``.. Translators: In this code example, do not translate such and such.``
|
|
||||||
|
|
||||||
|
|
||||||
***************************************
|
|
||||||
Ordered and Unordered Lists
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
Use hash symbols for ordered lists.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
#. Select **Advanced Settings**.
|
|
||||||
#. Find the **Course Advertised Start Date** policy key.
|
|
||||||
#. Enter the value you want to display.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
Ordered lists usually use numerals. Nested ordered lists (ordered lists inside
|
|
||||||
other ordered lists) use letters.
|
|
||||||
|
|
||||||
Use asterisks for unordered (bulleted) lists.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
* Who is teaching the course?
|
|
||||||
* What university or college is the course affiliated with?
|
|
||||||
* What topics and concepts are covered in your course?
|
|
||||||
* Why should a learner enroll in your course?
|
|
||||||
|
|
||||||
=======================
|
|
||||||
Nested Lists or Content
|
|
||||||
=======================
|
|
||||||
|
|
||||||
You can include content including additional lists and code examples inside
|
|
||||||
lists.
|
|
||||||
|
|
||||||
Unordered List inside Ordered List
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
To include an unordered list inside an ordered list, indent the unordered list
|
|
||||||
three spaces. The first bullet in the unordered list must be flush with the
|
|
||||||
text in the ordered list.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
#. Review your entry to verify that the key is accurate and that it is
|
|
||||||
surrounded by quotation marks. If there is a list of keys, they must be
|
|
||||||
comma separated.
|
|
||||||
|
|
||||||
* In this example, the key for the Annotation Problem tool is the only
|
|
||||||
value in the list.
|
|
||||||
|
|
||||||
* In this example, the key for the Annotation Problem tool is added at
|
|
||||||
the beginning of a list of other keys.
|
|
||||||
|
|
||||||
#. Select **Save Changes**.
|
|
||||||
|
|
||||||
.. image:: /Images/Lists_UL_inside_OL.png
|
|
||||||
:width: 500
|
|
||||||
:alt: An unordered (bulleted) list inside an ordered (numbered) list.
|
|
||||||
|
|
||||||
Ordered List inside Unordered List
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
To include an ordered list inside an unordered list, indent the ordered list
|
|
||||||
two spaces. The first number or letter of the ordered list must be flush with
|
|
||||||
the text in the unordered list.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
* Review your entry to verify that the key is accurate and that it is
|
|
||||||
surrounded by quotation marks. If there is a list of keys, they must be comma
|
|
||||||
separated.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is the only
|
|
||||||
value in the list.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is added at the
|
|
||||||
beginning of a list of other keys.
|
|
||||||
|
|
||||||
* Select **Save Changes**.
|
|
||||||
|
|
||||||
.. There isn't a screen shot of the above example yet because these lists don't
|
|
||||||
.. render correctly locally, and searching for an example in the built docs
|
|
||||||
.. online was taking too much time.
|
|
||||||
|
|
||||||
Unordered List inside Unordered List
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
To include an unordered list inside another unordered list, indent the second
|
|
||||||
unordered list two spaces. The first bullet of the second unordered list must
|
|
||||||
be flush with the text in the unordered list.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
* Review your entry to verify that the key is accurate and that it is
|
|
||||||
surrounded by quotation marks. If there is a list of keys, they must be
|
|
||||||
comma separated.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is the only
|
|
||||||
value in the list.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is added at the
|
|
||||||
beginning of a list of other keys.
|
|
||||||
|
|
||||||
* Select **Save Changes**.
|
|
||||||
|
|
||||||
.. image:: /Images/Lists_UL_inside_UL.png
|
|
||||||
:width: 500
|
|
||||||
:alt: An ordered (numbered) list inside an unordered (bulleted) list.
|
|
||||||
|
|
||||||
Ordered List inside Ordered List
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
To include another ordered list inside an ordered list, indent the second
|
|
||||||
ordered list three spaces. The second ordered list must be flush with the text
|
|
||||||
in the numbered list. The first ordered list uses numerals, and the second
|
|
||||||
uses letters.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
#. Review your entry to verify that the key is accurate and that it is
|
|
||||||
surrounded by quotation marks. If there is a list of keys, they must be
|
|
||||||
comma separated.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is the only
|
|
||||||
value in the list.
|
|
||||||
|
|
||||||
#. In this example, the key for the Annotation Problem tool is added at
|
|
||||||
the beginning of a list of other keys.
|
|
||||||
|
|
||||||
#. Select **Save Changes**.
|
|
||||||
|
|
||||||
.. There isn't a screen shot of the above example yet because these lists don't
|
|
||||||
.. render correctly locally, and searching for an example in the built docs
|
|
||||||
.. online was taking too much time.
|
|
||||||
|
|
||||||
Code, Images, and Other Content inside Lists
|
|
||||||
*********************************************
|
|
||||||
|
|
||||||
To include content such as code or an image inside a list, position the code or
|
|
||||||
image directive flush with the text in the list. That is, indent three spaces
|
|
||||||
for ordered lists and two spaces for unordered lists.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
#. In the ``lms.yml`` and ``studio.yml`` files, set the value of
|
|
||||||
``CERTIFICATES_HTML_VIEW`` within the ``FEATURES`` object to ``true``.
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
"FEATURES": {
|
|
||||||
...
|
|
||||||
'CERTIFICATES_HTML_VIEW': true,
|
|
||||||
...
|
|
||||||
}
|
|
||||||
|
|
||||||
#. Save the ``lms.yml`` and ``studio.yml`` files.
|
|
||||||
|
|
||||||
|
|
||||||
***************************************
|
|
||||||
Conditional Text
|
|
||||||
***************************************
|
|
||||||
|
|
||||||
To conditionalize a single paragraph, use either the ``only:: Partners`` or
|
|
||||||
the ``only:: Open_edX`` directive, and indent the paragraph under the
|
|
||||||
directive. You can add the conditional text as regular text or as a note.
|
|
||||||
|
|
||||||
Make sure to indent the paragraph under the directive.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. only:: Partners
|
|
||||||
|
|
||||||
Data about course enrollment is available from edX Insights. You can access
|
|
||||||
Insights from the instructor dashboard for your live course: after you select
|
|
||||||
**Instructor**, follow the link in the banner at the top of each page. For
|
|
||||||
more information, see `Using edX Insights`_.
|
|
||||||
|
|
||||||
.. only:: Open_edX
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
If you want to require an entrance exam for your course, you also create
|
|
||||||
the exam in the course outline. Before you can create an exam, you must
|
|
||||||
set your course to require an entrance exam in Studio. For more
|
|
||||||
information, see :ref:`Require an Entrance Exam`.
|
|
||||||
|
|
||||||
To conditionalize more than a paragraph, use either the ``only:: Partners`` or
|
|
||||||
the ``only:: Open_edX`` directive, and then use an ``include::`` directive
|
|
||||||
indented under the only directive.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. only:: Open_edX
|
|
||||||
|
|
||||||
.. include:: ../../../shared/building_and_running_chapters/running_course/Section_course_student.rst
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*********************************
|
|
||||||
Notes and Warnings
|
|
||||||
*********************************
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
This is note text. If note text runs over a line, make sure the lines wrap
|
|
||||||
and are indented to the same level as the note tag. If formatting is
|
|
||||||
incorrect, part of the note might not render in the HTML output.
|
|
||||||
|
|
||||||
Notes can have more than one paragraph. Successive paragraphs must indent
|
|
||||||
to the same level as the rest of the note.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
This is note text. If note text runs over a line, make sure the lines wrap
|
|
||||||
and are indented to the same level as the note tag. If formatting is
|
|
||||||
incorrect, part of the note might not render in the HTML output.
|
|
||||||
|
|
||||||
Notes can have more than one paragraph. Successive paragraphs must indent to
|
|
||||||
the same level as the rest of the note.
|
|
||||||
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
Warnings are formatted in the same way as notes. In the same way, lines
|
|
||||||
must be broken and indented under the warning tag.
|
|
||||||
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
Warnings are formatted in the same way as notes. In the same way, lines must
|
|
||||||
be broken and indented under the warning tag.
|
|
||||||
|
|
||||||
|
|
||||||
****************************
|
|
||||||
Cross-References
|
|
||||||
****************************
|
|
||||||
|
|
||||||
In edX documents, you can include cross-references to other locations in the
|
|
||||||
same edX document, to locations in other edX documents (such as a cross-
|
|
||||||
reference from a location in the *Building and Running an edX Course* guide to
|
|
||||||
a location in the *EdX Learner's Guide*), to JIRA stories, and to external
|
|
||||||
websites. In this section, "EdX documents" refers to the resources, including
|
|
||||||
guides and tutorials, that are listed on docs.edx.org.
|
|
||||||
|
|
||||||
For more information about creating cross-references using RST and Sphinx, see
|
|
||||||
`Cross-referencing arbitrary locations`_ in the online Sphinx documentation.
|
|
||||||
|
|
||||||
==================================================
|
|
||||||
Cross-References to Locations in the Same Document
|
|
||||||
==================================================
|
|
||||||
|
|
||||||
Cross-references to locations in the same document use anchors that are located
|
|
||||||
above the heading for each topic or section. Anchors can contain numbers,
|
|
||||||
letters, spaces, underscores, and hyphens, but cannot include punctuation.
|
|
||||||
Anchors use the following syntax.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. _Anchor Text:
|
|
||||||
|
|
||||||
The following example shows an anchor for a section, followed by the heading
|
|
||||||
for that section. ``SFD SN Keyboard Shortcuts`` is the anchor text.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. _SFD SN Keyboard Shortcuts:
|
|
||||||
|
|
||||||
******************************
|
|
||||||
Keyboard Shortcuts for Notes
|
|
||||||
******************************
|
|
||||||
|
|
||||||
To create cross-references to locations in the same document, you can use the
|
|
||||||
anchor only, or you can use your own text. The anchor text is never visible in
|
|
||||||
output. It is replaced by the text of the heading that follows the anchor or
|
|
||||||
the text that you specify.
|
|
||||||
|
|
||||||
Cross-References Using the Anchor Only
|
|
||||||
********************************************
|
|
||||||
|
|
||||||
To add a cross-reference to a specific location in a document and use the text
|
|
||||||
of the heading for that location as link text, use ``:ref:`Anchor Text```
|
|
||||||
syntax, as in the following example.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
For more information about using keyboard shortcuts, see :ref:`SFD SN
|
|
||||||
Keyboard Shortcuts`.
|
|
||||||
|
|
||||||
In this example, "SFD SN Keyboard Shortcuts" is the anchor text for a section
|
|
||||||
that is titled "Keyboard Shortcuts for Notes". Readers will see the following
|
|
||||||
text, and "Keyboard Shortcuts for Notes" will be an active link.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
For more information about using keyboard shortcuts, see Keyboard Shortcuts
|
|
||||||
for Notes.
|
|
||||||
|
|
||||||
Cross-References Using Specified Link Text
|
|
||||||
*******************************************
|
|
||||||
|
|
||||||
For internal cross-references that use text other than the heading for the
|
|
||||||
section that you're linking to, use ``:ref:`specified text<Anchor Text>```
|
|
||||||
syntax, as in the following example.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
If you want to, you can use :ref:`keyboard shortcuts<SFD SN Keyboard
|
|
||||||
Shortcuts>` to create, edit, and view notes.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
Do not include a space between the last word of the link text and the opening
|
|
||||||
angle bracket for the anchor text.
|
|
||||||
|
|
||||||
In this example, "keyboard shortcuts" is the link text, and "SFD SN Keyboard
|
|
||||||
Shortcuts" is the anchor text for a section that is titled "Keyboard Shortcuts
|
|
||||||
for Notes". Readers will see the following text, and "keyboard shortcuts" will
|
|
||||||
be an active link.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
If you want to, you can use keyboard shortcuts to create, edit, and view your
|
|
||||||
notes.
|
|
||||||
|
|
||||||
==========================================================
|
|
||||||
Cross-References to Locations in Different edX Documents
|
|
||||||
==========================================================
|
|
||||||
|
|
||||||
You can create cross-references between different edX documents. For example,
|
|
||||||
you can create a link in *Building and Running an edX Course* to a topic in the
|
|
||||||
*EdX Learner's Guide*. To do this, you use the intersphinx map ID of the
|
|
||||||
document that you want to link to and the anchor text for the section you want.
|
|
||||||
The cross-reference uses the following syntax.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
:ref:`intersphinx_map_ID:Anchor Name`
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
:ref:`partnercoursestaff:Release Dates`
|
|
||||||
|
|
||||||
To find the intersphinx map ID for the document that you want, follow these
|
|
||||||
steps.
|
|
||||||
|
|
||||||
#. Open the conf.py file in the `edx-documentation/shared`_ folder, and then
|
|
||||||
locate the following line.
|
|
||||||
|
|
||||||
``intersphinx_mapping = {``
|
|
||||||
|
|
||||||
#. In the list that follows this line, find the ID for the document that you
|
|
||||||
want. The text between the single quotation marks (') at the beginning of
|
|
||||||
each line is the intersphinx map ID for the document.
|
|
||||||
|
|
||||||
The following intersphinx map IDs are the most frequently used.
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 25 25 50
|
|
||||||
|
|
||||||
* - Map ID
|
|
||||||
- Document
|
|
||||||
* - ``partnercoursestaff``
|
|
||||||
- *Building and Running an edX Course*
|
|
||||||
* - ``opencoursestaff``
|
|
||||||
- *Building and Running an Open edX Course*
|
|
||||||
* - ``learners``
|
|
||||||
- *EdX Learner's Guide*
|
|
||||||
* - ``openlearners``
|
|
||||||
- *Open edX Learner's Guide*
|
|
||||||
* - ``data``
|
|
||||||
- *EdX Research Guide*
|
|
||||||
* - ``insights``
|
|
||||||
- *Using edX Insights*
|
|
||||||
* - ``installation``
|
|
||||||
- *Installing, Configuring, and Running the Open edX Platform*
|
|
||||||
* - ``opendevelopers``
|
|
||||||
- *Open edX Developer's Guide*
|
|
||||||
* - ``partnerreleasenotes``
|
|
||||||
- Partner release notes
|
|
||||||
* - ``openreleasenotes``
|
|
||||||
- Open edX release notes
|
|
||||||
|
|
||||||
============================================
|
|
||||||
Cross-References to JIRA
|
|
||||||
============================================
|
|
||||||
|
|
||||||
For cross-references to JIRA tickets, use the ``:jira:`PROJECT-ticketnumber```
|
|
||||||
syntax, as in the following example.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
For more information, see :jira:`DOC-2316`.
|
|
||||||
|
|
||||||
Note that ``jira`` replaces ``ref`` for these links.
|
|
||||||
|
|
||||||
Readers will see the following text, and "DOC-2316" will be an active link.
|
|
||||||
|
|
||||||
``For more information, see DOC-2316.``
|
|
||||||
|
|
||||||
============================================
|
|
||||||
Cross-References to External Web Pages
|
|
||||||
============================================
|
|
||||||
|
|
||||||
A cross-reference to an external web page has several elements.
|
|
||||||
|
|
||||||
* The URL of the external web page.
|
|
||||||
* The text to use for the cross-reference. This text becomes an anchor in the
|
|
||||||
file that contains the cross-reference.
|
|
||||||
* An ``include`` directive in the file that contains the cross-reference to the
|
|
||||||
links.rst file that is located in the ``edx-documentation/en_us/links/``
|
|
||||||
folder.
|
|
||||||
* An entry in the links.rst file.
|
|
||||||
|
|
||||||
To create an external cross-reference, follow these steps.
|
|
||||||
|
|
||||||
#. In the paragraph where you want the cross-reference, add the text that you
|
|
||||||
want to use for the link, formatted as follows (where "Release Pages" is the
|
|
||||||
link text). This creates an anchor out of that text.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
The edX engineering wiki `Release Pages`_ provide access to detailed
|
|
||||||
information about every change made to the edx-platform GitHub
|
|
||||||
repository.
|
|
||||||
|
|
||||||
#. In the file that contains the cross-reference, add an ``include`` directive
|
|
||||||
for the ``edx-documentation/en_us/links/links.rst`` file if one does not
|
|
||||||
already exist. These ``include`` directives are typically at the end of the
|
|
||||||
file.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. include:: ../../links/links.rst
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
The path to the links.rst file depends on the location of the file where
|
|
||||||
you are creating the link. For example, the path might be
|
|
||||||
``../../../links/links.rst`` or ``../links/links.rst``.
|
|
||||||
|
|
||||||
#. In the ``edx-documentation/en_us/links/links.rst`` file, add an entry for
|
|
||||||
the anchor text and the URL of the external website, formatted as follows.
|
|
||||||
Make sure that the anchor text in this file matches the anchor text in the
|
|
||||||
file that contains the cross-reference exactly, including capitalization.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. _Release Pages: https://openedx.atlassian.net/wiki/display/ENG/Release+Pages
|
|
||||||
|
|
||||||
Readers will see the following text. "Release Pages" will be an active link.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
The edX engineering wiki Release Pages provide access to detailed
|
|
||||||
information about every change made to the edx-platform GitHub
|
|
||||||
repository.
|
|
||||||
|
|
||||||
|
|
||||||
****************************
|
|
||||||
Image References
|
|
||||||
****************************
|
|
||||||
|
|
||||||
Image references look like this.
|
|
||||||
::
|
|
||||||
|
|
||||||
.. image:: /Images/Course_Outline_LMS.png
|
|
||||||
:width: 100
|
|
||||||
:alt: A screen capture showing the elements of the course outline in the LMS.
|
|
||||||
|
|
||||||
|
|
||||||
Image links can include optional specifications such as height, width, or
|
|
||||||
scale. Alternative text for screen readers is required for each image. Provide
|
|
||||||
text that is useful to someone who might not be able to see the image.
|
|
||||||
|
|
||||||
|
|
||||||
.. _Examples of Tables:
|
|
||||||
|
|
||||||
************************************
|
|
||||||
Tables
|
|
||||||
************************************
|
|
||||||
|
|
||||||
Each example in this section shows the raw formatting for the table followed
|
|
||||||
by the table as it would render (if you are viewing this file as part of the
|
|
||||||
Style Guide).
|
|
||||||
|
|
||||||
======================================
|
|
||||||
Example of a table with an empty cell
|
|
||||||
======================================
|
|
||||||
|
|
||||||
The empty cell is the second column in the first row of this table.
|
|
||||||
::
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 25 25 50
|
|
||||||
|
|
||||||
* - Annotation Problem
|
|
||||||
-
|
|
||||||
- Annotation problems ask students to respond to questions about a
|
|
||||||
specific block of text. The question appears above the text when the
|
|
||||||
student hovers the mouse over the highlighted text so that students can
|
|
||||||
think about the question as they read.
|
|
||||||
* - Example Poll
|
|
||||||
- Conditional Module
|
|
||||||
- You can create a conditional module to control versions of content that
|
|
||||||
groups of students see. For example, students who answer "Yes" to a
|
|
||||||
poll question then see a different block of text from the students who
|
|
||||||
answer "No" to that question.
|
|
||||||
* - Example JavaScript Problem
|
|
||||||
- Custom JavaScript
|
|
||||||
- Custom JavaScript display and grading problems (also called *custom
|
|
||||||
JavaScript problems* or *JS input problems*) allow you to create a
|
|
||||||
custom problem or tool that uses JavaScript and then add the problem or
|
|
||||||
tool directly into Studio.
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 25 25 50
|
|
||||||
|
|
||||||
* - Annotation Problem
|
|
||||||
-
|
|
||||||
- Annotation problems ask students to respond to questions about a
|
|
||||||
specific block of text. The question appears above the text when the
|
|
||||||
student hovers the mouse over the highlighted text so that students can
|
|
||||||
think about the question as they read.
|
|
||||||
* - Example Poll
|
|
||||||
- Conditional Module
|
|
||||||
- You can create a conditional module to control versions of content that
|
|
||||||
groups of students see. For example, students who answer "Yes" to a
|
|
||||||
poll question then see a different block of text from the students who
|
|
||||||
answer "No" to that question.
|
|
||||||
* - Exampel JavaScript Problem
|
|
||||||
- Custom JavaScript
|
|
||||||
- Custom JavaScript display and grading problems (also called *custom
|
|
||||||
JavaScript problems* or *JS input problems*) allow you to create a
|
|
||||||
custom problem or tool that uses JavaScript and then add the problem or
|
|
||||||
tool directly into Studio.
|
|
||||||
|
|
||||||
====================================
|
|
||||||
Example of a table with a header row
|
|
||||||
====================================
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 70
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - First Name
|
|
||||||
- Last Name
|
|
||||||
- Residence
|
|
||||||
* - Elizabeth
|
|
||||||
- Bennett
|
|
||||||
- Longbourne
|
|
||||||
* - Fitzwilliam
|
|
||||||
- Darcy
|
|
||||||
- Pemberley
|
|
||||||
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 70
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - First Name
|
|
||||||
- Last Name
|
|
||||||
- Residence
|
|
||||||
* - Elizabeth
|
|
||||||
- Bennett
|
|
||||||
- Longbourne
|
|
||||||
* - Fitzwilliam
|
|
||||||
- Darcy
|
|
||||||
- Pemberley
|
|
||||||
|
|
||||||
|
|
||||||
===============================================
|
|
||||||
Example of a table with a boldface first column
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 70
|
|
||||||
:stub-columns: 1
|
|
||||||
|
|
||||||
* - First Name
|
|
||||||
- Elizabeth
|
|
||||||
- Fitzwilliam
|
|
||||||
* - Last Name
|
|
||||||
- Bennett
|
|
||||||
- Darcy
|
|
||||||
* - Residence
|
|
||||||
- Longboure
|
|
||||||
- Pemberley
|
|
||||||
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 70
|
|
||||||
:stub-columns: 1
|
|
||||||
|
|
||||||
* - First Name
|
|
||||||
- Elizabeth
|
|
||||||
- Fitzwilliam
|
|
||||||
* - Last Name
|
|
||||||
- Bennett
|
|
||||||
- Darcy
|
|
||||||
* - Residence
|
|
||||||
- Longboure
|
|
||||||
- Pemberley
|
|
||||||
|
|
||||||
==============================================================
|
|
||||||
Example of a table with a cell that includes an unordered list
|
|
||||||
==============================================================
|
|
||||||
|
|
||||||
The blank lines before and after the unordered list are critical for the list
|
|
||||||
to render correctly.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 60
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - Field
|
|
||||||
- Type
|
|
||||||
- Details
|
|
||||||
* - ``correct_map``
|
|
||||||
- dict
|
|
||||||
- For each problem ID value listed by ``answers``, provides:
|
|
||||||
|
|
||||||
* ``correctness``: string; 'correct', 'incorrect'
|
|
||||||
* ``hint``: string; Gives optional hint. Nulls allowed.
|
|
||||||
* ``hintmode``: string; None, 'on_request', 'always'. Nulls allowed.
|
|
||||||
* ``msg``: string; Gives extra message response.
|
|
||||||
* ``npoints``: integer; Points awarded for this ``answer_id``. Nulls allowed.
|
|
||||||
* ``queuestate``: dict; None when not queued, else ``{key:'', time:''}``
|
|
||||||
where ``key`` is a secret string dump of a DateTime object in the form
|
|
||||||
'%Y%m%d%H%M%S'. Nulls allowed.
|
|
||||||
|
|
||||||
* - ``grade``
|
|
||||||
- integer
|
|
||||||
- Current grade value.
|
|
||||||
* - ``max_grade``
|
|
||||||
- integer
|
|
||||||
- Maximum possible grade value.
|
|
||||||
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
:widths: 15 15 60
|
|
||||||
:header-rows: 1
|
|
||||||
|
|
||||||
* - Field
|
|
||||||
- Type
|
|
||||||
- Details
|
|
||||||
* - ``correct_map``
|
|
||||||
- dict
|
|
||||||
- For each problem ID value listed by ``answers``, provides:
|
|
||||||
|
|
||||||
* ``correctness``: string; 'correct', 'incorrect'
|
|
||||||
* ``hint``: string; Gives optional hint. Nulls allowed.
|
|
||||||
* ``hintmode``: string; None, 'on_request', 'always'. Nulls allowed.
|
|
||||||
* ``msg``: string; Gives extra message response.
|
|
||||||
* ``npoints``: integer; Points awarded for this ``answer_id``. Nulls allowed.
|
|
||||||
* ``queuestate``: dict; None when not queued, else ``{key:'', time:''}``
|
|
||||||
where ``key`` is a secret string dump of a DateTime object in the form
|
|
||||||
'%Y%m%d%H%M%S'. Nulls allowed.
|
|
||||||
|
|
||||||
* - ``grade``
|
|
||||||
- integer
|
|
||||||
- Current grade value.
|
|
||||||
* - ``max_grade``
|
|
||||||
- integer
|
|
||||||
- Maximum possible grade value.
|
|
||||||
|
|
||||||
|
|
||||||
*****************
|
|
||||||
Code Formatting
|
|
||||||
*****************
|
|
||||||
|
|
||||||
===========
|
|
||||||
Inline code
|
|
||||||
===========
|
|
||||||
|
|
||||||
In inline text, any text can be formatted as code (monospace font) by
|
|
||||||
enclosing the selection within a pair of double "grave accent" characters (`).
|
|
||||||
For example, ````these words```` are formatted in a monospace font when the
|
|
||||||
documentation is output as PDF or HTML.
|
|
||||||
|
|
||||||
===========
|
|
||||||
Code blocks
|
|
||||||
===========
|
|
||||||
|
|
||||||
|
|
||||||
To set text in a code block, end the previous paragaph with 2 colons, leave
|
|
||||||
one line before the intended code block, and make sure the code block is
|
|
||||||
indented beyond the first colon.
|
|
||||||
::
|
|
||||||
|
|
||||||
For example, this is the introductory paragraph
|
|
||||||
::
|
|
||||||
|
|
||||||
<p>and this is the code block following.</p>
|
|
||||||
|
|
||||||
|
|
||||||
Alternatively, use the code-block tag. Optionally, indicate the type of code
|
|
||||||
after the 2 colons in the tag, which results in the tags within the code block
|
|
||||||
being displayed in different colors.
|
|
||||||
::
|
|
||||||
|
|
||||||
.. code-block:: xml
|
|
||||||
|
|
||||||
<problem>
|
|
||||||
<annotationresponse>
|
|
||||||
<annotationinput>
|
|
||||||
<text>PLACEHOLDER: Text of annotation</text>
|
|
||||||
<comment>PLACEHOLDER: Text of question</comment>
|
|
||||||
<comment_prompt>PLACEHOLDER: Type your response below:</comment_prompt>
|
|
||||||
<tag_prompt>PLACEHOLDER: In your response to this question, which tag below
|
|
||||||
do you choose?</tag_prompt>
|
|
||||||
<options>
|
|
||||||
<option choice="incorrect">PLACEHOLDER: Incorrect answer (to make this
|
|
||||||
option a correct or partially correct answer, change choice="incorrect"
|
|
||||||
to choice="correct" or choice="partially-correct")</option>
|
|
||||||
<option choice="correct">PLACEHOLDER: Correct answer (to make this option
|
|
||||||
an incorrect or partially correct answer, change choice="correct" to
|
|
||||||
choice="incorrect" or choice="partially-correct")</option>
|
|
||||||
<option choice="partially-correct">PLACEHOLDER: Partially correct answer
|
|
||||||
(to make this option a correct or partially correct answer,
|
|
||||||
change choice="partially-correct" to choice="correct" or choice="incorrect")
|
|
||||||
</option>
|
|
||||||
</options>
|
|
||||||
</annotationinput>
|
|
||||||
</annotationresponse>
|
|
||||||
<solution>
|
|
||||||
<p>PLACEHOLDER: Detailed explanation of solution</p>
|
|
||||||
</solution>
|
|
||||||
</problem>
|
|
||||||
|
|
||||||
.. include:: ../../links/links.rst
|
|
|
@ -19,7 +19,7 @@
|
||||||
<javascript-client disabled="true" />
|
<javascript-client disabled="true" />
|
||||||
<docs docsDir="${project.build.directory}" docsSubdir="api-docs" />
|
<docs docsDir="${project.build.directory}" docsSubdir="api-docs" />
|
||||||
<!-- REPLACE THE ${project.artifactId} WITH YOUR APPLICATION NAME. E.g. /gcat, /uri-resolver. if the ${project.artifactId} is not matching your APPLICATION Name /> -->
|
<!-- REPLACE THE ${project.artifactId} WITH YOUR APPLICATION NAME. E.g. /gcat, /uri-resolver. if the ${project.artifactId} is not matching your APPLICATION Name /> -->
|
||||||
<swagger basePath="/${project.artifactId}" />
|
<swagger basePath="/${project.artifactId}/srv" />
|
||||||
<docs freemarkerTemplate="${project.basedir}/src/main/resources/META-INF/enunciate/d4science_docs.fmt">
|
<docs freemarkerTemplate="${project.basedir}/src/main/resources/META-INF/enunciate/d4science_docs.fmt">
|
||||||
<additional-css file="css/d4science_enunciate_custom.css" />
|
<additional-css file="css/d4science_enunciate_custom.css" />
|
||||||
</docs>
|
</docs>
|
||||||
|
|
|
@ -4,14 +4,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-service</artifactId>
|
<artifactId>geoportal-service</artifactId>
|
||||||
<version>1.0.11</version>
|
<version>1.0.12</version>
|
||||||
<name>Geoportal Service</name>
|
<name>Geoportal Service</name>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -68,11 +68,6 @@
|
||||||
<artifactId>default-lc-managers</artifactId>
|
<artifactId>default-lc-managers</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.common</groupId>
|
|
||||||
<artifactId>authorization-utils</artifactId>
|
|
||||||
<version>[2.0.0, 3.0.0-SNAPSHOT)</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- MONGO -->
|
<!-- MONGO -->
|
||||||
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
|
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
|
||||||
|
|
|
@ -14,6 +14,7 @@ import org.bson.types.ObjectId;
|
||||||
import org.gcube.application.cms.implementations.ImplementationProvider;
|
import org.gcube.application.cms.implementations.ImplementationProvider;
|
||||||
import org.gcube.application.cms.implementations.WorkspaceManager;
|
import org.gcube.application.cms.implementations.WorkspaceManager;
|
||||||
import org.gcube.application.cms.implementations.faults.*;
|
import org.gcube.application.cms.implementations.faults.*;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
import org.gcube.application.cms.plugins.LifecycleManager;
|
||||||
import org.gcube.application.cms.plugins.faults.EventException;
|
import org.gcube.application.cms.plugins.faults.EventException;
|
||||||
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
|
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
|
||||||
|
@ -47,10 +48,9 @@ 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.RegisterFileSetRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
import org.gcube.application.geoportal.common.model.rest.TempFile;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.*;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.*;
|
||||||
import org.gcube.application.geoportal.common.utils.ContextUtils;
|
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.application.geoportal.service.engine.providers.PluginManager;
|
import org.gcube.application.geoportal.service.engine.providers.PluginManager;
|
||||||
import org.gcube.application.geoportal.service.utils.UserUtils;
|
|
||||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfiledMongoManager(String profileId) throws ConfigurationException, RegistrationException {
|
public ProfiledMongoManager(String profileId) throws ConfigurationException, RegistrationException {
|
||||||
// Check UseCaseDescriptor ID
|
// Check UseCaseDescriptor ID
|
||||||
log.info("Loading useCaseDescriptor ID {} ",profileId);
|
log.info("Loading useCaseDescriptor ID {} ",profileId);
|
||||||
if(profileId==null) throw new InvalidParameterException("UseCaseDescriptor ID cannot be null");
|
if(profileId==null) throw new InvalidParameterException("UseCaseDescriptor ID cannot be null");
|
||||||
|
@ -235,7 +235,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
|
|
||||||
// TODO Set Access From UseCaseDescriptor
|
// TODO Set Access From UseCaseDescriptor
|
||||||
Access access=new Access();
|
Access access=new Access();
|
||||||
access.setLicense("");
|
access.setLicense("CC-BY-4.0");
|
||||||
access.setPolicy(AccessPolicy.OPEN);
|
access.setPolicy(AccessPolicy.OPEN);
|
||||||
pubInfo.setAccess(access);
|
pubInfo.setAccess(access);
|
||||||
|
|
||||||
|
@ -624,6 +624,8 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
}
|
}
|
||||||
if(!policy.canWrite(doc,u)) throw new UnauthorizedAccess("No edit rights on project "+id);
|
if(!policy.canWrite(doc,u)) throw new UnauthorizedAccess("No edit rights on project "+id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
doc.getLifecycleInformation().cleanState();
|
doc.getLifecycleInformation().cleanState();
|
||||||
doc.getLifecycleInformation().setLastOperationStatus(LifecycleInformation.Status.OK);
|
doc.getLifecycleInformation().setLastOperationStatus(LifecycleInformation.Status.OK);
|
||||||
|
|
||||||
|
@ -650,10 +652,14 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
Document parent = Serialization.asDocument(foundElementsByMatchingPaths.get(0));
|
Document parent = Serialization.asDocument(foundElementsByMatchingPaths.get(0));
|
||||||
|
|
||||||
|
|
||||||
Access toSetAccess = doc.getInfo().getAccess();
|
Access toSetAccess = new Access(doc.getInfo().getAccess().getPolicy(),doc.getInfo().getAccess().getLicense());
|
||||||
if(request.getToSetAccess()!=null){
|
if(request.getToSetAccess()!=null){
|
||||||
//TODO validate specified Access
|
//TODO validate specified Access
|
||||||
toSetAccess = request.getToSetAccess();
|
String requestedLicense = request.getToSetAccess().getLicense();
|
||||||
|
if(requestedLicense!=null)toSetAccess.setLicense(requestedLicense);
|
||||||
|
|
||||||
|
AccessPolicy requestedPolicy = request.getToSetAccess().getPolicy();
|
||||||
|
if(requestedPolicy!=null)toSetAccess.setPolicy(requestedPolicy);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PREPARE REGISTERED FS
|
// PREPARE REGISTERED FS
|
||||||
|
@ -821,7 +827,8 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Configuration getConfiguration() throws ConfigurationException{
|
public Configuration getConfiguration() throws ConfigurationException{
|
||||||
log.debug("Asking configuration for {} in {} ", useCaseDescriptor.getId(), UserUtils.getCurrent().getContext());
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
log.debug("Asking configuration for {} in {} ", useCaseDescriptor.getId(), context);
|
||||||
Configuration toReturn= new Configuration();
|
Configuration toReturn= new Configuration();
|
||||||
List<Archive> archives = new ArrayList<>();
|
List<Archive> archives = new ArrayList<>();
|
||||||
toReturn.setArchives(archives);
|
toReturn.setArchives(archives);
|
||||||
|
@ -829,7 +836,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
toReturn.setIndexes(indexes);
|
toReturn.setIndexes(indexes);
|
||||||
// Set Basic Info
|
// Set Basic Info
|
||||||
toReturn.setProfileId(this.getUseCaseDescriptor().getId());
|
toReturn.setProfileId(this.getUseCaseDescriptor().getId());
|
||||||
toReturn.setContext(ContextUtils.getCurrentScope());
|
toReturn.setContext(context);
|
||||||
toReturn.setLastUpdatedTime(LocalDateTime.now());
|
toReturn.setLastUpdatedTime(LocalDateTime.now());
|
||||||
|
|
||||||
// Add Mongo Info
|
// Add Mongo Info
|
||||||
|
@ -953,7 +960,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
|
|
||||||
private static final RegisteredFileSet prepareRegisteredFileSet(Access toSetAccess,String docID, String profileID,
|
private static final RegisteredFileSet prepareRegisteredFileSet(Access toSetAccess,String docID, String profileID,
|
||||||
Document attributes,List<TempFile> files, StorageUtils storage,WorkspaceManager ws) throws StorageHubException, StorageException {
|
Document attributes,List<TempFile> files, StorageUtils storage,WorkspaceManager ws) throws StorageHubException, StorageException {
|
||||||
log.debug("Preparing Registered FileSet..");
|
log.debug("Preparing Registered FileSet {}");
|
||||||
RegisteredFileSet toReturn = new RegisteredFileSet();
|
RegisteredFileSet toReturn = new RegisteredFileSet();
|
||||||
if(attributes!=null) toReturn.putAll(attributes);
|
if(attributes!=null) toReturn.putAll(attributes);
|
||||||
String uuid = UUID.randomUUID().toString();
|
String uuid = UUID.randomUUID().toString();
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.mongodb.client.model.ReturnDocument;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.serialization.Serialization;
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
|
@ -24,7 +25,10 @@ public class UCDMongoManager extends MongoManager implements UCDManagerI{
|
||||||
|
|
||||||
|
|
||||||
public UCDMongoManager() throws ConfigurationException {
|
public UCDMongoManager() throws ConfigurationException {
|
||||||
init("UCD_"+ContextUtils.getCurrentScope().replaceAll("/","_"));
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
String collectionName ="UCD_"+context.replaceAll("/","_");
|
||||||
|
log.debug("Starting UCD mongo manager under {} with collection name {} ",context, collectionName);
|
||||||
|
init(collectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long deleteAll(){
|
public long deleteAll(){
|
||||||
|
|
|
@ -4,10 +4,12 @@ import lombok.NonNull;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.gcube.application.cms.caches.AbstractScopedMap;
|
import org.gcube.application.cms.caches.AbstractScopedMap;
|
||||||
import org.gcube.application.cms.caches.TimedMap;
|
import org.gcube.application.cms.caches.TimedMap;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
||||||
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
|
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
|
||||||
|
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.time.temporal.TemporalAmount;
|
import java.time.temporal.TemporalAmount;
|
||||||
|
@ -45,6 +47,7 @@ public class ConfigurationCache extends AbstractScopedMap<ConfigurationCache.Con
|
||||||
|
|
||||||
private static Configuration getForProfile(String profileID) throws ConfigurationException{
|
private static Configuration getForProfile(String profileID) throws ConfigurationException{
|
||||||
log.info("Evaluating Configuration for profile {} ",profileID);
|
log.info("Evaluating Configuration for profile {} ",profileID);
|
||||||
|
log.debug("Caller is {} ", UserUtils.getCurrent());
|
||||||
try{
|
try{
|
||||||
return new ProfiledMongoManager(profileID).getConfiguration();
|
return new ProfiledMongoManager(profileID).getConfiguration();
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.gcube.application.cms.caches.AbstractScopedMap;
|
||||||
import org.gcube.application.cms.caches.Engine;
|
import org.gcube.application.cms.caches.Engine;
|
||||||
import org.gcube.application.cms.caches.ObjectManager;
|
import org.gcube.application.cms.caches.ObjectManager;
|
||||||
import org.gcube.application.cms.implementations.ImplementationProvider;
|
import org.gcube.application.cms.implementations.ImplementationProvider;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.serialization.Serialization;
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
|
@ -204,7 +205,8 @@ public class UCDManager extends AbstractScopedMap<UCDManagerI> implements UCDMan
|
||||||
log.warn("Unable to cache UCD {}",entry.getKey(),e);
|
log.warn("Unable to cache UCD {}",entry.getKey(),e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("Cached {} UCDs in {} ",memCache.size(),ContextUtils.getCurrentScope());
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
log.info("Cached {} UCDs in {} ",memCache.size(),context);
|
||||||
|
|
||||||
cacheLock.writeLock().unlock();
|
cacheLock.writeLock().unlock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.application.geoportal.service.engine.mongo;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.cms.implementations.faults.*;
|
import org.gcube.application.cms.implementations.faults.*;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.plugins.faults.EventException;
|
import org.gcube.application.cms.plugins.faults.EventException;
|
||||||
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
|
import org.gcube.application.cms.plugins.faults.InsufficientPrivileges;
|
||||||
import org.gcube.application.cms.plugins.faults.StepException;
|
import org.gcube.application.cms.plugins.faults.StepException;
|
||||||
|
@ -16,7 +17,6 @@ import org.gcube.application.geoportal.common.utils.FileSets;
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
||||||
import org.gcube.application.geoportal.service.BasicServiceTestUnit;
|
import org.gcube.application.geoportal.service.BasicServiceTestUnit;
|
||||||
import org.gcube.application.geoportal.service.utils.UserUtils;
|
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -30,7 +30,7 @@ import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
public class LockTests extends BasicServiceTestUnit {
|
public class LockTests extends BasicServiceTestUnit {
|
||||||
|
|
||||||
String profileID = "rolesTesting";
|
String profileID = "basic";
|
||||||
ProfiledMongoManager manager= null;
|
ProfiledMongoManager manager= null;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
|
@ -100,7 +100,7 @@ public class LockTests extends BasicServiceTestUnit {
|
||||||
|
|
||||||
// register fileset
|
// register fileset
|
||||||
FileSets.RequestBuilder builder = FileSets.build(
|
FileSets.RequestBuilder builder = FileSets.build(
|
||||||
"$.relazioneScavo","fileset","relazioneScavo."+ Field.CHILDREN+"[?(@.fileset)]");
|
"$.section","fileset","section."+ Field.CHILDREN+"[?(@.fileset)]");
|
||||||
StorageUtils s= new StorageUtils();
|
StorageUtils s= new StorageUtils();
|
||||||
builder.add(
|
builder.add(
|
||||||
s.putOntoStorage(new File(Tests.FOLDER_CONCESSIONI,"pos.shp"),"pos.shp"));
|
s.putOntoStorage(new File(Tests.FOLDER_CONCESSIONI,"pos.shp"),"pos.shp"));
|
||||||
|
@ -109,7 +109,7 @@ public class LockTests extends BasicServiceTestUnit {
|
||||||
checkIsLockCleaned(p.getId());
|
checkIsLockCleaned(p.getId());
|
||||||
|
|
||||||
// delete fileset
|
// delete fileset
|
||||||
p=managerInterface.deleteFileSet(p.getId(),"$.relazioneScavo.fileset",false);
|
p=managerInterface.deleteFileSet(p.getId(),"$.section.fileset",false);
|
||||||
checkIsLockCleaned(p.getId());
|
checkIsLockCleaned(p.getId());
|
||||||
|
|
||||||
// perform step
|
// perform step
|
||||||
|
|
|
@ -9,6 +9,7 @@ import org.gcube.application.cms.tests.TokenSetter;
|
||||||
import org.gcube.application.cms.tests.model.BasicTests;
|
import org.gcube.application.cms.tests.model.BasicTests;
|
||||||
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
import org.gcube.application.geoportal.common.model.configuration.Configuration;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
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.RegisterFileSetRequest;
|
||||||
|
@ -23,12 +24,14 @@ import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.opengis.service.Interface;
|
import org.opengis.service.Interface;
|
||||||
|
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.client.Entity;
|
import javax.ws.rs.client.Entity;
|
||||||
import javax.ws.rs.client.WebTarget;
|
import javax.ws.rs.client.WebTarget;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
|
@ -158,9 +161,12 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
|
||||||
String fieldDefinitionPath,
|
String fieldDefinitionPath,
|
||||||
Document attributes,
|
Document attributes,
|
||||||
RegisterFileSetRequest.ClashOptions clashPolicy,
|
RegisterFileSetRequest.ClashOptions clashPolicy,
|
||||||
String ...files) throws Exception {
|
Access access,
|
||||||
|
String ...files) throws Exception {
|
||||||
FileSets.RequestBuilder builder = FileSets.build(parentPath,fieldName,fieldDefinitionPath);
|
FileSets.RequestBuilder builder = FileSets.build(parentPath,fieldName,fieldDefinitionPath);
|
||||||
|
|
||||||
|
builder.setAccess(access);
|
||||||
|
|
||||||
builder.setClashPolicy(clashPolicy).setAttributes(attributes);
|
builder.setClashPolicy(clashPolicy).setAttributes(attributes);
|
||||||
|
|
||||||
for(String file:files)
|
for(String file:files)
|
||||||
|
@ -169,6 +175,7 @@ public abstract class AbstractProfiledDocumentsTests extends BasicServiceTestUni
|
||||||
Project 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()),
|
post(Entity.entity(Serialization.write(builder.getTheRequest()),
|
||||||
MediaType.APPLICATION_JSON)), Project.class);
|
MediaType.APPLICATION_JSON)), Project.class);
|
||||||
|
|
||||||
BasicTests.validate(doc);
|
BasicTests.validate(doc);
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import org.bson.Document;
|
||||||
import org.gcube.application.cms.serialization.Serialization;
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
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.filesets.RegisteredFileSet;
|
||||||
import org.gcube.application.geoportal.common.model.document.relationships.Relationship;
|
import org.gcube.application.geoportal.common.model.document.relationships.Relationship;
|
||||||
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
||||||
|
@ -31,7 +33,7 @@ public class DummyProjectTest extends AbstractProfiledDocumentsTests{
|
||||||
String fieldName="fileset";
|
String fieldName="fileset";
|
||||||
String fieldDefinition="section."+Field.CHILDREN+"[?(@.fileset)]";
|
String fieldDefinition="section."+Field.CHILDREN+"[?(@.fileset)]";
|
||||||
|
|
||||||
String filename = "sample.tif";
|
String filename = "concessioni/sample.tif";
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -89,7 +91,7 @@ public class DummyProjectTest extends AbstractProfiledDocumentsTests{
|
||||||
fieldDefinition,
|
fieldDefinition,
|
||||||
new Document("customField","customFieldValue"),
|
new Document("customField","customFieldValue"),
|
||||||
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
|
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
|
||||||
filename);
|
new Access(),filename);
|
||||||
|
|
||||||
wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
||||||
assertTrue("Relazione exists",wrapper.getMatchingPaths("section").size()==1);
|
assertTrue("Relazione exists",wrapper.getMatchingPaths("section").size()==1);
|
||||||
|
@ -127,8 +129,9 @@ public class DummyProjectTest extends AbstractProfiledDocumentsTests{
|
||||||
|
|
||||||
Project doc = createNew(baseDoc);
|
Project doc = createNew(baseDoc);
|
||||||
|
|
||||||
|
Access access =new Access();
|
||||||
|
access.setLicense("test-license");
|
||||||
|
access.setPolicy(AccessPolicy.RESTRICTED);
|
||||||
|
|
||||||
// INSERT ONE, MERGE INFO (NB default values already exist)
|
// INSERT ONE, MERGE INFO (NB default values already exist)
|
||||||
doc = upload(
|
doc = upload(
|
||||||
|
@ -138,142 +141,21 @@ public class DummyProjectTest extends AbstractProfiledDocumentsTests{
|
||||||
fieldDefinition,
|
fieldDefinition,
|
||||||
new Document("customField","customFieldValue"),
|
new Document("customField","customFieldValue"),
|
||||||
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
|
RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
|
||||||
filename);
|
access,filename);
|
||||||
|
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
// Not automatic, needs generation of locked project
|
||||||
public void testUnlock() throws Exception {
|
|
||||||
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
|
||||||
// Not automatic, needs generation of locked project
|
|
||||||
assumeTrue(false);
|
|
||||||
String id = "627e87bb02ad3d1a2e0e9e18";
|
|
||||||
String ucd = "profiledConcessioni";
|
|
||||||
Project p =check(target(InterfaceConstants.Methods.PROJECTS).path(ucd).path(InterfaceConstants.Methods.FORCE_UNLOCK).path(id).request(MediaType.APPLICATION_JSON).
|
|
||||||
put(Entity.entity("", MediaType.APPLICATION_JSON)), Project.class);
|
|
||||||
assertNull(p.getLock());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRelationships() throws Exception {
|
|
||||||
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
|
||||||
Project a = createNew(new Document("key","value"));
|
|
||||||
Project b = createNew(new Document("key","value"));
|
|
||||||
|
|
||||||
// set relation a -- precedes --> b
|
|
||||||
System.out.println("Setting relation..");
|
|
||||||
String relId="precedes";
|
|
||||||
a = check(baseTarget().
|
|
||||||
path(InterfaceConstants.Methods.RELATIONSHIP).
|
|
||||||
path(a.getId()).
|
|
||||||
path(relId).
|
|
||||||
queryParam(InterfaceConstants.Parameters.TARGET_UCD,b.getProfileID()).
|
|
||||||
queryParam(InterfaceConstants.Parameters.TARGET_ID,b.getId()).
|
|
||||||
request(MediaType.APPLICATION_JSON).
|
|
||||||
put(Entity.json("")), Project.class);
|
|
||||||
// check set relation in a
|
|
||||||
System.out.println("Checking relation a->b");
|
|
||||||
assertTrue(a.getRelationships()!=null && a.getRelationships().size()==1);
|
|
||||||
Relationship rel = a.getRelationships().get(0);
|
|
||||||
assertEquals(rel.getRelationshipName(),relId);
|
|
||||||
assertEquals(rel.getTargetUCD(),b.getProfileID());
|
|
||||||
assertEquals(rel.getTargetID(),b.getId());
|
|
||||||
|
|
||||||
// TODO TBD check reciprocity : expected relation b -- follows -> a
|
|
||||||
|
|
||||||
// delete relation
|
|
||||||
System.out.println("Deleting relation a->b");
|
|
||||||
a = check(baseTarget().
|
|
||||||
path(InterfaceConstants.Methods.RELATIONSHIP).
|
|
||||||
path(a.getId()).
|
|
||||||
path(relId).
|
|
||||||
queryParam(InterfaceConstants.Parameters.TARGET_UCD,b.getProfileID()).
|
|
||||||
queryParam(InterfaceConstants.Parameters.TARGET_ID,b.getId()).
|
|
||||||
request(MediaType.APPLICATION_JSON).
|
|
||||||
delete(), Project.class);
|
|
||||||
// check deleted
|
|
||||||
|
|
||||||
System.out.println("Checking deleted relation");
|
|
||||||
assertTrue(a.getRelationships()==null || a.getRelationships().isEmpty());
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// public void testSDI() throws Exception {
|
// public void testUnlock() throws Exception {
|
||||||
// // Create new
|
// assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
// Project doc = createNew(new Document("posizionamentoScavo",new Document("title","Mio pos")));
|
// assumeTrue(false);
|
||||||
//
|
// String id = "627e87bb02ad3d1a2e0e9e18";
|
||||||
// // register filesets
|
// String ucd = "profiledConcessioni";
|
||||||
// doc = upload(
|
// Project p =check(target(InterfaceConstants.Methods.PROJECTS).path(ucd).path(InterfaceConstants.Methods.FORCE_UNLOCK).path(id).request(MediaType.APPLICATION_JSON).
|
||||||
// new StorageUtils(),
|
// put(Entity.entity("", MediaType.APPLICATION_JSON)), Project.class);
|
||||||
// doc.getId(),
|
// assertNull(p.getLock());
|
||||||
// "posizionamentoScavo","fileset",
|
|
||||||
// "posizionamentoScavo."+Field.CHILDREN+"[?(@.fileset)]",
|
|
||||||
// null,
|
|
||||||
// RegisterFileSetRequest.ClashOptions.REPLACE_EXISTING,
|
|
||||||
// "pos.shp","pos.shx");
|
|
||||||
//
|
|
||||||
// System.out.println("Registered posizionamento, result is "+ Serialization.write(doc));
|
|
||||||
//
|
|
||||||
// // invoke step SUBMIT-FOR-REVIEW
|
|
||||||
// StepExecutionRequest req=new StepExecutionRequest();
|
|
||||||
// req.setStepID("SUBMIT-FOR-REVIEW");
|
|
||||||
// doc=step(doc.getId(),req);
|
|
||||||
// System.out.println(doc);
|
|
||||||
// if(doc.getLifecycleInformation().getErrorMessages()!=null) {
|
|
||||||
// System.out.println("ERROR MESSAGES");
|
|
||||||
// doc.getLifecycleInformation().getErrorMessages().forEach(s -> System.out.println(s));
|
|
||||||
// }
|
|
||||||
// if(doc.getLifecycleInformation().getWarningMessages()!=null) {
|
|
||||||
// System.out.println("WARNING MESSAGES");
|
|
||||||
// doc.getLifecycleInformation().getWarningMessages().forEach(s -> System.out.println(s));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// assertTrue(doc.getLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK));
|
|
||||||
//
|
|
||||||
// JSONPathWrapper wrapper = new JSONPathWrapper(doc.getTheDocument().toJson());
|
|
||||||
// RegisteredFileSet fs = Serialization.convert(wrapper.getByPath("$..fileset").get(0),RegisteredFileSet.class);
|
|
||||||
// assertTrue(fs!=null);
|
|
||||||
// assertTrue(fs.getPayloads().size()==2);
|
|
||||||
// assertTrue(fs.getMaterializations().size()>0);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// for(Object matObj : wrapper.getByPath("$..[?(@."+ Materialization.TYPE +" == '"+GCubeSDILayer.GCUBE_SDY_LAYER_TYPE+"' )]")){
|
|
||||||
// GCubeSDILayer layer = Serialization.convert(matObj, GCubeSDILayer.class);
|
|
||||||
// System.out.println("Checking Layer : "+layer);
|
|
||||||
// assertTrue(layer.getType().equals(GCubeSDILayer.GCUBE_SDY_LAYER_TYPE));
|
|
||||||
// assertTrue(layer.getOGCLinks().size()>0);
|
|
||||||
// assertTrue(layer.getPlatformInfo().size()>0);
|
|
||||||
// assertTrue(layer.getBBox()!=null);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Checking platform info GeoServer
|
|
||||||
// for(Object platformObj : wrapper.getByPath("$..[?(@."+ Materialization.TYPE +" == 'GeoServer' )]")){
|
|
||||||
// Document platform=Serialization.asDocument(platformObj);
|
|
||||||
// assertTrue(platform.containsKey("layerName"));
|
|
||||||
// assertTrue(platform.containsKey("workspace"));
|
|
||||||
// assertTrue(platform.containsKey("storeName"));
|
|
||||||
// assertTrue(platform.containsKey("persistencePath"));
|
|
||||||
// assertTrue(platform.get("files",List.class).size()==2);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// req.setStepID("APPROVE DRAFT");
|
|
||||||
// doc=step(doc.getId(),req);
|
|
||||||
// if(doc.getLifecycleInformation().getErrorMessages()!=null) {
|
|
||||||
// System.out.println("ERROR MESSAGES");
|
|
||||||
// doc.getLifecycleInformation().getErrorMessages().forEach(s -> System.out.println(s));
|
|
||||||
// }
|
|
||||||
// if(doc.getLifecycleInformation().getWarningMessages()!=null) {
|
|
||||||
// System.out.println("WARNING MESSAGES");
|
|
||||||
// doc.getLifecycleInformation().getWarningMessages().forEach(s -> System.out.println(s));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// assertTrue(doc.getLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK));
|
|
||||||
//
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,28 +2,21 @@ package org.gcube.application.geoportal.service.profiledDocuments;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.cms.implementations.ImplementationProvider;
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.implementations.WorkspaceManager;
|
|
||||||
import org.gcube.application.cms.serialization.Serialization;
|
import org.gcube.application.cms.serialization.Serialization;
|
||||||
import org.gcube.application.cms.tests.model.BasicTests;
|
|
||||||
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
|
|
||||||
import org.gcube.application.geoportal.common.model.document.Project;
|
import org.gcube.application.geoportal.common.model.document.Project;
|
||||||
|
import org.gcube.application.geoportal.common.model.document.access.Access;
|
||||||
import org.gcube.application.geoportal.common.model.document.identification.SpatialReference;
|
import org.gcube.application.geoportal.common.model.document.identification.SpatialReference;
|
||||||
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
|
||||||
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;
|
||||||
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
|
import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest;
|
||||||
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
|
import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field;
|
||||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
||||||
import org.gcube.application.geoportal.service.utils.UserUtils;
|
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import javax.management.relation.Relation;
|
|
||||||
import javax.ws.rs.client.Entity;
|
|
||||||
import javax.ws.rs.client.WebTarget;
|
import javax.ws.rs.client.WebTarget;
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
@ -70,7 +63,7 @@ public class ProfiledConcessioniTests extends AbstractProfiledDocumentsTests{
|
||||||
"fileset",
|
"fileset",
|
||||||
"$.posizionamentoScavo."+ Field.CHILDREN+"[?(@.fileset)]",
|
"$.posizionamentoScavo."+ Field.CHILDREN+"[?(@.fileset)]",
|
||||||
null,
|
null,
|
||||||
RegisterFileSetRequest.ClashOptions.MERGE_EXISTING,
|
RegisterFileSetRequest.ClashOptions.MERGE_EXISTING,new Access(),
|
||||||
"concessioni/pos.SHP");
|
"concessioni/pos.SHP");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.images-plugin
|
# Changelog for org.gcube.application.cms.images-plugin
|
||||||
|
|
||||||
This library contains gcube-cms plugins for images materializations
|
## [v1.0.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.1] - 2022-12-07
|
## [v1.0.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : Images Plugin
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
||||||
|
|
||||||
|
This module is expected to define handlers for the materializations of images preview.
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
|
@ -11,8 +13,8 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>images-plugins</artifactId>
|
<artifactId>images-plugins</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.2</version>
|
||||||
<name>gCube CMS - Images Plugins</name>
|
<name>gCube CMS - Images Plugins</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.notifications-plugins
|
# Changelog for org.gcube.application.cms.notifications-plugins
|
||||||
|
|
||||||
This library contains gcube-cms plugins for notitfications events
|
## [v1.0.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.1] - 2022-12-07
|
## [v1.0.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
gCube CMS Suite
|
gCube CMS Suite : Notifications Plugin
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
|
||||||
|
|
||||||
|
This module is expected to contain plugin definitions for the generations of notifications upon certain Lifecycle events.
|
||||||
|
|
||||||
|
|
||||||
## Built with
|
## Built with
|
||||||
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
* [gCube SmartGears] (https://gcube.wiki.gcube-system.org/gcube/SmartGears) - The gCube SmartGears framework
|
||||||
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
||||||
|
@ -11,8 +14,8 @@ gCube CMS Suite is a set of components designed to manage complex space-temporal
|
||||||
* [Maven](https://maven.apache.org/) - Dependency Management
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
|
|
||||||
Documentation can be found [here](https://gcube.wiki.gcube-system.org/gcube/GeoPortal_Service).
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>notifications-plugins</artifactId>
|
<artifactId>notifications-plugins</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.2</version>
|
||||||
<name>gCube CMS - Notifications Plugins</name>
|
<name>gCube CMS - Notifications Plugins</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
6
pom.xml
6
pom.xml
|
@ -9,7 +9,7 @@
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
<name>Gcube CMS Suite</name>
|
<name>Gcube CMS Suite</name>
|
||||||
|
|
||||||
<description>gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.</description>
|
<description>gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.</description>
|
||||||
|
@ -26,17 +26,15 @@
|
||||||
<gcube-smartgears-bom-version>2.1.1</gcube-smartgears-bom-version>
|
<gcube-smartgears-bom-version>2.1.1</gcube-smartgears-bom-version>
|
||||||
<gcube-portal-bom-version>3.6.3</gcube-portal-bom-version>
|
<gcube-portal-bom-version>3.6.3</gcube-portal-bom-version>
|
||||||
<storagehub-version-range>[1.0.0,2.0.0-SNAPSHOT)</storagehub-version-range>
|
<storagehub-version-range>[1.0.0,2.0.0-SNAPSHOT)</storagehub-version-range>
|
||||||
<plugin-framework-version>1.0.1</plugin-framework-version>
|
|
||||||
|
|
||||||
<!--dev -->
|
<!--dev -->
|
||||||
<!-- <gcube-bom-version>2.1.0-SNAPSHOT</gcube-bom-version>-->
|
<!-- <gcube-bom-version>2.1.0-SNAPSHOT</gcube-bom-version>-->
|
||||||
<!-- <gcube-smartgears-bom-version>2.2.0-SNAPSHOT</gcube-smartgears-bom-version>-->
|
<!-- <gcube-smartgears-bom-version>2.2.0-SNAPSHOT</gcube-smartgears-bom-version>-->
|
||||||
<!-- <gcube-portal-bom-version>3.7.0-SNAPSHOT</gcube-portal-bom-version>-->
|
<!-- <gcube-portal-bom-version>3.7.0-SNAPSHOT</gcube-portal-bom-version>-->
|
||||||
<!-- <storagehub-version-range>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</storagehub-version-range>-->
|
<!-- <storagehub-version-range>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</storagehub-version-range>-->
|
||||||
<!--<!– <storagehub-version-range>[1.0.0,2.0.0-SNAPSHOT)</storagehub-version-range>–>-->
|
|
||||||
<!-- <plugin-framework-version>1.0.2-SNAPSHOT</plugin-framework-version>-->
|
|
||||||
|
|
||||||
|
|
||||||
|
<plugin-framework-version>1.0.3</plugin-framework-version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
# Changelog for org.gcube.application.cms.sdi-plugins
|
# Changelog for org.gcube.application.cms.sdi-plugins
|
||||||
|
|
||||||
This library contains gcube-cms plugins for indexing and materializations in gCube SDI
|
## [v1.0.2] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.1] - 2022-12-07
|
## [v1.0.1] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
@ -10,3 +9,5 @@ This library contains gcube-cms plugins for indexing and materializations in gCu
|
||||||
|
|
||||||
## [v1.0.0] - 2022-02-24
|
## [v1.0.0] - 2022-02-24
|
||||||
- First release
|
- First release
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
|
@ -1,15 +1,22 @@
|
||||||
gCube CMS Suite : SDI Plugins
|
gCube CMS Suite : SDI Plugins
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
[gCube CMS Suite](../) module containing references, documentation, guides ad utilities.
|
|
||||||
|
|
||||||
|
This module contains definition of the following plugins :
|
||||||
|
- SDIIndexerPlugin : indexes Projects in centroid layers in gCube SDI (requires PostGIS DB)
|
||||||
|
- SDIMaterializerPlugin : materializes layers in gCube SDI (currenlty supported TIF and SHP)
|
||||||
|
|
||||||
|
It uses the SDI in the context of the caller, and requires :
|
||||||
|
- GeoServer
|
||||||
|
- Postgis DB registered in Geoserver (indexing only)
|
||||||
|
|
||||||
|
|
||||||
|
## Built with
|
||||||
|
* [gCube SDI] (https://gcube.wiki.gcube-system.org/gcube/) - The gCube SDI
|
||||||
|
* [OpenJDK](https://openjdk.java.net/) - The JDK used
|
||||||
|
* [Maven](https://maven.apache.org/) - Dependency Management
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
* [Dedicated Wiki](https://sublime-and-sphinx-guide.readthedocs.io) - TBD Powered by [Sphynx](https://www.sphinx-doc.org/en/master/)
|
[gCube CMS Suite](../) parent module containing references, documentation, guides ad utilities.
|
||||||
* [Service Interactive API]() -TBD 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/)
|
|
||||||
* [Service Wiki src](../use-cases/src/site/suite.rst)
|
|
||||||
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>sdi-plugins</artifactId>
|
<artifactId>sdi-plugins</artifactId>
|
||||||
<version>1.0.1</version>
|
<version>1.0.2</version>
|
||||||
<name>gCube CMS - SDI Plugins</name>
|
<name>gCube CMS - SDI Plugins</name>
|
||||||
|
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -5,6 +5,7 @@ import lombok.Data;
|
||||||
import lombok.Synchronized;
|
import lombok.Synchronized;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
import org.gcube.application.cms.implementations.utils.UserUtils;
|
||||||
import org.gcube.application.cms.plugins.MaterializationPlugin;
|
import org.gcube.application.cms.plugins.MaterializationPlugin;
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
import org.gcube.application.cms.plugins.faults.InitializationException;
|
||||||
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
|
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
|
||||||
|
@ -47,7 +48,9 @@ public class SDIMaterializerPlugin extends AbstractPlugin implements Materializa
|
||||||
|
|
||||||
|
|
||||||
private SDIManagerWrapper getSDIManager(){
|
private SDIManagerWrapper getSDIManager(){
|
||||||
return sdiManagerMap.get(ContextUtils.getCurrentScope());
|
String context = UserUtils.getCurrent().getContext();
|
||||||
|
log.debug("Getting SDIManagerWrapper from cache map for context {}");
|
||||||
|
return sdiManagerMap.get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,7 +58,7 @@ public class SDIMaterializerPlugin extends AbstractPlugin implements Materializa
|
||||||
public InitializationReport initInContext() throws InitializationException {
|
public InitializationReport initInContext() throws InitializationException {
|
||||||
InitializationReport report = new InitializationReport();
|
InitializationReport report = new InitializationReport();
|
||||||
try{
|
try{
|
||||||
String context = ContextUtils.getCurrentScope();
|
String context = UserUtils.getCurrent().getContext();
|
||||||
if(getSDIManager()==null) {
|
if(getSDIManager()==null) {
|
||||||
log.info("Initializing in " + context);
|
log.info("Initializing in " + context);
|
||||||
sdiManagerMap.put(context,new SDIManagerWrapper());
|
sdiManagerMap.put(context,new SDIManagerWrapper());
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
# Changelog for org.gcube.application.cms.use-cases
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-client
|
## [v1.0.4] - 2023-01-10
|
||||||
|
- Pom updates
|
||||||
|
|
||||||
## [v1.0.3] - 2022-12-07
|
## [v1.0.3] - 2022-12-07
|
||||||
- Pom updates
|
- Pom updates
|
||||||
|
@ -12,4 +13,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
- Updated parent
|
- Updated parent
|
||||||
|
|
||||||
## [v1.0.0] - 2021-09-20
|
## [v1.0.0] - 2021-09-20
|
||||||
- First release, extracted from client
|
- First release, extracted from client
|
||||||
|
|
||||||
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
@ -1,19 +1,18 @@
|
||||||
gCube CMS Suite : Use cases
|
gCube CMS Suite : Use cases
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
[gCube CMS Suite](../README.md) module containing references, documentation, guides ad utilities.
|
This module contains utilities for the management of gCube CMS Suite instances, such as :
|
||||||
|
|
||||||
|
- Environment Checks
|
||||||
|
- Import / Export facilities
|
||||||
|
- WS Report features
|
||||||
|
- Stress test
|
||||||
|
- Collection removal
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
* [Dedicated Wiki](https://sublime-and-sphinx-guide.readthedocs.io) - TBD Powered by [Sphynx] (https://www.sphinx-doc.org/en/master/)
|
[gCube CMS Suite](../README.md) module containing references, documentation, guides ad utilities.
|
||||||
* [Service Interactive API]() -TBD 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/)
|
|
||||||
* [Service Wiki src] (use-cases/src/site/suite.rst)
|
|
||||||
|
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md).
|
See [CHANGELOG.md](CHANGELOG.md).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>use-cases</artifactId>
|
<artifactId>use-cases</artifactId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
<name>CMS Use cases</name>
|
<name>CMS Use cases</name>
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>gcube-cms-suite</artifactId>
|
<artifactId>gcube-cms-suite</artifactId>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<version>1.0.3</version>
|
<version>1.0.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,9 @@ public class ExportConcessioniAsProjects {
|
||||||
+ "[?(@.fileset)]");
|
+ "[?(@.fileset)]");
|
||||||
req.addAll(convertFiles(content));
|
req.addAll(convertFiles(content));
|
||||||
req.setAccess(getAccess(rel));
|
req.setAccess(getAccess(rel));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
project = client.registerFileSet(project.getId(),req.getTheRequest());
|
project = client.registerFileSet(project.getId(),req.getTheRequest());
|
||||||
}
|
}
|
||||||
// upload fileset
|
// upload fileset
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package org.gcube.application.cms.usecases;
|
||||||
|
|
||||||
|
import org.gcube.application.cms.tests.TokenSetter;
|
||||||
|
import org.gcube.application.geoportal.client.UseCaseDescriptors;
|
||||||
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
|
import org.gcube.application.geoportal.common.rest.Projects;
|
||||||
|
import org.gcube.application.geoportal.common.rest.UseCaseDescriptorsI;
|
||||||
|
import org.gcube.application.geoportal.common.utils.tests.GCubeTest;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.projects;
|
||||||
|
import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.useCaseDescriptors;
|
||||||
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
|
public class GenericChecks {
|
||||||
|
|
||||||
|
|
||||||
|
UseCaseDescriptorsI getClient(){
|
||||||
|
assumeTrue(GCubeTest.isTestInfrastructureEnabled());
|
||||||
|
TokenSetter.set(GCubeTest.getContext());
|
||||||
|
return useCaseDescriptors().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getAll() throws Exception {
|
||||||
|
|
||||||
|
UseCaseDescriptorsI client =getClient();
|
||||||
|
|
||||||
|
QueryRequest request = new QueryRequest();
|
||||||
|
// All
|
||||||
|
|
||||||
|
client.query(request).forEachRemaining(u -> {
|
||||||
|
try {
|
||||||
|
System.out.println("Obtained UCD "+u.getId());
|
||||||
|
|
||||||
|
client.getById(u.getId()).getId();
|
||||||
|
|
||||||
|
Projects pClient = (Projects)projects(u.getId()).build();
|
||||||
|
|
||||||
|
AtomicLong counter=new AtomicLong(0);
|
||||||
|
pClient.query(new QueryRequest()).forEachRemaining( M -> counter.incrementAndGet());
|
||||||
|
System.out.println("Found "+counter.get()+" elements");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace(System.err);
|
||||||
|
Assert.fail("Unable to check "+u.getId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue