Compare commits

..

17 Commits

Author SHA1 Message Date
Fabio Sinibaldi bbef28a7e6 Fixed pom version 2021-07-29 10:44:25 +02:00
Fabio Sinibaldi 653535562d PostgisDBManager now exposes connection descriptor 2021-07-29 10:38:36 +02:00
Fabio Sinibaldi 108a61730a Merge pull request '1.0.14' (#12) from 1.0.14 into master 2021-01-27 16:17:21 +01:00
Fabio Sinibaldi c70ba6651e release 2021-01-27 16:03:25 +01:00
Fabio Sinibaldi 8772708efb Fixes transaction issue 2021-01-22 18:44:54 +01:00
Fabio Sinibaldi 699386d517 Fixes transaction issue 2021-01-22 18:13:43 +01:00
Fabio Sinibaldi f77515e54c Merge pull request '1.0.13' (#11) from 1.0.13 into master 2021-01-14 16:57:43 +01:00
Fabio Sinibaldi 7be19d1d9a Releasing 1.0.13 2021-01-14 16:57:10 +01:00
Fabio Sinibaldi 0552365f31 Fixed shp extension 2021-01-14 12:58:01 +01:00
Fabio Sinibaldi 4036900221 updated concessioni model 2021-01-07 11:25:59 +01:00
Fabio Sinibaldi 5af5b7f7d4 Fixed filename clash 2020-12-16 17:25:56 +01:00
Fabio Sinibaldi e04864220c Merge pull request '1.0.12' (#10) from 1.0.12 into master 2020-12-11 17:08:49 +01:00
Fabio Sinibaldi a701d529ad Merge pull request '1.0.10' (#9) from 1.0.10 into master 2020-12-11 11:57:34 +01:00
Fabio Sinibaldi f54ff5676d Merge pull request '1.0.9' (#8) from 1.0.9 into master 2020-12-10 12:52:48 +01:00
Fabio Sinibaldi 5f30082d7a Merge pull request '1.0.8' (#7) from 1.0.8 into master 2020-12-09 12:02:29 +01:00
Fabio Sinibaldi 3e01305eaa Merge pull request '1.0.7' (#6) from 1.0.7 into master 2020-12-07 17:05:20 +01:00
Fabio Sinibaldi 8dcb2c0d97 Merge pull request '1.0.5' (#5) from 1.0.5 into master 2020-12-03 21:23:41 +01:00
14 changed files with 184 additions and 115 deletions

View File

@ -2,6 +2,18 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for org.gcube.application.geoportal-logic
## [v1.0.15-SNAPSHOT] - 2021-07-29
Exposed PostgisDB connection descriptor
## [v1.0.14] - 2020-12-11
Fixes "no transaction" issue
## [v1.0.13] - 2020-12-11
Geoserver filename clash
Updated model concessioni
## [v1.0.12] - 2020-12-11
Fixed missing centroid

16
pom.xml
View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.gcube.application</groupId>
<artifactId>geoportal-logic</artifactId>
<version>1.0.12</version>
<version>1.0.15-SNAPSHOT</version>
<name>Geoportal Logic</name>
@ -36,7 +36,7 @@
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>gcube-bom</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@ -45,13 +45,7 @@
<dependencies>
<!-- REMOVE FROM GCUBE 5 -->
<dependency>
<groupId>org.gcube.core</groupId>
<artifactId>common-gcube-calls</artifactId>
<version>[1.0.0,1.2.0)</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
@ -124,13 +118,13 @@
<dependency>
<groupId>org.gcube.spatial.data</groupId>
<artifactId>gis-interface</artifactId>
<version>[2.4.6-SNAPSHOT,3.0.0)</version>
<version>[2.4.6,3.0.0)</version>
</dependency>
<dependency>
<groupId>org.gcube.spatial.data</groupId>
<artifactId>geonetwork</artifactId>
<version>[3.4.5-SNAPSHOT,4.0.0)</version>
<version>[3.4.5,4.0.0)</version>
</dependency>
<dependency>

View File

@ -198,8 +198,8 @@ public abstract class AbstractRecordManager<T extends Record> {
private void commit() {
log.debug("Successufully committing "+theRecord);
entityManager.flush();
entityManager.clear();
// entityManager.flush();
// entityManager.clear();
transaction.commit();
log.debug("Calling postCommit");
postcommit();
@ -228,18 +228,20 @@ public abstract class AbstractRecordManager<T extends Record> {
toReturn.addChild(contentHandler.storeChanges());
commit();
transaction.begin();
if(publish) {
transaction.begin();
toReturn.addChild(contentHandler.publish());
commit();
log.debug("Registering centroid of "+theRecord);
registerCentroid();
transaction.begin();
registerCentroid();
toReturn.addMessage(ValidationStatus.PASSED, "Inserito centroide per record "+theRecord.getId());
commit();
}
log.debug("Committing session for "+theRecord);
commit();
} catch (PersistenceException e) {
toReturn.addChild(e.getReport());
log.warn("Unexpected internal exception ",e);

View File

@ -27,6 +27,12 @@ public class RelazioneScavo extends AssociatedContent {
@Type(type="text")
private String abstractSection;
@Type(type="text")
private String abstractIta;
@Type(type="text")
private String abstractEng;
@LazyCollection(LazyCollectionOption.FALSE)
@ElementCollection(targetClass=String.class)
private List<String> responsabili;

View File

@ -131,9 +131,14 @@ public class PostgisDBManager implements PostgisDBManagerI {
target.setObjectInPreparedStatement(field, value, stmt, 1);
return stmt.executeUpdate();
}
/* (non-Javadoc)
@Override
public DatabaseConnection getConnectionDescriptor() {
return config;
}
/* (non-Javadoc)
* @see org.gcube.application.geoportal.PostgisDBManagerI#deleteTable(java.lang.String)
*/
@Override

View File

@ -4,6 +4,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.gcube.application.geoportal.model.db.DatabaseConnection;
import org.gcube.application.geoportal.model.db.PostgisTable;
import org.gcube.application.geoportal.model.db.PostgisTable.Field;
import org.gcube.application.geoportal.model.db.PostgisTable.POINT;
@ -37,5 +38,5 @@ public interface PostgisDBManagerI {
int deleteByFieldValue(PostgisTable target, Field field, Object value) throws SQLException;
DatabaseConnection getConnectionDescriptor();
}

View File

@ -84,7 +84,7 @@ public class SDIManager {
}
// GEOSERVER-PERSISTENCE-ID / GNA / PROJECT-ID/ FILENAME
// GEOSERVER-PERSISTENCE-ID / GNA / PROJECT-ID/ LAYER-ID /FILENAME(no extension)/...
public GeoServerContent pushShapeLayerFileSet(SDILayerDescriptor currentElement,String workspace) throws SDIInteractionException{
try {
@ -96,27 +96,34 @@ public class SDIManager {
GeoServerContent content=new GeoServerContent();
content.setGeoserverHostName(geoserverHostName);
content.setWorkspace(workspace);
WorkspaceManager wsManager=new WorkspaceManager(currentElement.getRecord());
currentElement.getActualContent().forEach((PersistedContent c)->{
try {
if(c instanceof WorkspaceContent) {
WorkspaceContent wc=(WorkspaceContent) c;
FileContainer fc=wsManager.getFileById(wc.getStorageID());
String filename=Files.fixFilename(fc.get().getName());
String completeFilename=Files.fixFilename(fc.get().getName());
String filename=completeFilename.contains(".")?completeFilename.substring(0, completeFilename.lastIndexOf(".")):completeFilename;
Destination destination=new Destination(filename);
Destination destination=new Destination(completeFilename);
destination.setCreateSubfolders(true);
destination.setOnExistingFileName(DestinationClashPolicy.REWRITE);
destination.setOnExistingSubFolder(DestinationClashPolicy.ADD_SUFFIX);
destination.setOnExistingSubFolder(DestinationClashPolicy.APPEND);
destination.setPersistenceId("geoserver");
destination.setSubFolder("GNA/"+currentElement.getRecord().getId()+"/"+filename);
destination.setSubFolder("GNA/"+currentElement.getRecord().getId()+"/"+
currentElement.getId()+"/"+filename);
log.debug("Sending "+wc+" to "+destination);
TransferResult result=dtGeoServer.httpSource(fc.getPublicLink(), destination);
log.debug("Transferred "+result);
content.getFileNames().add(filename);
content.getFileNames().add(completeFilename);
content.setGeoserverPath(result.getRemotePath().substring(0,result.getRemotePath().lastIndexOf("/")));
}
@ -127,18 +134,24 @@ public class SDIManager {
});
if(content.getFileNames().isEmpty())
throw new SDIInteractionException("No Persisted content found in "+currentElement);
String fileName=content.getFileNames().get(0);
String remoteFolder=content.getGeoserverPath().substring(0,content.getGeoserverPath().lastIndexOf("/"));
String completeFileName=content.getFileNames().get(0);
String filename=completeFileName.contains(".")?completeFileName.substring(0, completeFileName.lastIndexOf(".")):completeFileName;
String toSetLayerName=fileName.substring(0,fileName.lastIndexOf("."));
String remoteFolder=content.getGeoserverPath();
String toSetLayerName=filename;
int count=0;
while(gis.getCurrentGeoServer().getReader().getLayer(workspace,toSetLayerName)!=null){
count++;
toSetLayerName=fileName.substring(0,fileName.lastIndexOf("."))+"_"+count;
log.debug("layer for "+fileName+" already existing, trying "+toSetLayerName);
toSetLayerName=filename+"_"+count;
log.debug("layer for "+filename+" already existing, trying "+toSetLayerName);
};
@ -151,7 +164,7 @@ public class SDIManager {
createWorkspace(workspace);
log.debug("Publishing remote folder "+remoteFolder);
URL directoryPath=new URL("file:"+remoteFolder+"/"+toSetLayerName+".shp");
URL directoryPath=new URL("file:"+remoteFolder+"/"+filename+".shp");
//TODO Evaluate SRS

View File

@ -4,6 +4,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.gcube.application.geoportal.model.db.DatabaseConnection;
import org.gcube.application.geoportal.model.db.PostgisTable;
import org.gcube.application.geoportal.model.db.PostgisTable.Field;
import org.gcube.application.geoportal.model.db.PostgisTable.POINT;
@ -25,7 +26,12 @@ public class PostgisMockup implements PostgisDBManagerI {
// TODO Auto-generated method stub
return 0;
}
@Override
public DatabaseConnection getConnectionDescriptor() {
return null;
}
@Override
public void deleteTable(String tableName) throws SQLException {
// TODO Auto-generated method stub

View File

@ -1,33 +1,38 @@
package org.gcube.application.geoportal;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Collections;
import org.gcube.application.geoportal.utils.Files;
import org.geotoolkit.data.DataStore;
import org.geotoolkit.data.DataStoreFactory;
import org.geotoolkit.data.DataStoreFinder;
import org.geotoolkit.storage.DataStoreException;
public class ShapeFilesTest {
public static void main(String[] args) throws MalformedURLException, DataStoreException {
// File shp=Files.getFileFromResources("concessioni/pos.shp");
// System.out.println("File "+shp.getAbsolutePath()+" : "+shp.getTotalSpace()+"b");
//// DataStoreFinder.scanForPlugins();
// System.out.println("Factories are");
File shp=Files.getFileFromResources("concessioni/pos.shp");
System.out.println("File "+shp.getAbsolutePath()+" : "+shp.getTotalSpace()+"b");
// DataStoreFinder.scanForPlugins();
System.out.println("Factories are");
// DataStoreFinder.getAllFactories(null).forEach((DataStoreFactory f)->{
// System.out.println(f.getDisplayName()+"\t"+f.getDescription());
// });
// System.out.println();
// DataStore inputDataStore = DataStoreFinder.open(
// Collections.singletonMap("url", shp.toURI().toURL()));
//
// System.out.println("Datastore is "+inputDataStore);
//
//
// System.out.println(inputDataStore.getTypeNames());
System.out.println("Opening : "+shp.toURI().toURL());
DataStore inputDataStore = DataStoreFinder.open(
Collections.singletonMap("url", shp.toURI().toURL()));
System.out.println("Datastore is "+inputDataStore);
String filename="some Une+* / \\ []() l:];kaj.sd\"sfl.blah";
System.out.println(Files.fixFilename(filename));
System.out.println(inputDataStore.getTypeNames());
// String filename="some Une+* / \\ []() l:];kaj.sd\"sfl.blah";
// System.out.println(Files.fixFilename(filename));
}

View File

@ -67,6 +67,8 @@ public class TestModel {
RelazioneScavo relScavo=new RelazioneScavo();
relScavo.setAbstractSection("simple abstract section");
relScavo.setAbstractEng("simple abstract section ENG ");
relScavo.setAbstractIta("semplice abstract ITA ");
relScavo.setResponsabili(concessione.getAuthors());
concessione.setRelazioneScavo(relScavo);
@ -92,7 +94,7 @@ public class TestModel {
// Piante fine scavo
ArrayList<LayerConcessione> piante=new ArrayList<LayerConcessione>();
for(int i=0;i<1;i++) {
for(int i=0;i<5;i++) {
LayerConcessione pianta=new LayerConcessione();
pianta.setValutazioneQualita("Secondo me si");
pianta.setMetodoRaccoltaDati("Fattobbene");

View File

@ -1,38 +1,21 @@
package org.gcube.application.geoportal;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.UUID;
import org.gcube.application.geoportal.model.content.GeoServerContent;
import org.gcube.application.geoportal.model.fault.SDIInteractionException;
import org.gcube.application.geoportal.model.concessioni.Concessione;
import org.gcube.application.geoportal.model.concessioni.LayerConcessione;
import org.gcube.application.geoportal.model.gis.SDILayerDescriptor;
import org.gcube.application.geoportal.storage.SDIManager;
import org.gcube.application.geoportal.utils.Files;
import org.gcube.application.geoportal.utils.Workspace;
import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.spatial.data.gis.GISInterface;
import org.geotoolkit.storage.DataStoreException;
import it.geosolutions.geoserver.rest.GeoServerRESTReader;
import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
public class TestSDI {
public static void main(String[] args) throws Exception {
TokenSetter.set("/gcube/devNext/NextNext");
TokenSetter.set("/gcube/devsec/devVRE");
// String workspaceName="gna_conc_"+UUID.randomUUID().toString();
//
// FileContainer file=Workspace.getClient().getWSRoot().uploadFile(
// new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")), "posizionamento", "test layer");
//
// SDIManager sdiManager=new SDIManager();
SDIManager sdiManager=new SDIManager();
// sdiManager.createWorkspace(workspaceName);
// sdiManager.configureCentroidLayer("centroids_concessioni", "gna:test", "gna_test_postgis");
@ -42,33 +25,38 @@ public class TestSDI {
//
// GeoServerContent content=sdiManager.pushLayerFile(Files.getFileFromResources("concessioni/pos.shp"), "pos.shp", 123, 1);
// System.out.println("content is "+content);
// sdiManager.publishShapeFileDirectory(workspaceName, content.getGeoserverPath());
// GeoServerContent content =
//
// SDILayerDescriptor desc=TestModel.prepareConcessione().getPosizionamentoScavo();
//
// sdiManager.pushShapeLayerFileSet(desc,new Workspace());
GISInterface gis=GISInterface.get();
String workspace="gna";
String toSetLayerName="centroids_concessioni";
String geoserverHostName=new URL(gis.getCurrentGeoServer().getUrl()).getHost();
GeoServerRESTReader reader=gis.getCurrentGeoServer().getReader();
RESTLayer l=reader.getLayer(workspace, toSetLayerName);
RESTFeatureType f= reader.getFeatureType(l);
System.out.println(String.format("http://%1$s/geoserver/%2$s/wms?"
+"service=WMS&version=1.1.0&request=GetMap&layers=%2$s:%3$s&"
+ "styles=&bbox=%4$f,%5$f,%6$f,%7$f&srs=%8$s&format=application/openlayers&width=%9$d&height=%10$d",
geoserverHostName,
workspace,
toSetLayerName,
f.getMinX(),
f.getMinY(),
f.getMaxX(),
f.getMaxY(),
"EPSG:4326",
400,
400)
);
// GISInterface gis=GISInterface.get();
// String workspace="gna";
// String toSetLayerName="centroids_concessioni";
// String geoserverHostName=new URL(gis.getCurrentGeoServer().getUrl()).getHost();
//
// GeoServerRESTReader reader=gis.getCurrentGeoServer().getReader();
// RESTLayer l=reader.getLayer(workspace, toSetLayerName);
// RESTFeatureType f= reader.getFeatureType(l);
//
// System.out.println(String.format("http://%1$s/geoserver/%2$s/wms?"
// +"service=WMS&version=1.1.0&request=GetMap&layers=%2$s:%3$s&"
// + "styles=&bbox=%4$f,%5$f,%6$f,%7$f&srs=%8$s&format=application/openlayers&width=%9$d&height=%10$d",
// geoserverHostName,
// workspace,
// toSetLayerName,
// f.getMinX(),
// f.getMinY(),
// f.getMaxX(),
// f.getMaxY(),
// "EPSG:4326",
// 400,
// 400)
// );
//
}
}

View File

@ -3,6 +3,7 @@ package org.gcube.application.geoportal;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import org.gcube.application.geoportal.managers.AbstractRecordManager;
import org.gcube.application.geoportal.managers.ConcessioneManager;
@ -35,7 +36,7 @@ public class UseCases {
//CREATE NEW
int numConcessioni=1;
int numConcessioni=3 ;
Concessione registered=null;
System.out.println("Try to create.. "+numConcessioni);
for(int i=0;i<numConcessioni;i++)
@ -117,15 +118,17 @@ public class UseCases {
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")),"pos.shp"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shx")),"pos.shx"));
for(LayerConcessione layer:TestModel.prepareConcessione().getPianteFineScavo())
List<LayerConcessione> ls=TestModel.prepareConcessione().getPianteFineScavo();
for(int i=0;i<ls.size();i++) {
LayerConcessione layer=ls.get(i);
//Istruisco il manager per gestire il/i payload del layer, specificando i nomi dei file originali
manager.addPiantaFineScavo(layer,
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.dbf")),"qualche Pianta.dbf"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.prj")),"qualche Pianta.prj"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.qpj")),"qualche Pianta.qpj"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")),"qualche Pianta.shp"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shx")),"qualche Pianta.shx"));
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.dbf")),"qualche Pianta "+i+".dbf"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.prj")),"qualche Pianta "+i+".prj"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.qpj")),"qualche Pianta "+i+".qpj"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")),"qualche Pianta "+i+".shp"),
new InputStreamDescriptor(new FileInputStream(Files.getFileFromResources("concessioni/pos.shx")),"qualche Pianta "+i+".shx"));
}
//If true -> data are published into the SDI
Boolean publish=true;
@ -146,8 +149,8 @@ public class UseCases {
*scrittura sul DB di applicazione sia dei meta che dei vari link */
//Metodo con eccezioni
Concessione registered=manager.commit(publish);
// Concessione registered=manager.commit(publish);
manager.commitSafely(true);
//Metodo con report
// PublicationReport pubReport=manager.commitSafely(publish);
@ -158,8 +161,8 @@ public class UseCases {
// System.out.println("Report is "+pubReport.prettyPrint());
// Assert.assertFalse(pubReport.getStatus().equals(ValidationStatus.ERROR));
manager.close();
return registered;
// manager.close();
return manager.getRecord();
//--- FINALLY --/
}

View File

@ -1,9 +1,13 @@
package org.gcube.application.geoportal;
import java.util.List;
import org.gcube.application.geoportal.utils.Workspace;
import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.ContainerType;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.client.dsl.ItemContainer;
import org.gcube.common.storagehub.client.dsl.ListResolver;
import org.gcube.common.storagehub.client.dsl.ListResolverTyped;
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.common.storagehub.model.items.Item;
@ -11,22 +15,32 @@ import org.gcube.common.storagehub.model.items.Item;
public class WSTests {
public static void main(String[] args) throws StorageHubException {
TokenSetter.set("/gcube/devNext/NextNext");
TokenSetter.set("/gcube/devsec/devVRE");
StorageHubClient client=Workspace.getClient();
String id="9e397c1f-0b52-4b59-b247-e5ef301978ed";
String id="f835cd8a-0a92-4266-8c33-0b05e202ed94";
ItemContainer item=client.open(id).asItem();
// FolderContainer item=client.open(id).asFolder();
FolderContainer item=client.openVREFolder().openByRelativePath(".GNA_RECORDS").asFolder();
System.out.println(item.get().getPath());
// switch(item.getType()) {
// case FILE :
// FileContainer file=(FileContainer) item;
// file.getAnchestors();
// case FOLDER :
// }
System.out.println(path(item));
// System.out.println(path(item));
//
// System.out.println("TREE : ");
boolean showHidden=true;
printTree("", item,showHidden);
}
public static String path(ItemContainer item) throws StorageHubException {
StringBuilder builder=new StringBuilder();
ListResolver resolver=item.getAnchestors();
@ -36,4 +50,22 @@ public class WSTests {
return builder.toString();
}
public static void printTree(String padding,ItemContainer item,boolean showHidden){
System.out.println(padding + "" +item.get().getName() +" [ID : "+item.getId()+", hidden = "+item.get().isHidden()+"]" );
if(item.getType().equals(ContainerType.FOLDER)) {
FolderContainer c =((FolderContainer)item);
String newPadding=padding+"\t";
List<? extends ItemContainer> l;
try {
ListResolverTyped lt=c.list();
if(showHidden)lt.includeHidden();
l = lt.getContainers();
} catch (StorageHubException e) {
throw new RuntimeException("Errore",e);
}
l.forEach((ItemContainer i)->{printTree(newPadding, i,showHidden);});
}
}
}

View File

@ -1,4 +1,4 @@
log4j.rootLogger=WARN, stdout
log4j.rootLogger=ERROR, stdout
log4j.logger.org.gcube.application=DEBUG, stdout
#CONSOLE