Compare commits

..

No commits in common. "master" and "v1.0.4" have entirely different histories.

7 changed files with 115 additions and 230 deletions

View File

@ -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
View File

@ -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>
<!-- &lt;!&ndash; override gis-interface &ndash;&gt;-->
<!-- <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>

View File

@ -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);

View File

@ -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.");
} }

View File

@ -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

View File

@ -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);

View File

@ -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());
}
}