From cdbe3bae1242df1f058551130efe260ddc6f7700 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 4 Dec 2020 12:22:42 +0100 Subject: [PATCH 01/19] model update --- CHANGELOG.md | 3 +++ pom.xml | 2 +- .../geoportal/common/model/legacy/LayerConcessione.java | 2 +- .../geoportal/common/model/legacy/SDILayerDescriptor.java | 5 ++++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4c46d2..28f3042 100644 --- a/CHANGELOG.md +++ b/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-common +# [v1.0.2-SNAPSHOT] - 2020-12-4 +Model update + ## [v1.0.1] - 2020-11-11 Model update diff --git a/pom.xml b/pom.xml index a5e4ec2..c5445bd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.1 + 1.0.2-SNAPSHOT Geoportal Common diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/LayerConcessione.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/LayerConcessione.java index cc8331b..fa3362a 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/LayerConcessione.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/LayerConcessione.java @@ -22,7 +22,7 @@ public class LayerConcessione extends SDILayerDescriptor{ //layer private String layerName; private String wmsLink; - + private String workspace; //1.Identificazione diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/SDILayerDescriptor.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/SDILayerDescriptor.java index 716bf7c..c3af358 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/SDILayerDescriptor.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/SDILayerDescriptor.java @@ -18,5 +18,8 @@ public abstract class SDILayerDescriptor extends AssociatedContent{ public abstract String getWmsLink(); public abstract void setWmsLink(String wmsLink); - + public abstract void setWorkspace(String workspace); + public abstract String getWorkspace(); + public abstract BBOX getBbox(); + public abstract void setBbox(BBOX toSet); } From a06a92ab722c15aa2b48288f5ff25048aedae59b Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Mon, 7 Dec 2020 17:08:06 +0100 Subject: [PATCH 02/19] Model update --- CHANGELOG.md | 4 ++++ pom.xml | 2 +- .../geoportal/common/model/project/Project.java | 10 +++------- .../geoportal/common/model/project/Status.java | 11 +++++++++++ .../geoportal/common/model/project/StatusPhase.java | 13 +++++++++++++ 5 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/gcube/application/geoportal/common/model/project/Status.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 28f3042..0c3326e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-common +# [v1.0.3-SNAPSHOT] - 2020-12-4 +Project model update + + # [v1.0.2-SNAPSHOT] - 2020-12-4 Model update diff --git a/pom.xml b/pom.xml index c5445bd..47b2a56 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.2-SNAPSHOT + 1.0.3-SNAPSHOT Geoportal Common diff --git a/src/main/java/org/gcube/application/geoportal/common/model/project/Project.java b/src/main/java/org/gcube/application/geoportal/common/model/project/Project.java index fbb0a66..c1801f8 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/project/Project.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/project/Project.java @@ -31,17 +31,13 @@ public class Project { * */ - - public static enum Status{ - VALID,INVALID,PUBLISHED - } private String _id; private String profile_id; - private PublicationDetails publication; private Status status; - private BasicJSONObject document; + private Object document; private Centroid centroid; + private PublicationDetails publication; - + private String json; } diff --git a/src/main/java/org/gcube/application/geoportal/common/model/project/Status.java b/src/main/java/org/gcube/application/geoportal/common/model/project/Status.java new file mode 100644 index 0000000..0783b0a --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/model/project/Status.java @@ -0,0 +1,11 @@ +package org.gcube.application.geoportal.common.model.project; + +import java.util.List; + +public class Status { + + + private StatusPhase phase; + private List messages; + +} diff --git a/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java b/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java new file mode 100644 index 0000000..522532c --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java @@ -0,0 +1,13 @@ +package org.gcube.application.geoportal.common.model.project; + +public enum StatusPhase { + + DRAFT, + UNDER_VALIDATION, + INVALID, + VALID, + UNDER_PUBLICATION, + PUBLICATION_ERROR, + PUBLISHED + +} From 8b36eb5a8df00caaca4336ae7781d23157f1af63 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Mon, 7 Dec 2020 17:09:44 +0100 Subject: [PATCH 03/19] release --- CHANGELOG.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c3326e..e17371e 100644 --- a/CHANGELOG.md +++ b/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-common -# [v1.0.3-SNAPSHOT] - 2020-12-4 +# [v1.0.3] - 2020-12-4 Project model update diff --git a/pom.xml b/pom.xml index 47b2a56..653d58d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.3-SNAPSHOT + 1.0.3 Geoportal Common From 08462b863e61dfc4614f93f9e7f04f5ade32f283 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 16 Dec 2020 17:55:08 +0100 Subject: [PATCH 04/19] Temp files --- CHANGELOG.md | 4 ++ pom.xml | 33 ++++++++--- .../common/model/project/StoredFile.java | 4 ++ .../geoportal/common/rest/ProjectsI.java | 18 ++++++ .../geoportal/common/rest/TempFile.java | 15 +++++ .../geoportal/common/utils/ContextUtils.java | 41 ++++++++++++++ .../geoportal/common/utils/StorageUtils.java | 55 +++++++++++++++++++ 7 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java create mode 100644 src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e17371e..4e258f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # Changelog for org.gcube.application.geoportal-common +# [v1.0.4-SNAPSHOT] - 2020-12-9 +Projects Rest Interface +TempFile support + # [v1.0.3] - 2020-12-4 Project model update diff --git a/pom.xml b/pom.xml index 653d58d..70ea309 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.3 + 1.0.4-SNAPSHOT Geoportal Common @@ -51,9 +51,12 @@ 1.14.8 - - - + + + org.gcube.common + authorization-client + + @@ -62,22 +65,34 @@ test 4.11 - - + + org.glassfish.jersey.media jersey-media-json-jackson - - + + com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.8.8 - + + + + org.gcube.contentmanagement + storage-manager-core + [2.0.0, 3.0.0) + + + org.gcube.contentmanagement + storage-manager-wrapper + [2.0.0, 3.0.0) + + ch.qos.logback diff --git a/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java b/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java new file mode 100644 index 0000000..1309362 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java @@ -0,0 +1,4 @@ +package org.gcube.application.geoportal.common.model.project; + + + diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java new file mode 100644 index 0000000..773a6be --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java @@ -0,0 +1,18 @@ +package org.gcube.application.geoportal.common.rest; + +import java.rmi.RemoteException; + +import org.gcube.application.geoportal.common.model.project.Project; + +public interface ProjectsI { + + + public Iterable getAll() throws RemoteException; + public Iterable getByProfile(String profileId) throws RemoteException; + public Project getById(String profileId,String id) throws RemoteException; + public Iterable getByFilter(String filter)throws RemoteException; + public Iterable getByFilter(String filter, String profileId)throws RemoteException; + public Project registrNew(String profileId, String jsonDocument)throws RemoteException; + public Project update(String profileId, String projectId,String jsonDocument) throws RemoteException; + public void deleteById(String profileId, String projectId)throws RemoteException; +} diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java b/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java new file mode 100644 index 0000000..3477b5c --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/rest/TempFile.java @@ -0,0 +1,15 @@ +package org.gcube.application.geoportal.common.rest; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TempFile { + + private String id; + private String filename; + +} diff --git a/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java b/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java new file mode 100644 index 0000000..9984053 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/utils/ContextUtils.java @@ -0,0 +1,41 @@ +package org.gcube.application.geoportal.common.utils; + +import static org.gcube.common.authorization.client.Constants.authorizationService; + +import org.gcube.common.authorization.library.AuthorizationEntry; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ContextUtils { + + + public static String getCurrentScope(){ + try{ + String token=SecurityTokenProvider.instance.get(); + log.debug("Token is : "+token); + if(token==null) throw new Exception("Security Token is null"); + AuthorizationEntry entry = authorizationService().get(token); + return entry.getContext(); + }catch(Exception e ){ + log.debug("Unable to resolve token, checking scope provider..",e); + return ScopeProvider.instance.get(); + } + } + + + public static String getCurrentCaller(){ + try{ + String token=SecurityTokenProvider.instance.get(); + log.debug("Token is : "+token); + if(token==null) throw new Exception("Security Token is null"); + AuthorizationEntry entry = authorizationService().get(token); + return entry.getClientInfo().getId(); + }catch(Exception e ){ + log.debug("Unable to resolve token, checking scope provider..",e); + return "Unidentified data-transfer user"; + } + } +} diff --git a/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java b/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java new file mode 100644 index 0000000..84ecb52 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/utils/StorageUtils.java @@ -0,0 +1,55 @@ +package org.gcube.application.geoportal.common.utils; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.UUID; + +import org.gcube.application.geoportal.common.rest.InterfaceConstants; +import org.gcube.application.geoportal.common.rest.TempFile; +import org.gcube.contentmanagement.blobstorage.service.IClient; +import org.gcube.contentmanagement.blobstorage.transport.backend.RemoteBackendException; +import org.gcube.contentmanager.storageclient.wrapper.AccessType; +import org.gcube.contentmanager.storageclient.wrapper.MemoryType; +import org.gcube.contentmanager.storageclient.wrapper.StorageClient; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class StorageUtils { + + public static final IClient getClient(){ + return new StorageClient(InterfaceConstants.SERVICE_CLASS, InterfaceConstants.SERVICE_NAME, ContextUtils.getCurrentCaller(), AccessType.SHARED, MemoryType.VOLATILE).getClient(); + } + + private IClient client; + public StorageUtils() { + client=getClient(); + } + + //return Id + public TempFile putOntoStorage(InputStream source,String filename) throws RemoteBackendException, FileNotFoundException{ + log.debug("Uploading source "+filename); + String id=client.put(true).LFile(source).RFile(getUniqueString()); + return new TempFile(id,filename); + } + + public static final boolean checkStorageId(String id){ + return getClient().getHttpUrl().RFile(id)!=null; + } + + public static final String getUrlById(String id){ + IClient client=getClient(); + log.debug("Id is "+id); + return client.getHttpUrl().RFile(id); + } + + public static final void removeById(String id){ + IClient client=getClient(); + client.remove().RFile(id); + } + + + public static final String getUniqueString(){ + return UUID.randomUUID().toString(); + } +} From 204d4608a0aae9b35c004de60b99e142d5dd6ddf Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 17 Dec 2020 11:50:44 +0100 Subject: [PATCH 05/19] Changed Exception type --- .../geoportal/common/rest/ProjectsI.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java index 773a6be..cc81111 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java @@ -1,18 +1,16 @@ package org.gcube.application.geoportal.common.rest; -import java.rmi.RemoteException; - import org.gcube.application.geoportal.common.model.project.Project; public interface ProjectsI { - public Iterable getAll() throws RemoteException; - public Iterable getByProfile(String profileId) throws RemoteException; - public Project getById(String profileId,String id) throws RemoteException; - public Iterable getByFilter(String filter)throws RemoteException; - public Iterable getByFilter(String filter, String profileId)throws RemoteException; - public Project registrNew(String profileId, String jsonDocument)throws RemoteException; - public Project update(String profileId, String projectId,String jsonDocument) throws RemoteException; - public void deleteById(String profileId, String projectId)throws RemoteException; + public Iterable getAll() throws Exception; + public Iterable getByProfile(String profileId) throws Exception; + public Project getById(String profileId,String id) throws Exception; + public Iterable getByFilter(String filter)throws Exception; + public Iterable getByFilter(String filter, String profileId)throws Exception; + public Project registrNew(String profileId, String jsonDocument)throws Exception; + public Project update(String profileId, String projectId,String jsonDocument) throws Exception; + public void deleteById(String profileId, String projectId)throws Exception; } From 0e9f28909ca53dfaa6cbde026d3f61bf0072f093 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 17 Dec 2020 13:42:31 +0100 Subject: [PATCH 06/19] mongo id --- CHANGELOG.md | 3 +++ pom.xml | 2 +- .../application/geoportal/common/model/legacy/Record.java | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e258f8..b20c825 100644 --- a/CHANGELOG.md +++ b/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-common +# [v1.0.5-SNAPSHOT] - 2020-12-9 +Mongo Id in record + # [v1.0.4-SNAPSHOT] - 2020-12-9 Projects Rest Interface TempFile support diff --git a/pom.xml b/pom.xml index 70ea309..07053ea 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.4-SNAPSHOT + 1.0.5-SNAPSHOT Geoportal Common diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java index 9a55f07..7ef1669 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java @@ -17,6 +17,7 @@ import lombok.ToString; public abstract class Record { + private String mongo_id; //Generic Info private long id; From 888c14ad69653bd949bfbeb41eb86a595452f955 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 18 Dec 2020 13:41:28 +0100 Subject: [PATCH 07/19] Associated content now has mongo_id --- .../geoportal/common/model/legacy/AssociatedContent.java | 2 +- .../geoportal/common/rest/AddSectionToConcessioneRequest.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/AssociatedContent.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/AssociatedContent.java index b4a9b5f..627d244 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/AssociatedContent.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/AssociatedContent.java @@ -19,7 +19,7 @@ import lombok.Setter; public abstract class AssociatedContent { - + private String mongo_id; private long id; private AccessPolicy policy; diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java index aa2d637..81f14b0 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java @@ -5,7 +5,6 @@ import java.util.List; import javax.xml.bind.annotation.XmlRootElement; import org.gcube.application.geoportal.common.model.legacy.AssociatedContent; -import org.gcube.application.geoportal.common.model.legacy.InputStreamDescriptor; import lombok.Data; @@ -14,6 +13,6 @@ import lombok.Data; public class AddSectionToConcessioneRequest { private AssociatedContent toRegister; - private List streams; + private List streams; } From f6756413d66108683b737366082bfa63c3b78416 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 18 Dec 2020 17:05:40 +0100 Subject: [PATCH 08/19] Path embedded support --- .../common/model/legacy/Concessione.java | 101 ++++++++++++++ .../geoportal/common/model/legacy/Record.java | 4 +- .../geoportal/common/model/PathsTest.java | 67 +++++++++ .../geoportal/common/model/TestModel.java | 127 ++++++++++++++++++ 4 files changed, 298 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java create mode 100644 src/test/java/org/gcube/application/geoportal/common/model/TestModel.java diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java index 38f0b8e..4ea0792 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java @@ -87,6 +87,107 @@ public class Concessione extends Record{ } + public static class Paths{ + public final static String RELAZIONE="relazione"; + public final static String POSIZIONAMENTO="posizionamentoScavo"; + public final static String PIANTE="piante"; + public final static String IMMAGINI="immagini"; + + public static final String MONGO_ID="mongo_id"; + + public final static String piantaByIndex(int index) {return makeByIndex(PIANTE,index);}; + public final static String imgByIndex(int index) {return makeByIndex(IMMAGINI,index);}; + + public final static String piantaById(String id) {return makeByStringField(PIANTE, MONGO_ID, id);}; + public final static String imgById(String id) {return makeByStringField(IMMAGINI, MONGO_ID, id);}; + + + + private static String makeByIndex(String base,int value) {return String.format("%1$s[%2$d]",base,value);} + private static String makeByStringField(String base,String field,String value) + {return String.format("%1$s.%2$s:\"%3$s\"",base,field,value);} + } + + @Override + public AssociatedContent getContentByPath(String path) { + switch(path) { + case Paths.RELAZIONE : return getRelazioneScavo(); + case Paths.POSIZIONAMENTO : return getPosizionamentoScavo(); + } + if(path.matches("\\w+\\[\\d+\\]")) { + // Array section + String field=path.substring(0,path.lastIndexOf("[")); + Integer index=Integer.parseInt(path.substring(path.lastIndexOf("[")+1,path.lastIndexOf("]"))); + List list=null; + switch (field) { + case Paths.IMMAGINI : list = immaginiRappresentative; break; + case Paths.PIANTE : list = pianteFineScavo; break; + } + return getByIndex(list,index); + + } + if(path.matches("\\w+\\.\\w+\\s*\\:\\s*\\\"\\w+\\\"")) { + // Map section + String field=path.substring(0,path.lastIndexOf(".")); + String subField=path.substring(path.indexOf(".")+1,path.lastIndexOf(":")).trim(); + String value=path.substring(path.indexOf("\"")+1,path.lastIndexOf("\"")); + List list=null; + switch (field) { + case Paths.IMMAGINI : list = immaginiRappresentative; break; + case Paths.PIANTE : list = pianteFineScavo; break; + } + return getByFieldValue(list, subField, value); + } + return null; + } + + private static AssociatedContent getByIndex(List list, int index) { + if(list == null )return null; + return list.get(index); + } + +// NB only mongo_id is supported in this impl. + private static AssociatedContent getByFieldValue(List list, String field, Object value) { + for(AssociatedContent c: list) { + switch(field) { + case Paths.MONGO_ID : { + if(c.getMongo_id()!=null&&c.getMongo_id().equals(value)) + return c; + } + } + } + return null; + } + + + @Override + public void setAtPath(AssociatedContent toSet, String path) { + switch(path) { + case Paths.RELAZIONE : { + setRelazioneScavo((RelazioneScavo) toSet); + break; + } + case Paths.POSIZIONAMENTO : { + setRelazioneScavo((RelazioneScavo) toSet); + break; + } + case Paths.PIANTE : { + if(pianteFineScavo==null)pianteFineScavo=new ArrayList(); + pianteFineScavo.add((LayerConcessione) toSet); + break; + } + case Paths.IMMAGINI: { + if(immaginiRappresentative==null)immaginiRappresentative=new ArrayList(); + pianteFineScavo.add((LayerConcessione) toSet); + break; + } + + //TODO MATCH if()case Paths.PIANTa : return + //TODO MATCH if()case Paths.Img : return + } + + } + @Override public ValidationReport validate() { ValidationReport validator= super.validate(); diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java index 7ef1669..80cf158 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java @@ -66,6 +66,8 @@ public abstract class Record { setLicenzaID(ConstraintCheck.defaultFor(getLicenzaID(),"CC-BY").evaluate()); } - + + public abstract AssociatedContent getContentByPath(String path); + public abstract void setAtPath(AssociatedContent toSet,String path); } diff --git a/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java b/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java new file mode 100644 index 0000000..01b3295 --- /dev/null +++ b/src/test/java/org/gcube/application/geoportal/common/model/PathsTest.java @@ -0,0 +1,67 @@ +package org.gcube.application.geoportal.common.model; + +import static org.junit.Assert.assertEquals; + +import java.util.UUID; + +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.LayerConcessione; +import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo; +import org.gcube.application.geoportal.common.model.legacy.UploadedImage; +import org.junit.Test; + + +public class PathsTest { + + + @Test + public void embeddedPaths() { + Concessione c=TestModel.prepareConcessione(); + c=TestModel.setIds(c); + + + + LayerConcessione p=(LayerConcessione) c.getContentByPath(Paths.POSIZIONAMENTO); + assertEquals(c.getPosizionamentoScavo(), p); + + RelazioneScavo rel=(RelazioneScavo) c.getContentByPath(Paths.RELAZIONE); + assertEquals(c.getRelazioneScavo(), rel); + + for(int i=0;i{l.setMongo_id(rnd());}); + c.getImmaginiRappresentative().forEach((UploadedImage i)->{i.setMongo_id(rnd());}); + return c; + } + + public static Concessione prepareEmptyConcessione() { + Concessione concessione=new Concessione(); + + // Generic fields + + // Concessione fields + + + + + concessione.setNome("MONGO Italia, forse, ma su "); + concessione.setIntroduzione("This is my MONGO project"); + concessione.setDescrizioneContenuto("It contains this and that"); + + concessione.setAuthors(Arrays.asList(new String[] {"Some one","Some, oneelse"})); + + concessione.setContributore("Contrib 1"); + concessione.setTitolari(Arrays.asList(new String[] {"Some one","Some, oneelse"})); + concessione.setResponsabile("Someone"); + concessione.setEditore("Editore"); + + concessione.setFontiFinanziamento(Arrays.asList(new String[] {"Big pharma","Pentagon"})); + + + concessione.setSoggetto(Arrays.asList(new String[] {"Research Excavation","Archeology"})); + + + concessione.setDataInizioProgetto(LocalDateTime.now()); + concessione.setDataFineProgetto(LocalDateTime.now()); + + concessione.setLicenzaID("CC-BY"); + + concessione.setTitolareLicenza(Arrays.asList(new String[] {"Qualcun altro"})); + concessione.setTitolareCopyright(Arrays.asList(new String[] {"Chiedilo in giro"})); + + concessione.setParoleChiaveLibere(Arrays.asList(new String[] {"Robba","Stuff"})); + concessione.setParoleChiaveICCD(Arrays.asList(new String[] {"vattelapesca","somthing something"})); + + + concessione.setCentroidLat(43.0); //N-S + concessione.setCentroidLong(9.0); //E-W + + return concessione; + } + + public static Concessione prepareConcessione() { + + Concessione concessione=prepareEmptyConcessione(); + + + + // Attachments + + // Relazione scavo + RelazioneScavo relScavo=new RelazioneScavo(); + + relScavo.setAbstractSection("simple abstract section"); + relScavo.setResponsabili(concessione.getAuthors()); + + concessione.setRelazioneScavo(relScavo); + //Immagini rappresentative + ArrayList imgs=new ArrayList<>(); + for(int i=0;i<5;i++) { + UploadedImage img=new UploadedImage(); + img.setTitolo("My image number "+i); + img.setDidascalia("You can see my image number "+i); + img.setFormat("TIFF"); + img.setCreationTime(LocalDateTime.now()); + img.setResponsabili(concessione.getAuthors()); + imgs.add(img); + + } + concessione.setImmaginiRappresentative(imgs); + //Posizionamento + LayerConcessione posizionamento=new LayerConcessione(); + posizionamento.setValutazioneQualita("Secondo me si"); + posizionamento.setMetodoRaccoltaDati("Fattobbene"); + posizionamento.setScalaAcquisizione("1:10000"); + posizionamento.setAuthors(concessione.getAuthors()); + concessione.setPosizionamentoScavo(posizionamento); + + // Piante fine scavo + ArrayList piante=new ArrayList(); + for(int i=0;i<4;i++) { + LayerConcessione pianta=new LayerConcessione(); + pianta.setValutazioneQualita("Secondo me si"); + pianta.setMetodoRaccoltaDati("Fattobbene"); + pianta.setScalaAcquisizione("1:10000"); + pianta.setAuthors(concessione.getAuthors()); + pianta.setPolicy(AccessPolicy.RESTRICTED); + piante.add(pianta); + } + concessione.setPianteFineScavo(piante); + + return concessione; + } + +} From e7f2b59844888ab83af976426db2b8c28ac39c4b Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 18 Dec 2020 17:09:01 +0100 Subject: [PATCH 09/19] Destination as path --- .../geoportal/common/rest/AddSectionToConcessioneRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java index 81f14b0..a9f15a0 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java @@ -12,7 +12,7 @@ import lombok.Data; @Data public class AddSectionToConcessioneRequest { - private AssociatedContent toRegister; + private String destinationPath; private List streams; } From 8bf718d3a9c38417b61c0a56418ea7d10aeaf799 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 22 Dec 2020 11:31:54 +0100 Subject: [PATCH 10/19] Mongo interface --- CHANGELOG.md | 1 + .../common/rest/InterfaceConstants.java | 6 ++++++ .../geoportal/common/rest/MongoConcessioni.java | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java diff --git a/CHANGELOG.md b/CHANGELOG.md index b20c825..a453c5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # [v1.0.5-SNAPSHOT] - 2020-12-9 Mongo Id in record +Mongo Concessioni interface # [v1.0.4-SNAPSHOT] - 2020-12-9 Projects Rest Interface diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java b/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java index 9e3b01a..de8ff54 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java @@ -15,6 +15,12 @@ public class InterfaceConstants { public static final String PROJECTS="projects"; public static final String CONCESSIONI="concessioni"; + public static final String MONGO_CONCESSIONI="mongo-concessioni"; + + + public static final String PUBLISH_PATH="publish"; + public static final String REGISTER_FILES_PATH="registerFiles"; + } public static final class Parameters{ diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java b/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java new file mode 100644 index 0000000..16c8cce --- /dev/null +++ b/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java @@ -0,0 +1,17 @@ +package org.gcube.application.geoportal.common.rest; + +import org.gcube.application.geoportal.common.model.legacy.Concessione; + +public interface MongoConcessioni { + + public Concessione createNew(Concessione c) throws Exception; + public void deleteById(String id) throws Exception; + public Concessione getById(String id) throws Exception; + public Iterable getList()throws Exception; + public Concessione publish(String id) throws Exception; + public Concessione registerFile(String id, AddSectionToConcessioneRequest request) throws Exception; + public Concessione update(String id, String jsonUpdate) throws Exception; + public Concessione replace(Concessione replacement) throws Exception; + + +} From 0630ca9a481adaff1d687c1959cc41c7f782e611 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 22 Dec 2020 11:40:48 +0100 Subject: [PATCH 11/19] fix file names --- CHANGELOG.md | 2 ++ .../gcube/application/geoportal/common/utils/Files.java | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a453c5a..1b9b038 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm # [v1.0.5-SNAPSHOT] - 2020-12-9 Mongo Id in record Mongo Concessioni interface +Added Files.fixFileNAme + # [v1.0.4-SNAPSHOT] - 2020-12-9 Projects Rest Interface diff --git a/src/main/java/org/gcube/application/geoportal/common/utils/Files.java b/src/main/java/org/gcube/application/geoportal/common/utils/Files.java index 7c99a38..b730201 100644 --- a/src/main/java/org/gcube/application/geoportal/common/utils/Files.java +++ b/src/main/java/org/gcube/application/geoportal/common/utils/Files.java @@ -37,5 +37,12 @@ public class Files { } - + public static String fixFilename(String toFix) { + if(toFix.contains(".")) { + String prefix=toFix.substring(toFix.lastIndexOf(".")); + toFix=toFix.substring(0,toFix.lastIndexOf(".")); + return toFix.toLowerCase().replaceAll("[\\*\\+\\/\\\\ \\[\\]\\(\\)\\.\\\"\\:\\;\\|]","_")+prefix; + } + return toFix.toLowerCase().replaceAll("[\\*\\+\\/\\\\ \\[\\]\\(\\)\\.\\\"\\:\\;\\|]","_"); + } } From f68290afa5df9cbe8285fede4d38f7f5073c96d0 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 22 Dec 2020 11:47:38 +0100 Subject: [PATCH 12/19] VAlidation report as record field --- CHANGELOG.md | 2 +- .../application/geoportal/common/model/legacy/Concessione.java | 1 - .../gcube/application/geoportal/common/model/legacy/Record.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b9b038..946ad3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm Mongo Id in record Mongo Concessioni interface Added Files.fixFileNAme - +ValidationReport as field # [v1.0.4-SNAPSHOT] - 2020-12-9 Projects Rest Interface diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java index 4ea0792..b99f9db 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Concessione.java @@ -549,5 +549,4 @@ public class Concessione extends Record{ } - } diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java index 80cf158..780bab0 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java @@ -42,7 +42,7 @@ public abstract class Record { - + private ValidationReport report; public ValidationReport validate() { From f30c662e357d7cd96c6b39e06df60fc5334936c6 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 22 Dec 2020 17:49:15 +0100 Subject: [PATCH 13/19] Serialization tests --- .../geoportal/common/model/legacy/Record.java | 5 +++-- .../model/legacy/report/ValidationReport.java | 8 ++++++++ .../geoportal/common/model/SerializationTest.java | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java index 780bab0..4efecac 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/Record.java @@ -51,8 +51,9 @@ public abstract class Record { validator.checkMandatory(getRecordType(), "Record Type"); validator.checkMandatory(getNome(), "Nome"); - - return validator; + setReport(validator); + + return getReport(); } public void setDefaults() { diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/report/ValidationReport.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/report/ValidationReport.java index 252c649..ed91409 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/report/ValidationReport.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/report/ValidationReport.java @@ -5,11 +5,19 @@ import java.util.ArrayList; import java.util.List; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@NoArgsConstructor public class ValidationReport implements Serializable{ + /** + * + */ + private static final long serialVersionUID = -3629142756787381094L; + + public static enum ValidationStatus{ PASSED, ERROR, WARNING } diff --git a/src/test/java/org/gcube/application/geoportal/common/model/SerializationTest.java b/src/test/java/org/gcube/application/geoportal/common/model/SerializationTest.java index d1cc3fb..5006417 100644 --- a/src/test/java/org/gcube/application/geoportal/common/model/SerializationTest.java +++ b/src/test/java/org/gcube/application/geoportal/common/model/SerializationTest.java @@ -48,4 +48,18 @@ public class SerializationTest { System.out.println("Concessione is "+concessione.toString()); } + + @Test + public void generic() throws JsonProcessingException, IOException { + Concessione conc=TestModel.prepareConcessione(); + conc.validate(); + full(conc); + } + + + public void full(Object obj) throws JsonProcessingException, IOException { + String asString=mapper.writeValueAsString(obj); + Object other=mapper.readerFor(obj.getClass()).readValue(asString); + + } } From dacaa5ef06ce8bb5bee9c7f6a6772a4fc98040b1 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Mon, 4 Jan 2021 19:08:20 +0100 Subject: [PATCH 14/19] Added constructor --- .../geoportal/common/rest/AddSectionToConcessioneRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java index a9f15a0..721f3e7 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java @@ -4,12 +4,12 @@ import java.util.List; import javax.xml.bind.annotation.XmlRootElement; -import org.gcube.application.geoportal.common.model.legacy.AssociatedContent; - +import lombok.AllArgsConstructor; import lombok.Data; @XmlRootElement @Data +@AllArgsConstructor public class AddSectionToConcessioneRequest { private String destinationPath; From 01371e8750db7c211c73974081435073c7f2e661 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 6 Jan 2021 15:46:38 +0100 Subject: [PATCH 15/19] updated model --- CHANGELOG.md | 2 ++ .../common/model/legacy/RelazioneScavo.java | 16 +++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 946ad3d..9d3ec6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ Mongo Id in record Mongo Concessioni interface Added Files.fixFileNAme ValidationReport as field +Updated Model (#20357) + # [v1.0.4-SNAPSHOT] - 2020-12-9 Projects Rest Interface diff --git a/src/main/java/org/gcube/application/geoportal/common/model/legacy/RelazioneScavo.java b/src/main/java/org/gcube/application/geoportal/common/model/legacy/RelazioneScavo.java index e9d4034..f813a5d 100644 --- a/src/main/java/org/gcube/application/geoportal/common/model/legacy/RelazioneScavo.java +++ b/src/main/java/org/gcube/application/geoportal/common/model/legacy/RelazioneScavo.java @@ -16,7 +16,9 @@ public class RelazioneScavo extends AssociatedContent { - private String abstractSection; +// private String abstractSection; + private String abstractIta; + private String abstractEng; private List responsabili; private List soggetto; @@ -36,7 +38,7 @@ public class RelazioneScavo extends AssociatedContent { public int hashCode() { final int prime = 31; int result = super.hashCode(); - result = prime * result + ((abstractSection == null) ? 0 : abstractSection.hashCode()); +// result = prime * result + ((abstractSection == null) ? 0 : abstractSection.hashCode()); // result = prime * result + ((responsabili == null) ? 0 : responsabili.hashCode()); result = prime * result + CollectionsUtils.hashCode(responsabili); // result = prime * result + ((soggetto == null) ? 0 : soggetto.hashCode()); @@ -53,11 +55,11 @@ public class RelazioneScavo extends AssociatedContent { if (getClass() != obj.getClass()) return false; RelazioneScavo other = (RelazioneScavo) obj; - if (abstractSection == null) { - if (other.abstractSection != null) - return false; - } else if (!abstractSection.equals(other.abstractSection)) - return false; +// if (abstractSection == null) { +// if (other.abstractSection != null) +// return false; +// } else if (!abstractSection.equals(other.abstractSection)) +// return false; // if (responsabili == null) { // if (other.responsabili != null) // return false; From bdb3b6c2cc4a9f88be23b084d7894e7eea74cd0f Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 7 Jan 2021 11:22:34 +0100 Subject: [PATCH 17/19] fixed test model --- .../org/gcube/application/geoportal/common/model/TestModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 96c7297..e9b9bae 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 @@ -83,7 +83,7 @@ public class TestModel { // Relazione scavo RelazioneScavo relScavo=new RelazioneScavo(); - relScavo.setAbstractSection("simple abstract section"); + relScavo.setAbstractEng("simple abstract section"); relScavo.setResponsabili(concessione.getAuthors()); concessione.setRelazioneScavo(relScavo); From 7e083800fdc57040dc61d243d383ba05e51c8983 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Mon, 11 Jan 2021 12:20:33 +0100 Subject: [PATCH 18/19] Added void constructor --- .../geoportal/common/rest/AddSectionToConcessioneRequest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java index 721f3e7..b935f69 100644 --- a/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java +++ b/src/main/java/org/gcube/application/geoportal/common/rest/AddSectionToConcessioneRequest.java @@ -6,10 +6,12 @@ import javax.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @XmlRootElement @Data @AllArgsConstructor +@NoArgsConstructor public class AddSectionToConcessioneRequest { private String destinationPath; From 31db0d70dfd8ec10f6198b42b66c1dc04435ea34 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 14 Jan 2021 16:47:02 +0100 Subject: [PATCH 19/19] releasing 1.0.5 --- CHANGELOG.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d3ec6f..3651766 100644 --- a/CHANGELOG.md +++ b/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-common -# [v1.0.5-SNAPSHOT] - 2020-12-9 +# [v1.0.5] - 2020-12-9 Mongo Id in record Mongo Concessioni interface Added Files.fixFileNAme diff --git a/pom.xml b/pom.xml index 07053ea..52d7cdd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.gcube.application geoportal-common - 1.0.5-SNAPSHOT + 1.0.5 Geoportal Common