From 27a326ea33224a4b4c6dc39f6a2824db2cad53ba Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 3 Sep 2021 18:25:27 +0200 Subject: [PATCH] Edit FileSet features and utilities --- .../client/DefaultMongoConcessioni.java | 21 ++++- .../legacy/StatefulMongoConcessioni.java | 48 ++++-------- .../geoportal/client/utils/FileSets.java | 65 ++++++++++++++++ .../clients/StatefulClientTests.java | 5 +- .../clients/StatelessClientTests.java | 51 ++++++++---- .../geoportal/usecases/ClearConcessioni.java | 9 ++- .../geoportal/usecases/EditFileSet.java | 77 +++++++++++++++++++ 7 files changed, 222 insertions(+), 54 deletions(-) create mode 100644 src/main/java/org/gcube/application/geoportal/client/utils/FileSets.java create mode 100644 src/test/java/org/gcube/application/geoportal/usecases/EditFileSet.java diff --git a/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java b/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java index 37afbec..2ff53f6 100644 --- a/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java +++ b/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java @@ -193,7 +193,7 @@ public class DefaultMongoConcessioni implements MongoConcessioni{ @Override - public Concessione registerFile(String id, AddSectionToConcessioneRequest request) throws Exception { + public Concessione registerFileSet(String id, AddSectionToConcessioneRequest request) throws Exception { log.info("Registering {} in {}",request,id); Call call= new Call(){ @Override @@ -205,7 +205,24 @@ public class DefaultMongoConcessioni implements MongoConcessioni{ } }; Concessione toReturn = delegate.make(call); - log.debug("Published {} ",toReturn); + log.debug("Registered Fileset {} result is {} ",request,toReturn); + return toReturn; + } + + @Override + public Concessione cleanFileSet(String id, String path)throws Exception{ + log.info("Cleaning Fileset at {} in {}",path,id); + Call call= new Call(){ + @Override + public Concessione call(WebTarget endpoint) throws Exception { + Response resp= endpoint.path(InterfaceConstants.Methods.DELETE_FILES_PATH). + path(id).request(MediaType.APPLICATION_JSON).post(Entity.entity(path, + MediaType.APPLICATION_JSON)); + return check(resp,Concessione.class); + } + }; + Concessione toReturn = delegate.make(call); + log.debug("Cleaned path {} result {} ",path,toReturn); return toReturn; } diff --git a/src/main/java/org/gcube/application/geoportal/client/legacy/StatefulMongoConcessioni.java b/src/main/java/org/gcube/application/geoportal/client/legacy/StatefulMongoConcessioni.java index 2551067..cf33b58 100644 --- a/src/main/java/org/gcube/application/geoportal/client/legacy/StatefulMongoConcessioni.java +++ b/src/main/java/org/gcube/application/geoportal/client/legacy/StatefulMongoConcessioni.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import javax.ws.rs.client.WebTarget; import org.gcube.application.geoportal.client.DefaultMongoConcessioni; +import org.gcube.application.geoportal.client.utils.FileSets; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths; import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor; @@ -67,8 +68,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements currentC=replace(currentC); - currentC=super.registerFile(currentC.getMongo_id(), - request(Paths.imgByIndex(currentC.getImmaginiRappresentative().size()-1),f)); + currentC=super.registerFileSet(currentC.getMongo_id(), + FileSets.build(Paths.imgByIndex(currentC.getImmaginiRappresentative().size()-1),f).getTheRequest()); return currentC; } @@ -80,8 +81,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements currentC=replace(currentC); - currentC=super.registerFile(currentC.getMongo_id(), - request(Paths.piantaByIndex(currentC.getPianteFineScavo().size()-1),files)); + currentC=super.registerFileSet(currentC.getMongo_id(), + FileSets.build(Paths.piantaByIndex(currentC.getPianteFineScavo().size()-1),files).getTheRequest()); return currentC; } @@ -92,8 +93,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements currentC=replace(currentC); - currentC=super.registerFile(currentC.getMongo_id(), - request(Paths.POSIZIONAMENTO,files)); + currentC=super.registerFileSet(currentC.getMongo_id(), + FileSets.build(Paths.POSIZIONAMENTO,files).getTheRequest()); return currentC; } @@ -104,8 +105,8 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements currentC=replace(currentC); - currentC=super.registerFile(currentC.getMongo_id(), - request(Paths.RELAZIONE,f)); + currentC=super.registerFileSet(currentC.getMongo_id(), + FileSets.build(Paths.RELAZIONE,f).getTheRequest()); return currentC; } @@ -113,45 +114,22 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements @Override public Concessione addImmagineRappresentativa(UploadedImage toAdd, InputStreamDescriptor f) throws Exception { - return addImmagineRappresentativa(toAdd,asTemp(f)); + return addImmagineRappresentativa(toAdd,FileSets.asTemp(storage,f)); } @Override public Concessione addPiantaFineScavo(LayerConcessione toAdd, InputStreamDescriptor... files) throws Exception { - return addPiantaFineScavo(toAdd, asTemp(files)); + return addPiantaFineScavo(toAdd, FileSets.asTemp(storage,files)); } @Override public Concessione setPosizionamento(LayerConcessione toSet, InputStreamDescriptor... files) throws Exception { - return setPosizionamento(toSet,asTemp(files)); + return setPosizionamento(toSet,FileSets.asTemp(storage,files)); } @Override public Concessione setRelazioneScavo(RelazioneScavo toSet, InputStreamDescriptor f) throws Exception { - return setRelazioneScavo(toSet,asTemp(f)); + return setRelazioneScavo(toSet,FileSets.asTemp(storage,f)); } - - - - - protected static AddSectionToConcessioneRequest request(String path, TempFile...files) { - AddSectionToConcessioneRequest req=new AddSectionToConcessioneRequest(); - req.setDestinationPath(path); - req.setStreams(new ArrayList()); - for(TempFile f:files) - req.getStreams().add(f); - return req; - } - - protected TempFile asTemp(InputStreamDescriptor descriptor) throws RemoteBackendException, FileNotFoundException { - return storage.putOntoStorage(descriptor.getStream(), descriptor.getFilename()); - } - - protected TempFile[] asTemp(InputStreamDescriptor... descriptors) throws RemoteBackendException, FileNotFoundException { - ArrayList toReturn=new ArrayList(); - for(InputStreamDescriptor desc:descriptors) - toReturn.add(storage.putOntoStorage(desc.getStream(), desc.getFilename())); - return toReturn.toArray(new TempFile[toReturn.size()]); - } } diff --git a/src/main/java/org/gcube/application/geoportal/client/utils/FileSets.java b/src/main/java/org/gcube/application/geoportal/client/utils/FileSets.java new file mode 100644 index 0000000..1ede881 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/client/utils/FileSets.java @@ -0,0 +1,65 @@ +package org.gcube.application.geoportal.client.utils; + +import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor; +import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; +import org.gcube.application.geoportal.common.rest.TempFile; +import org.gcube.application.geoportal.common.utils.StorageUtils; +import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; + +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +public class FileSets { + + public static class RequestBuilder { + AddSectionToConcessioneRequest theRequest=new AddSectionToConcessioneRequest(); + + public RequestBuilder add(TempFile... f){ + if(theRequest.getStreams()==null) + theRequest.setStreams(new ArrayList()); + for(TempFile temp: f ) + theRequest.getStreams().add(temp); + return this; + } + + public RequestBuilder add(TempFile f){ + if(theRequest.getStreams()==null) + theRequest.setStreams(new ArrayList()); + theRequest.getStreams().add(f); + return this; + } + + public RequestBuilder setPath(String path){ + theRequest.setDestinationPath(path); + return this; + } + + + + + + public AddSectionToConcessioneRequest getTheRequest(){return theRequest;} + } + + + public static RequestBuilder build(String path) { + return new RequestBuilder().setPath(path); + } + + public static RequestBuilder build(String path, TempFile...files) { + return new RequestBuilder().setPath(path).add(files); + } + + public static TempFile asTemp(StorageUtils storage,InputStreamDescriptor descriptor) throws RemoteBackendException, FileNotFoundException { + return storage.putOntoStorage(descriptor.getStream(), descriptor.getFilename()); + } + + public static TempFile[] asTemp(StorageUtils storage,InputStreamDescriptor... descriptors) throws RemoteBackendException, FileNotFoundException { + ArrayList toReturn=new ArrayList(); + for(InputStreamDescriptor desc:descriptors) + toReturn.add(storage.putOntoStorage(desc.getStream(), desc.getFilename())); + return toReturn.toArray(new TempFile[toReturn.size()]); + } +} diff --git a/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java b/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java index ce3eaee..3984f88 100644 --- a/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java +++ b/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java @@ -1,8 +1,7 @@ package org.gcube.application.geoportal.clients; import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -63,7 +62,7 @@ public class StatefulClientTests extends BasicVreTests{ return manager.publish(); } - + @Test public void testRegisterNew() throws RemoteBackendException, FileNotFoundException, Exception { diff --git a/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java b/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java index ef21e1f..fbb7ac8 100644 --- a/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java +++ b/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java @@ -1,9 +1,8 @@ package org.gcube.application.geoportal.clients; import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni; +import static org.junit.Assert.*; import java.io.File; import java.io.FileInputStream; @@ -12,6 +11,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.concurrent.atomic.AtomicLong; +import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI; import org.gcube.application.geoportal.common.model.TestModel; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths; @@ -67,14 +67,19 @@ public class StatelessClientTests extends BasicVreTests{ Collections.singletonList(new StorageUtils().putOntoStorage( new FileInputStream(Files.getFileFromResources("concessioni/relazione.pdf")), "relazione.pdf"))); - c= client.registerFile(c.getMongo_id(), request); + c= client.registerFileSet(c.getMongo_id(), request); assertNotNull(c.getRelazioneScavo().getActualContent()); assertNotNull(c.getRelazioneScavo().getActualContent().get(0)); } @Test - public void publish() throws Exception { + public void testPublsh() throws Exception { + publish(true); + } + + + public Concessione publish(Boolean verify) throws Exception { Concessione c= client.createNew(TestModel.prepareConcessione()); String mongoId=c.getMongo_id(); @@ -84,14 +89,14 @@ public class StatelessClientTests extends BasicVreTests{ Collections.singletonList(new StorageUtils().putOntoStorage( new FileInputStream(Files.getFileFromResources("concessioni/relazione.pdf")), "relazione.pdf"))); - client.registerFile(mongoId, request); + client.registerFileSet(mongoId, request); request= new AddSectionToConcessioneRequest(Paths.imgByIndex(0), Collections.singletonList(new StorageUtils().putOntoStorage( new FileInputStream(Files.getFileFromResources("concessioni/immagine.png")), "immagine.png"))); - client.registerFile(mongoId, request); + client.registerFileSet(mongoId, request); request= @@ -99,25 +104,28 @@ public class StatelessClientTests extends BasicVreTests{ Collections.singletonList(new StorageUtils().putOntoStorage( new FileInputStream(Files.getFileFromResources("concessioni/pos.shp")), "pos.shp"))); - client.registerFile(mongoId, request); + client.registerFileSet(mongoId, request); request= new AddSectionToConcessioneRequest(Paths.piantaByIndex(0), Collections.singletonList(new StorageUtils().putOntoStorage( new FileInputStream(Files.getFileFromResources("concessioni/pianta.shp")), "pianta.shp"))); - client.registerFile(mongoId, request); + client.registerFileSet(mongoId, request); c=client.publish(mongoId); - - assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED)); + + if(verify) + assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED)); + + return c; } @Test - public void getConfiguration(){ - + public void getConfiguration() throws Exception { + System.out.println(client.getCurrentConfiguration()); } @Test @@ -128,7 +136,24 @@ public class StatelessClientTests extends BasicVreTests{ } } + @Test + public void testCleanFileSet() throws Exception { + Concessione c=publish(false); + client.unpublish(c.getMongo_id()); + + //Precheck to be sure + assertFalse(c.getPosizionamentoScavo().getActualContent().isEmpty()); + assertFalse(c.getPianteFineScavo().get(0).getActualContent().isEmpty()); + + //Clear pos + c=client.cleanFileSet(c.getMongo_id(),Paths.POSIZIONAMENTO); + assertTrue(c.getPosizionamentoScavo().getActualContent().isEmpty()); + + //Clear pianta [0] + c=client.cleanFileSet(c.getMongo_id(),Paths.piantaByIndex(0)); + assertTrue(c.getPianteFineScavo().get(0).getActualContent().isEmpty()); + } // UTILS diff --git a/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java b/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java index 332c9b0..55108f6 100644 --- a/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java +++ b/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java @@ -5,6 +5,7 @@ import org.gcube.application.geoportal.clients.TokenSetter; import org.gcube.application.geoportal.common.model.legacy.Concessione; import java.util.ArrayList; +import java.util.Iterator; import java.util.concurrent.atomic.AtomicLong; import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni; @@ -24,7 +25,13 @@ public class ClearConcessioni { AtomicLong count=new AtomicLong(0); AtomicLong nullCount=new AtomicLong(0); AtomicLong errCount=new AtomicLong(0); - manager.getList().forEachRemaining((Concessione c)->{ + + + Iterator it=null; +// it=manager.getList(); + it=manager.search("{\"centroidLat\" : 0}"); + + it.forEachRemaining((Concessione c)->{ try{ String currentId=c.getMongo_id(); if(currentId==null) { diff --git a/src/test/java/org/gcube/application/geoportal/usecases/EditFileSet.java b/src/test/java/org/gcube/application/geoportal/usecases/EditFileSet.java new file mode 100644 index 0000000..3ad623a --- /dev/null +++ b/src/test/java/org/gcube/application/geoportal/usecases/EditFileSet.java @@ -0,0 +1,77 @@ +package org.gcube.application.geoportal.usecases; + +import org.gcube.application.geoportal.client.utils.FileSets; +import org.gcube.application.geoportal.clients.TokenSetter; +import org.gcube.application.geoportal.common.model.legacy.AssociatedContent; +import org.gcube.application.geoportal.common.model.legacy.Concessione; +import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor; +import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; +import org.gcube.application.geoportal.common.rest.MongoConcessioni; +import org.gcube.application.geoportal.common.utils.StorageUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; + +import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.mongoConcessioni; + +public class EditFileSet { + + public static void main(String[] args) throws Exception { + // params + String context="/gcube/devsec/devVRE"; + String publishOption="true"; + + String toUpdateId="6131ebbc02ad3d2580412be3"; + String toEditPath= Concessione.Paths.POSIZIONAMENTO; + String folderPath="/Users/fabioisti/Downloads/GNA_ELAIUSSA_FAC-SIMILE_2021/GNA_topografia_Elaiussa/PLANIMETRIE_SAGGI"; + + //Check params + Boolean publish = Boolean.parseBoolean(publishOption); + File sourceFolder=new File(folderPath); + if(!sourceFolder.canRead()) throw new Exception("Cannot read from "+folderPath); + + System.out.println("!!!!!!! SETTING CONTEXT "+context); + TokenSetter.set(context); + + + //Prepare Fileset + System.out.println("Preparing request.."); + StorageUtils storage=new StorageUtils(); + AddSectionToConcessioneRequest request= prepareRequest(storage,toEditPath,sourceFolder); + + MongoConcessioni client=mongoConcessioni().build(); + + // Unpublish + System.out.println("Unpublishing "+toUpdateId); + client.unpublish(toUpdateId); + + // update Fileset + System.out.println("Removing old fileset.. "); + client.cleanFileSet(toUpdateId,toEditPath); + + System.out.println("Sending new Fileset .."); + Concessione result= client.registerFileSet(toUpdateId,request); + + if(publish) + result = client.publish(toUpdateId); + + System.out.println("Done "); + System.out.println("Result : "+result); + + + } + + + private static AddSectionToConcessioneRequest prepareRequest(StorageUtils storage, String path, File directory) throws FileNotFoundException { + + File[] children =directory.listFiles(); + System.out.println("Found "+children+ " files to push"); + InputStreamDescriptor[] iss=new InputStreamDescriptor[children.length]; + + FileSets.RequestBuilder builder = FileSets.build(path); + for (File f : directory.listFiles()) + builder.add(FileSets.asTemp(storage, new InputStreamDescriptor(new FileInputStream(f),f.getName()))); + return builder.getTheRequest(); + } +}