From da8ab06772e3fb4e5d67c541d224bbd6166ac9b8 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 1 Mar 2022 12:19:37 +0100 Subject: [PATCH] #22883 starting.. --- CHANGELOG.md | 7 + pom.xml | 8 +- .../ConvertToDataValueObjectModel.java | 129 ++++++++++++++++++ .../MockDocumentConfigurationReader.java | 52 +++++++ .../geoportalconfig/Configuration.java | 17 +++ .../geoportalconfig/DocumentConfig.java | 24 ++++ .../geoportalconfig/FilePath.java | 23 ++++ .../geoportalconfig/GcubeProfile.java | 54 ++++++++ .../geoportalconfig/ConfigurationVO.java | 35 +++++ .../geoportalconfig/DocumentConfigVO.java | 55 ++++++++ .../shared/geoportalconfig/FilePathVO.java | 45 ++++++ .../geoportalconfig/GcubeProfileVO.java | 115 ++++++++++++++++ .../LoadDocumentConfiguration.java | 45 ++++++ src/test/resources/geoportal-config.json | 88 ++++++++++++ 14 files changed, 696 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/MockDocumentConfigurationReader.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/Configuration.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/DocumentConfig.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/FilePath.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/GcubeProfile.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/ConfigurationVO.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/DocumentConfigVO.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/FilePathVO.java create mode 100644 src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/GcubeProfileVO.java create mode 100644 src/test/java/org/gcube/application/LoadDocumentConfiguration.java create mode 100644 src/test/resources/geoportal-config.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 180c73a..2820dff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.0.0-SNAPSHOT] - 2022-02-28 + +#### Enhancements + +- [#22883] Integrate the configurations exposed by geoportal-client + + ## [v1.3.0] - 2021-12-03 #### Enhancements diff --git a/pom.xml b/pom.xml index c3ea668..2093f23 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.gcube.application geoportal-data-common - 1.3.0 + 2.0.0-SNAPSHOT GeoPortal Data Common is common library used by GUI components developed for GeoNA @@ -85,10 +85,16 @@ compile + + + org.slf4j + slf4j-api + org.slf4j slf4j-log4j12 1.6.4 + test diff --git a/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java b/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java new file mode 100644 index 0000000..dc6bcdb --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/ConvertToDataValueObjectModel.java @@ -0,0 +1,129 @@ +package org.gcube.application.geoportalcommon; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.application.geoportalcommon.geoportalconfig.Configuration; +import org.gcube.application.geoportalcommon.geoportalconfig.DocumentConfig; +import org.gcube.application.geoportalcommon.geoportalconfig.FilePath; +import org.gcube.application.geoportalcommon.geoportalconfig.GcubeProfile; +import org.gcube.application.geoportalcommon.shared.geoportalconfig.ConfigurationVO; +import org.gcube.application.geoportalcommon.shared.geoportalconfig.DocumentConfigVO; +import org.gcube.application.geoportalcommon.shared.geoportalconfig.FilePathVO; +import org.gcube.application.geoportalcommon.shared.geoportalconfig.GcubeProfileVO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The Class ConvertToDataValueObjectModel. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * Mar 1, 2022 + */ +public class ConvertToDataValueObjectModel { + + private static Logger LOG = LoggerFactory.getLogger(ConvertToDataValueObjectModel.class); + + /** + * To document config VO. + * + * @param dc the dc + * @return the document config VO + */ + public static DocumentConfigVO toDocumentConfigVO(DocumentConfig dc) { + LOG.trace("toDocumentConfigVO called"); + + if (dc == null) { + LOG.warn(DocumentConfig.class.getSimpleName() + " is null"); + return null; + } + + DocumentConfigVO dcVO = new DocumentConfigVO(); + dcVO.setId(dc.getId()); + dcVO.setType(dc.getType()); + + Configuration config = dc.getConfiguration(); + if (config == null) { + LOG.warn(Configuration.class.getSimpleName() + " is null"); + return null; + } + + List gCubeProfiles = config.getGcubeProfiles(); + if (gCubeProfiles == null) { + LOG.warn("List of " + GcubeProfile.class.getSimpleName() + " is null"); + return null; + } + + ConfigurationVO configVO = new ConfigurationVO(); + List gCubeProfilesVO = new ArrayList(gCubeProfiles.size()); + for (GcubeProfile gCubeProfile : gCubeProfiles) { + gCubeProfilesVO.add(toGcubeProfileVO(gCubeProfile)); + } + configVO.setGcubeProfiles(gCubeProfilesVO); + dcVO.setConfiguration(configVO); + + LOG.debug("returning: " + dcVO); + return dcVO; + } + + /** + * To gcube profile VO. + * + * @param gCubeProfile the g cube profile + * @return the gcube profile VO + */ + public static GcubeProfileVO toGcubeProfileVO(GcubeProfile gCubeProfile) { + LOG.trace("toGcubeProfileVO called"); + + if (gCubeProfile == null) { + LOG.warn(GcubeProfile.class.getSimpleName() + " is null"); + return null; + } + + GcubeProfileVO gpVO = new GcubeProfileVO(); + gpVO.setGcubeName(gCubeProfile.getGcubeName()); + gpVO.setGcubeSecondaryType(gCubeProfile.getGcubeSecondaryType()); + gpVO.setMinOccurs(gCubeProfile.getMinOccurs()); + gpVO.setMaxOccurs(gCubeProfile.getMaxOccurs()); + gpVO.setSectionName(gCubeProfile.getSectionName()); + gpVO.setSectionTitle(gCubeProfile.getSectionTitle()); + + List filePaths = gCubeProfile.getFilePaths(); + + if (filePaths != null) { + LOG.warn("List of " + FilePath.class.getSimpleName() + " is null"); + List filePathsVO = new ArrayList(filePaths.size()); + for (FilePath filePath : filePaths) { + filePathsVO.add(toFilePathVO(filePath)); + } + gpVO.setFilePaths(filePathsVO); + } + + LOG.info("returning: " + gpVO); + return gpVO; + } + + /** + * To file path VO. + * + * @param filePath the file path + * @return the file path VO + */ + public static FilePathVO toFilePathVO(FilePath filePath) { + LOG.trace("toFilePathVO called"); + + if (filePath == null) { + LOG.warn("List of " + FilePath.class.getSimpleName() + " is null"); + return null; + } + + FilePathVO fpVO = new FilePathVO(); + fpVO.setFieldName(filePath.getFieldName()); + fpVO.setFieldDefinition(filePath.getFieldDefinition()); + + LOG.info("returning: " + fpVO); + return fpVO; + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/MockDocumentConfigurationReader.java b/src/main/java/org/gcube/application/geoportalcommon/MockDocumentConfigurationReader.java new file mode 100644 index 0000000..804fe2a --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/MockDocumentConfigurationReader.java @@ -0,0 +1,52 @@ +package org.gcube.application.geoportalcommon; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.gcube.application.geoportalcommon.geoportalconfig.DocumentConfig; +import org.gcube.application.geoportalcommon.shared.geoportalconfig.DocumentConfigVO; + +public class MockDocumentConfigurationReader { + + private DocumentConfigVO documentConfigVO; + + public MockDocumentConfigurationReader() { + try { + loadDocumentConfiguration(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void loadDocumentConfiguration() throws Exception { + System.out.println("loadDocumentConfiguration called"); + String filePath = "/home/francescomangiacrapa/git/geoportal-data-common/src/test/resources/geoportal-config.json"; + String theFile = readFile(filePath); + System.out.println("the file is: "+theFile); + DocumentConfig dc = org.gcube.application.geoportal.client.utils.Serialization.read(theFile, + DocumentConfig.class); + System.out.println(dc); + + DocumentConfigVO dcVO = ConvertToDataValueObjectModel.toDocumentConfigVO(dc); + documentConfigVO = dcVO; + } + + private static String readFile(String filePath) { + String content = ""; + + try { + content = new String(Files.readAllBytes(Paths.get(filePath))); + } catch (IOException e) { + e.printStackTrace(); + } + + return content; + } + + + public DocumentConfigVO getDocumentConfigVO() { + return documentConfigVO; + } +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/Configuration.java b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/Configuration.java new file mode 100644 index 0000000..1b359ab --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/Configuration.java @@ -0,0 +1,17 @@ +package org.gcube.application.geoportalcommon.geoportalconfig; + +import java.util.List; + +import javax.xml.bind.annotation.XmlRootElement; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Data +@XmlRootElement(name = "configuration") +@Slf4j +public class Configuration{ + + private List gcubeProfiles; + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/DocumentConfig.java b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/DocumentConfig.java new file mode 100644 index 0000000..96a802e --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/DocumentConfig.java @@ -0,0 +1,24 @@ +package org.gcube.application.geoportalcommon.geoportalconfig; + +import javax.xml.bind.annotation.XmlRootElement; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Data +@XmlRootElement +@Slf4j +public class DocumentConfig { + + @JsonProperty + private String id; + + @JsonProperty + private String type; + + @JsonProperty + private Configuration configuration; + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/FilePath.java b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/FilePath.java new file mode 100644 index 0000000..e6df7a7 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/FilePath.java @@ -0,0 +1,23 @@ +package org.gcube.application.geoportalcommon.geoportalconfig; + +import javax.xml.bind.annotation.XmlRootElement; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Data +@XmlRootElement(name = "filePaths") +@Slf4j +public class FilePath { + + @JsonProperty + String fieldDefinition; + @JsonProperty + String fieldName; + + public FilePath() { + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/GcubeProfile.java b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/GcubeProfile.java new file mode 100644 index 0000000..0b37135 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/geoportalconfig/GcubeProfile.java @@ -0,0 +1,54 @@ +package org.gcube.application.geoportalcommon.geoportalconfig; + +import java.util.List; + +import javax.xml.bind.annotation.XmlRootElement; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +@Data +@XmlRootElement(name = "gcubeProfiles") +@Slf4j +public class GcubeProfile { + + private static final String FILE_PATHS = "filePaths"; + + public static final int MIN_MAX_NOT_SPECIFIED = -1; + + public GcubeProfile() {} + + @JsonProperty + private String gcubeSecondaryType; + + @JsonProperty + private String gcubeName; + + @JsonProperty + private String sectionName; + + @JsonProperty + private String sectionTitle; + + /** + * 0: Not specified means Not Mandatory. The Gcube Profile is not mandatory and means that all its fields must be optional in the gCube Meta Profile. + * N: is the MIN number of Occurrences + * Default is 1 occurrence + */ + @JsonProperty + private int minOccurs = 1; + + /** + * 0: Not specified means max number of Occurrences is arbitrary. + * N: is the MAX number of Occurrences + */ + @JsonProperty + private int maxOccurs = 1; + + @JsonProperty(FILE_PATHS) + private List filePaths; + + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/ConfigurationVO.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/ConfigurationVO.java new file mode 100644 index 0000000..4be5b31 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/ConfigurationVO.java @@ -0,0 +1,35 @@ +package org.gcube.application.geoportalcommon.shared.geoportalconfig; + +import java.io.Serializable; +import java.util.List; + +public class ConfigurationVO implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 372838411789432170L; + + private List gcubeProfiles; + + public ConfigurationVO() { + } + + public List getGcubeProfiles() { + return gcubeProfiles; + } + + public void setGcubeProfiles(List gcubeProfiles) { + this.gcubeProfiles = gcubeProfiles; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ConfigurationVO [gcubeProfiles="); + builder.append(gcubeProfiles); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/DocumentConfigVO.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/DocumentConfigVO.java new file mode 100644 index 0000000..5349a3c --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/DocumentConfigVO.java @@ -0,0 +1,55 @@ +package org.gcube.application.geoportalcommon.shared.geoportalconfig; + +import java.io.Serializable; + +public class DocumentConfigVO implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 7538079431272352662L; + private String id; + private String type; + private ConfigurationVO configuration; + + public DocumentConfigVO() { + } + + public String getId() { + return id; + } + + public String getType() { + return type; + } + + public ConfigurationVO getConfiguration() { + return configuration; + } + + public void setId(String id) { + this.id = id; + } + + public void setType(String type) { + this.type = type; + } + + public void setConfiguration(ConfigurationVO configuration) { + this.configuration = configuration; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DocumentConfigVO [id="); + builder.append(id); + builder.append(", type="); + builder.append(type); + builder.append(", configuration="); + builder.append(configuration); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/FilePathVO.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/FilePathVO.java new file mode 100644 index 0000000..13bad31 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/FilePathVO.java @@ -0,0 +1,45 @@ +package org.gcube.application.geoportalcommon.shared.geoportalconfig; + +import java.io.Serializable; + +public class FilePathVO implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -9186437393759442989L; + + private String fieldName; + private String fieldDefinition; + + public FilePathVO() { + } + + public String getFieldName() { + return fieldName; + } + + public String getFieldDefinition() { + return fieldDefinition; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public void setFieldDefinition(String fieldDefinition) { + this.fieldDefinition = fieldDefinition; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("FilePathVO [fieldName="); + builder.append(fieldName); + builder.append(", fieldDefinition="); + builder.append(fieldDefinition); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/GcubeProfileVO.java b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/GcubeProfileVO.java new file mode 100644 index 0000000..946b0d3 --- /dev/null +++ b/src/main/java/org/gcube/application/geoportalcommon/shared/geoportalconfig/GcubeProfileVO.java @@ -0,0 +1,115 @@ +package org.gcube.application.geoportalcommon.shared.geoportalconfig; + +import java.io.Serializable; +import java.util.List; + +public class GcubeProfileVO implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -7910384776524845043L; + + public static final int MIN_MAX_NOT_SPECIFIED = -1; + + private String gcubeSecondaryType; + private String gcubeName; + private String sectionName; + private String sectionTitle; + + /** + * 0: Not specified means Not Mandatory. The Gcube Profile is not mandatory and + * means that all its fields must be optional in the gCube Meta Profile. N: is + * the MIN number of Occurrences Default is 1 occurrence + */ + private int minOccurs = 1; + + /** + * 0: Not specified means max number of Occurrences is arbitrary. N: is the MAX + * number of Occurrences + */ + private int maxOccurs = 1; + + private List filePaths; + + public GcubeProfileVO() { + } + + public String getGcubeSecondaryType() { + return gcubeSecondaryType; + } + + public String getGcubeName() { + return gcubeName; + } + + public String getSectionName() { + return sectionName; + } + + public String getSectionTitle() { + return sectionTitle; + } + + public int getMinOccurs() { + return minOccurs; + } + + public int getMaxOccurs() { + return maxOccurs; + } + + public List getFilePaths() { + return filePaths; + } + + public void setGcubeSecondaryType(String gcubeSecondaryType) { + this.gcubeSecondaryType = gcubeSecondaryType; + } + + public void setGcubeName(String gcubeName) { + this.gcubeName = gcubeName; + } + + public void setSectionName(String sectionName) { + this.sectionName = sectionName; + } + + public void setSectionTitle(String sectionTitle) { + this.sectionTitle = sectionTitle; + } + + public void setMinOccurs(int minOccurs) { + this.minOccurs = minOccurs; + } + + public void setMaxOccurs(int maxOccurs) { + this.maxOccurs = maxOccurs; + } + + public void setFilePaths(List filePaths) { + this.filePaths = filePaths; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("GcubeProfileVO [gcubeSecondaryType="); + builder.append(gcubeSecondaryType); + builder.append(", gcubeName="); + builder.append(gcubeName); + builder.append(", sectionName="); + builder.append(sectionName); + builder.append(", sectionTitle="); + builder.append(sectionTitle); + builder.append(", minOccurs="); + builder.append(minOccurs); + builder.append(", maxOccurs="); + builder.append(maxOccurs); + builder.append(", filePaths="); + builder.append(filePaths); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/test/java/org/gcube/application/LoadDocumentConfiguration.java b/src/test/java/org/gcube/application/LoadDocumentConfiguration.java new file mode 100644 index 0000000..4e728d5 --- /dev/null +++ b/src/test/java/org/gcube/application/LoadDocumentConfiguration.java @@ -0,0 +1,45 @@ +package org.gcube.application; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.gcube.application.geoportalcommon.geoportalconfig.DocumentConfig; +import org.gcube.common.scope.api.ScopeProvider; +import org.junit.Test; + +public class LoadDocumentConfiguration { + + private static String TOKEN = ""; + private static String CONTEXT = "/gcube/devsec/devVRE"; + private static String USERNAME = "francesco.mangiacrapa"; + + // @Before + public void init() { + ScopeProvider.instance.set(CONTEXT); + } + + @Test + public void loadDocumentConfiguration() throws Exception { + System.out.println("loadDocumentConfiguration called"); + String filePath = "/home/francescomangiacrapa/git/geoportal-data-common/src/test/resources/geoportal-config.json"; + String theFile = readFile(filePath); + System.out.println("the file is: "+theFile); + DocumentConfig dc = org.gcube.application.geoportal.client.utils.Serialization.read(theFile, + DocumentConfig.class); + System.out.println(dc); + } + + private static String readFile(String filePath) { + String content = ""; + + try { + content = new String(Files.readAllBytes(Paths.get(filePath))); + } catch (IOException e) { + e.printStackTrace(); + } + + return content; + } + +} diff --git a/src/test/resources/geoportal-config.json b/src/test/resources/geoportal-config.json new file mode 100644 index 0000000..13e7452 --- /dev/null +++ b/src/test/resources/geoportal-config.json @@ -0,0 +1,88 @@ +{ + "id": "geoportal-data-entry-app", + "type": "DATA_ENTRY_GUI", + "configuration": { + "gcubeProfiles": [ + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Informazioni_di_progetto", + "sectionName": "$.", + "sectionTitle": "Informazioni di Progetto" + }, + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Abstract_Relazione_di_Scavo", + "sectionName": "abstractRelazione", + "sectionTitle": "Abstract Relazione Scavo", + "parentName": "$.", + "filePaths": [ + { + "fieldDefinition": "Carica Abstract Ita (in PDF)", + "fieldName": "filesetIta" + }, + { + "fieldDefinition": "Carica Abstract Ita (in PDF)", + "fieldName": "filesetEng" + } + ] + }, + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Relazione_di_Scavo", + "sectionName": "relazioneScavo", + "sectionTitle": "Relazione di Scavo", + "parentName": "$.", + "filePaths": [ + { + "fieldDefinition": "Relazione di fine scavo (in PDF)", + "fieldName": "fileset" + } + ] + }, + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Immagine_Rappresentativa_di_Scavo", + "sectionName": "immagini", + "sectionTitle": "Immagini Rappresentative", + "minOccurs": 1, + "maxOccurs": 8, + "parentName": "$.", + "filePaths": [ + { + "fieldDefinition": "Immagine", + "fieldName": "fileset" + } + ] + }, + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Pianta_di_fine_Scavo", + "sectionName": "posizionamentoScavo", + "sectionTitle": "Posizionamento dell'Area di Indagine", + "parentName": "$.", + "filePaths": [ + { + "fieldDefinition": "File", + "fieldName": "fileset" + } + ] + }, + { + "gcubeSecondaryType": "GeoNaMetadata", + "gcubeName": "Posizionamento_dell_area_di_indagine", + "sectionName": "pianteFineScavo", + "sectionTitle": "Posizionamento dell'Area di Indagine", + "parentName": "$.", + "minOccurs": 0, + "maxOccurs": 0, + "filePaths": [ + { + "fieldDefinition": "File", + "fieldName": "fileset" + } + ] + } + ], + "saveStep": "SUBMIT-FOR-REVIEW" + } +} \ No newline at end of file