diff --git a/CHANGELOG.md b/CHANGELOG.md index 15107ed..f78ce7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-logic +## [v1.0.13] - 2020-12-11 +Geoserver filename clash +Updated model concessioni + + ## [v1.0.12] - 2020-12-11 Fixed missing centroid diff --git a/pom.xml b/pom.xml index 3c8e90a..c446b6f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-logic - 1.0.12 + 1.0.13 Geoportal Logic @@ -49,7 +49,6 @@ org.gcube.core common-gcube-calls - [1.0.0,1.2.0) diff --git a/src/main/java/org/gcube/application/geoportal/model/concessioni/RelazioneScavo.java b/src/main/java/org/gcube/application/geoportal/model/concessioni/RelazioneScavo.java index 83eb056..3372d76 100644 --- a/src/main/java/org/gcube/application/geoportal/model/concessioni/RelazioneScavo.java +++ b/src/main/java/org/gcube/application/geoportal/model/concessioni/RelazioneScavo.java @@ -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 responsabili; diff --git a/src/main/java/org/gcube/application/geoportal/storage/SDIManager.java b/src/main/java/org/gcube/application/geoportal/storage/SDIManager.java index 99724d6..d586370 100644 --- a/src/main/java/org/gcube/application/geoportal/storage/SDIManager.java +++ b/src/main/java/org/gcube/application/geoportal/storage/SDIManager.java @@ -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 diff --git a/src/test/java/org/gcube/application/geoportal/ShapeFilesTest.java b/src/test/java/org/gcube/application/geoportal/ShapeFilesTest.java index 4281b9f..7833ec0 100644 --- a/src/test/java/org/gcube/application/geoportal/ShapeFilesTest.java +++ b/src/test/java/org/gcube/application/geoportal/ShapeFilesTest.java @@ -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"); -// 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()); + 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); - 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)); } diff --git a/src/test/java/org/gcube/application/geoportal/TestModel.java b/src/test/java/org/gcube/application/geoportal/TestModel.java index bba3504..0fc5fc1 100644 --- a/src/test/java/org/gcube/application/geoportal/TestModel.java +++ b/src/test/java/org/gcube/application/geoportal/TestModel.java @@ -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 piante=new ArrayList(); - for(int i=0;i<1;i++) { + for(int i=0;i<2;i++) { LayerConcessione pianta=new LayerConcessione(); pianta.setValutazioneQualita("Secondo me si"); pianta.setMetodoRaccoltaDati("Fattobbene"); diff --git a/src/test/java/org/gcube/application/geoportal/TestSDI.java b/src/test/java/org/gcube/application/geoportal/TestSDI.java index 45eeb72..c109a9c 100644 --- a/src/test/java/org/gcube/application/geoportal/TestSDI.java +++ b/src/test/java/org/gcube/application/geoportal/TestSDI.java @@ -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) +// ); +// } }