diff --git a/pom.xml b/pom.xml
index 17d33b4..5f65fc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,13 @@
4.11
+
+
+ org.gcube.common
+ storagehub-client-library
+ [1.0.0,2.0.0-SNAPSHOT)
+
+
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 1ea1082..37afbec 100644
--- a/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java
+++ b/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java
@@ -1,9 +1,10 @@
package org.gcube.application.geoportal.client;
+import java.io.IOException;
import java.io.InputStream;
+import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Iterator;
-import java.util.List;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
@@ -11,10 +12,11 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.fasterxml.jackson.databind.MappingIterator;
-import com.fasterxml.jackson.databind.ObjectReader;
import org.gcube.application.geoportal.client.utils.Serialization;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
-import org.gcube.application.geoportal.common.rest.AddSectionToConcessioneRequest;
+import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
+import org.gcube.application.geoportal.common.model.rest.Configuration;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
import org.gcube.common.clients.Call;
@@ -117,6 +119,79 @@ public class DefaultMongoConcessioni implements MongoConcessioni{
return toReturn;
}
+ @Override
+ public void unpublish(String id) throws Exception {
+ log.info("Publishing {} ",id);
+
+ Call call= new Call(){
+ @Override
+ public Concessione call(WebTarget endpoint) throws Exception {
+ Response resp= endpoint.path(InterfaceConstants.Methods.PUBLISH_PATH).
+ path(id).request(MediaType.APPLICATION_JSON).delete();
+ check(resp,null);
+ return null;
+ }
+ };
+ delegate.make(call);
+ log.debug("UnPublished {} ",id);
+ }
+
+ @Override
+ public Configuration getCurrentConfiguration() throws Exception {
+ return delegate.make(new Call() {
+ @Override
+ public Configuration call(WebTarget webTarget) throws Exception {
+ return check(webTarget.path(InterfaceConstants.Methods.CONFIGURATION_PATH).
+ request(MediaType.APPLICATION_JSON).get(),Configuration.class);
+ }
+ });
+ }
+
+ @Override
+ public Iterator search(String s) throws Exception {
+ log.debug("Searching for {}",s);
+ Call> call=new Call>(){
+ @Override
+ public Iterator call(WebTarget endpoint) throws Exception {
+ Response resp =endpoint.path(InterfaceConstants.Methods.SEARCH_PATH).request(MediaType.APPLICATION_JSON).
+ post(Entity.entity(s,MediaType.APPLICATION_JSON));
+ return checkCollection(resp,Concessione.class);
+ }
+ };
+ return delegate.make(call);
+ }
+
+ @Override
+ public Iterator query(QueryRequest queryRequest) throws Exception {
+ log.debug("Querying for {}",queryRequest);
+// Call> call=new Call>(){
+// @Override
+// public Iterator call(WebTarget endpoint) throws Exception {
+// Response resp =endpoint.path(InterfaceConstants.Methods.SEARCH_PATH).request(MediaType.APPLICATION_JSON).
+// post(Entity.entity(queryRequest,MediaType.APPLICATION_JSON));
+// return checkCollection(resp,Concessione.class);
+// }
+// };
+// return delegate.make(call);
+
+ return queryforType(queryRequest,Concessione.class);
+ }
+
+ @Override
+ public Iterator queryforType(QueryRequest queryRequest, Class aClass) throws Exception {
+ log.debug("Querying for {}",queryRequest);
+ Call> call=new Call>(){
+ @Override
+ public Iterator call(WebTarget endpoint) throws Exception {
+ Response resp =endpoint.path(InterfaceConstants.Methods.SEARCH_PATH).request(MediaType.APPLICATION_JSON).
+ post(Entity.entity(queryRequest,MediaType.APPLICATION_JSON));
+ return checkCollection(resp,aClass);
+ }
+ };
+ return delegate.make(call);
+ }
+
+
@Override
public Concessione registerFile(String id, AddSectionToConcessioneRequest request) throws Exception {
log.info("Registering {} in {}",request,id);
@@ -159,13 +234,23 @@ public class DefaultMongoConcessioni implements MongoConcessioni{
}
- protected static T check(Response resp, Class clazz) throws Exception {
+ protected static T check(Response resp, Class clazz) throws IOException {
String resString=resp.readEntity(String.class);
if(resp.getStatus()<200||resp.getStatus()>=300)
- throw new Exception("RESP STATUS IS "+resp.getStatus()+". Message : "+resString);
+ throw new RemoteException("RESP STATUS IS "+resp.getStatus()+". Message : "+resString);
System.out.println("Resp String is "+resString);
if(clazz!=null)
return Serialization.read(resString, clazz);
else return null;
}
+
+ protected static Iterator checkCollection(Response resp, Class clazz) throws IOException {
+ if(resp.getStatus()<200||resp.getStatus()>=300)
+ throw new RemoteException("RESP STATUS IS "+resp.getStatus()+". Message : "+resp.readEntity(String.class));
+ if(clazz!=null)
+ return Serialization.readCollection((InputStream) resp.getEntity(), clazz);
+ else return null;
+ }
+
+
}
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 8079b31..2551067 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
@@ -12,7 +12,7 @@ import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo;
import org.gcube.application.geoportal.common.model.legacy.UploadedImage;
-import org.gcube.application.geoportal.common.rest.AddSectionToConcessioneRequest;
+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.common.clients.delegates.ProxyDelegate;
@@ -135,7 +135,7 @@ public class StatefulMongoConcessioni extends DefaultMongoConcessioni implements
- protected static AddSectionToConcessioneRequest request(String path,TempFile...files) {
+ protected static AddSectionToConcessioneRequest request(String path, TempFile...files) {
AddSectionToConcessioneRequest req=new AddSectionToConcessioneRequest();
req.setDestinationPath(path);
req.setStreams(new ArrayList());
diff --git a/src/main/java/org/gcube/application/geoportal/client/utils/Serialization.java b/src/main/java/org/gcube/application/geoportal/client/utils/Serialization.java
index 7a72703..e4f45ef 100644
--- a/src/main/java/org/gcube/application/geoportal/client/utils/Serialization.java
+++ b/src/main/java/org/gcube/application/geoportal/client/utils/Serialization.java
@@ -1,7 +1,9 @@
package org.gcube.application.geoportal.client.utils;
import java.io.IOException;
+import java.io.InputStream;
import java.time.format.DateTimeFormatter;
+import java.util.Iterator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -28,4 +30,12 @@ public static final DateTimeFormatter FULL_FORMATTER=DateTimeFormatter.ofPattern
public static String write(Object obj) throws JsonProcessingException, IOException {
return mapper.writeValueAsString(obj);
}
+
+ public static Iterator readCollection(String jsonString, Class clazz) throws IOException {
+ return mapper.readerFor(clazz).readValues(jsonString);
+ }
+
+ public static Iterator readCollection(InputStream is, Class clazz) throws IOException {
+ return mapper.readerFor(clazz).readValues(is);
+ }
}
diff --git a/src/test/java/org/gcube/application/geoportal/StorageTests.java b/src/test/java/org/gcube/application/geoportal/StorageTests.java
new file mode 100644
index 0000000..5942bcb
--- /dev/null
+++ b/src/test/java/org/gcube/application/geoportal/StorageTests.java
@@ -0,0 +1,34 @@
+package org.gcube.application.geoportal;
+
+import org.gcube.application.geoportal.clients.TokenSetter;
+import org.gcube.application.geoportal.common.rest.TempFile;
+import org.gcube.application.geoportal.common.utils.Files;
+import org.gcube.application.geoportal.common.utils.StorageUtils;
+import org.gcube.common.storagehub.client.dsl.StorageHubClient;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+public class StorageTests {
+
+ public static void main(String[] args) throws FileNotFoundException {
+ FileInputStream fis =new FileInputStream(Files.getFileFromResources("concessioni/relazione.pdf"));
+ String filename= "relazione.pdf";
+
+ String sourceContext="/d4science.research-infrastructures.eu";
+ String targetContext="/pred4s/preprod/preVRE";
+
+ TokenSetter.set(sourceContext);
+
+ StorageHubClient sgClient=new StorageHubClient();
+
+ TokenSetter.set(targetContext);
+
+ TempFile file= new StorageUtils().putOntoStorage(fis,filename);
+
+
+ System.out.println(new StorageUtils().getUrlById(file.getId()));
+
+ }
+
+}
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/BasicVreTests.java b/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java
similarity index 72%
rename from src/test/java/org/gcube/application/geoportal/common/model/BasicVreTests.java
rename to src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java
index aa598e5..d6cb21b 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/BasicVreTests.java
+++ b/src/test/java/org/gcube/application/geoportal/clients/BasicVreTests.java
@@ -1,6 +1,5 @@
-package org.gcube.application.geoportal.common.model;
+package org.gcube.application.geoportal.clients;
-import org.junit.Before;
import org.junit.BeforeClass;
public class BasicVreTests {
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/StatefulClientTests.java b/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java
similarity index 95%
rename from src/test/java/org/gcube/application/geoportal/common/model/StatefulClientTests.java
rename to src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java
index cba35b5..ce3eaee 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/StatefulClientTests.java
+++ b/src/test/java/org/gcube/application/geoportal/clients/StatefulClientTests.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model;
+package org.gcube.application.geoportal.clients;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
import static org.junit.Assert.assertEquals;
@@ -9,6 +9,7 @@ import java.io.FileNotFoundException;
import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
import org.gcube.application.geoportal.client.utils.Serialization;
+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.InputStreamDescriptor;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
@@ -18,7 +19,6 @@ import org.gcube.application.geoportal.common.rest.TempFile;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException;
-import org.junit.Before;
import org.junit.Test;
@@ -31,7 +31,7 @@ public class StatefulClientTests extends BasicVreTests{
StorageUtils storage=new StorageUtils();
- Concessione toRegister=TestModel.prepareEmptyConcessione();
+ Concessione toRegister= TestModel.prepareEmptyConcessione();
manager.createNew(toRegister);
@@ -92,8 +92,7 @@ public class StatefulClientTests extends BasicVreTests{
StorageUtils storage=new StorageUtils();
manager.createNew(TestModel.prepareEmptyConcessione());
-
-
+
manager.delete();
}
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/StatelessClientTests.java b/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java
similarity index 82%
rename from src/test/java/org/gcube/application/geoportal/common/model/StatelessClientTests.java
rename to src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java
index 5e68045..ef21e1f 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/StatelessClientTests.java
+++ b/src/test/java/org/gcube/application/geoportal/clients/StatelessClientTests.java
@@ -1,18 +1,22 @@
-package org.gcube.application.geoportal.common.model;
+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 java.io.File;
import java.io.FileInputStream;
+import java.nio.charset.Charset;
import java.util.Collections;
+import java.util.Iterator;
import java.util.concurrent.atomic.AtomicLong;
+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;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
-import org.gcube.application.geoportal.common.rest.AddSectionToConcessioneRequest;
+import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
import org.gcube.application.geoportal.common.rest.MongoConcessioni;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.utils.StorageUtils;
@@ -109,4 +113,29 @@ public class StatelessClientTests extends BasicVreTests{
assertTrue(c.getReport().getStatus().equals(ValidationStatus.PASSED));
}
+
+
+ @Test
+ public void getConfiguration(){
+
+ }
+
+ @Test
+ public void searches() throws Exception {
+ for(File filterFile:new File("src/test/resources/concessioni/filters").listFiles()) {
+ String query=Files.readFileAsString(filterFile.getAbsolutePath(), Charset.defaultCharset());
+ System.out.println("Count for "+filterFile.getName()+"\t"+ count(client.search(query)));
+ }
+ }
+
+
+
+
+ // UTILS
+
+ public static long count(Iterator> iterator){
+ AtomicLong l=new AtomicLong(0);
+ iterator.forEachRemaining(el->{l.incrementAndGet();});
+ return l.get();
+ }
}
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/TokenSetter.java b/src/test/java/org/gcube/application/geoportal/clients/TokenSetter.java
similarity index 93%
rename from src/test/java/org/gcube/application/geoportal/common/model/TokenSetter.java
rename to src/test/java/org/gcube/application/geoportal/clients/TokenSetter.java
index 7052726..ae53e71 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/TokenSetter.java
+++ b/src/test/java/org/gcube/application/geoportal/clients/TokenSetter.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model;
+package org.gcube.application.geoportal.clients;
import java.util.Properties;
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/ConcessioniTests.java b/src/test/java/org/gcube/application/geoportal/clients/legacy/ConcessioniTests.java
similarity index 89%
rename from src/test/java/org/gcube/application/geoportal/common/model/ConcessioniTests.java
rename to src/test/java/org/gcube/application/geoportal/clients/legacy/ConcessioniTests.java
index 735dcc5..afb1726 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/ConcessioniTests.java
+++ b/src/test/java/org/gcube/application/geoportal/clients/legacy/ConcessioniTests.java
@@ -1,18 +1,18 @@
-package org.gcube.application.geoportal.common.model;
+package org.gcube.application.geoportal.clients.legacy;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicLong;
import org.gcube.application.geoportal.client.legacy.ConcessioniManager;
+import org.gcube.application.geoportal.clients.BasicVreTests;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.GeoServerContent;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
import org.gcube.application.geoportal.common.model.legacy.PersistedContent;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
-import org.junit.Before;
import org.junit.Test;
-public class ConcessioniTests extends BasicVreTests{
+public class ConcessioniTests extends BasicVreTests {
static boolean STOP_ON_FAIL=true;
@@ -77,9 +77,5 @@ public class ConcessioniTests extends BasicVreTests{
-// @Test
-// public void readOne() throws Exception {
-// ConcessioniManager manager=new ConcessioniManager();
-// System.out.println(manager.getById(67+""));
-// }
+
}
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/Serializations.java b/src/test/java/org/gcube/application/geoportal/common/model/Serializations.java
new file mode 100644
index 0000000..993c926
--- /dev/null
+++ b/src/test/java/org/gcube/application/geoportal/common/model/Serializations.java
@@ -0,0 +1,33 @@
+package org.gcube.application.geoportal.common.model;
+
+import org.gcube.application.geoportal.client.utils.Serialization;
+import org.gcube.application.geoportal.common.model.legacy.Concessione;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class Serializations {
+
+ @Test
+ public void readOne(){}
+
+ @Test
+ public void readMulti() throws IOException {
+
+ Iterator it=Serialization.readCollection(
+ new FileInputStream(new File("src/test/resources/concessioni/ConcessioniList.json")),
+ Concessione.class);
+ AtomicLong l=new AtomicLong(0);
+ it.forEachRemaining(element->{l.incrementAndGet();});
+
+
+ Assert.assertTrue(l.get()==4);
+ }
+
+}
diff --git a/src/test/java/org/gcube/application/geoportal/common/model/TestModel.java b/src/test/java/org/gcube/application/geoportal/common/model/TestModel.java
index 53b8929..aac4795 100644
--- a/src/test/java/org/gcube/application/geoportal/common/model/TestModel.java
+++ b/src/test/java/org/gcube/application/geoportal/common/model/TestModel.java
@@ -87,7 +87,7 @@ public class TestModel {
RelazioneScavo relScavo=new RelazioneScavo();
relScavo.setAbstractEng("simple abstract section");
- relScavo.setAbstractEng("semplice sezione abstract");
+ relScavo.setAbstractIta("semplice sezione abstract");
relScavo.setResponsabili(concessione.getAuthors());
concessione.setRelazioneScavo(relScavo);
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 76e05ae..332c9b0 100644
--- a/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java
+++ b/src/test/java/org/gcube/application/geoportal/usecases/ClearConcessioni.java
@@ -1,12 +1,10 @@
package org.gcube.application.geoportal.usecases;
-import org.gcube.application.geoportal.client.legacy.ConcessioniManager;
import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
-import org.gcube.application.geoportal.common.model.TokenSetter;
+import org.gcube.application.geoportal.clients.TokenSetter;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
@@ -20,8 +18,8 @@ public class ClearConcessioni {
ArrayList toSkipIds=new ArrayList<>();
- toSkipIds.add("6102c8dd02ad3d05b5f81df4");
- toSkipIds.add("610415af02ad3d05b5f81ee3");
+// toSkipIds.add("6102c8dd02ad3d05b5f81df4");
+// toSkipIds.add("610415af02ad3d05b5f81ee3");
AtomicLong count=new AtomicLong(0);
AtomicLong nullCount=new AtomicLong(0);
diff --git a/src/test/java/org/gcube/application/geoportal/usecases/Export.java b/src/test/java/org/gcube/application/geoportal/usecases/Export.java
new file mode 100644
index 0000000..4db84af
--- /dev/null
+++ b/src/test/java/org/gcube/application/geoportal/usecases/Export.java
@@ -0,0 +1,159 @@
+package org.gcube.application.geoportal.usecases;
+
+import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
+import org.gcube.application.geoportal.client.utils.Serialization;
+import org.gcube.application.geoportal.clients.TokenSetter;
+import org.gcube.application.geoportal.common.model.legacy.*;
+import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
+import org.gcube.application.geoportal.common.rest.TempFile;
+import org.gcube.application.geoportal.common.utils.Files;
+import org.gcube.application.geoportal.common.utils.StorageUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+
+import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
+
+@Slf4j
+/*
+Pushes concessioni JSON from folder to geoportal-service
+ */
+public class Export {
+
+
+ public static void main(String[] args) {
+
+ File dir= new File("/Users/fabioisti/git/geoportal-client/import1628178107083");
+// String targetContext="/pred4s/preprod/preVRE";
+ String targetContext="/gcube/devsec/devVRE";
+
+
+
+ ArrayList found=new ArrayList<>();
+ for(File elementFolder:dir.listFiles())
+ for(File jsonFile:elementFolder.listFiles((dir1, name) -> {return name.endsWith(".json");}))
+ try {
+ log.info("Reading "+jsonFile.getAbsolutePath());
+ String json= Files.readFileAsString(jsonFile.getAbsolutePath(), Charset.defaultCharset());
+ found.add(Serialization.read(json,Concessione.class));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Loaded "+found.size()+" elements from "+dir.getAbsolutePath());
+
+ TokenSetter.set(targetContext);
+ ConcessioniManagerI targetManager = statefulMongoConcessioni().build();
+ StorageUtils storage = new StorageUtils();
+
+ AtomicLong count = new AtomicLong(0);
+ AtomicLong warnCount = new AtomicLong(0);
+ AtomicLong errCount = new AtomicLong(0);
+
+ for (Concessione c : found) {
+ try {
+ log.info("Using {} {}",c.getNome(),c.getMongo_id());
+ Concessione result = push(c, targetManager, new File(dir.getAbsolutePath(),
+ c.getId() + ""), storage);
+ if (!result.getReport().getStatus().equals(ValidationReport.ValidationStatus.PASSED))
+ warnCount.incrementAndGet();
+ } catch (Throwable throwable) {
+ System.err.println(throwable);
+ errCount.incrementAndGet();
+ } finally {
+ count.incrementAndGet();
+ }
+ }
+
+ System.out.println("Done "+count.get()+" [warn : "+warnCount.get()+", err : "+errCount.get()+"]");
+ }
+
+ public static Concessione push(Concessione c, ConcessioniManagerI manager, File dir, StorageUtils storage) throws Exception {
+ // remove GIS references
+ LayerConcessione posizionamento= c.getPosizionamentoScavo();
+ c.setPosizionamentoScavo(null);
+
+ List piante=c.getPianteFineScavo();
+ c.setPianteFineScavo(new ArrayList());
+
+ List imgs=c.getImmaginiRappresentative();
+ c.setImmaginiRappresentative(new ArrayList());
+
+ List other=c.getGenericContent();
+ c.setGenericContent(new ArrayList());
+
+ RelazioneScavo rel=c.getRelazioneScavo();
+ c.setRelazioneScavo(null);
+
+
+ // remove source folder id
+ c.setFolderId(null);
+ c.setMongo_id(null);
+
+ // PUSH PROJECT
+ manager.createNew(c);
+
+
+ // UPLOAD WOrKSPaCE content
+ // Relazione
+ removeContent(rel);
+ manager.setRelazioneScavo(rel, fromPath(dir.toPath().toAbsolutePath()+File.separator+"rel",storage)[0]);
+
+ // Posizionamento
+ removeContent(posizionamento);
+ manager.setPosizionamento(posizionamento,
+ fromPath(dir.toPath().toAbsolutePath()+File.separator+"pos", storage));
+
+
+ //Piante
+ for(int i=0; i toReturn=new ArrayList<>();
+ for(File f : baseDir.toFile().listFiles()){
+ toReturn.add(storage.putOntoStorage(new FileInputStream(f),f.getName()));
+ }
+ log.info("Loaded {} files from {} ",toReturn.size(),path);
+ return toReturn.toArray(new TempFile[toReturn.size()]);
+ }
+
+
+ private static void removeContent(AssociatedContent c){ c.setActualContent(new ArrayList<>());}
+
+}
diff --git a/src/test/java/org/gcube/application/geoportal/usecases/Import.java b/src/test/java/org/gcube/application/geoportal/usecases/Import.java
new file mode 100644
index 0000000..5dea760
--- /dev/null
+++ b/src/test/java/org/gcube/application/geoportal/usecases/Import.java
@@ -0,0 +1,110 @@
+package org.gcube.application.geoportal.usecases;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import org.gcube.application.geoportal.client.legacy.ConcessioniManager;
+import org.gcube.application.geoportal.client.utils.Serialization;
+import org.gcube.application.geoportal.clients.TokenSetter;
+import org.gcube.application.geoportal.common.model.legacy.*;
+import org.gcube.common.storagehub.client.dsl.FileContainer;
+import org.gcube.common.storagehub.client.dsl.StorageHubClient;
+import org.gcube.common.storagehub.model.exceptions.StorageHubException;
+
+import java.io.*;
+import java.util.ArrayList;
+
+@Slf4j
+/*
+Imports Json concessioni into import
+ */
+public class Import {
+
+
+ public static void main(String[] args) throws Exception {
+
+// Path dir=Files.createTempDirectory(System.currentTimeMillis()+"");
+
+ File dir=new File("import"+System.currentTimeMillis());
+ dir.mkdirs();
+ String sourceContext="/d4science.research-infrastructures.eu/D4OS/GeoNA-Prototype";
+// String sourceContext="/pred4s/preprod/preVRE";
+
+
+
+ // GET FOM SOURCE
+ TokenSetter.set(sourceContext);
+
+ StorageHubClient sgClient=new StorageHubClient();
+
+
+// ConcessioniManagerI manager= statefulMongoConcessioni().build();
+
+ ConcessioniManager sourceManager = new ConcessioniManager();
+ ArrayList found=new ArrayList<>();
+ sourceManager.getList().forEach((Concessione c)->{
+ try {
+ File currentFolder=new File (dir.toString(),c.getId()+"");
+ currentFolder.mkdirs();
+
+ //Load locally
+ // POSIZIONAMENTO
+ loadFiles(c.getPosizionamentoScavo(),new File(currentFolder,"pos"),sgClient);
+ // RELAZIONE
+ loadFiles(c.getRelazioneScavo(),new File(currentFolder,"rel"),sgClient);
+ // IMGs
+ for(int i=0;i toSkipIds=new ArrayList<>();
+
+
+ AtomicLong count=new AtomicLong(0);
+ AtomicLong nullCount=new AtomicLong(0);
+ AtomicLong errCount=new AtomicLong(0);
+ manager.getList().forEachRemaining((Concessione c)->{
+ try{
+ String currentId=c.getMongo_id();
+ if(currentId==null) {
+ System.out.println("ID IS NULL " + c);
+ nullCount.incrementAndGet();
+ }
+ else
+ if(toSkipIds.contains(currentId))
+ System.out.println("Skipping "+currentId);
+ else {
+ System.out.println("Upublishing " + c.getMongo_id());
+ manager.unpublish(c.getMongo_id());
+
+ System.out.println("Republishing" + c.getMongo_id());
+ manager.publish(c.getMongo_id());
+ }
+ }catch(Throwable throwable){
+ System.err.println(throwable);
+ errCount.incrementAndGet();
+ }finally {
+ count.incrementAndGet();
+ }
+ });
+
+ System.out.println("Done "+count.get()+" [null : "+nullCount.get()+", err : "+errCount.get()+"]");
+
+ }
+}
diff --git a/src/test/java/org/gcube/application/geoportal/usecases/UnpublishSingle.java b/src/test/java/org/gcube/application/geoportal/usecases/UnpublishSingle.java
new file mode 100644
index 0000000..369ed4d
--- /dev/null
+++ b/src/test/java/org/gcube/application/geoportal/usecases/UnpublishSingle.java
@@ -0,0 +1,17 @@
+package org.gcube.application.geoportal.usecases;
+
+import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI;
+import org.gcube.application.geoportal.clients.TokenSetter;
+
+import static org.gcube.application.geoportal.client.GeoportalAbstractPlugin.statefulMongoConcessioni;
+
+public class UnpublishSingle {
+
+ public static void main(String[] args) throws Exception {
+ TokenSetter.set("/gcube/devsec/devVRE");
+
+ ConcessioniManagerI manager=statefulMongoConcessioni().build();
+
+ manager.publish("610415af02ad3d05b5f81ee3");
+ }
+}
diff --git a/src/test/resources/Concessione.json b/src/test/resources/concessioni/Concessione.json
similarity index 100%
rename from src/test/resources/Concessione.json
rename to src/test/resources/concessioni/Concessione.json
diff --git a/src/test/resources/concessioni/ConcessioniList.json b/src/test/resources/concessioni/ConcessioniList.json
new file mode 100644
index 0000000..8258a73
--- /dev/null
+++ b/src/test/resources/concessioni/ConcessioniList.json
@@ -0,0 +1 @@
+[{"mongo_id":"612fabe58b7a9ee012cf797b","id":0,"recordType":"CONCESSIONE","version":"1.0.0","licenzaID":"CC-BY","policy":"OPEN","nome":"Concessione : publish test","folderId":"5c312758-0233-461f-9b9c-2bf89402f488","lastUpdateTime":"2021-09-01T18:35:49.003","lastUpdateUser":null,"creationTime":"2021-09-01T18:35:49.003","creationUser":null,"report":{"objectName":"Publish report","errorMessages":[],"warningMessages":[],"children":[],"status":"PASSED"},"introduzione":"This is my MONGO project","descrizioneContenuto":"It contains this and that","authors":["Some one","Some, oneelse"],"contributore":"Contrib 1","titolari":["Some one","Some, oneelse"],"responsabile":"Someone","editore":"Editore","fontiFinanziamento":["Big pharma","Pentagon"],"soggetto":["Research Excavation","Archeology"],"risorseCorrelate":null,"dataInizioProgetto":"2021-09-01T18:35:43.733","dataFineProgetto":"2021-09-01T18:35:43.733","titolareLicenza":["Qualcun altro"],"titolareCopyright":["Chiedilo in giro"],"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"centroidLat":43.0,"centroidLong":9.0,"relazioneScavo":{"mongo_id":"612fabf68b7a9ee012cf7980","id":0,"policy":"OPEN","licenseID":"CC-BY","titolo":"Concessione : publish test relazione di scavo","creationTime":"2021-09-01T18:35:49.003","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/pdf","storageID":"60cf254f-bded-4a81-ad4e-4c5f21fdc007","link":"https://data.dev.d4science.org/shub/E_OEVWcE1VUE9SMmlJV0tqaWd2SWx5UkFNRFRqdkRKZEJFNFVGb1B4WDlBQ0Y3WGptL1J3Z1pXU3VWb0dnbEdTUw=="}],"abstractIta":"simple abstract section","abstractEng":null,"responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},"immaginiRappresentative":[{"mongo_id":"612fac548b7a9ee012cf7995","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 0","creationTime":"2021-09-01T18:35:43.733","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"18acfb57-6b59-4695-82c7-90d355e5153d","link":"https://data.dev.d4science.org/shub/E_aEN5a2FjaXMwWmhPRjdPUjhtR2NiOHhEb0ZLMDlvS2M3YytiQklxQ3AyWVpwOTBBTmhVK0hzZGNHUHpuV2ttRQ=="}],"didascalia":"You can see my image number 0","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},{"mongo_id":"612fac648b7a9ee012cf799a","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 1","creationTime":"2021-09-01T18:35:43.733","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"ad6b709f-752b-431c-88f9-9e21d8febc56","link":"https://data.dev.d4science.org/shub/E_TkdpUXFKcWpybFFIWW5KUkl4dW5ZcklNdlE4WiszZ3d1enRweGYzaGk2UVF5WG5TcW1RQ2VORUswenFqMGpWUw=="}],"didascalia":"You can see my image number 1","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]}],"posizionamentoScavo":{"mongo_id":"612fac198b7a9ee012cf7988","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test posizionamento scavo","creationTime":"2021-09-01T18:35:49.003","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"4a420c43-0a5f-49cc-a5da-671446fffff9","link":"https://data.dev.d4science.org/shub/E_OFNvWkFsVTNHVTFCZlZCbXFMekxqcnEwWkVYcG9QdDMyNUZIcVdBS3pSUHBMdFBnWjVlYndjMlVSZFRpd0pUWg=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"07d2b7bb-fd7f-4517-aae9-fd4936e38911","link":"https://data.dev.d4science.org/shub/E_TlhEZUNKOTVIVEQ5aXl2SUg0elRuRnRsdlhpdjdUdU9jQkJhbWEreEhibjYrYldDd0REeWh1SWlYbklFajZkag=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/612fabe58b7a9ee012cf797b/612fac198b7a9ee012cf7988/pos","fileNames":["pos.shp","pos.shx"],"workspace":"gna_conc_612fabe58b7a9ee012cf797b","store":"pos_store","featureType":"pos"}],"layerUUID":null,"layerID":null,"layerName":"pos","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_612fabe58b7a9ee012cf797b/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_612fabe58b7a9ee012cf797b:pos&styles=&bbox=8.620919,40.629750,8.621179,40.630258&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_612fabe58b7a9ee012cf797b","abstractSection":"Posizionamento topografico georeferenziato dell’area interessata dalle indagini","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":40.630257904721645,"maxLong":8.621178639172953,"minLat":40.62975046683799,"minLong":8.62091913167495},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"},"pianteFineScavo":[{"mongo_id":"612fac3e8b7a9ee012cf7990","id":0,"policy":"RESTRICTED","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test pianta fine scavo","creationTime":"2021-09-01T18:35:49.003","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"cd64f679-308c-44ae-90f7-fc3d0963422d","link":"https://data.dev.d4science.org/shub/E_Q2FhV3pTTnZuTnIwQzRRdUVSUmtTTGlwTVpRQ3hHanNmQnJvMHA0aHhxaHdPd1V4L0pqUnJpeXN4NGZHUS9NMA=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"5a6c5577-6b83-4c90-acc2-9ae81ce0ffc6","link":"https://data.dev.d4science.org/shub/E_TXQzcXdDb3RlcGp0VlpYK3hTeHdUdGxiNWlveE5KYy9kVy90ajMrUG9nYTRmejFwREtPU0xqZC9Gbncrclcxbg=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/612fabe58b7a9ee012cf797b/612fac3e8b7a9ee012cf7990/pianta","fileNames":["pianta.shp","pianta.shx"],"workspace":"gna_conc_612fabe58b7a9ee012cf797b","store":"pianta_store","featureType":"pianta"}],"layerUUID":null,"layerID":null,"layerName":"pianta","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_612fabe58b7a9ee012cf797b/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_612fabe58b7a9ee012cf797b:pianta&styles=&bbox=647502.891667,4470387.347517,647527.486073,4470417.525434&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_612fabe58b7a9ee012cf797b","abstractSection":"Planimetria georeferenziata dell'area indagata al termine delle attività","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":4470417.525433567,"maxLong":647527.4860734959,"minLat":4470387.347516773,"minLong":647502.8916670183},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"}],"genericContent":[]},{"mongo_id":"612fac7d8b7a9ee012cf799d","id":0,"recordType":"CONCESSIONE","version":"1.0.0","licenzaID":"CC-BY","policy":"OPEN","nome":"Concessione : publish test","folderId":"2e797746-bd79-4dca-9e34-db32b2fc981f","lastUpdateTime":"2021-09-01T18:38:21.679","lastUpdateUser":null,"creationTime":"2021-09-01T18:38:21.679","creationUser":null,"report":{"objectName":"Publish report","errorMessages":[],"warningMessages":[],"children":[],"status":"PASSED"},"introduzione":"This is my MONGO project","descrizioneContenuto":"It contains this and that","authors":["Some one","Some, oneelse"],"contributore":"Contrib 1","titolari":["Some one","Some, oneelse"],"responsabile":"Someone","editore":"Editore","fontiFinanziamento":["Big pharma","Pentagon"],"soggetto":["Research Excavation","Archeology"],"risorseCorrelate":null,"dataInizioProgetto":"2021-09-01T18:38:20.695","dataFineProgetto":"2021-09-01T18:38:20.695","titolareLicenza":["Qualcun altro"],"titolareCopyright":["Chiedilo in giro"],"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"centroidLat":43.0,"centroidLong":9.0,"relazioneScavo":{"mongo_id":"612fac8e8b7a9ee012cf79a2","id":0,"policy":"OPEN","licenseID":"CC-BY","titolo":"Concessione : publish test relazione di scavo","creationTime":"2021-09-01T18:38:21.679","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/pdf","storageID":"7222cf6a-0e9e-40ec-99db-d108fe9842c5","link":"https://data.dev.d4science.org/shub/E_cnVaTWdPM2NscW9Ka1RUd0toMDRVbGRRK2hhSGhPWnIxYlk4L0tCS1FqNkZpb01vRHcwTVEyLzNZZUR0MGN4RQ=="}],"abstractIta":"simple abstract section","abstractEng":null,"responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},"immaginiRappresentative":[{"mongo_id":"612face28b7a9ee012cf79b7","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 0","creationTime":"2021-09-01T18:38:20.695","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"eb5a69f2-dc04-4d19-a2f5-0885a754c449","link":"https://data.dev.d4science.org/shub/E_VDlXY2Y1STBuWTc3SXREMis2OHZIMnF5NDdUYmkzWVJTT2JxS05HYi8rbnB1bUFhZFF4T0p5ZStNZGxyR2Rmdg=="}],"didascalia":"You can see my image number 0","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},{"mongo_id":"612facf28b7a9ee012cf79bc","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 1","creationTime":"2021-09-01T18:38:20.695","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"d8c1da0b-4575-4457-9bc4-0a7c2c93fdf6","link":"https://data.dev.d4science.org/shub/E_cG9lTXl4a3dTRnp4azRWZG1rNHh1Q1dIYUQ4MjljaDZRUUEyVUdoN3czSWdJWUZlNTVFUzFRaXJhOEsxaTB2aw=="}],"didascalia":"You can see my image number 1","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]}],"posizionamentoScavo":{"mongo_id":"612facae8b7a9ee012cf79aa","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test posizionamento scavo","creationTime":"2021-09-01T18:38:21.679","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"7152d15f-7e60-4095-bef8-5936981f9f67","link":"https://data.dev.d4science.org/shub/E_MzV5QllFaGdVZUpuN0ZkejVyT0F5dFc2SnpGaG85c09TaVR0RCtpS2J1SUNBZVFhS2RpZnFnakp3VkJHa2hEOQ=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"043b47d3-7aa9-400d-b4dc-dc103fc78117","link":"https://data.dev.d4science.org/shub/E_QWVQNEhFUFZLbDJubVptaWVsZWRxUlc5cStLdC9UaGI4c3puQkdlWFpHTUVXcFVjR3UzSS9ieHQ1dGJrYnp5VQ=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/612fac7d8b7a9ee012cf799d/612facae8b7a9ee012cf79aa/pos","fileNames":["pos.shp","pos.shx"],"workspace":"gna_conc_612fac7d8b7a9ee012cf799d","store":"pos_store","featureType":"pos"}],"layerUUID":null,"layerID":null,"layerName":"pos","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_612fac7d8b7a9ee012cf799d/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_612fac7d8b7a9ee012cf799d:pos&styles=&bbox=8.620919,40.629750,8.621179,40.630258&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_612fac7d8b7a9ee012cf799d","abstractSection":"Posizionamento topografico georeferenziato dell’area interessata dalle indagini","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":40.630257904721645,"maxLong":8.621178639172953,"minLat":40.62975046683799,"minLong":8.62091913167495},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"},"pianteFineScavo":[{"mongo_id":"612facd38b7a9ee012cf79b2","id":0,"policy":"RESTRICTED","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test pianta fine scavo","creationTime":"2021-09-01T18:38:21.679","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"2b01a062-e801-4f28-9fbc-0f6f783ecfdc","link":"https://data.dev.d4science.org/shub/E_eXRPd3ZiY0VhVWRTMkRrTnB3Y0d1WlN1Y3NRb2M4azMzMmViVUFnUkpDTFphdGZ5RmhYTXZUUXZLbXpjK2hFVg=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"74e48df4-a266-4e66-a687-0659c2f6cddc","link":"https://data.dev.d4science.org/shub/E_Mml5V0tobXU1RjlRNU1rWGNJa2o5SThKeWJwSWQ5TGN2QVJEUnJ2RkNreWR2aFkrdzJrdEdYL0kwNitDSE8ySg=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/612fac7d8b7a9ee012cf799d/612facd38b7a9ee012cf79b2/pianta","fileNames":["pianta.shp","pianta.shx"],"workspace":"gna_conc_612fac7d8b7a9ee012cf799d","store":"pianta_store","featureType":"pianta"}],"layerUUID":null,"layerID":null,"layerName":"pianta","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_612fac7d8b7a9ee012cf799d/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_612fac7d8b7a9ee012cf799d:pianta&styles=&bbox=647502.891667,4470387.347517,647527.486073,4470417.525434&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_612fac7d8b7a9ee012cf799d","abstractSection":"Planimetria georeferenziata dell'area indagata al termine delle attività","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":4470417.525433567,"maxLong":647527.4860734959,"minLat":4470387.347516773,"minLong":647502.8916670183},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"}],"genericContent":[]},{"mongo_id":"6130a2808b7a9eef830a4401","id":0,"recordType":"CONCESSIONE","version":"1.0.0","licenzaID":"CC-BY","policy":"OPEN","nome":"Concessione : publish test","folderId":"36d9744b-739b-4560-9eeb-7e9ff3c64753","lastUpdateTime":"2021-09-02T12:08:00.057","lastUpdateUser":null,"creationTime":"2021-09-02T12:08:00.057","creationUser":null,"report":{"objectName":"Publish report","errorMessages":[],"warningMessages":[],"children":[],"status":"PASSED"},"introduzione":"This is my MONGO project","descrizioneContenuto":"It contains this and that","authors":["Some one","Some, oneelse"],"contributore":"Contrib 1","titolari":["Some one","Some, oneelse"],"responsabile":"Someone","editore":"Editore","fontiFinanziamento":["Big pharma","Pentagon"],"soggetto":["Research Excavation","Archeology"],"risorseCorrelate":null,"dataInizioProgetto":"2021-09-02T12:07:59.643","dataFineProgetto":"2021-09-02T12:07:59.643","titolareLicenza":["Qualcun altro"],"titolareCopyright":["Chiedilo in giro"],"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"centroidLat":43.0,"centroidLong":9.0,"relazioneScavo":{"mongo_id":"6130a2908b7a9eef830a4406","id":0,"policy":"OPEN","licenseID":"CC-BY","titolo":"Concessione : publish test relazione di scavo","creationTime":"2021-09-02T12:08:00.057","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/pdf","storageID":"da28aaa3-1ff2-4ca1-845b-d818c764cf3e","link":"https://data.dev.d4science.org/shub/E_bXdDOWJjaEExNzJlQ2wxaG9PNjRoSlU5eTBYdTUvTE1QRjRETnRBSDJXbzMyZXpXQkhqMVNyYXZiSWlCWXdwcg=="}],"abstractIta":"simple abstract section","abstractEng":null,"responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},"immaginiRappresentative":[{"mongo_id":"6130a2e48b7a9eef830a441b","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 0","creationTime":"2021-09-02T12:07:59.644","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"f5c859e1-0cfb-482a-ba63-b8e38d24c3eb","link":"https://data.dev.d4science.org/shub/E_UUxNU3NXS1BDUXBWblFEYW4rSzQxd3p6ci80SW5YdksvbGdoQmxwYTVDcUhZZllGcjlNeU1rMzVYd3FZcEFDcw=="}],"didascalia":"You can see my image number 0","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},{"mongo_id":"6130a2f98b7a9eef830a4420","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 1","creationTime":"2021-09-02T12:07:59.644","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"0ee98859-7a38-4f39-8955-20fe1f2665a1","link":"https://data.dev.d4science.org/shub/E_aXdBNUlSemY2dzFWL2NyVWp6OTBZMTRlRVVNNE5vSUpIckhIVXlESGJySUVPR2owUjV0TlI0S241VGZab0RVeQ=="}],"didascalia":"You can see my image number 1","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]}],"posizionamentoScavo":{"mongo_id":"6130a2b18b7a9eef830a440e","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test posizionamento scavo","creationTime":"2021-09-02T12:08:00.057","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"b4a99b19-ec8f-4660-8c32-e58b2789f323","link":"https://data.dev.d4science.org/shub/E_R05ENnJ2Vnd1SnJ3WDBiRHBqOVZQQUNqbGNxb2lHMzF2ZXN5b0U0UFBNQUVIMFJmRlgzdTVtQlVjZ1R0Q0o1MA=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"240d2794-2005-463d-92e7-ac98d14de136","link":"https://data.dev.d4science.org/shub/E_RnBNRDNaT1NnRmRIY25QUlN4b3VhaVBOdTY3c3UvNkFIejhnT0R1ZE9ZRWJxUTRxcGg5Q2huN3c3azUxV2NwaQ=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/6130a2808b7a9eef830a4401/6130a2b18b7a9eef830a440e/pos","fileNames":["pos.shp","pos.shx"],"workspace":"gna_conc_6130a2808b7a9eef830a4401","store":"pos_store","featureType":"pos"}],"layerUUID":null,"layerID":null,"layerName":"pos","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_6130a2808b7a9eef830a4401/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_6130a2808b7a9eef830a4401:pos&styles=&bbox=8.620919,40.629750,8.621179,40.630258&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_6130a2808b7a9eef830a4401","abstractSection":"Posizionamento topografico georeferenziato dell’area interessata dalle indagini","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":40.630257904721645,"maxLong":8.621178639172953,"minLat":40.62975046683799,"minLong":8.62091913167495},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"},"pianteFineScavo":[{"mongo_id":"6130a2d48b7a9eef830a4416","id":0,"policy":"RESTRICTED","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test pianta fine scavo","creationTime":"2021-09-02T12:08:00.057","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"715e3380-4d13-453c-adef-66ba17e019be","link":"https://data.dev.d4science.org/shub/E_ZjQ0N2UvZmFHMFQ2VzkxMjUrcDNBNEdtVDRVdG9abnhFR0YrYmR0WWlBbzkrM2V2QWs5MnR0QjNDSFRnUUFQNg=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"88532c9e-7e24-4424-b8f7-ca0f79e7683d","link":"https://data.dev.d4science.org/shub/E_dGUxWmw3d1dNaURxSnRaYzZqWkJMS255ZkdYb1FnbjVXc0srT1pyUkRWOWdob1c5MlJzTjMrMFI3aDBmaDVjNA=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/6130a2808b7a9eef830a4401/6130a2d48b7a9eef830a4416/pianta","fileNames":["pianta.shp","pianta.shx"],"workspace":"gna_conc_6130a2808b7a9eef830a4401","store":"pianta_store","featureType":"pianta"}],"layerUUID":null,"layerID":null,"layerName":"pianta","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_6130a2808b7a9eef830a4401/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_6130a2808b7a9eef830a4401:pianta&styles=&bbox=647502.891667,4470387.347517,647527.486073,4470417.525434&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_6130a2808b7a9eef830a4401","abstractSection":"Planimetria georeferenziata dell'area indagata al termine delle attività","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":4470417.525433567,"maxLong":647527.4860734959,"minLat":4470387.347516773,"minLong":647502.8916670183},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"}],"genericContent":[]},{"mongo_id":"6130a3198b7a9eef830a4423","id":0,"recordType":"CONCESSIONE","version":"1.0.0","licenzaID":"CC-BY","policy":"OPEN","nome":"Concessione : publish test","folderId":"19286a89-b678-40fd-98f0-93f266a543cb","lastUpdateTime":"2021-09-02T12:10:33.629","lastUpdateUser":null,"creationTime":"2021-09-02T12:10:33.629","creationUser":null,"report":{"objectName":"Publish report","errorMessages":[],"warningMessages":[],"children":[],"status":"PASSED"},"introduzione":"This is my MONGO project","descrizioneContenuto":"It contains this and that","authors":["Some one","Some, oneelse"],"contributore":"Contrib 1","titolari":["Some one","Some, oneelse"],"responsabile":"Someone","editore":"Editore","fontiFinanziamento":["Big pharma","Pentagon"],"soggetto":["Research Excavation","Archeology"],"risorseCorrelate":null,"dataInizioProgetto":"2021-09-02T12:10:28.119","dataFineProgetto":"2021-09-02T12:10:28.119","titolareLicenza":["Qualcun altro"],"titolareCopyright":["Chiedilo in giro"],"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"centroidLat":43.0,"centroidLong":9.0,"relazioneScavo":{"mongo_id":"6130a32f8b7a9eef830a4428","id":0,"policy":"OPEN","licenseID":"CC-BY","titolo":"Concessione : publish test relazione di scavo","creationTime":"2021-09-02T12:10:33.629","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/pdf","storageID":"0af0d4af-1134-4b3c-bf18-bdf4d37b0366","link":"https://data.dev.d4science.org/shub/E_UWVHenRLelp2SWJtRFFoSU1PaHZPRHFZaExMM0kyQWtJYXZWaXR5NDIxdHIyWWFNb3dOaG04R0cwaGFJL3lOVA=="}],"abstractIta":"simple abstract section","abstractEng":null,"responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},"immaginiRappresentative":[{"mongo_id":"6130a37f8b7a9eef830a443d","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 0","creationTime":"2021-09-02T12:10:28.119","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"7c544d13-e226-4202-9c06-a850755ca625","link":"https://data.dev.d4science.org/shub/E_VXBBWU9RN2Vpc0NHVGxaenhrRVQzcFRkYnlScFFKY1RiekhQRTVraE92dHU1RVpTTlc4bHFxREVvaGppS1RHeg=="}],"didascalia":"You can see my image number 0","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]},{"mongo_id":"6130a3948b7a9eef830a4442","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"My image number 1","creationTime":"2021-09-02T12:10:28.119","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"image/png","storageID":"8c4b30af-7dcd-4cfd-85d2-8560316715d9","link":"https://data.dev.d4science.org/shub/E_YkFIdERidys5aDBRbkJmMGpmWVdCM0FVdEo2WGNXS010aTE3bklodGFMTmJucDhwckU3L0g3Um5VTEh5NS9qQg=="}],"didascalia":"You can see my image number 1","format":"TIFF","responsabili":["Some one","Some, oneelse"],"soggetto":["Research Excavation","Archeology"]}],"posizionamentoScavo":{"mongo_id":"6130a34c8b7a9eef830a4430","id":0,"policy":"OPEN","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test posizionamento scavo","creationTime":"2021-09-02T12:10:33.629","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"a1da6f0e-3670-43bf-84d9-1a61dac8f912","link":"https://data.dev.d4science.org/shub/E_Skw5MXJTVkZnS2ZRNWdQUWxQR2VLWVNqNUg0L3QzeitFdWdlOFdtazlkZ1ZOR0ZqcW5WYmJtSkpsN2Z3M2x1dw=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"64c4733d-3a94-48b6-aa04-5115573b9d9e","link":"https://data.dev.d4science.org/shub/E_ZTdzTG4zRUlpbFRMSFlIR1lNdUExcVVzaWQ4VmkzbkxoempINnk3MzZtcE9lZlhKVGErcC9PMDVGWU1vK003cg=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/6130a3198b7a9eef830a4423/6130a34c8b7a9eef830a4430/pos","fileNames":["pos.shp","pos.shx"],"workspace":"gna_conc_6130a3198b7a9eef830a4423","store":"pos_store","featureType":"pos"}],"layerUUID":null,"layerID":null,"layerName":"pos","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_6130a3198b7a9eef830a4423/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_6130a3198b7a9eef830a4423:pos&styles=&bbox=8.620919,40.629750,8.621179,40.630258&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_6130a3198b7a9eef830a4423","abstractSection":"Posizionamento topografico georeferenziato dell’area interessata dalle indagini","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":40.630257904721645,"maxLong":8.621178639172953,"minLat":40.62975046683799,"minLong":8.62091913167495},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"},"pianteFineScavo":[{"mongo_id":"6130a3708b7a9eef830a4438","id":0,"policy":"RESTRICTED","licenseID":"CC-BY-4.0","titolo":"Concessione : publish test pianta fine scavo","creationTime":"2021-09-02T12:10:33.629","actualContent":[{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"27830c55-d762-4cfc-911b-99b254fba366","link":"https://data.dev.d4science.org/shub/E_U2ZqSExFRno4aEhXdC93cEo2elU2ZjRWVWU2TGRsb3RYMS8rYUNyMDVnUU1ZOSt6UUJxRTF0K0pKeGNjZ3RwZA=="},{"type":"WorkspaceContent","id":0,"mimetype":"application/x-shapefile","storageID":"689cd4a9-535d-4d8a-b473-175f7f772d0e","link":"https://data.dev.d4science.org/shub/E_Y2JTbjFHT3pmZzhzSW9Fa2NCN0RmeVBpU04xY2tWdzA1eUdyQVVNN2l6c1M5M3dManBzY3NVZWRsQ0w5b3VBeA=="},{"type":"GeoServerContent","id":0,"geoserverHostName":"geoserver-218.dev.d4science.org","geoserverPath":"/srv/geoserver_data/GNA/6130a3198b7a9eef830a4423/6130a3708b7a9eef830a4438/pianta","fileNames":["pianta.shp","pianta.shx"],"workspace":"gna_conc_6130a3198b7a9eef830a4423","store":"pianta_store","featureType":"pianta"}],"layerUUID":null,"layerID":null,"layerName":"pianta","wmsLink":"https://geoserver-218.dev.d4science.org/geoserver/gna_conc_6130a3198b7a9eef830a4423/wms?service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_6130a3198b7a9eef830a4423:pianta&styles=&bbox=647502.891667,4470387.347517,647527.486073,4470417.525434&srs=EPSG:4326&format=application/openlayers&width=400&height=400","workspace":"gna_conc_6130a3198b7a9eef830a4423","abstractSection":"Planimetria georeferenziata dell'area indagata al termine delle attività","topicCategory":"Society","subTopic":"Archeology","bbox":{"maxLat":4470417.525433567,"maxLong":647527.4860734959,"minLat":4470387.347516773,"minLong":647502.8916670183},"paroleChiaveLibere":["Robba","Stuff"],"paroleChiaveICCD":["vattelapesca","somthing something"],"valutazioneQualita":"Secondo me si","metodoRaccoltaDati":"Fattobbene","scalaAcquisizione":"1:10000","authors":["Some one","Some, oneelse"],"responsabile":"Someone"}],"genericContent":[]}]
diff --git a/src/test/resources/concessioni/filters/all.json b/src/test/resources/concessioni/filters/all.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/src/test/resources/concessioni/filters/all.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/src/test/resources/concessioni/filters/legacyid.json b/src/test/resources/concessioni/filters/legacyid.json
new file mode 100644
index 0000000..610e687
--- /dev/null
+++ b/src/test/resources/concessioni/filters/legacyid.json
@@ -0,0 +1,3 @@
+{
+ "id" : {$gt : 0}
+}
\ No newline at end of file
diff --git a/src/test/resources/concessioni/filters/missingCentroid.json b/src/test/resources/concessioni/filters/missingCentroid.json
new file mode 100644
index 0000000..ab28660
--- /dev/null
+++ b/src/test/resources/concessioni/filters/missingCentroid.json
@@ -0,0 +1,4 @@
+{
+ "centroidLat" : 0
+
+}
\ No newline at end of file
diff --git a/src/test/resources/concessioni/filters/nonFabio.json b/src/test/resources/concessioni/filters/nonFabio.json
new file mode 100644
index 0000000..b40d2fe
--- /dev/null
+++ b/src/test/resources/concessioni/filters/nonFabio.json
@@ -0,0 +1,3 @@
+{
+ "creationUser" : {$ne : "fabio.sinibaldi"}
+}
\ No newline at end of file
diff --git a/src/test/resources/concessioni/filters/validated.json b/src/test/resources/concessioni/filters/validated.json
new file mode 100644
index 0000000..f05a79f
--- /dev/null
+++ b/src/test/resources/concessioni/filters/validated.json
@@ -0,0 +1,3 @@
+{
+ "report.status": {$eq : "PASSED"}
+}
\ No newline at end of file