diff --git a/default-lc-managers/CHANGELOG.md b/default-lc-managers/CHANGELOG.md
index 79974f2..aa6639e 100644
--- a/default-lc-managers/CHANGELOG.md
+++ b/default-lc-managers/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog for org.gcube.application.cms.ckan-plugin
+## [v1.2.0-SNAPSHOT]
+
+- Integrated the field 'geov_link' (Geoportal GisViewer link) in the centroid layer [#24859]
+- Fixed Draft execution step executing dematerialization and de-indexing actions [#24877]
+
## [v1.1.1] - 2023-03-06
- [#24570] Integrated the UnPublish operation
diff --git a/default-lc-managers/pom.xml b/default-lc-managers/pom.xml
index 316429e..e51199c 100644
--- a/default-lc-managers/pom.xml
+++ b/default-lc-managers/pom.xml
@@ -5,7 +5,7 @@
4.0.0
default-lc-managers
- 1.1.1
+ 1.2.0-SNAPSHOT
gCube CMS - Default LC Managers
diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java
index 551e70f..5ea2117 100644
--- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java
+++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java
@@ -41,7 +41,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class AbstractLifeCycleManager extends AbstractPlugin implements LifecycleManager {
-
+
protected static class Events{
public static final OperationDescriptor INIT=new OperationDescriptor(EventExecutionRequest.Events.ON_INIT_DOCUMENT,"Sets defaults and validate");
public static final OperationDescriptor UPDATE=new OperationDescriptor(EventExecutionRequest.Events.ON_UPDATE_DOCUMENT,"Sets defaults and validate");
diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java
index 57a5179..5315e73 100644
--- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java
+++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java
@@ -29,7 +29,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Default3PhaseManager extends SimpleLifeCycleManager implements LifecycleManager {
- protected static class Phases {
+ protected static class Phases {
public static final String PENDING_APPROVAL="Pending Approval";
public static final String PUBLISHED=SimpleLifeCycleManager.Phases.PUBLISHED;
@@ -171,42 +171,69 @@ public class Default3PhaseManager extends SimpleLifeCycleManager implements Life
protected Document getInternalIndexParams(BaseRequest req){
Document callParameters = new Document();
- callParameters.put("workspace", Files.fixFilename(req.getUseCaseDescriptor().getId()+"_internal_"+req.getContext().getName()));
- callParameters.put("indexName",Files.fixFilename(req.getUseCaseDescriptor().getId()+"_internal_"+req.getContext().getName()+"_centroids"));
+ callParameters.put(IndexConstants.INDEX_PARAMETER_WORKSPACE, Files.fixFilename(req.getUseCaseDescriptor().getId()+"_internal_"+req.getContext().getName()));
+ callParameters.put(IndexConstants.INDEX_PARAMETER_INDEXNAME,Files.fixFilename(req.getUseCaseDescriptor().getId()+"_internal_"+req.getContext().getName()+"_centroids"));
+ //Added by Francesco
+ callParameters.put(IndexConstants.INDEX_PARAMETER_FLAGINTERNALINDEX, Boolean.TRUE);
return callParameters;
}
- protected StepExecutionReport executeSubmit(StepExecutionReport theReport) throws Exception {
- // Materialize
+ protected StepExecutionReport executeSubmit(StepExecutionReport theReport) throws Exception {
+ log.info(STEPS.SUBMIT + " running...");
- for(MaterializationPlugin mat : getMaterializers(theReport.getTheRequest()))
- theReport = materializeDocument(theReport,mat,getMaterializationParameters(theReport.getTheRequest()));
- if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)){
- // Index
- for(IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest()))
- theReport = index(theReport,indexer,getInternalIndexParams(theReport.getTheRequest()));
- // setPhase
- if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
- theReport.getToSetLifecycleInformation().setPhase(Phases.PENDING_APPROVAL);
- }
- return theReport;
- }
+ // Materialize
+ for (MaterializationPlugin mat : getMaterializers(theReport.getTheRequest()))
+ theReport = materializeDocument(theReport, mat, getMaterializationParameters(theReport.getTheRequest()));
+ if (theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) {
+ // Index
+ for (IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest()))
+ theReport = index(theReport, indexer, getInternalIndexParams(theReport.getTheRequest()));
+ // setPhase
+ if (theReport.getToSetLifecycleInformation().getLastOperationStatus()
+ .equals(LifecycleInformation.Status.OK))
+ theReport.getToSetLifecycleInformation().setPhase(Phases.PENDING_APPROVAL);
+ }
+ return theReport;
+ }
- protected StepExecutionReport executeApprove(StepExecutionReport theReport) throws Exception {
- // Index
- for(IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest()))
- theReport = index(theReport,indexer,getPublicIndexParams(theReport.getTheRequest()));
- // setPhase
- if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
- theReport.getToSetLifecycleInformation().setPhase(Phases.PUBLISHED);
- return theReport;
- }
+ protected StepExecutionReport executeApprove(StepExecutionReport theReport) throws Exception {
+ log.info(STEPS.APPROVE + " running...");
- protected StepExecutionReport executeReject(StepExecutionReport theReport) throws Exception {
- if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
- theReport.getToSetLifecycleInformation().setPhase(LifecycleInformation.CommonPhases.DRAFT_PHASE);
- return theReport;
- }
+ // Index
+ for (IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest()))
+ theReport = index(theReport, indexer, getPublicIndexParams(theReport.getTheRequest()));
+ // setPhase
+ if (theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
+ theReport.getToSetLifecycleInformation().setPhase(Phases.PUBLISHED);
+ return theReport;
+ }
+
+ //Updated by Francesco, see #24877
+ protected StepExecutionReport executeReject(StepExecutionReport theReport) throws Exception {
+ log.info(STEPS.REJECT + " running...");
+
+ // DeMaterialize
+ JSONPathWrapper wrapper = new JSONPathWrapper(theReport.getTheRequest().getDocument().getTheDocument().toJson());
+ for (String s : wrapper.getMatchingPaths("$..[?(@." + RegisteredFileSet.PAYLOADS + ")]")) {
+ log.info("Requesting dematerialization for {} ", s);
+ for (MaterializationPlugin mat : getMaterializers(theReport.getTheRequest()))
+ theReport = deMaterialize(theReport, mat, new Document("fileSetPath", s));
+ if (!theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
+ break;
+ }
+ // DeIndexing
+ if (theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) {
+ for (IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest())) {
+ log.info("Requesting deindexing for {} ", indexer.getDescriptor());
+ theReport = deIndex(theReport, indexer, getInternalIndexParams(theReport.getTheRequest()));
+ }
+ }
+
+ if (theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK))
+ theReport.getToSetLifecycleInformation().setPhase(LifecycleInformation.CommonPhases.DRAFT_PHASE);
+
+ return theReport;
+ }
}
diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/IndexConstants.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/IndexConstants.java
new file mode 100644
index 0000000..3855ac4
--- /dev/null
+++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/IndexConstants.java
@@ -0,0 +1,16 @@
+package org.gcube.application.cms.plugins.implementations;
+
+/**
+ * The Class IndexConstants.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Mar 29, 2023
+ */
+public class IndexConstants {
+
+ public static final String INDEX_PARAMETER_FLAGINTERNALINDEX = "flagInternalIndex";
+ public static final String INDEX_PARAMETER_INDEXNAME = "indexName";
+ public static final String INDEX_PARAMETER_WORKSPACE = "workspace";
+
+}
diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java
index f2beee8..de1833f 100644
--- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java
+++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java
@@ -93,8 +93,9 @@ public class SimpleLifeCycleManager extends AbstractLifeCycleManager implements
protected Document getPublicIndexParams(BaseRequest req){
Document callParameters = new Document();
- callParameters.put("workspace",Files.fixFilename(req.getUseCaseDescriptor().getId()+req.getContext().getName()));
- callParameters.put("indexName",Files.fixFilename(req.getUseCaseDescriptor().getId()+req.getContext().getName()+"_centroids"));
+ callParameters.put(IndexConstants.INDEX_PARAMETER_WORKSPACE,Files.fixFilename(req.getUseCaseDescriptor().getId()+req.getContext().getName()));
+ callParameters.put(IndexConstants.INDEX_PARAMETER_INDEXNAME,Files.fixFilename(req.getUseCaseDescriptor().getId()+req.getContext().getName()+"_centroids"));
+ callParameters.put(IndexConstants.INDEX_PARAMETER_FLAGINTERNALINDEX, Boolean.FALSE);
return callParameters;
}
diff --git a/geoportal-service/CHANGELOG.md b/geoportal-service/CHANGELOG.md
index a44d845..f91a6e3 100644
--- a/geoportal-service/CHANGELOG.md
+++ b/geoportal-service/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changelog for org.gcube.application.geoportal-service
+## [v1.0.14-SNAPSHOT]
+
+- Fixed deploying of multiple versions of the default-lc-managers [#24875]
## [v1.0.13] - 2023-02-23
- Integrating new facilities and bug fixing released in the Plugins
diff --git a/geoportal-service/pom.xml b/geoportal-service/pom.xml
index 4f5d02f..7ff7be0 100644
--- a/geoportal-service/pom.xml
+++ b/geoportal-service/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.gcube.application
geoportal-service
- 1.0.13
+ 1.0.14-SNAPSHOT
Geoportal Service
war
@@ -21,16 +21,12 @@
${project.basedir}${file.separator}${project.artifactId}${file.separator}src${file.separator}main${file.separator}webapp${file.separator}WEB-INF
-
-
scm:git:${gitBaseUrl}/gcube-cms-suite
scm:git:${gitBaseUrl}/gcube-cms-suite
${gitBaseUrl}/gcube-cms-suite
-
-
@@ -94,7 +90,6 @@
-
com.webcohesion.enunciate
@@ -173,7 +168,7 @@
-
+
kr.motd.maven
sphinx-maven-plugin
diff --git a/sdi-plugins/CHANGELOG.md b/sdi-plugins/CHANGELOG.md
index c6f8674..9c1b001 100644
--- a/sdi-plugins/CHANGELOG.md
+++ b/sdi-plugins/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog for org.gcube.application.cms.sdi-plugins
+## [v1.1.0-SNAPSHOT]
+
+- Integrated the field 'geov_link' (Geoportal GisViewer link) in the centroid layer [#24859]
+
## [v1.0.4] - 2023-03-06
- Fixed the import from joda-time to java.time
- [#24702] Fixed the default-lc-managers dependency
diff --git a/sdi-plugins/pom.xml b/sdi-plugins/pom.xml
index 651cbf0..d16c89b 100644
--- a/sdi-plugins/pom.xml
+++ b/sdi-plugins/pom.xml
@@ -5,7 +5,7 @@
4.0.0
sdi-plugins
- 1.0.4
+ 1.1.0-SNAPSHOT
gCube CMS - SDI Plugins
@@ -85,12 +85,19 @@
1.14
+
+ org.gcube.portlets.user
+ uri-resolver-manager
+ [1.0.0,2.0.0-SNAPSHOT)
+
+
org.gcube.application.cms
cms-test-commons
test
+
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java
index 381d259..d79f5f0 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java
@@ -2,7 +2,9 @@ package org.gcube.application.cms.sdi.engine;
import java.util.ArrayList;
-import static org.gcube.application.cms.sdi.engine.PostgisTable.*;
+import org.gcube.application.cms.sdi.engine.PostgisTable.Field;
+import org.gcube.application.cms.sdi.engine.PostgisTable.FieldType;
+import org.gcube.application.cms.sdi.engine.PostgisTable.GeometryType;
public class DBConstants {
@@ -18,6 +20,8 @@ public class DBConstants {
public static final String PROJECT_ID="projectid";
public static final String DISPLAYED="displayed_project";
+
+ public static final String GEOVIEWER_LINK_FIELD="geov_link";
public static final String XCOORD_FIELD="xcoord";
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java
index 43fe74c..5c12f51 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java
@@ -1,9 +1,5 @@
package org.gcube.application.cms.sdi.engine;
-import lombok.extern.slf4j.Slf4j;
-import org.gcube.application.cms.sdi.faults.DataParsingException;
-import org.gcube.application.geoportal.common.model.legacy.BBOX;
-
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -11,6 +7,11 @@ import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.gcube.application.cms.sdi.faults.DataParsingException;
+import org.gcube.application.geoportal.common.model.legacy.BBOX;
+
+import lombok.extern.slf4j.Slf4j;
+
@Slf4j
public class PostgisDBManager implements PostgisDBManagerI {
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java
index 035a199..da0a1d4 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java
@@ -1,16 +1,5 @@
package org.gcube.application.cms.sdi.engine;
-import lombok.NonNull;
-import lombok.extern.slf4j.Slf4j;
-import org.bson.Document;
-import org.gcube.application.cms.sdi.faults.SDIInteractionException;
-import org.gcube.application.cms.sdi.model.CrossReferencedLayer;
-import org.gcube.application.cms.sdi.plugins.SDIIndexerPlugin;
-import org.gcube.application.geoportal.common.model.configuration.Index;
-import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
-import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
-import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
-
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -18,6 +7,17 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import org.bson.Document;
+import org.gcube.application.cms.sdi.faults.SDIInteractionException;
+import org.gcube.application.cms.sdi.model.CrossReferencedLayer;
+import org.gcube.application.geoportal.common.model.configuration.Index;
+import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
+import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
+import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
+
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+
@Slf4j
public class PostgisIndexer {
@@ -39,8 +39,8 @@ public class PostgisIndexer {
public static class StandardFields{
public static final PostgisTable.Field PROJECT_ID= new PostgisTable.Field(DBConstants.Defaults.PROJECT_ID, PostgisTable.FieldType.TEXT);
public static final PostgisTable.Field GEOM= new PostgisTable.Field(DBConstants.Defaults.DEFAULT_GEOMETRY_COLUMN_NAME, PostgisTable.FieldType.GEOMETRY);
-
public static final PostgisTable.Field DISPLAY=new PostgisTable.Field(DBConstants.Defaults.DISPLAYED,PostgisTable.FieldType.BOOLEAN);
+ public static final PostgisTable.Field GEOV_LINK=new PostgisTable.Field(DBConstants.Defaults.GEOVIEWER_LINK_FIELD,PostgisTable.FieldType.TEXT);
}
@@ -85,10 +85,10 @@ public class PostgisIndexer {
tableFields.add(StandardFields.GEOM);
tableFields.add(StandardFields.PROJECT_ID);
tableFields.add(StandardFields.DISPLAY);
+ tableFields.add(StandardFields.GEOV_LINK);
tableFields.addAll(customFields);
-
table = new PostgisTable(indexName,tableFields, PostgisTable.GeometryType.POINT);
log.trace("Index Postgis Table is {} ",table);
log.debug("Create if missing..");
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java
index fd20a07..5d8d2c1 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java
@@ -1,20 +1,29 @@
package org.gcube.application.cms.sdi.engine;
-import lombok.*;
-import lombok.extern.slf4j.Slf4j;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.gcube.application.cms.sdi.faults.DataParsingException;
import org.gcube.application.cms.sdi.model.MappingObject;
import org.gcube.application.geoportal.common.model.legacy.BBOX;
-import java.sql.Array;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequiredArgsConstructor
@@ -22,315 +31,314 @@ import java.util.regex.Pattern;
@ToString
public class PostgisTable {
+ @Getter
+ @AllArgsConstructor
+ public static enum GeometryType {
+ MULTIPOINT("4326", "geometry (MULTIPOINT,4326)", "", ""), POINT("4326", "geometry (POINT,4326)", "", ""),
+ LINE("4326", "geometry (MULTILINESTRING,4326)", "", ""),
+ POLYGON("4326", "geometry (MULTIPOLYGON,4326)", "", "");
- @Getter
- @AllArgsConstructor
- public static enum GeometryType{
- MULTIPOINT("4326","geometry (MULTIPOINT,4326)","",""),
- POINT("4326","geometry (POINT,4326)","",""),
- LINE("4326","geometry (MULTILINESTRING,4326)","",""),
- POLYGON("4326","geometry (MULTIPOLYGON,4326)","","");
- private final String SRID;
- private final String definition;
- private final String InsertWKT;
- private final String insertWKB;
+ private final String SRID;
+ private final String definition;
+ private final String InsertWKT;
+ private final String insertWKB;
+ }
- }
+ @RequiredArgsConstructor
+ @Getter
+ @Setter
+ @ToString
+ public static class Field {
+ @NonNull
+ private String name;
+ @NonNull
+ private FieldType type;
+ private Boolean isIndexed;
+ private Object constantValue;
- @RequiredArgsConstructor
- @Getter
- @Setter
- @ToString
- public static class Field{
- @NonNull
- private String name;
- @NonNull
- private FieldType type;
- private Boolean isIndexed;
- private Object constantValue;
+ public static final Field fromMapping(MappingObject m) {
+ return new PostgisTable.Field(m.getName(), PostgisTable.FieldType.valueOf(m.getType()));
+ }
- public static final Field fromMapping(MappingObject m){
- return new PostgisTable.Field(m.getName(), PostgisTable.FieldType.valueOf(m.getType()));
- }
+ public static final List fromMappings(Collection coll) {
+ ArrayList toReturn = new ArrayList<>();
+ if (coll != null)
+ coll.forEach(m -> toReturn.add(fromMapping(m)));
+ return toReturn;
+ }
+ }
- public static final List fromMappings (Collection coll){
- ArrayList toReturn = new ArrayList<>();
- if(coll!=null)
- coll.forEach(m -> toReturn.add(fromMapping(m)));
- return toReturn;
- }
- }
+ @Getter
+ @AllArgsConstructor
+ public enum FieldType {
+ INT("int", java.sql.Types.INTEGER), BOOLEAN("boolean", java.sql.Types.BOOLEAN),
+ TEXT("text", java.sql.Types.LONGVARCHAR), FLOAT("float", java.sql.Types.FLOAT), GEOMETRY("", 0),
+ AUTOINCREMENT("BIGSERIAL PRIMARY KEY", java.sql.Types.BIGINT);
- @Getter
- @AllArgsConstructor
- public enum FieldType{
- INT("int",java.sql.Types.INTEGER),
- BOOLEAN("boolean", java.sql.Types.BOOLEAN),
- TEXT("text",java.sql.Types.LONGVARCHAR),
- FLOAT("float",java.sql.Types.FLOAT),
- GEOMETRY("",0),
- AUTOINCREMENT("BIGSERIAL PRIMARY KEY",java.sql.Types.BIGINT);
+ private String definition;
+ private int sqlType;
+ }
- private String definition;
- private int sqlType;
- }
+ @RequiredArgsConstructor
+ @Getter
+ @ToString
+ public static class POINT {
+ private static Pattern pattern = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)");
- @RequiredArgsConstructor
- @Getter
- @ToString
- public static class POINT{
+ public static POINT parsePOINT(String point) throws DataParsingException {
+ // POINT(8.30230113965909 44.8011688237011)
+ // x,y
+ try {
+ log.debug("Parsing POINT " + point);
+ Matcher m = pattern.matcher(point);
- private static Pattern pattern = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)");
+ if (!m.find())
+ throw new DataParsingException("Unable to get x ");
+ Double x = Double.parseDouble(m.group(1));
- public static POINT parsePOINT(String point) throws DataParsingException {
- //POINT(8.30230113965909 44.8011688237011)
- // x,y
- try {
- log.debug("Parsing POINT "+point);
- Matcher m=pattern.matcher(point);
+ if (!m.find())
+ throw new DataParsingException("Unable to get y ");
+ Double y = Double.parseDouble(m.group(1));
- if(!m.find()) throw new DataParsingException("Unable to get x ");
- Double x=Double.parseDouble(m.group(1));
+ return new POINT(x, y);
+ } catch (Throwable t) {
+ throw new DataParsingException("Invalid POINT " + point, t);
+ }
+ }
- if(!m.find()) throw new DataParsingException("Unable to get y ");
- Double y=Double.parseDouble(m.group(1));
+ @NonNull
+ private Double x;
+ @NonNull
+ private Double y;
- return new POINT(x,y);
- }catch(Throwable t) {
- throw new DataParsingException("Invalid POINT "+point,t);
- }
- }
+ }
- @NonNull
- private Double x;
- @NonNull
- private Double y;
+ private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US);
- }
+ static {
+ ((DecimalFormat) DECIMAL_FORMAT).setGroupingUsed(false);
+ }
+ public String getGeometryColumn() {
+ for (Field f : fields)
+ if (f.getType().equals(FieldType.GEOMETRY))
+ return f.getName();
+ return null;
+ }
- private static final NumberFormat DECIMAL_FORMAT=NumberFormat.getInstance(Locale.US);
+ @NonNull
+ private String tablename;
- static {
- ((DecimalFormat) DECIMAL_FORMAT).setGroupingUsed(false);
- }
+ @NonNull
+ private List fields;
+ @NonNull
+ private GeometryType geometryColumnType;
- public String getGeometryColumn() {
- for(Field f:fields)
- if(f.getType().equals(FieldType.GEOMETRY)) return f.getName();
- return null;
- }
+ @Setter
+ private BBOX boundingBox = null;
- @NonNull
- private String tablename;
+ @Setter
+ private POINT centroid = null;
- @NonNull
- private List fields;
+ public void setTablename(String tablename) {
+ this.tablename = sanitizeFieldName(tablename);
+ }
+ public String getCreateStatement() {
+ StringBuilder stmt = new StringBuilder();
+ stmt.append("CREATE TABLE IF NOT EXISTS " + tablename + "( ");
+ for (Field field : fields) {
- @NonNull
- private GeometryType geometryColumnType;
+ String fieldDefinition = field.getType().getDefinition();
+ if (field.getType().equals(FieldType.GEOMETRY))
+ fieldDefinition = this.getGeometryColumnType().definition;
- @Setter
- private BBOX boundingBox=null;
+ stmt.append(field.getName() + " " + fieldDefinition + ",");
+ }
+ stmt.deleteCharAt(stmt.lastIndexOf(","));
+ stmt.append(")");
+ return stmt.toString();
+ }
- @Setter
- private POINT centroid=null;
+ public String getDeleteByFieldStatement(Field field) {
+ return "DELETE FROM " + tablename + " WHERE " + field.getName() + " = ? ";
+ }
- public void setTablename(String tablename) {
- this.tablename = sanitizeFieldName(tablename);
- }
+ public String getInsertionStatement(boolean geometryText) {
+ StringBuilder fieldList = new StringBuilder();
+ StringBuilder fieldInsertion = new StringBuilder();
- public String getCreateStatement() {
- StringBuilder stmt=new StringBuilder();
- stmt.append("CREATE TABLE IF NOT EXISTS "+tablename+"( ");
- for(Field field:fields){
+ for (Field field : fields) {
+ switch (field.getType()) {
+ case AUTOINCREMENT:
+ break;
+ case GEOMETRY: {
+ fieldList.append(field.getName() + ",");
+ if (geometryText)
+ fieldInsertion.append("ST_GeomFromText(?, 4326),");
+ else
+ fieldInsertion.append("ST_GeomFromWKB(?, 4326),");
+ break;
+ }
+ default: {
+ fieldList.append(field.getName() + ",");
+ fieldInsertion.append("?,");
+ }
+ }
+ }
- String fieldDefinition=field.getType().getDefinition();
- if(field.getType().equals(FieldType.GEOMETRY))
- fieldDefinition=this.getGeometryColumnType().definition;
+ fieldList.deleteCharAt(fieldList.lastIndexOf(","));
+ fieldInsertion.deleteCharAt(fieldInsertion.lastIndexOf(","));
- stmt.append(field.getName()+" "+fieldDefinition+",");
- }
- stmt.deleteCharAt(stmt.lastIndexOf(","));
- stmt.append(")");
- return stmt.toString();
- }
+ return "Insert into " + tablename + " (" + fieldList + ") VALUES (" + fieldInsertion + ")";
+ }
- public String getDeleteByFieldStatement(Field field) {
- return "DELETE FROM "+tablename+" WHERE "+field.getName()+" = ? ";
- }
+ public void fillObjectsPreparedStatement(Map row, PreparedStatement toFill) throws SQLException {
+ int psFieldIndex = 0;
+ HashMap rowValues = new HashMap();
+ for (Map.Entry entry : row.entrySet())
+ rowValues.put(sanitizeFieldName(entry.getKey()), entry.getValue());
+ for (Field field : fields) {
+ if (!field.getType().equals(FieldType.AUTOINCREMENT)) {
+ psFieldIndex++;
- public String getInsertionStatement(boolean geometryText) {
- StringBuilder fieldList=new StringBuilder();
- StringBuilder fieldInsertion=new StringBuilder();
+ Object value = rowValues.get(field.getName());
+ setObjectInPreparedStatement(field, value, toFill, psFieldIndex);
- for(Field field:fields) {
- switch(field.getType()) {
- case AUTOINCREMENT : break;
- case GEOMETRY : {
- fieldList.append(field.getName()+",");
- if(geometryText)
- fieldInsertion.append("ST_GeomFromText(?, 4326),");
- else
- fieldInsertion.append("ST_GeomFromWKB(?, 4326),");
- break;
- }
- default : {
- fieldList.append(field.getName()+",");
- fieldInsertion.append("?,");
- }
- }
- }
+ }
- fieldList.deleteCharAt(fieldList.lastIndexOf(","));
- fieldInsertion.deleteCharAt(fieldInsertion.lastIndexOf(","));
+ }
+ }
+ public void setObjectInPreparedStatement(Field field, Object value, PreparedStatement toFill, int psFieldIndex)
+ throws SQLException {
+ if (value == null) {
+ try {
+ toFill.setNull(psFieldIndex, field.getType().sqlType);
+ } catch (SQLException e) {
+ log.error("Unable to set null for field " + field);
+ throw e;
+ }
+ } else {
+ switch (field.getType()) {
+ case FLOAT: {
+ toFill.setFloat(psFieldIndex, (Float) value);
+ break;
+ }
+ case INT: {
+ toFill.setInt(psFieldIndex, (Integer) value);
+ break;
+ }
+ case TEXT: {
+ toFill.setString(psFieldIndex, value.toString());
+ break;
+ }
+ case GEOMETRY: {
+ if (value instanceof String)
+ toFill.setString(psFieldIndex, ((String) value));
+ else
+ toFill.setBytes(psFieldIndex, (byte[]) value);
+ break;
+ }
+ case BOOLEAN: {
+ if (value instanceof String)
+ toFill.setBoolean(psFieldIndex, Boolean.parseBoolean(value.toString()));
+ if (value instanceof Boolean)
+ toFill.setBoolean(psFieldIndex, (Boolean) value);
+ break;
+ }
+ // Added by Francesco
+ default: {
+ if (value instanceof String) {
+ toFill.setString(psFieldIndex, ((String) value));
+ } else {
+ try {
+ String toStringValue = value.toString();
+ toFill.setString(psFieldIndex, toStringValue);
+ } catch (Exception e) {
+ // silence
+ }
+ }
+ }
+ }
+ }
+ }
- return "Insert into "+tablename+" ("+fieldList+") VALUES ("+fieldInsertion+")";
- }
+ public void fillCSVPreparedStatament(Map row, PreparedStatement toFill, boolean explicitGeometry)
+ throws SQLException {
+ int psFieldIndex = 0;
+ HashMap rowValues = new HashMap();
+ for (Map.Entry entry : row.entrySet())
+ rowValues.put(sanitizeFieldName(entry.getKey()), entry.getValue());
- public void fillObjectsPreparedStatement(Map row, PreparedStatement toFill) throws SQLException {
- int psFieldIndex=0;
- HashMap rowValues=new HashMap();
- for(Map.Entry entry:row.entrySet())
- rowValues.put(sanitizeFieldName(entry.getKey()), entry.getValue());
+ for (Field field : fields) {
+ if (!field.getType().equals(FieldType.AUTOINCREMENT)) {
+ psFieldIndex++;
- for(Field field:fields) {
- if(!field.getType().equals(FieldType.AUTOINCREMENT)) {
- psFieldIndex++;
-
- Object value=rowValues.get(field.getName());
- setObjectInPreparedStatement(field,value,toFill,psFieldIndex);
-
- }
-
-
- }
- }
-
-
- public void setObjectInPreparedStatement(Field field,Object value, PreparedStatement toFill, int psFieldIndex) throws SQLException {
- if(value==null) {
- try{
- toFill.setNull(psFieldIndex, field.getType().sqlType);
- }catch(SQLException e) {
- log.error("Unable to set null for field "+field);
- throw e;
- }
- }
- else
- switch(field.getType()) {
- case FLOAT :{
- toFill.setFloat(psFieldIndex, (Float)value);
- break;
- }
- case INT : {
- toFill.setInt(psFieldIndex, (Integer)value);
- break;
- }
- case TEXT : {
- toFill.setString(psFieldIndex, value.toString());
- break;
- }
- case GEOMETRY : {
- if(value instanceof String)
- toFill.setString(psFieldIndex, ((String) value));
- else toFill.setBytes(psFieldIndex, (byte[])value);
- break;
- }
- case BOOLEAN: {
- if(value instanceof String)
- toFill.setBoolean(psFieldIndex,Boolean.parseBoolean(value.toString()));
- if(value instanceof Boolean)
- toFill.setBoolean(psFieldIndex,(Boolean) value);
- break;
- }
- }
- }
-
- public void fillCSVPreparedStatament(Map row, PreparedStatement toFill,boolean explicitGeometry) throws SQLException {
- int psFieldIndex=0;
-
- HashMap rowValues=new HashMap();
- for(Map.Entry entry:row.entrySet())
- rowValues.put(sanitizeFieldName(entry.getKey()), entry.getValue());
-
- for(Field field:fields) {
-
-
- if(!field.getType().equals(FieldType.AUTOINCREMENT)) {
- psFieldIndex++;
-
- String value=rowValues.get(field.getName());
+ String value = rowValues.get(field.getName());
// if(value==null||value.equalsIgnoreCase("null")) toFill.setNull(psFieldIndex, field.getType().sqlType);
// else
- switch(field.getType()) {
- case FLOAT :{
- try{
- toFill.setFloat(psFieldIndex, Float.parseFloat(value));
- }catch(NumberFormatException e) {
- throw new SQLException(field+" cannot be null. CSV Row is "+rowValues,e);
- }
- break;
- }
- case INT : {
- try{
- toFill.setInt(psFieldIndex, Integer.parseInt(value));
- }catch(NumberFormatException e) {
- log.warn("Skipping value for "+field+" row was "+rowValues,e);
- toFill.setNull(psFieldIndex, java.sql.Types.INTEGER);
- }
- break;
- }
- case TEXT : {
- toFill.setString(psFieldIndex, value.toString());
- break;
- }
- case GEOMETRY : {
- if(explicitGeometry) {
- toFill.setString(psFieldIndex,value);
- }else {
- switch(geometryColumnType){
- case POINT: {
- String xRepresentation=DECIMAL_FORMAT.format(Double.parseDouble(rowValues.get(DBConstants.Defaults.XCOORD_FIELD)));
- String yRepresentation=DECIMAL_FORMAT.format(Double.parseDouble(rowValues.get(DBConstants.Defaults.YCOORD_FIELD)));
+ switch (field.getType()) {
+ case FLOAT: {
+ try {
+ toFill.setFloat(psFieldIndex, Float.parseFloat(value));
+ } catch (NumberFormatException e) {
+ throw new SQLException(field + " cannot be null. CSV Row is " + rowValues, e);
+ }
+ break;
+ }
+ case INT: {
+ try {
+ toFill.setInt(psFieldIndex, Integer.parseInt(value));
+ } catch (NumberFormatException e) {
+ log.warn("Skipping value for " + field + " row was " + rowValues, e);
+ toFill.setNull(psFieldIndex, java.sql.Types.INTEGER);
+ }
+ break;
+ }
+ case TEXT: {
+ toFill.setString(psFieldIndex, value.toString());
+ break;
+ }
+ case GEOMETRY: {
+ if (explicitGeometry) {
+ toFill.setString(psFieldIndex, value);
+ } else {
+ switch (geometryColumnType) {
+ case POINT: {
+ String xRepresentation = DECIMAL_FORMAT
+ .format(Double.parseDouble(rowValues.get(DBConstants.Defaults.XCOORD_FIELD)));
+ String yRepresentation = DECIMAL_FORMAT
+ .format(Double.parseDouble(rowValues.get(DBConstants.Defaults.YCOORD_FIELD)));
- toFill.setString(psFieldIndex, "POINT("+xRepresentation+" "+
- yRepresentation+")");
- break;
- }
- default :{
- toFill.setString(psFieldIndex,rowValues.get("wkt"));
- break;
- }
- }
- }
- break;
- }
- }
- }
+ toFill.setString(psFieldIndex, "POINT(" + xRepresentation + " " + yRepresentation + ")");
+ break;
+ }
+ default: {
+ toFill.setString(psFieldIndex, rowValues.get("wkt"));
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
-
-
- }
- }
-
- public static String sanitizeFieldName(String fieldName) {
+ public static String sanitizeFieldName(String fieldName) {
// return fieldName.toLowerCase().replaceAll(" ", "_").replaceAll("\\.", "").replaceAll("-", "_").replaceAll("////","_");
- return fieldName.toLowerCase().replaceAll("[^a-z0-9_\\\\]", "_");
- }
-
-
-
+ return fieldName.toLowerCase().replaceAll("[^a-z0-9_\\\\]", "_");
+ }
}
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java
index 62a4228..6b35b8a 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java
@@ -1,21 +1,22 @@
package org.gcube.application.cms.sdi.engine;
-import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-import org.gcube.application.cms.sdi.faults.SDIInteractionException;
-import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
-import org.gcube.data.transfer.library.DataTransferClient;
-import org.gcube.spatial.data.gis.GISInterface;
-import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
-
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.gcube.application.cms.sdi.faults.SDIInteractionException;
+import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
+import org.gcube.data.transfer.library.DataTransferClient;
+import org.gcube.spatial.data.gis.GISInterface;
+import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
+
+import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
@Slf4j
public class SDIManager {
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java
index d8460ec..86f974f 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java
@@ -1,13 +1,15 @@
package org.gcube.application.cms.sdi.engine;
-import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
-import it.geosolutions.geoserver.rest.GeoServerRESTReader;
-import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
-import it.geosolutions.geoserver.rest.decoder.RESTLayer;
-import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
-import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder;
-import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
-import lombok.extern.slf4j.Slf4j;
+import static it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy.REPROJECT_TO_DECLARED;
+import static org.gcube.application.cms.sdi.model.GCubeSDILayerBuilder.EPSG_4326;
+import static org.gcube.application.cms.sdi.model.GCubeSDILayerBuilder.WGS84_FULL;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
import org.bson.Document;
import org.gcube.application.cms.plugins.requests.BaseExecutionRequest;
import org.gcube.application.cms.sdi.faults.SDIInteractionException;
@@ -21,23 +23,25 @@ import org.gcube.application.geoportal.common.model.document.filesets.sdi.GeoSer
import org.gcube.application.geoportal.common.model.document.filesets.sdi.PlatformInfo;
import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
import org.gcube.application.geoportal.common.utils.Files;
-import org.gcube.data.transfer.library.DataTransferClient;
import org.gcube.data.transfer.library.TransferResult;
import org.gcube.data.transfer.library.client.Client;
-import org.gcube.data.transfer.library.faults.*;
+import org.gcube.data.transfer.library.faults.DestinationNotSetException;
+import org.gcube.data.transfer.library.faults.FailedTransferException;
+import org.gcube.data.transfer.library.faults.InitializationException;
+import org.gcube.data.transfer.library.faults.InvalidDestinationException;
+import org.gcube.data.transfer.library.faults.InvalidSourceException;
+import org.gcube.data.transfer.library.faults.SourceNotSetException;
import org.gcube.data.transfer.model.Destination;
import org.gcube.data.transfer.model.DestinationClashPolicy;
import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-import static it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy.REPROJECT_TO_DECLARED;
-import static org.gcube.application.cms.sdi.model.GCubeSDILayerBuilder.EPSG_4326;
-import static org.gcube.application.cms.sdi.model.GCubeSDILayerBuilder.WGS84_FULL;
+import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
+import it.geosolutions.geoserver.rest.GeoServerRESTReader;
+import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
+import it.geosolutions.geoserver.rest.decoder.RESTLayer;
+import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
+import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SDIManagerWrapper extends SDIManager{
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java
index efb037c..1d9f77a 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXByCoordinatePaths.java
@@ -1,15 +1,16 @@
package org.gcube.application.cms.sdi.engine.bboxes;
-import lombok.Data;
-import lombok.ToString;
-import lombok.extern.slf4j.Slf4j;
+import java.util.List;
+
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
-import java.util.List;
+import lombok.Data;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BBOXByCoordinatePaths extends BBOXEvaluator{
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXEvaluator.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXEvaluator.java
index bdc8d0f..b0a1f48 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXEvaluator.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXEvaluator.java
@@ -1,13 +1,14 @@
package org.gcube.application.cms.sdi.engine.bboxes;
+import org.bson.Document;
+import org.gcube.application.geoportal.common.model.JSONPathWrapper;
+import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
+import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
+
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.JSONPathWrapper;
-import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
-import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
@RequiredArgsConstructor
@ToString
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXPathScanner.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXPathScanner.java
index ef92b9c..005d366 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXPathScanner.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/bboxes/BBOXPathScanner.java
@@ -1,13 +1,14 @@
package org.gcube.application.cms.sdi.engine.bboxes;
-import lombok.extern.slf4j.Slf4j;
+import java.util.List;
+
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
-import java.util.List;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BBOXPathScanner extends BBOXEvaluator{
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/GCubeSDILayerBuilder.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/GCubeSDILayerBuilder.java
index 17f6161..7d33da5 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/GCubeSDILayerBuilder.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/GCubeSDILayerBuilder.java
@@ -1,16 +1,17 @@
package org.gcube.application.cms.sdi.model;
-import lombok.Getter;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
-import org.gcube.application.geoportal.common.model.document.filesets.sdi.GeoServerPlatform;
-import org.gcube.application.geoportal.common.model.document.filesets.sdi.PlatformInfo;
-
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.bson.Document;
+import org.gcube.application.geoportal.common.model.document.filesets.sdi.GCubeSDILayer;
+import org.gcube.application.geoportal.common.model.document.filesets.sdi.GeoServerPlatform;
+import org.gcube.application.geoportal.common.model.document.filesets.sdi.PlatformInfo;
+
+import lombok.Getter;
+
public class GCubeSDILayerBuilder {
public static enum OGC_TYPE{
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/MappingObject.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/MappingObject.java
index 01b2e28..6d39512 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/MappingObject.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/MappingObject.java
@@ -1,15 +1,16 @@
package org.gcube.application.cms.sdi.model;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
+import java.util.ArrayList;
+import java.util.List;
+
import org.bson.Document;
import org.gcube.application.cms.plugins.faults.InvalidProfileException;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
-import java.util.ArrayList;
-import java.util.List;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
@Data
@Slf4j
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java
index 3374a56..f2bb385 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java
@@ -1,10 +1,10 @@
package org.gcube.application.cms.sdi.model;
-import org.bson.Document;
-
import java.util.HashMap;
import java.util.Map;
+import org.bson.Document;
+
public class SDIConfiguration {
public static final String GEOSERVER_PLATFORM="GeoServer";
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SupportedFormat.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SupportedFormat.java
index 0015174..f60a7b4 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SupportedFormat.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SupportedFormat.java
@@ -1,11 +1,12 @@
package org.gcube.application.cms.sdi.model;
+import java.util.ArrayList;
+
+import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFile;
+
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
-import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFile;
-
-import java.util.ArrayList;
@Getter
@RequiredArgsConstructor
public abstract class SupportedFormat {
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java
index 00c6c1d..2a3aa34 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java
@@ -1,7 +1,8 @@
package org.gcube.application.cms.sdi.plugins;
-import lombok.Synchronized;
-import lombok.extern.slf4j.Slf4j;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+
import org.gcube.application.cms.caches.AbstractScopedMap;
import org.gcube.application.cms.implementations.ISInterface;
import org.gcube.application.cms.implementations.ImplementationProvider;
@@ -16,8 +17,8 @@ import org.gcube.application.cms.sdi.engine.SDIManagerWrapper;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.rest.DatabaseConnection;
-import java.time.Duration;
-import java.time.temporal.ChronoUnit;
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class SDIAbstractPlugin extends AbstractPlugin implements InitializablePlugin {
diff --git a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java
index 8987e04..98ad5c5 100644
--- a/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java
+++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java
@@ -1,13 +1,18 @@
package org.gcube.application.cms.sdi.plugins;
-import com.vdurmont.semver4j.Semver;
-import lombok.extern.slf4j.Slf4j;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
import org.bson.Document;
import org.gcube.application.cms.plugins.IndexerPluginInterface;
import org.gcube.application.cms.plugins.faults.IndexingException;
import org.gcube.application.cms.plugins.faults.InitializationException;
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
import org.gcube.application.cms.plugins.faults.InvalidProfileException;
+import org.gcube.application.cms.plugins.implementations.IndexConstants;
import org.gcube.application.cms.plugins.reports.IndexDocumentReport;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.cms.plugins.reports.Report;
@@ -33,292 +38,303 @@ import org.gcube.application.geoportal.common.model.plugins.IndexerPluginDescrip
import org.gcube.application.geoportal.common.model.plugins.PluginDescriptor;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor;
+import org.gcube.portlets.user.uriresolvermanager.UriResolverManager;
+import org.gcube.portlets.user.uriresolvermanager.resolvers.query.GeoportalResolverQueryStringBuilder;
+import org.gcube.portlets.user.uriresolvermanager.resolvers.query.GeoportalResolverQueryStringBuilder.RESOLVE_AS;
import org.geojson.Crs;
import org.geojson.GeoJsonObject;
import org.geojson.LngLatAlt;
import org.geojson.Point;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import com.vdurmont.semver4j.Semver;
+
+import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPluginInterface {
-
- static final PluginDescriptor DESCRIPTOR=new PluginDescriptor(Constants.INDEXER_PLUGIN_ID,
- IndexerPluginDescriptor.INDEXER);
-
-
-
-
- static final ArrayList BBOX_EVALUATORS=new ArrayList<>();
-
- static {
- DESCRIPTOR.setDescription("SDI Indexer. " +
- "Manage Centroids layers.");
- DESCRIPTOR.setVersion(new Semver("1.0.0"));
-
- BBOX_EVALUATORS.add(new BBOXPathScanner());
- BBOX_EVALUATORS.add(new BBOXByCoordinatePaths());
-
-
-
- }
-
- @Override
- public PluginDescriptor getDescriptor() {
- return DESCRIPTOR;
- }
-
-
- @Override
- public InitializationReport initInContext() throws InitializationException {
- InitializationReport report = new InitializationReport();
- report.setStatus(Report.Status.OK);
- return report;
- }
-
- /**
- * Expected parameters :
- * - indexName (unique)
- * - workspace
- * - centroidRecord (OPT)
- *
- * @param request
- * @return
- */
-
- @Override
- public IndexDocumentReport index(IndexDocumentRequest request) throws InvalidPluginRequestException {
-
- log.info("Indexer {} : Serving Index Request {} ",this.getDescriptor().getId(),request);
-
- Project project =request.getDocument();
- UseCaseDescriptor useCaseDescriptor = request.getUseCaseDescriptor();
- Document requestArguments=request.getCallParameters();
-
- IndexDocumentReport report= new IndexDocumentReport(request);
-
-
-
- try{
- // ********* INIT INDEX
- // TODO CACHE
- PostgisIndexer indexer = getIndexer(useCaseDescriptor,requestArguments);
-
- Document profileConfiguration =getConfigurationFromProfile(useCaseDescriptor).getConfiguration();
- log.debug("UseCaseDescriptor Configuration is {} ",profileConfiguration);
-
-
- // ************* PREPARE RECORD
-
-
- JSONPathWrapper documentNavigator=new JSONPathWrapper(Serialization.write(project));
-
- Document centroidDoc = new Document();
- if(requestArguments.containsKey("centroidRecord"))
- centroidDoc.putAll(requestArguments.get("centroidRecords",Document.class));
- // DEFAULT VALUES
- centroidDoc.put(DBConstants.Defaults.PROJECT_ID, project.getId());
- centroidDoc.put(DBConstants.Defaults.DISPLAYED,true);
-
-
-
- // ********************** EVALAUTE POSITION
- log.debug("indexing UseCaseDescriptor {} : Evaluating Centroid... ", useCaseDescriptor.getId());
- SpatialReference reference =null;
- List refs=project.getIdentificationReferenceByType(SpatialReference.SPATIAL_REFERENCE_TYPE);
- if(!refs.isEmpty()){
-
- // Use existing Reference
-
- reference = Serialization.convert(refs.get(0), SpatialReference.class);
-
- log.debug("Using already defined spatial reference " + reference);
-
-
- GeoJsonObject object = Serialization.convert(reference.getGeoJson(), GeoJsonObject.class);
-
- GCubeSDILayer.BBOX bbox = GCubeSDILayer.BBOX.fromGeoJSON(object.getBbox());
-
- log.info("Found declared BBOX {} ", bbox);
- Double pointX = (bbox.getMaxX() + bbox.getMinX())/2;
- Double pointY = (bbox.getMaxY() + bbox.getMinY())/2;
- String wkt = String.format("POINT (%1$f %2$f) ",
- pointX, pointY);
-
-
- centroidDoc.put("geom", wkt);
-
- } else{
- // unable to use current Spatial reference, try evaluating it
- log.debug("UseCaseDescriptor {} : Getting evaluation paths from useCaseDescriptor.. ", useCaseDescriptor.getId());
-
- // for each configuration option try until found
- GCubeSDILayer.BBOX toSet = null;
- for(BBOXEvaluator evaluator : BBOX_EVALUATORS){
- log.trace("UCD {}, Project {}. Evaluating BBOX with {}",useCaseDescriptor.getId(),project.getId(),evaluator);
- try{
- if(evaluator.isConfigured(profileConfiguration)){
- toSet=evaluator.evaluate(profileConfiguration,useCaseDescriptor,documentNavigator);
- if(toSet!=null) {
- log.info("UCD {}, Project {}. Evaluated BBOX {} with method {}",
- useCaseDescriptor.getId(),project.getId(),toSet,evaluator);
- break;
- }
- }
- }catch (Throwable t){
- log.warn("UCD {}, Project {}. Exception with {}",
- useCaseDescriptor.getId(),project.getId(),evaluator,t);
- }
- }
- if(toSet== null)
- throw new IndexingException("No BBOX has been evaluated from project");
-
- Double pointX=(toSet.getMaxX()+toSet.getMinX())/2;
- Double pointY = (toSet.getMaxY()+toSet.getMinY())/2;
- log.info("Evaluated BBOX {} ",toSet);
- String wkt = String .format("POINT (%1$f %2$f) ",
- pointX, pointY);
- //TODO support altitude
- Double pointZ= 0d;
-
-
- centroidDoc.put("geom",wkt);
-
- Point point = new Point();
- point.setCoordinates(new LngLatAlt(pointX,pointY,pointZ));
- point.setBbox(toSet.asGeoJSONArray());
-
- //TODO Manage CRS
- point.setCrs(new Crs());
- reference = new SpatialReference(Serialization.asDocument(point));
- log.info("UCD {} project {}, Setting Spatial Reference {} ",useCaseDescriptor.getId(),project.getId(),Serialization.write(reference));
- report.addIdentificationReference(reference);
- }
-
-
-
- //*********** Additional Values from useCaseDescriptor
-
- log.info("Setting additional values to centroid from mappings ..");
- for(MappingObject m : getMappings(useCaseDescriptor)){
- List