From 240649b6993c8e25af9c591fccd2d1fcbe66a34a Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 25 May 2022 18:07:20 +0200 Subject: [PATCH 1/2] Patch for clone --- geoportal-client/CHANGELOG.md | 3 + geoportal-client/pom.xml | 4 +- .../client/DefaultMongoConcessioni.java | 3 + .../client/utils/ConcessioniUtils.java | 132 ++++++++++++++++++ .../geoportal/clients/BasicVreTests.java | 4 +- .../clients/StatelessClientTests.java | 15 ++ 6 files changed, 158 insertions(+), 3 deletions(-) create mode 100644 geoportal-client/src/main/java/org/gcube/application/geoportal/client/utils/ConcessioniUtils.java diff --git a/geoportal-client/CHANGELOG.md b/geoportal-client/CHANGELOG.md index 5b1585a..b9e90e2 100644 --- a/geoportal-client/CHANGELOG.md +++ b/geoportal-client/CHANGELOG.md @@ -2,6 +2,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-client +## [v1.0.7-SNAPSHOT] - 2022-05-25 +- Clone Concessione + ## [v1.0.6] - 2021-09-20 - Changed artifact dependencies - Default Profiled Documents client diff --git a/geoportal-client/pom.xml b/geoportal-client/pom.xml index 35d70b8..10c39bc 100644 --- a/geoportal-client/pom.xml +++ b/geoportal-client/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-client - 1.0.6 + 1.0.7-SNAPSHOT Geoportal Client @@ -34,6 +34,7 @@ org.gcube.application.cms geoportal-common + 1.0.8 @@ -71,6 +72,7 @@ org.gcube.application.cms cms-test-commons + 1.0.1 test diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java index 9e8d971..bce1e87 100644 --- a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java @@ -207,6 +207,9 @@ public class DefaultMongoConcessioni implements MongoConcessioni{ } + + + protected static T check(Response resp, Class clazz) throws IOException { String resString=resp.readEntity(String.class); if(resp.getStatus()<200||resp.getStatus()>=300) diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/utils/ConcessioniUtils.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/utils/ConcessioniUtils.java new file mode 100644 index 0000000..df3eb99 --- /dev/null +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/utils/ConcessioniUtils.java @@ -0,0 +1,132 @@ +package org.gcube.application.geoportal.client.utils; + +import com.sun.corba.se.spi.orbutil.threadpool.Work; +import lombok.extern.slf4j.Slf4j; +import org.gcube.application.geoportal.common.model.legacy.*; +import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; +import org.gcube.application.geoportal.common.rest.MongoConcessioni; +import org.gcube.application.geoportal.common.rest.TempFile; +import org.gcube.application.geoportal.common.utils.StorageUtils; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; + +@Slf4j +public class ConcessioniUtils { + + public static final Concessione clone(MongoConcessioni client,String toCloneId) throws Exception { + StorageUtils storage=new StorageUtils(); + log.info("Cloning {}",toCloneId); + Concessione src = client.getById(toCloneId); + // copy + Concessione copied = Serialization.read(Serialization.write(src),Concessione.class); + // cleanup + copied.setMongo_id(null); + copied.setLastUpdateTime(null); + copied.setLastUpdateUser(null); + copied.setFolderId(null); + copied.setReport(null); + copied.setCreationTime(null); + copied.setCreationUser(null); + copied.setId(0); + copied.setVersion("1.0.0"); + + copied.setRelazioneScavo(null); + copied.setAbstractRelazione(null); + copied.setPosizionamentoScavo(null); + copied.setImmaginiRappresentative(null); + copied.setPianteFineScavo(null); + + + copied = client.createNew(copied); + + + //Handle Files + + copied.setRelazioneScavo(clean(src.getRelazioneScavo())); + copied=client.replace(copied); + AddSectionToConcessioneRequest req=asCopyRequest(src.getRelazioneScavo(),storage); + if(req.getStreams()!=null&&!req.getStreams().isEmpty()) + copied=client.registerFileSet(copied.getMongo_id(),req); + + copied.setAbstractRelazione(clean(src.getAbstractRelazione())); + copied=client.replace(copied); + req=asCopyRequest(src.getAbstractRelazione(),storage); + if(req.getStreams()!=null&&!req.getStreams().isEmpty()) + copied=client.registerFileSet(copied.getMongo_id(),req); + + + copied.setPosizionamentoScavo(clean(src.getPosizionamentoScavo())); + copied=client.replace(copied); + req=asCopyRequest(src.getPosizionamentoScavo(),storage); + if(req.getStreams()!=null&&!req.getStreams().isEmpty()) + copied=client.registerFileSet(copied.getMongo_id(),req); + + if(src.getImmaginiRappresentative()!=null&&src.getImmaginiRappresentative().size()>0) { + copied.setImmaginiRappresentative(new ArrayList<>()); + for (int i = 0; i < src.getImmaginiRappresentative().size(); i++) { + copied.getImmaginiRappresentative().add(clean(src.getImmaginiRappresentative().get(i))); + copied=client.replace(copied); + req=asCopyRequest(src.getImmaginiRappresentative().get(i),storage); + req.setDestinationPath(Concessione.Paths.imgByIndex(i)); + if(req.getStreams()!=null&&!req.getStreams().isEmpty()) + copied=client.registerFileSet(copied.getMongo_id(),req); + } + } + + if(src.getPianteFineScavo()!=null&&src.getPianteFineScavo().size()>0) { + copied.setPianteFineScavo(new ArrayList<>()); + for (int i = 0; i < src.getPianteFineScavo().size(); i++) { + copied.getPianteFineScavo().add(clean(src.getPianteFineScavo().get(i))); + copied=client.replace(copied); + req=asCopyRequest(src.getPianteFineScavo().get(i),storage); + req.setDestinationPath(Concessione.Paths.imgByIndex(i)); + if(req.getStreams()!=null&&!req.getStreams().isEmpty()) + copied=client.registerFileSet(copied.getMongo_id(),req); + } + } + + log.info("Cloned {} into {} ",src.getMongo_id(),copied.getMongo_id()); + return copied; + } + + private static AddSectionToConcessioneRequest asCopyRequest(T content, StorageUtils storage) throws IOException { + AddSectionToConcessioneRequest request = new AddSectionToConcessioneRequest(); + request.setStreams(new ArrayList<>()); + if(content.getActualContent()!=null) { + for (PersistedContent persistedContent : content.getActualContent()) { + if (persistedContent instanceof WorkspaceContent) { + WorkspaceContent wc = (WorkspaceContent) persistedContent; + request.getStreams().add(storage.putOntoStorage(new URL(wc.getLink()).openStream(), wc.getName())); + } + } + } + + String path = null; + if(content instanceof LayerConcessione) path = Concessione.Paths.POSIZIONAMENTO; + else if (content instanceof RelazioneScavo) path = Concessione.Paths.RELAZIONE; + else if (content instanceof AbstractRelazione) path = Concessione.Paths.ABSTRACT_RELAZIONE; + request.setDestinationPath(path); + return request; + } + + private static T clean(T content) throws IOException { + T toReturn = (T) Serialization.read(Serialization.write(content),content.getClass()); + toReturn.setMongo_id(null); + toReturn.setCreationTime(null); + toReturn.setId(0); + toReturn.setActualContent(new ArrayList<>()); + + if(content instanceof LayerConcessione) { + ((LayerConcessione)toReturn).setLayerName(null); + ((LayerConcessione)toReturn).setLayerID(null); + ((LayerConcessione)toReturn).setBbox(null); + ((LayerConcessione)toReturn).setLayerUUID(null); + ((LayerConcessione)toReturn).setWorkspace(null); + ((LayerConcessione)toReturn).setWmsLink(null); + } + return toReturn; + } +} diff --git a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java index 4016eb1..a780e2d 100644 --- a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java +++ b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java @@ -7,9 +7,9 @@ public class BasicVreTests { @BeforeClass public static void setScope(){ -// TokenSetter.set("/pred4s/preprod/preVRE"); + TokenSetter.set("/pred4s/preprod/preVRE"); // TokenSetter.set("/d4science.research-infrastructures.eu/D4OS/GeoNA-Prototype"); - TokenSetter.set("/gcube/devsec/devVRE"); +// TokenSetter.set("/gcube/devsec/devVRE"); } diff --git a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java index c9f953b..578c8e3 100644 --- a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java +++ b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java @@ -15,6 +15,7 @@ import org.bson.Document; import org.gcube.application.cms.tests.model.concessioni.TestConcessioniFilters; import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel; import org.gcube.application.cms.tests.model.concessioni.TestConcessioniQueries; +import org.gcube.application.geoportal.client.utils.ConcessioniUtils; import org.gcube.application.geoportal.client.utils.Queries; import org.gcube.application.geoportal.client.utils.Serialization; import org.gcube.application.geoportal.common.model.legacy.*; @@ -105,6 +106,20 @@ public class StatelessClientTests extends BasicVreTests{ assertNotNull(c.getMongo_id()); } + + + @Test + public void testClone() throws Exception { + Concessione c= prepare(); + Concessione copied = ConcessioniUtils.clone(client,c.getMongo_id()); + assertEquals(copied.getNome(),c.getNome()); + assertEquals(copied.getPianteFineScavo().size(),c.getPianteFineScavo().size()); + } + + + + + @Test public void testReplace() throws Exception { Concessione testObject= client.createNew(TestConcessioniModel.prepareEmptyConcessione()); From 64db661a9b22bf9fc225fe4b63ca0437c8c58c00 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 26 May 2022 15:25:40 +0200 Subject: [PATCH 2/2] Release geoportal-client.1.0.7 --- geoportal-client/CHANGELOG.md | 2 +- geoportal-client/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/geoportal-client/CHANGELOG.md b/geoportal-client/CHANGELOG.md index b9e90e2..0faac6e 100644 --- a/geoportal-client/CHANGELOG.md +++ b/geoportal-client/CHANGELOG.md @@ -2,7 +2,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-client -## [v1.0.7-SNAPSHOT] - 2022-05-25 +## [v1.0.7] - 2022-05-25 - Clone Concessione ## [v1.0.6] - 2021-09-20 diff --git a/geoportal-client/pom.xml b/geoportal-client/pom.xml index 10c39bc..f626cf7 100644 --- a/geoportal-client/pom.xml +++ b/geoportal-client/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-client - 1.0.7-SNAPSHOT + 1.0.7 Geoportal Client