diff --git a/cms-test-commons/CHANGELOG.md b/cms-test-commons/CHANGELOG.md
index 883bfa2..cf7ac00 100644
--- a/cms-test-commons/CHANGELOG.md
+++ b/cms-test-commons/CHANGELOG.md
@@ -1,6 +1,10 @@
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# Changelog for org.gcube.application.cms.cms-test-commons
+
+## [v1.0.2-SNAPSHOT] - 2022-01-17
+- Profiles
+
## [v1.0.1] - 2021-09-11
- Introduced profiled documents
diff --git a/cms-test-commons/pom.xml b/cms-test-commons/pom.xml
index eec1913..7c28195 100644
--- a/cms-test-commons/pom.xml
+++ b/cms-test-commons/pom.xml
@@ -5,7 +5,7 @@
4.0.0
cms-test-commons
- 1.0.1
+ 1.0.2-SNAPSHOT
CMS Test Commons
diff --git a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java
new file mode 100644
index 0000000..06cd1ce
--- /dev/null
+++ b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java
@@ -0,0 +1,30 @@
+package org.gcube.application.cms.tests;
+
+import org.gcube.application.cms.Serialization;
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
+import org.gcube.application.geoportal.common.model.profile.Profile;
+import org.gcube.application.geoportal.common.utils.Files;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+
+public class TestProfiles {
+
+
+ public static File BASE_FOLDER =new File("../test-data/profiledDocuments");
+ public static final HashMap profiles =new HashMap<>();
+
+ static{
+
+ for(File f:BASE_FOLDER.listFiles()){
+ try {
+ profiles.put(f.getName(), Serialization.read(
+ Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()),Profile.class));
+ } catch (IOException e) {
+ throw new RuntimeException("Unable to read "+f.getAbsolutePath(),e);
+ }
+ }
+ }
+}
diff --git a/geoportal-common/CHANGELOG.md b/geoportal-common/CHANGELOG.md
index 7e1739c..5112bea 100644
--- a/geoportal-common/CHANGELOG.md
+++ b/geoportal-common/CHANGELOG.md
@@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# [v1.0.9-SNAPSHOT] - 2022-01-17
- Minor fixes in model
+- Schema and jsonPath support
# [v1.0.8] - 2021-11-10
- Fixes [#22369](https://support.d4science.org/issues/22369)
diff --git a/geoportal-common/pom.xml b/geoportal-common/pom.xml
index 5467c49..fe2deb6 100644
--- a/geoportal-common/pom.xml
+++ b/geoportal-common/pom.xml
@@ -47,6 +47,12 @@
2.4.0
+
+ com.vdurmont
+ semver4j
+ 3.1.0
+
+
junit
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
index c4968d2..46d22df 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
@@ -1,6 +1,7 @@
package org.gcube.application.geoportal.common.model.document;
import com.mongodb.client.model.geojson.GeoJsonObjectType;
+import com.vdurmont.semver4j.Semver;
import lombok.*;
import org.bson.Document;
import org.bson.types.ObjectId;
@@ -27,14 +28,14 @@ public class ProfiledDocument {
// CORE METADATA
private String _id;
- private ComparableVersion version;
+ private Semver version;
// Publication Info
private PublicationInfo info;
// Profile reference
private String profileID;
- private ComparableVersion profileVersion;
+ private Semver profileVersion;
private LifecycleInformation lifecycleInformation;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java
index c48add5..82df14c 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java
@@ -14,10 +14,8 @@ public class PublicationInfo {
public static final String LAST_EDIT_INFO="lastEditInfo";
public static final String ACCESS = "access";
-
private AccountingInfo creationInfo;
private AccountingInfo lastEditInfo;
private Access access;
-
}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Field.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Field.java
new file mode 100644
index 0000000..98782c5
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Field.java
@@ -0,0 +1,36 @@
+package org.gcube.application.geoportal.common.model.profile;
+
+import org.bson.Document;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Field extends Document {
+
+ public static final String TYPE="_type";
+ public static final String CHILDREN="_children";
+ public static final String MAX_CARDINALITY="_max";
+ public static final String MIN_CARDINALITY="_min";
+
+
+ public String getType(){
+ return this.getString(TYPE);
+ };
+
+ public List getChildren(){
+ return this.get(CHILDREN,List.class);
+ }
+
+ public Integer getMaxCardinality(){
+ return (Integer) this.getOrDefault(MAX_CARDINALITY,1);
+ }
+
+ public Integer getMinCardinality(){
+ return (Integer) this.getOrDefault(MIN_CARDINALITY,0);
+ }
+ public Boolean isMandatory(){
+ return getMinCardinality()==0;
+ }
+
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/FieldMap.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/FieldMap.java
new file mode 100644
index 0000000..e5485d1
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/FieldMap.java
@@ -0,0 +1,13 @@
+package org.gcube.application.geoportal.common.model.profile;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+class FieldMap extends ArrayList {
+
+ public static class MapElement extends HashMap{
+
+ }
+
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
index c1f96bb..d60c130 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
@@ -7,6 +7,7 @@ import java.util.Map;
import javax.xml.bind.annotation.XmlRootElement;
+import com.vdurmont.semver4j.Semver;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -20,13 +21,13 @@ import org.gcube.application.geoportal.common.model.document.ComparableVersion;
public class Profile{
private String id;
- private ComparableVersion version;
+ private Semver version;
private String name;
private String description;
private AccountingInfo creationInfo;
- private Document schema;
+ private Field schema;
private List handlers;
@@ -43,4 +44,7 @@ public class Profile{
});
return toReturn;
}
+
+
+
}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
index 3b0cfdf..d90461e 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
@@ -1,11 +1,11 @@
package org.gcube.application.geoportal.common.utils;
-import com.jayway.jsonpath.Configuration;
-import com.jayway.jsonpath.DocumentContext;
-import com.jayway.jsonpath.JsonPath;
-import com.jayway.jsonpath.Option;
+import com.jayway.jsonpath.*;
import lombok.Getter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
public class JSONPathWrapper {
@@ -27,8 +27,39 @@ public class JSONPathWrapper {
}
public List