Compare commits
No commits in common. "master" and "v1.0.4" have entirely different histories.
|
@ -2,11 +2,6 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-service
|
# Changelog for org.gcube.application.geoportal-service
|
||||||
|
|
||||||
## [v1.0.5-SNAPSHOT] 2021-07-23
|
|
||||||
Upgrade to gcube-smartgears-bom 2.1.0
|
|
||||||
Fix register postgis table layer
|
|
||||||
Added PostgisIndexRecordManager
|
|
||||||
|
|
||||||
## [v1.0.4] 2020-11-11
|
## [v1.0.4] 2020-11-11
|
||||||
Mongo integration with Concessione
|
Mongo integration with Concessione
|
||||||
Project interface
|
Project interface
|
||||||
|
|
40
pom.xml
40
pom.xml
|
@ -4,7 +4,7 @@
|
||||||
<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.5-SNAPSHOT</version>
|
<version>1.0.4</version>
|
||||||
<name>Geoportal Service</name>
|
<name>Geoportal Service</name>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.distribution</groupId>
|
<groupId>org.gcube.distribution</groupId>
|
||||||
<artifactId>gcube-smartgears-bom</artifactId>
|
<artifactId>gcube-smartgears-bom</artifactId>
|
||||||
<version>2.1.0</version>
|
<version>2.0.0</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@ -63,7 +63,12 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- REMOVE FROM GCUBE 5 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.gcube.core</groupId>
|
||||||
|
<artifactId>common-gcube-calls</artifactId>
|
||||||
|
<version>[1.0.0,1.2.0)</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- JERSEY -->
|
<!-- JERSEY -->
|
||||||
|
@ -99,14 +104,9 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-logic</artifactId>
|
<artifactId>geoportal-logic</artifactId>
|
||||||
<version>[1.0.14,2.0.0)</version>
|
<version>[1.0.4,2.0.0)</version>
|
||||||
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- <!– override gis-interface –>-->
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>org.gcube.spatial.data</groupId>-->
|
|
||||||
<!-- <artifactId>gis-interface</artifactId>-->
|
|
||||||
<!-- <version>[2.4.6,3.0.0)</version>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- MONGO -->
|
<!-- MONGO -->
|
||||||
|
@ -210,14 +210,14 @@
|
||||||
<version>10.8.3.0</version> <scope>test</scope> </dependency> -->
|
<version>10.8.3.0</version> <scope>test</scope> </dependency> -->
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<!-- <repositories>-->
|
<repositories>
|
||||||
<!-- <repository>-->
|
<repository>
|
||||||
<!-- <id>GeoSolutions</id>-->
|
<id>GeoSolutions</id>
|
||||||
<!-- <url>https://nexus.d4science.org/nexus/content/repositories/geo-solutions-snapshots/</url>-->
|
<url>https://nexus.d4science.org/nexus/content/repositories/geo-solutions-snapshots/</url>
|
||||||
<!-- </repository>-->
|
</repository>
|
||||||
<!-- <repository>-->
|
<repository>
|
||||||
<!-- <id>GeoToolkit</id>-->
|
<id>GeoToolkit</id>
|
||||||
<!-- <url>https://nexus.d4science.org/nexus/content/repositories/geotoolkit/</url>-->
|
<url>https://nexus.d4science.org/nexus/content/repositories/geotoolkit/</url>
|
||||||
<!-- </repository>-->
|
</repository>
|
||||||
<!-- </repositories>-->
|
</repositories>
|
||||||
</project>
|
</project>
|
|
@ -1,23 +1,15 @@
|
||||||
package org.gcube.application.geoportal.service.engine;
|
package org.gcube.application.geoportal.service.engine;
|
||||||
|
|
||||||
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
|
import java.io.File;
|
||||||
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.UploadMethod;
|
import java.net.MalformedURLException;
|
||||||
import it.geosolutions.geoserver.rest.GeoServerRESTReader;
|
import java.net.URL;
|
||||||
import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
|
|
||||||
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
|
import org.gcube.application.geoportal.common.model.legacy.BBOX;
|
||||||
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
|
import org.gcube.application.geoportal.common.model.legacy.GeoServerContent;
|
||||||
import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
|
import org.gcube.application.geoportal.common.model.legacy.PersistedContent;
|
||||||
import it.geosolutions.geoserver.rest.encoder.feature.FeatureTypeAttribute;
|
import org.gcube.application.geoportal.common.model.legacy.SDILayerDescriptor;
|
||||||
import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder;
|
import org.gcube.application.geoportal.common.model.legacy.WorkspaceContent;
|
||||||
import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.gcube.application.geoportal.common.model.legacy.*;
|
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
import org.gcube.application.geoportal.model.db.DBConstants;
|
|
||||||
import org.gcube.application.geoportal.model.db.DatabaseConnection;
|
|
||||||
import org.gcube.application.geoportal.model.db.PostgisTable;
|
|
||||||
import org.gcube.application.geoportal.service.engine.mongo.PostgisIndex;
|
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException;
|
import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException;
|
||||||
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
||||||
import org.gcube.data.transfer.library.DataTransferClient;
|
import org.gcube.data.transfer.library.DataTransferClient;
|
||||||
|
@ -29,52 +21,43 @@ import org.gcube.data.transfer.model.RemoteFileDescriptor;
|
||||||
import org.gcube.spatial.data.gis.GISInterface;
|
import org.gcube.spatial.data.gis.GISInterface;
|
||||||
import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
|
import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
|
||||||
|
|
||||||
import java.io.File;
|
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
|
||||||
import java.net.MalformedURLException;
|
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.UploadMethod;
|
||||||
import java.net.URI;
|
import it.geosolutions.geoserver.rest.GeoServerRESTReader;
|
||||||
import java.net.URISyntaxException;
|
import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
|
||||||
import java.net.URL;
|
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
|
||||||
import java.util.HashMap;
|
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
|
||||||
import java.util.Map;
|
import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
|
||||||
import java.util.regex.Matcher;
|
import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
|
||||||
import java.util.regex.Pattern;
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class SDIManager {
|
public class SDIManager {
|
||||||
|
|
||||||
static private final String EPSG_4326="EPSG:4326";
|
static private String DEFAULT_CRS="EPSG:4326";
|
||||||
static private final String WGS84_FULL="GEOGCS[\"WGS 84\", DATUM[\"World Geodetic System 1984\", SPHEROID[\"WGS 84\", 6378137.0, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]],"+
|
|
||||||
"AUTHORITY[\"EPSG\",\"6326\"]], PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]], UNIT[\"degree\", 0.017453292519943295],"+
|
|
||||||
"AXIS[\"Geodetic longitude\", EAST], AXIS[\"Geodetic latitude\", NORTH], AUTHORITY[\"EPSG\",\"4326\"]]";
|
|
||||||
|
|
||||||
|
|
||||||
public static final Pattern HOSTNAME_PATTERN=Pattern.compile("(?<=\\:\\/\\/)[^\\:]*");
|
private GISInterface gis;
|
||||||
public static final Pattern PORT_PATTERN=Pattern.compile("(?<=\\:)[\\d]+");
|
|
||||||
public static final Pattern DB_NAME_PATTERN=Pattern.compile("(?<=\\/)[^\\/]*(?=$)");
|
|
||||||
|
|
||||||
|
|
||||||
private final GISInterface gis;
|
|
||||||
@Getter
|
@Getter
|
||||||
private final DataTransferClient dtGeoServer;
|
private DataTransferClient dtGeoServer;
|
||||||
private final String geoserverHostName;
|
private String geoserverHostName;
|
||||||
|
|
||||||
private final AbstractGeoServerDescriptor currentGeoserver;
|
|
||||||
|
|
||||||
|
|
||||||
public SDIManager() throws SDIInteractionException {
|
public SDIManager() throws SDIInteractionException {
|
||||||
try{
|
try{
|
||||||
log.debug("Initializing GIS Interface..");
|
log.debug("Initializing GIS Interface..");
|
||||||
gis=GISInterface.get();
|
gis=GISInterface.get();
|
||||||
currentGeoserver=gis.getCurrentGeoServer();
|
AbstractGeoServerDescriptor geoserver=gis.getCurrentGeoServer();
|
||||||
if(currentGeoserver==null)
|
if(geoserver==null)
|
||||||
throw new Exception("Unable to contact data transfer for geoserver ");
|
throw new Exception("Unable to contact data transfer for geoserver ");
|
||||||
|
|
||||||
log.debug("Found geoserver descriptor "+currentGeoserver);
|
log.debug("Found geoserver descriptor "+geoserver);
|
||||||
geoserverHostName=new URL(currentGeoserver.getUrl()).getHost();
|
geoserverHostName=new URL(gis.getCurrentGeoServer().getUrl()).getHost();
|
||||||
|
|
||||||
log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
|
log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
|
||||||
dtGeoServer=DataTransferClient.getInstanceByEndpoint("http://"+geoserverHostName);
|
dtGeoServer=DataTransferClient.getInstanceByEndpoint("http://"+geoserverHostName);
|
||||||
if(!currentGeoserver.getReader().existGeoserver())
|
if(!gis.getCurrentGeoServer().getReader().existGeoserver())
|
||||||
throw new Exception("Geoserver not reachable");
|
throw new Exception("Geoserver not reachable");
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
throw new SDIInteractionException("Unable to initialize SDI Manager",e);
|
throw new SDIInteractionException("Unable to initialize SDI Manager",e);
|
||||||
|
@ -88,9 +71,9 @@ public class SDIManager {
|
||||||
|
|
||||||
public String createWorkspace(String toCreate) throws SDIInteractionException {
|
public String createWorkspace(String toCreate) throws SDIInteractionException {
|
||||||
try {
|
try {
|
||||||
if(!currentGeoserver.getReader().getWorkspaceNames().contains(toCreate)) {
|
if(!gis.getCurrentGeoServer().getReader().getWorkspaceNames().contains(toCreate)) {
|
||||||
log.debug("Creating workspace : "+toCreate);
|
log.debug("Creating workspace : "+toCreate);
|
||||||
if(!currentGeoserver.getPublisher().createWorkspace(toCreate))
|
if(!gis.getCurrentGeoServer().getPublisher().createWorkspace(toCreate))
|
||||||
throw new SDIInteractionException("Unable to create workspace "+toCreate);
|
throw new SDIInteractionException("Unable to create workspace "+toCreate);
|
||||||
}else log.debug("Workspace "+toCreate+" exists.");
|
}else log.debug("Workspace "+toCreate+" exists.");
|
||||||
return toCreate;
|
return toCreate;
|
||||||
|
@ -166,19 +149,18 @@ public class SDIManager {
|
||||||
|
|
||||||
String toSetLayerName=filename;
|
String toSetLayerName=filename;
|
||||||
int count=0;
|
int count=0;
|
||||||
GeoServerRESTReader gsReader=currentGeoserver.getReader();
|
while(gis.getCurrentGeoServer().getReader().getLayer(workspace,toSetLayerName)!=null){
|
||||||
while(gsReader.getLayer(workspace,toSetLayerName)!=null){
|
|
||||||
count++;
|
count++;
|
||||||
toSetLayerName=filename+"_"+count;
|
toSetLayerName=filename+"_"+count;
|
||||||
log.debug("layer for "+filename+" already existing, trying "+toSetLayerName);
|
log.debug("layer for "+filename+" already existing, trying "+toSetLayerName);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
String storeName=toSetLayerName+"_store";
|
String storeName=toSetLayerName+"_store";
|
||||||
content.setStore(storeName);
|
content.setStore(storeName);
|
||||||
content.setFeatureType(toSetLayerName);
|
content.setFeatureType(toSetLayerName);
|
||||||
|
|
||||||
GeoServerRESTPublisher publisher=currentGeoserver.getPublisher();
|
GeoServerRESTPublisher publisher=gis.getCurrentGeoServer().getPublisher();
|
||||||
log.debug("Trying to create remote workspace : "+workspace);
|
log.debug("Trying to create remote workspace : "+workspace);
|
||||||
createWorkspace(workspace);
|
createWorkspace(workspace);
|
||||||
|
|
||||||
|
@ -197,7 +179,7 @@ public class SDIManager {
|
||||||
// UploadMethod.FILE, // neeeds zip
|
// UploadMethod.FILE, // neeeds zip
|
||||||
UploadMethod.EXTERNAL, // needs shp
|
UploadMethod.EXTERNAL, // needs shp
|
||||||
directoryPath.toURI(),
|
directoryPath.toURI(),
|
||||||
EPSG_4326, //SRS
|
DEFAULT_CRS, //SRS
|
||||||
""); // default style
|
""); // default style
|
||||||
|
|
||||||
if(!published) {
|
if(!published) {
|
||||||
|
@ -205,9 +187,9 @@ public class SDIManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
currentElement.setLayerName(toSetLayerName);
|
currentElement.setLayerName(toSetLayerName);
|
||||||
|
GeoServerRESTReader reader=gis.getCurrentGeoServer().getReader();
|
||||||
RESTLayer l=gsReader.getLayer(workspace, toSetLayerName);
|
RESTLayer l=reader.getLayer(workspace, toSetLayerName);
|
||||||
RESTFeatureType f= gsReader.getFeatureType(l);
|
RESTFeatureType f= reader.getFeatureType(l);
|
||||||
/*http://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
|
/*http://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
|
||||||
service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_18:pos&
|
service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_18:pos&
|
||||||
styles=&bbox=8.62091913167495,40.62975046683799,8.621178639172953,40.630257904721645&
|
styles=&bbox=8.62091913167495,40.62975046683799,8.621178639172953,40.630257904721645&
|
||||||
|
@ -225,7 +207,7 @@ public class SDIManager {
|
||||||
f.getMinY(),
|
f.getMinY(),
|
||||||
f.getMaxX(),
|
f.getMaxX(),
|
||||||
f.getMaxY(),
|
f.getMaxY(),
|
||||||
EPSG_4326,
|
DEFAULT_CRS,
|
||||||
400,
|
400,
|
||||||
400));
|
400));
|
||||||
|
|
||||||
|
@ -245,51 +227,7 @@ public class SDIManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createStore(GSPostGISDatastoreEncoder encoder, String workspace) throws SDIInteractionException {
|
private String createStoreFromPostgisDB(String workspace,String storeName) throws SDIInteractionException {
|
||||||
String storeName=encoder.getName();
|
|
||||||
try {
|
|
||||||
log.debug("Looking for datastore "+storeName+" under "+workspace);
|
|
||||||
|
|
||||||
if(currentGeoserver.getReader().getDatastore(workspace,storeName)==null)
|
|
||||||
|
|
||||||
if(!currentGeoserver.getDataStoreManager().create(workspace, encoder))
|
|
||||||
throw new SDIInteractionException("Unable to create store "+storeName+" in "+workspace);
|
|
||||||
log.debug("Store "+storeName+" exists under "+workspace);
|
|
||||||
return storeName;
|
|
||||||
} catch (IllegalArgumentException | MalformedURLException e) {
|
|
||||||
throw new SDIInteractionException("Unable to create store "+storeName,e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String createStoreFromPostgisDB(String workspace, String storeName, DatabaseConnection connection) throws SDIInteractionException{
|
|
||||||
String connectionUrl=connection.getUrl();
|
|
||||||
|
|
||||||
Matcher hostname=HOSTNAME_PATTERN.matcher(connectionUrl);
|
|
||||||
if (!hostname.find()) throw new SDIInteractionException("Unable to get Hostname from "+connection);
|
|
||||||
|
|
||||||
Matcher port = PORT_PATTERN.matcher(connectionUrl);
|
|
||||||
if (!port.find()) throw new SDIInteractionException("Unable to get PORT from "+connection);
|
|
||||||
|
|
||||||
Matcher db = DB_NAME_PATTERN.matcher(connectionUrl);
|
|
||||||
if (!db.find()) throw new SDIInteractionException("Unable to get DB from "+connection);
|
|
||||||
|
|
||||||
|
|
||||||
GSPostGISDatastoreEncoder encoder=new GSPostGISDatastoreEncoder(storeName);
|
|
||||||
encoder.setHost(hostname.group());
|
|
||||||
encoder.setPort(Integer.parseInt(port.group()));
|
|
||||||
encoder.setDatabase(db.group());
|
|
||||||
encoder.setSchema("public");
|
|
||||||
encoder.setUser(connection.getUser());
|
|
||||||
encoder.setPassword(connection.getPwd());
|
|
||||||
encoder.setLooseBBox(true);
|
|
||||||
encoder.setDatabaseType("postgis");
|
|
||||||
encoder.setEnabled(true);
|
|
||||||
encoder.setFetchSize(1000);
|
|
||||||
encoder.setValidateConnections(true);
|
|
||||||
|
|
||||||
return createStore(encoder,workspace);
|
|
||||||
}
|
|
||||||
private String createStoreFromJNDIDB(String workspace,String storeName) throws SDIInteractionException {
|
|
||||||
//SET BY PROVISIONING
|
//SET BY PROVISIONING
|
||||||
GSPostGISDatastoreEncoder encoder=new GSPostGISDatastoreEncoder(storeName);
|
GSPostGISDatastoreEncoder encoder=new GSPostGISDatastoreEncoder(storeName);
|
||||||
encoder.setJndiReferenceName("java:comp/env/jdbc/postgres");
|
encoder.setJndiReferenceName("java:comp/env/jdbc/postgres");
|
||||||
|
@ -298,14 +236,26 @@ public class SDIManager {
|
||||||
encoder.setEnabled(true);
|
encoder.setEnabled(true);
|
||||||
encoder.setFetchSize(1000);
|
encoder.setFetchSize(1000);
|
||||||
encoder.setValidateConnections(true);
|
encoder.setValidateConnections(true);
|
||||||
return createStore(encoder,workspace);
|
try {
|
||||||
|
log.debug("Looking for datastore "+storeName+" under "+workspace);
|
||||||
|
|
||||||
|
if(gis.getCurrentGeoServer().getReader().getDatastore(workspace,storeName)==null)
|
||||||
|
|
||||||
|
if(!gis.getCurrentGeoServer().getDataStoreManager().create(workspace, encoder))
|
||||||
|
throw new SDIInteractionException("Unable to create store "+storeName+" in "+workspace);
|
||||||
|
log.debug("Store "+storeName+" exists under "+workspace);
|
||||||
|
return storeName;
|
||||||
|
} catch (IllegalArgumentException | MalformedURLException e) {
|
||||||
|
throw new SDIInteractionException("Unable to create store "+storeName,e);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String publishStyle(File sldFile,String name) throws SDIInteractionException {
|
private String publishStyle(File sldFile,String name) throws SDIInteractionException {
|
||||||
try {
|
try {
|
||||||
if(!currentGeoserver.getReader().existsStyle(name)) {
|
if(!gis.getCurrentGeoServer().getReader().existsStyle(name)) {
|
||||||
log.debug("Registering style "+name);
|
log.debug("Registering style "+name);
|
||||||
if(!currentGeoserver.getPublisher().publishStyle(sldFile, name))
|
if(!gis.getCurrentGeoServer().getPublisher().publishStyle(sldFile, name))
|
||||||
throw new SDIInteractionException("Unable to register style "+name);
|
throw new SDIInteractionException("Unable to register style "+name);
|
||||||
}else log.debug("Style "+name+" already existing");
|
}else log.debug("Style "+name+" already existing");
|
||||||
return name;
|
return name;
|
||||||
|
@ -315,21 +265,15 @@ public class SDIManager {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String configureCentroidLayer(String name,String workspace,String storeName,PostgisTable table, DatabaseConnection connection) throws SDIInteractionException {
|
public String configureCentroidLayer(String name,String workspace,String storeName) throws SDIInteractionException {
|
||||||
|
|
||||||
GSFeatureTypeEncoder fte=new GSFeatureTypeEncoder();
|
GSFeatureTypeEncoder fte=new GSFeatureTypeEncoder();
|
||||||
fte.setAbstract("Centroid layer for "+name);
|
fte.setAbstract("Centroid layer for "+name);
|
||||||
fte.setEnabled(true);
|
fte.setEnabled(true);
|
||||||
fte.setNativeCRS(WGS84_FULL);
|
fte.setNativeCRS(DEFAULT_CRS);
|
||||||
fte.setTitle(name);
|
fte.setTitle(name);
|
||||||
fte.setName(name);
|
fte.setName(name);
|
||||||
|
|
||||||
|
|
||||||
// GeoServer loads all fields
|
|
||||||
// fte.setAttribute(attrs);
|
|
||||||
|
|
||||||
|
|
||||||
fte.setLatLonBoundingBox(-180.0, -90.0, 180.0, 90.0, WGS84_FULL);
|
|
||||||
|
|
||||||
String style="clustered_centroids";
|
String style="clustered_centroids";
|
||||||
|
|
||||||
|
@ -341,12 +285,11 @@ public class SDIManager {
|
||||||
//Checking workspace
|
//Checking workspace
|
||||||
createWorkspace(workspace);
|
createWorkspace(workspace);
|
||||||
//Checking store
|
//Checking store
|
||||||
createStoreFromPostgisDB(workspace, storeName,connection);
|
createStoreFromPostgisDB(workspace, storeName);
|
||||||
//Checking layer
|
//Checkig layer
|
||||||
publishStyle(Files.getFileFromResources("styles/clustered_points.sld"),style);
|
publishStyle(Files.getFileFromResources("styles/clustered_points.sld"),style);
|
||||||
|
if(gis.getCurrentGeoServer().getReader().getLayer(workspace, name)==null)
|
||||||
if(currentGeoserver.getReader().getLayer(workspace, name)==null)
|
if(!gis.getCurrentGeoServer().getPublisher().publishDBLayer(workspace, storeName, fte, layerEncoder))
|
||||||
if(!currentGeoserver.getPublisher().publishDBLayer(workspace, storeName, fte, layerEncoder))
|
|
||||||
throw new SDIInteractionException("Unable to create layer "+name);
|
throw new SDIInteractionException("Unable to create layer "+name);
|
||||||
log.debug("layer "+name+" already exists");
|
log.debug("layer "+name+" already exists");
|
||||||
return name;
|
return name;
|
||||||
|
@ -361,11 +304,11 @@ public class SDIManager {
|
||||||
public void deleteContent(GeoServerContent toDelete) throws IllegalArgumentException, MalformedURLException, RemoteServiceException {
|
public void deleteContent(GeoServerContent toDelete) throws IllegalArgumentException, MalformedURLException, RemoteServiceException {
|
||||||
log.debug("Deleting geoserver layer "+toDelete);
|
log.debug("Deleting geoserver layer "+toDelete);
|
||||||
//delete layer
|
//delete layer
|
||||||
GeoServerRESTPublisher publisher=currentGeoserver.getPublisher();
|
GeoServerRESTPublisher publisher=gis.getCurrentGeoServer().getPublisher();
|
||||||
//delete store
|
//delete store
|
||||||
publisher.removeDatastore(toDelete.getWorkspace(), toDelete.getStore(), true);
|
publisher.removeDatastore(toDelete.getWorkspace(), toDelete.getStore(), true);
|
||||||
//delete WS if empty
|
//delete WS if empty
|
||||||
GeoServerRESTReader reader=currentGeoserver.getReader();
|
GeoServerRESTReader reader=gis.getCurrentGeoServer().getReader();
|
||||||
if(reader.getDatastores(toDelete.getWorkspace()).isEmpty()) {
|
if(reader.getDatastores(toDelete.getWorkspace()).isEmpty()) {
|
||||||
log.debug("Deleting emtpy workspace "+toDelete.getWorkspace());
|
log.debug("Deleting emtpy workspace "+toDelete.getWorkspace());
|
||||||
publisher.removeWorkspace(toDelete.getWorkspace(), true);
|
publisher.removeWorkspace(toDelete.getWorkspace(), true);
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package org.gcube.application.geoportal.service.engine.mongo;
|
package org.gcube.application.geoportal.service.engine.mongo;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -50,6 +49,7 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
|
|
||||||
public ConcessioniMongoManager() throws ConfigurationException {
|
public ConcessioniMongoManager() throws ConfigurationException {
|
||||||
super();
|
super();
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
}
|
}
|
||||||
private static final String collectionName="legacyConcessioni";
|
private static final String collectionName="legacyConcessioni";
|
||||||
private static final String DB_NAME="gna_dev";
|
private static final String DB_NAME="gna_dev";
|
||||||
|
@ -183,10 +183,10 @@ public class ConcessioniMongoManager extends MongoManager{
|
||||||
ValidationReport report= new ValidationReport("Index Report ");
|
ValidationReport report= new ValidationReport("Index Report ");
|
||||||
PostgisIndex index;
|
PostgisIndex index;
|
||||||
try {
|
try {
|
||||||
index = new PostgisIndex();
|
index = new PostgisIndex(record);
|
||||||
index.registerCentroid(record);
|
index.registerCentroid();
|
||||||
report.addMessage(ValidationStatus.PASSED, "Registered centroid");
|
report.addMessage(ValidationStatus.PASSED, "Registered centroid");
|
||||||
} catch (SDIInteractionException | PublishException | SQLException | ConfigurationException e) {
|
} catch (SDIInteractionException | PublishException e) {
|
||||||
log.error("Unable to index {} ",record,e);
|
log.error("Unable to index {} ",record,e);
|
||||||
report.addMessage(ValidationStatus.WARNING, "Internal error while indexing.");
|
report.addMessage(ValidationStatus.WARNING, "Internal error while indexing.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,48 +26,29 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class PostgisIndex {
|
public class PostgisIndex {
|
||||||
|
|
||||||
static{
|
@NonNull
|
||||||
try {
|
@Getter
|
||||||
Class.forName("org.postgresql.Driver");
|
private Concessione record;
|
||||||
Class.forName("org.postgis.DriverWrapper");
|
|
||||||
} catch (Exception var2) {
|
|
||||||
throw new RuntimeException(var2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private SDIManager sdiManager;
|
private SDIManager sdiManager;
|
||||||
|
|
||||||
|
|
||||||
public PostgisIndex() throws SDIInteractionException, SQLException, ConfigurationException {
|
public PostgisIndex(Concessione record) throws SDIInteractionException {
|
||||||
super();
|
super();
|
||||||
|
this.record = record;
|
||||||
this.sdiManager=new SDIManager();
|
this.sdiManager=new SDIManager();
|
||||||
init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected PostgisTable getCentroidsTable() {
|
protected PostgisTable getCentroidsTable() {
|
||||||
return DBConstants.Concessioni.CENTROIDS;
|
return DBConstants.Concessioni.CENTROIDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() throws SQLException, ConfigurationException, SDIInteractionException {
|
|
||||||
log.debug("Contacting postgis DB .. ");
|
public void registerCentroid() throws PublishException{
|
||||||
PostgisDBManagerI db=PostgisDBManager.get();
|
|
||||||
log.debug("Checking if centroids table exists..");
|
|
||||||
PostgisTable table=getCentroidsTable();
|
|
||||||
db.create(table);
|
|
||||||
db.commit();
|
|
||||||
sdiManager.configureCentroidLayer("centroids_concessioni", "gna", "gna_postgis",table,db.getConnectionDescriptor());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void registerCentroid(Concessione record) throws PublishException{
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
log.debug("Evaluating Centroid");
|
log.debug("Evaluating Centroid");
|
||||||
Map<String,String> centroidRow=evaluateCentroid(record);
|
Map<String,String> centroidRow=evaluateCentroid();
|
||||||
|
|
||||||
log.debug("Contacting postgis DB .. ");
|
log.debug("Contacting postgis DB .. ");
|
||||||
PostgisDBManagerI db=PostgisDBManager.get();
|
PostgisDBManagerI db=PostgisDBManager.get();
|
||||||
|
@ -78,44 +59,54 @@ public class PostgisIndex {
|
||||||
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
||||||
|
|
||||||
log.debug("Deleting centroid if present. ID is "+record.getId());
|
log.debug("Deleting centroid if present. ID is "+record.getId());
|
||||||
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), record.getMongo_id());
|
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), record.getId()+"");
|
||||||
|
|
||||||
centroidsTable.fillCSVPreparedStatament(centroidRow, ps, false);
|
centroidsTable.fillCSVPreparedStatament(centroidRow, ps, false);
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
db.commit();
|
db.commit();
|
||||||
|
|
||||||
|
initCentroidLayer();
|
||||||
|
|
||||||
|
|
||||||
}catch(SQLException e) {
|
}catch(SQLException e) {
|
||||||
log.warn("Unable to publish Centroid for record "+record,e);
|
log.warn("Unable to publish Centroid for record "+record,e);
|
||||||
throw new PublishException("Unable to publish centroid.",e, null);
|
throw new PublishException("Unable to publish centroid.",e, null);
|
||||||
|
}catch(SDIInteractionException e) {
|
||||||
|
log.warn("Unable to publish Centroid Layer for record type "+getRecord().getRecordType(),e);
|
||||||
|
throw new PublishException("Unable to publish centroid.",e, null);
|
||||||
} catch (ConfigurationException e) {
|
} catch (ConfigurationException e) {
|
||||||
log.warn("Unable to contact centroids db "+record.getRecordType(),e);
|
log.warn("Unable to contact centroids db "+getRecord().getRecordType(),e);
|
||||||
throw new PublishException("Unable to publish centroid.",e, null);
|
throw new PublishException("Unable to publish centroid.",e, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void initCentroidLayer() throws SDIInteractionException {
|
||||||
|
log.debug("Checking for centroid layer configuration.. ");
|
||||||
|
|
||||||
|
|
||||||
|
sdiManager.configureCentroidLayer("centroids_concessioni", "gna", "gna_postgis");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void removeCentroid(Concessione record) {
|
public void removeCentroid() {
|
||||||
try {
|
try {
|
||||||
PostgisDBManagerI db=PostgisDBManager.get();
|
PostgisDBManagerI db=PostgisDBManager.get();
|
||||||
PostgisTable centroidsTable=getCentroidsTable();
|
PostgisTable centroidsTable=getCentroidsTable();
|
||||||
log.debug("Deleting centroid if present. ID is "+record.getId());
|
log.debug("Deleting centroid if present. ID is "+record.getId());
|
||||||
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), record.getMongo_id());
|
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), record.getId()+"");
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
log.warn("Unable to remove centroid ",e);
|
log.warn("Unable to remove centroid ",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected static Map<String,String> evaluateCentroid(Concessione record){
|
protected Map<String,String> evaluateCentroid(){
|
||||||
|
|
||||||
|
|
||||||
// CENTROID
|
// CENTROID
|
||||||
Map<String,String> centroidsRow=new HashMap<String, String>();
|
Map<String,String> centroidsRow=new HashMap<String, String>();
|
||||||
centroidsRow.put(DBConstants.Concessioni.PRODUCT_ID, record.getMongo_id());
|
centroidsRow.put(DBConstants.Concessioni.PRODUCT_ID, record.getId()+"");
|
||||||
centroidsRow.put(DBConstants.Concessioni.ANNO, record.getDataInizioProgetto().getYear()+"");
|
centroidsRow.put(DBConstants.Concessioni.ANNO, record.getDataInizioProgetto().getYear()+"");
|
||||||
centroidsRow.put(DBConstants.Concessioni.NOME, record.getNome());
|
centroidsRow.put(DBConstants.Concessioni.NOME, record.getNome());
|
||||||
centroidsRow.put(DBConstants.Concessioni.REGIONE, ""); //TODO
|
centroidsRow.put(DBConstants.Concessioni.REGIONE, ""); //TODO
|
||||||
|
|
|
@ -172,9 +172,8 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
// Immagini
|
// Immagini
|
||||||
Concessione published=publish(target, c);
|
Concessione published=publish(target, c);
|
||||||
System.out.println("Published : "+published);
|
System.out.println("Published : "+published);
|
||||||
System.out.println("Report is : "+published.getReport());
|
|
||||||
assertNotNull(published.getReport());
|
assertNotNull(published.getReport());
|
||||||
assertEquals(ValidationStatus.PASSED,published.getReport().getStatus());
|
assertEquals(published.getReport().getStatus(),ValidationStatus.PASSED);
|
||||||
|
|
||||||
assertEquals(published.getImmaginiRappresentative().size(),2);
|
assertEquals(published.getImmaginiRappresentative().size(),2);
|
||||||
assertEquals(published.getPianteFineScavo().size(),1);
|
assertEquals(published.getPianteFineScavo().size(),1);
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
package org.gcube.application.geoportal.service;
|
|
||||||
|
|
||||||
import org.gcube.application.geoportal.model.fault.ConfigurationException;
|
|
||||||
import org.gcube.application.geoportal.service.engine.SDIManager;
|
|
||||||
import org.gcube.application.geoportal.service.engine.mongo.PostgisIndex;
|
|
||||||
import org.gcube.application.geoportal.service.legacy.TokenSetter;
|
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import javax.validation.constraints.AssertTrue;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
|
|
||||||
public class SDITests {
|
|
||||||
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void init(){
|
|
||||||
TokenSetter.set("/gcube/devsec/devVRE");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void registerCentroidsLayer() throws SDIInteractionException, SQLException, ConfigurationException {
|
|
||||||
PostgisIndex index=new PostgisIndex();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRegexp(){
|
|
||||||
Matcher hostMatcher=SDIManager.HOSTNAME_PATTERN.matcher("jdbc:postgresql://postgresql-srv-dev.d4science.org:5432/geoserver_dev_db");
|
|
||||||
Assert.assertTrue(hostMatcher.find());
|
|
||||||
System.out.println("HOST :\t"+hostMatcher.group());
|
|
||||||
|
|
||||||
Matcher portMatcher=SDIManager.PORT_PATTERN.matcher("jdbc:postgresql://postgresql-srv-dev.d4science.org:5432/geoserver_dev_db");
|
|
||||||
Assert.assertTrue(portMatcher.find());
|
|
||||||
System.out.println("PORT :\t"+portMatcher.group());
|
|
||||||
|
|
||||||
Matcher dbMatcher=SDIManager.DB_NAME_PATTERN.matcher("jdbc:postgresql://postgresql-srv-dev.d4science.org:5432/geoserver_dev_db");
|
|
||||||
Assert.assertTrue(dbMatcher.find());
|
|
||||||
System.out.println("DB :\t"+dbMatcher.group());
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue