1.0.0.1 #1
|
@ -2,8 +2,11 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||||
|
|
||||||
# Changelog for org.gcube.application.geoportal-logic
|
# Changelog for org.gcube.application.geoportal-logic
|
||||||
|
|
||||||
|
## [v1.0.0.1] - 2020-11-2
|
||||||
|
SDI publication exception are now non blocking
|
||||||
|
Automatic centroids layer creation
|
||||||
|
Default EntityManagerFactory to be set by caller
|
||||||
|
|
||||||
## [v1.0.0] - 2020-09-25
|
## [v1.0.0] - 2020-09-25
|
||||||
|
|
||||||
First release
|
First release
|
||||||
|
|
||||||
|
|
4
pom.xml
4
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-logic</artifactId>
|
<artifactId>geoportal-logic</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0.1</version>
|
||||||
<name>Geoportal Logic</name>
|
<name>Geoportal Logic</name>
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.spatial.data</groupId>
|
<groupId>org.gcube.spatial.data</groupId>
|
||||||
<artifactId>gis-interface</artifactId>
|
<artifactId>gis-interface</artifactId>
|
||||||
<version>[2.4.0,3.0.0)</version>
|
<version>[2.4.0,3.0.0)</version>
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package org.gcube.application.geoportal;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.Synchronized;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@Slf4j
|
||||||
|
public class LocalConfiguration {
|
||||||
|
|
||||||
|
|
||||||
|
static LocalConfiguration instance=null;
|
||||||
|
|
||||||
|
|
||||||
|
@Synchronized
|
||||||
|
public static LocalConfiguration init(URL propertiesURL){
|
||||||
|
if(instance==null)
|
||||||
|
instance=new LocalConfiguration(propertiesURL);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Properties props=new Properties();
|
||||||
|
|
||||||
|
private LocalConfiguration(URL propertiesURL) {
|
||||||
|
try{
|
||||||
|
log.debug("Loading {} ",propertiesURL);
|
||||||
|
props.load(propertiesURL.openStream());
|
||||||
|
}catch(Exception e){
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getProperty(String property){
|
||||||
|
return instance.props.getProperty(property);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getProperty(String property,String defaultValue){
|
||||||
|
return instance.props.getProperty(property, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Long getTTL(String property) {
|
||||||
|
return Long.parseLong(getProperty(property));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean getFlag(String property) {
|
||||||
|
return Boolean.parseBoolean(property);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private static Object templateConfiguration=null;
|
||||||
|
//
|
||||||
|
// public static Object getTemplateConfigurationObject() {return templateConfiguration;}
|
||||||
|
// public static void setTemplateConfigurationObject(Object obj) {templateConfiguration=obj;}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ import javax.persistence.spi.PersistenceUnitInfo;
|
||||||
import javax.persistence.spi.PersistenceUnitTransactionType;
|
import javax.persistence.spi.PersistenceUnitTransactionType;
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
|
import org.gcube.application.geoportal.managers.AbstractRecordManager.EMFProvider;
|
||||||
import org.gcube.application.geoportal.model.Record;
|
import org.gcube.application.geoportal.model.Record;
|
||||||
import org.gcube.application.geoportal.model.db.DBConstants;
|
import org.gcube.application.geoportal.model.db.DBConstants;
|
||||||
import org.gcube.application.geoportal.model.db.DatabaseConnection;
|
import org.gcube.application.geoportal.model.db.DatabaseConnection;
|
||||||
|
@ -30,6 +32,7 @@ import org.gcube.application.geoportal.model.db.PostgisTable.Field;
|
||||||
import org.gcube.application.geoportal.model.db.PostgisTable.FieldType;
|
import org.gcube.application.geoportal.model.db.PostgisTable.FieldType;
|
||||||
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
||||||
import org.gcube.application.geoportal.model.fault.PublishException;
|
import org.gcube.application.geoportal.model.fault.PublishException;
|
||||||
|
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
|
||||||
import org.gcube.application.geoportal.model.fault.ValidationException;
|
import org.gcube.application.geoportal.model.fault.ValidationException;
|
||||||
import org.gcube.application.geoportal.model.report.ValidationReport;
|
import org.gcube.application.geoportal.model.report.ValidationReport;
|
||||||
import org.gcube.application.geoportal.model.report.ValidationReport.ValidationStatus;
|
import org.gcube.application.geoportal.model.report.ValidationReport.ValidationStatus;
|
||||||
|
@ -44,9 +47,20 @@ import jersey.repackaged.com.google.common.collect.ImmutableMap;
|
||||||
import lombok.Synchronized;
|
import lombok.Synchronized;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public abstract class AbstractRecordManager<T extends Record> {
|
public abstract class AbstractRecordManager<T extends Record> {
|
||||||
|
|
||||||
|
public static interface EMFProvider {
|
||||||
|
public EntityManagerFactory getFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void setDefaultProvider(EMFProvider provider) {
|
||||||
|
defaultProvider=provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static EMFProvider defaultProvider=null;
|
||||||
private static EntityManagerFactory emf=null;
|
private static EntityManagerFactory emf=null;
|
||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
|
@ -76,12 +90,11 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
}catch(Throwable t) {
|
}catch(Throwable t) {
|
||||||
log.warn("Unable to contact DB from IS, trying local..",t);
|
if(defaultProvider==null)
|
||||||
try{
|
throw new RuntimeException("NO INTERNAL DADATABASE. Please contact VRE Manager (Required SE [platform : postgresq, 'GNA-DB' flag : internal-db])");
|
||||||
emf=Persistence.createEntityManagerFactory(DBConstants.INTERNAL.DB_NAME);
|
else {
|
||||||
}catch(Throwable t1) {
|
log.warn("Found default provider. This should happen only in test phase.");
|
||||||
log.error("NO INTERNAL DATABASE FOUND ",t);
|
emf=defaultProvider.getFactory();
|
||||||
throw new RuntimeException("NO INTERNAL DATABASE",t);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -195,27 +208,34 @@ public abstract class AbstractRecordManager<T extends Record> {
|
||||||
|
|
||||||
log.debug("Contacting postgis DB .. ");
|
log.debug("Contacting postgis DB .. ");
|
||||||
PostgisDBManagerI db=PostgisDBManager.get();
|
PostgisDBManagerI db=PostgisDBManager.get();
|
||||||
|
|
||||||
|
PostgisTable centroidsTable=getCentroidsTable();
|
||||||
PostgisTable centroidsTable=DBConstants.Concessioni.CENTROIDS;
|
|
||||||
log.debug("Inserting / updated centroid Row {} ",centroidRow);
|
log.debug("Inserting / updated centroid Row {} ",centroidRow);
|
||||||
|
|
||||||
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
PreparedStatement ps = db.prepareInsertStatement(centroidsTable, true, true);
|
||||||
|
|
||||||
|
|
||||||
log.debug("Deleting centroid if present. ID is "+theRecord.getId());
|
log.debug("Deleting centroid if present. ID is "+theRecord.getId());
|
||||||
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), theRecord.getId()+"");
|
db.deleteByFieldValue(centroidsTable, new Field(DBConstants.Concessioni.PRODUCT_ID,FieldType.TEXT), theRecord.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) {
|
||||||
throw new PublishException("Unable to publish centroid.",e, null);
|
log.warn("Unable to publish Centroid for record "+theRecord,e);
|
||||||
|
// 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);
|
||||||
}
|
}
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract PostgisTable getCentroidsTable();
|
||||||
|
protected abstract void initCentroidLayer() throws SDIInteractionException;
|
||||||
|
|
||||||
protected abstract Map<String,String> evaluateCentroid();
|
protected abstract Map<String,String> evaluateCentroid();
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,10 @@ import org.gcube.application.geoportal.model.concessioni.LayerConcessione;
|
||||||
import org.gcube.application.geoportal.model.concessioni.RelazioneScavo;
|
import org.gcube.application.geoportal.model.concessioni.RelazioneScavo;
|
||||||
import org.gcube.application.geoportal.model.content.UploadedImage;
|
import org.gcube.application.geoportal.model.content.UploadedImage;
|
||||||
import org.gcube.application.geoportal.model.db.DBConstants;
|
import org.gcube.application.geoportal.model.db.DBConstants;
|
||||||
|
import org.gcube.application.geoportal.model.db.PostgisTable;
|
||||||
|
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
|
||||||
import org.gcube.application.geoportal.storage.ContentHandler;
|
import org.gcube.application.geoportal.storage.ContentHandler;
|
||||||
|
import org.gcube.application.geoportal.storage.SDIManager;
|
||||||
import org.gcube.application.geoportal.utils.Serialization;
|
import org.gcube.application.geoportal.utils.Serialization;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -21,8 +24,20 @@ public class ConcessioneManager extends AbstractRecordManager<Concessione> {
|
||||||
protected ConcessioneManager(Concessione theRecord) {
|
protected ConcessioneManager(Concessione theRecord) {
|
||||||
super(theRecord);
|
super(theRecord);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
protected PostgisTable getCentroidsTable() {
|
||||||
|
return DBConstants.Concessioni.CENTROIDS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initCentroidLayer() throws SDIInteractionException {
|
||||||
|
log.debug("Checking for centroid layer configuration.. ");
|
||||||
|
SDIManager sdiManager=new SDIManager();
|
||||||
|
|
||||||
|
sdiManager.configureCentroidLayer("centroids_concessioni", "gna", "gna_postgis");
|
||||||
|
}
|
||||||
|
|
||||||
public Concessione setRelazioneScavo(RelazioneScavo rel, InputStreamDescriptor theFile) throws IOException {
|
public Concessione setRelazioneScavo(RelazioneScavo rel, InputStreamDescriptor theFile) throws IOException {
|
||||||
ContentHandler handler=getContentHandler();
|
ContentHandler handler=getContentHandler();
|
||||||
//Check if already stored content
|
//Check if already stored content
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.gcube.application.geoportal.model.content.PersistedContent;
|
||||||
import org.gcube.application.geoportal.model.content.UploadedImage;
|
import org.gcube.application.geoportal.model.content.UploadedImage;
|
||||||
import org.gcube.application.geoportal.model.content.WorkspaceContent;
|
import org.gcube.application.geoportal.model.content.WorkspaceContent;
|
||||||
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
||||||
|
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
|
||||||
import org.gcube.application.geoportal.model.gis.SDILayerDescriptor;
|
import org.gcube.application.geoportal.model.gis.SDILayerDescriptor;
|
||||||
import org.gcube.application.geoportal.model.report.ValidationReport;
|
import org.gcube.application.geoportal.model.report.ValidationReport;
|
||||||
import org.gcube.application.geoportal.utils.Files;
|
import org.gcube.application.geoportal.utils.Files;
|
||||||
|
@ -42,11 +43,6 @@ public class ContentHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register files as to be associated with content
|
* Register files as to be associated with content
|
||||||
*
|
*
|
||||||
|
@ -86,8 +82,8 @@ public class ContentHandler {
|
||||||
SDIManager sdiManager=null;
|
SDIManager sdiManager=null;
|
||||||
if(publish)
|
if(publish)
|
||||||
sdiManager=new SDIManager();
|
sdiManager=new SDIManager();
|
||||||
|
|
||||||
|
|
||||||
for(Entry<AssociatedContent,ArrayList<TempFile>> entry:uploadedResources.entrySet()) {
|
for(Entry<AssociatedContent,ArrayList<TempFile>> entry:uploadedResources.entrySet()) {
|
||||||
AssociatedContent content=entry.getKey();
|
AssociatedContent content=entry.getKey();
|
||||||
ArrayList<PersistedContent> persisted=new ArrayList<PersistedContent>();
|
ArrayList<PersistedContent> persisted=new ArrayList<PersistedContent>();
|
||||||
|
@ -95,7 +91,7 @@ public class ContentHandler {
|
||||||
String description=null;
|
String description=null;
|
||||||
String workspace=null;
|
String workspace=null;
|
||||||
log.debug("Storing "+content);
|
log.debug("Storing "+content);
|
||||||
|
|
||||||
if(content instanceof RelazioneScavo) {
|
if(content instanceof RelazioneScavo) {
|
||||||
destination= wsManager.getSubFolder("relazione");
|
destination= wsManager.getSubFolder("relazione");
|
||||||
description="Relazione di scavo : "+content.getTitolo();
|
description="Relazione di scavo : "+content.getTitolo();
|
||||||
|
@ -108,27 +104,31 @@ public class ContentHandler {
|
||||||
if(content instanceof LayerConcessione) {
|
if(content instanceof LayerConcessione) {
|
||||||
destination= wsManager.getSubFolder("layers/"+content.getTitolo());
|
destination= wsManager.getSubFolder("layers/"+content.getTitolo());
|
||||||
description="Layer concessione : "+content.getTitolo();
|
description="Layer concessione : "+content.getTitolo();
|
||||||
|
|
||||||
if(publish) {
|
if(publish) {
|
||||||
//if not present create workspace for current project
|
try {
|
||||||
if(workspace==null)
|
//if not present create workspace for current project
|
||||||
workspace=sdiManager.createWorkspace("gna_conc_"+record.getId());
|
if(workspace==null)
|
||||||
|
workspace=sdiManager.createWorkspace("gna_conc_"+record.getId());
|
||||||
GeoServerContent geoserverPersisted=sdiManager.pushShapeLayerFileSet((SDILayerDescriptor)content, entry.getValue(),workspace);
|
|
||||||
geoserverPersisted.setAssociated(content);
|
GeoServerContent geoserverPersisted=sdiManager.pushShapeLayerFileSet((SDILayerDescriptor)content, entry.getValue(),workspace);
|
||||||
persisted.add(geoserverPersisted);
|
geoserverPersisted.setAssociated(content);
|
||||||
|
persisted.add(geoserverPersisted);
|
||||||
|
}catch(SDIInteractionException e) {
|
||||||
|
log.warn("Unable to publish layers.",e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}else throw new Exception("Invalid SDI Content "+content);
|
}else throw new Exception("Invalid SDI Content "+content);
|
||||||
|
|
||||||
|
|
||||||
}else if (content instanceof OtherContent ) {
|
}else if (content instanceof OtherContent ) {
|
||||||
destination= wsManager.getSubFolder("other/"+content.getTitolo());
|
destination= wsManager.getSubFolder("other/"+content.getTitolo());
|
||||||
description= "Other content : "+content.getTitolo();
|
description= "Other content : "+content.getTitolo();
|
||||||
}else throw new Exception ("Invalid content "+content);
|
}else throw new Exception ("Invalid content "+content);
|
||||||
|
|
||||||
log.debug("Actually Storing files to WS folder "+destination.getId());
|
log.debug("Actually Storing files to WS folder "+destination.getId());
|
||||||
|
|
||||||
for(TempFile theFile : entry.getValue()) {
|
for(TempFile theFile : entry.getValue()) {
|
||||||
WorkspaceContent wsContent=wsManager.storeToWS(theFile.getTheFile(), destination, theFile.getOriginalFileName(), description);
|
WorkspaceContent wsContent=wsManager.storeToWS(theFile.getTheFile(), destination, theFile.getOriginalFileName(), description);
|
||||||
wsContent.setAssociated(content);
|
wsContent.setAssociated(content);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.gcube.application.geoportal.storage;
|
package org.gcube.application.geoportal.storage;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -7,6 +8,7 @@ import java.util.List;
|
||||||
import org.gcube.application.geoportal.model.content.GeoServerContent;
|
import org.gcube.application.geoportal.model.content.GeoServerContent;
|
||||||
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
|
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
|
||||||
import org.gcube.application.geoportal.model.gis.SDILayerDescriptor;
|
import org.gcube.application.geoportal.model.gis.SDILayerDescriptor;
|
||||||
|
import org.gcube.application.geoportal.utils.Files;
|
||||||
import org.gcube.data.transfer.library.DataTransferClient;
|
import org.gcube.data.transfer.library.DataTransferClient;
|
||||||
import org.gcube.data.transfer.library.TransferResult;
|
import org.gcube.data.transfer.library.TransferResult;
|
||||||
import org.gcube.data.transfer.library.faults.DestinationNotSetException;
|
import org.gcube.data.transfer.library.faults.DestinationNotSetException;
|
||||||
|
@ -22,12 +24,18 @@ import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
|
||||||
|
|
||||||
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
|
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
|
||||||
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.UploadMethod;
|
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.UploadMethod;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class SDIManager {
|
public class SDIManager {
|
||||||
|
|
||||||
|
static private String DEFAULT_CRS="EPSG:4326";
|
||||||
|
|
||||||
|
|
||||||
private GISInterface gis;
|
private GISInterface gis;
|
||||||
private DataTransferClient dtGeoServer;
|
private DataTransferClient dtGeoServer;
|
||||||
private String geoserverHostName;
|
private String geoserverHostName;
|
||||||
|
@ -69,8 +77,6 @@ public class SDIManager {
|
||||||
try {
|
try {
|
||||||
String remoteFolder=null;
|
String remoteFolder=null;
|
||||||
String fileName=null;
|
String fileName=null;
|
||||||
long projectInternalID=currentElement.getRecord().getId();
|
|
||||||
long layerInternalID=currentElement.getId();
|
|
||||||
|
|
||||||
log.debug("Transferring "+files.size()+" files to geoserver @ "+geoserverHostName);
|
log.debug("Transferring "+files.size()+" files to geoserver @ "+geoserverHostName);
|
||||||
|
|
||||||
|
@ -83,14 +89,15 @@ public class SDIManager {
|
||||||
Destination destination=new Destination(f.getOriginalFileName());
|
Destination destination=new Destination(f.getOriginalFileName());
|
||||||
destination.setCreateSubfolders(true);
|
destination.setCreateSubfolders(true);
|
||||||
destination.setOnExistingFileName(DestinationClashPolicy.REWRITE);
|
destination.setOnExistingFileName(DestinationClashPolicy.REWRITE);
|
||||||
|
destination.setOnExistingSubFolder(DestinationClashPolicy.ADD_SUFFIX);
|
||||||
destination.setPersistenceId("geoserver");
|
destination.setPersistenceId("geoserver");
|
||||||
destination.setSubFolder("GNA/"+projectInternalID+"/"+layerInternalID);
|
destination.setSubFolder("GNA/"+currentElement.getRecord().getId()+"/"+currentElement.getLayerName());
|
||||||
TransferResult result=dtGeoServer.localFile(f.getTheFile(), destination);
|
TransferResult result=dtGeoServer.localFile(f.getTheFile(), destination);
|
||||||
content.getFileNames().add(f.getOriginalFileName());
|
content.getFileNames().add(f.getOriginalFileName());
|
||||||
|
|
||||||
remoteFolder=result.getRemotePath();
|
remoteFolder=result.getRemotePath().substring(0,result.getRemotePath().lastIndexOf("/"));
|
||||||
fileName=f.getOriginalFileName();
|
fileName=f.getOriginalFileName();
|
||||||
content.setGeoserverPath(result.getRemotePath());
|
content.setGeoserverPath(remoteFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,9 +112,9 @@ public class SDIManager {
|
||||||
gis.getCurrentGeoServer().getPublisher().createWorkspace(workspace);
|
gis.getCurrentGeoServer().getPublisher().createWorkspace(workspace);
|
||||||
log.debug("Publishing remote folder "+remoteFolder);
|
log.debug("Publishing remote folder "+remoteFolder);
|
||||||
|
|
||||||
URL directoryPath=new URL("file:"+remoteFolder.substring(0,remoteFolder.lastIndexOf("/")));
|
URL directoryPath=new URL("file:"+remoteFolder);
|
||||||
|
|
||||||
String DEFAULT_CRS="EPSG:4326";
|
|
||||||
|
|
||||||
//TODO Evaluate SRS
|
//TODO Evaluate SRS
|
||||||
|
|
||||||
|
@ -141,6 +148,65 @@ public class SDIManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String createStoreFromPostgisDB(String workspace,String storeName) throws SDIInteractionException {
|
||||||
|
//SET BY PROVISIONING
|
||||||
|
GSPostGISDatastoreEncoder encoder=new GSPostGISDatastoreEncoder(storeName);
|
||||||
|
encoder.setJndiReferenceName("java:comp/env/jdbc/postgres");
|
||||||
|
encoder.setLooseBBox(true);
|
||||||
|
encoder.setDatabaseType("postgis");
|
||||||
|
encoder.setEnabled(true);
|
||||||
|
encoder.setFetchSize(1000);
|
||||||
|
encoder.setValidateConnections(true);
|
||||||
|
try {
|
||||||
|
if(!gis.getCurrentGeoServer().getDataStoreManager().create(workspace, encoder))
|
||||||
|
log.warn("Unable to create workspace "+storeName+". Assuming already exisintg..");
|
||||||
|
return storeName;
|
||||||
|
} catch (IllegalArgumentException | MalformedURLException e) {
|
||||||
|
throw new SDIInteractionException("Unable to create store "+storeName,e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String publishLayer(File sldFile,String name) throws SDIInteractionException {
|
||||||
|
try {
|
||||||
|
if(!gis.getCurrentGeoServer().getPublisher().publishStyle(sldFile, name))
|
||||||
|
log.warn("Unable to create style "+name+". Assuming already exisintg..");
|
||||||
|
return name;
|
||||||
|
} catch (IllegalArgumentException | MalformedURLException e) {
|
||||||
|
throw new SDIInteractionException("Unable to create style "+name,e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String configureCentroidLayer(String name,String workspace,String storeName) throws SDIInteractionException {
|
||||||
|
|
||||||
|
GSFeatureTypeEncoder fte=new GSFeatureTypeEncoder();
|
||||||
|
fte.setAbstract("Centroid layer for "+name);
|
||||||
|
fte.setEnabled(true);
|
||||||
|
fte.setNativeCRS(DEFAULT_CRS);
|
||||||
|
fte.setTitle(name);
|
||||||
|
|
||||||
|
String style="clustered_centroids";
|
||||||
|
|
||||||
|
GSLayerEncoder layerEncoder=new GSLayerEncoder();
|
||||||
|
layerEncoder.setDefaultStyle(style);
|
||||||
|
layerEncoder.setEnabled(true);
|
||||||
|
layerEncoder.setQueryable(true);
|
||||||
|
try {
|
||||||
|
//Checking workspace
|
||||||
|
createWorkspace(workspace);
|
||||||
|
//Checking store
|
||||||
|
createStoreFromPostgisDB(workspace, storeName);
|
||||||
|
//Checkig layer
|
||||||
|
publishLayer(Files.getFileFromResources("/styles/clustered_points.sld"),style);
|
||||||
|
|
||||||
|
if(!gis.getCurrentGeoServer().getPublisher().publishDBLayer(workspace, storeName, fte, layerEncoder))
|
||||||
|
log.warn("Unable to create layer "+name+". Assuming already exisintg..");
|
||||||
|
return name;
|
||||||
|
} catch (IllegalArgumentException | MalformedURLException e) {
|
||||||
|
throw new SDIInteractionException("Unable to create layer "+name,e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
gs.centroid.workspace
|
||||||
|
gs.centroid.store
|
||||||
|
|
||||||
|
#Concessioni
|
||||||
|
|
||||||
|
concessioni.gs
|
||||||
|
concessioni.gs.centroid.
|
||||||
|
|
||||||
|
#Workspace
|
|
@ -12,18 +12,19 @@ import org.gcube.application.geoportal.utils.ISUtils;
|
||||||
public class CheckContextConfiguration {
|
public class CheckContextConfiguration {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
TokenSetter.set("/gcube/devNext/NextNext");
|
// TokenSetter.set("/gcube/devNext/NextNext");
|
||||||
System.out.println("Checking for internal .. ");
|
TokenSetter.set("/pred4s/preprod/preVRE");
|
||||||
ConcessioneManager manager=ManagerFactory.getByRecord(new Concessione());
|
// System.out.println("Checking for internal .. ");
|
||||||
try {
|
// ConcessioneManager manager=ManagerFactory.getByRecord(new Concessione());
|
||||||
manager.commit(false);
|
// try {
|
||||||
} catch (ValidationException | PersistenceException | PublishException e) {
|
// manager.commit(false);
|
||||||
// TODO Auto-generated catch block
|
// } catch (ValidationException | PersistenceException | PublishException e) {
|
||||||
e.printStackTrace();
|
// // TODO Auto-generated catch block
|
||||||
}finally {
|
// e.printStackTrace();
|
||||||
manager.shutdown();
|
// }finally {
|
||||||
}
|
// manager.shutdown();
|
||||||
|
// }
|
||||||
|
System.out.println(ISUtils.queryForDB("postgresql", "internal-db"));
|
||||||
System.out.println("Checking for postgis .. ");
|
System.out.println("Checking for postgis .. ");
|
||||||
System.out.println(ISUtils.queryForDB("postgis", "Concessioni"));
|
System.out.println(ISUtils.queryForDB("postgis", "Concessioni"));
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,8 @@ import org.junit.Assert;
|
||||||
public class UseCases {
|
public class UseCases {
|
||||||
|
|
||||||
public static void main(String[] args) throws PersistenceException, IOException, ValidationException, PublishException {
|
public static void main(String[] args) throws PersistenceException, IOException, ValidationException, PublishException {
|
||||||
TokenSetter.set("/gcube/devNext/NextNext");
|
// TokenSetter.set("/gcube/devNext/NextNext");
|
||||||
|
TokenSetter.set("/pred4s/preprod/preVRE");
|
||||||
try{
|
try{
|
||||||
registerNewConcessione();
|
registerNewConcessione();
|
||||||
}catch(ValidationException e) {
|
}catch(ValidationException e) {
|
||||||
|
|
|
@ -2,11 +2,16 @@ package org.gcube.application.geoportal.db;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
|
||||||
import org.gcube.application.geoportal.TestModel;
|
import org.gcube.application.geoportal.TestModel;
|
||||||
import org.gcube.application.geoportal.managers.AbstractRecordManager;
|
import org.gcube.application.geoportal.managers.AbstractRecordManager;
|
||||||
|
import org.gcube.application.geoportal.managers.AbstractRecordManager.EMFProvider;
|
||||||
import org.gcube.application.geoportal.managers.ConcessioneManager;
|
import org.gcube.application.geoportal.managers.ConcessioneManager;
|
||||||
import org.gcube.application.geoportal.managers.ManagerFactory;
|
import org.gcube.application.geoportal.managers.ManagerFactory;
|
||||||
import org.gcube.application.geoportal.model.concessioni.Concessione;
|
import org.gcube.application.geoportal.model.concessioni.Concessione;
|
||||||
|
import org.gcube.application.geoportal.model.db.DBConstants;
|
||||||
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
import org.gcube.application.geoportal.model.fault.PersistenceException;
|
||||||
import org.gcube.application.geoportal.model.fault.PublishException;
|
import org.gcube.application.geoportal.model.fault.PublishException;
|
||||||
import org.gcube.application.geoportal.model.fault.ValidationException;
|
import org.gcube.application.geoportal.model.fault.ValidationException;
|
||||||
|
@ -15,10 +20,14 @@ import org.gcube.application.geoportal.model.report.ValidationReport.ValidationS
|
||||||
import org.gcube.application.geoportal.utils.Serialization;
|
import org.gcube.application.geoportal.utils.Serialization;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class Records {
|
public class Records {
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
|
@ -26,7 +35,19 @@ public class Records {
|
||||||
AbstractRecordManager.shutdown();
|
AbstractRecordManager.shutdown();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@BeforeClass
|
||||||
|
public static void init() {
|
||||||
|
AbstractRecordManager.setDefaultProvider(new EMFProvider() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityManagerFactory getFactory() {
|
||||||
|
try{
|
||||||
|
return Persistence.createEntityManagerFactory(DBConstants.INTERNAL.DB_NAME);
|
||||||
|
}catch(Throwable t1) {
|
||||||
|
throw new RuntimeException("Unable to init local databse",t1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}); }
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void Concessioni() throws PersistenceException, ValidationException, PublishException, JsonProcessingException {
|
public void Concessioni() throws PersistenceException, ValidationException, PublishException, JsonProcessingException {
|
||||||
|
|
Loading…
Reference in New Issue