diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactIdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactIdRDAExportModel.java deleted file mode 100644 index 7a6afae46..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactIdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class ContactIdRDAExportModel { - private String contact_id; - private String contact_id_type; - - public String getContact_id() { - return contact_id; - } - public void setContact_id(String contact_id) { - this.contact_id = contact_id; - } - - public String getContact_id_type() { - return contact_id_type; - } - public void setContact_id_type(String contact_id_type) { - this.contact_id_type = contact_id_type; - } - - ContactIdRDAExportModel(String contact_id, String contact_id_type) { - this.contact_id = contact_id; - this.contact_id_type = contact_id_type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java index 2742f5443..6f03ac9f7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java @@ -3,15 +3,15 @@ package eu.eudat.models.data.rda; import eu.eudat.data.entities.UserInfo; public class ContactRDAExportModel { - private String mail; + private String mbox; private String name; - private ContactIdRDAExportModel contact_id; + private IdRDAExportModel contact_id; - public String getMail() { - return mail; + public String getMbox() { + return mbox; } - public void setMail(String mail) { - this.mail = mail; + public void setMbox(String mbox) { + this.mbox = mbox; } public String getName() { @@ -21,24 +21,24 @@ public class ContactRDAExportModel { this.name = name; } - public ContactIdRDAExportModel getContact_id() { + public IdRDAExportModel getContact_id() { return contact_id; } - public void setContact_id(ContactIdRDAExportModel contact_id) { + public void setContact_id(IdRDAExportModel contact_id) { this.contact_id = contact_id; } - public ContactRDAExportModel fromDataModel(UserInfo entity) { - this.mail = entity.getEmail(); - this.name = entity.getName(); + ContactRDAExportModel contact = new ContactRDAExportModel(); + contact.mbox = entity.getEmail(); + contact.name = entity.getName(); // TODO: we should use a contact_id and not our UUID. if (!entity.getId().toString().isEmpty()) { - this.contact_id = new ContactIdRDAExportModel(entity.getId().toString(), "argos_internal"); + contact.contact_id = new IdRDAExportModel(entity.getId().toString(), "other"); } else { - this.contact_id = null; + contact.contact_id = null; } - return this; + return contact; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java new file mode 100644 index 000000000..067b1aa0f --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java @@ -0,0 +1,121 @@ +package eu.eudat.models.data.rda; + +import java.util.List; + +public class DatasetDistributionRDAExportModel { + private String access_url; + private String available_till; + private int byte_size; + private String data_access; // Allowed values: open / shared / closed + private String description; + private String download_url; + private List format; // Format according to: https://www.iana.org/assignments/media-types/media-types.xhtml if appropriate, otherwise use the common name for this format + private HostRDAExportModel host; + private List license; + private String title; + + public String getAccess_url() { + return access_url; + } + public void setAccess_url(String access_url) { + this.access_url = access_url; + } + + public String getAvailable_till() { + return available_till; + } + public void setAvailable_till(String available_till) { + this.available_till = available_till; + } + + public int getByte_size() { + return byte_size; + } + public void setByte_size(int byte_size) { + this.byte_size = byte_size; + } + + public String getData_access() { + return data_access; + } + public void setData_access(String data_access) { + this.data_access = data_access; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getDownload_url() { + return download_url; + } + public void setDownload_url(String download_url) { + this.download_url = download_url; + } + + public List getFormat() { + return format; + } + public void setFormat(List format) { + this.format = format; + } + + public HostRDAExportModel getHost() { + return host; + } + public void setHost(HostRDAExportModel host) { + this.host = host; + } + + public List getLicense() { + return license; + } + public void setLicense(List license) { + this.license = license; + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + + public DatasetDistributionRDAExportModel fromDataModel(String key, Object value) { + DatasetDistributionRDAExportModel distributionModel = new DatasetDistributionRDAExportModel(); + switch (key) { + case "access_url": + distributionModel.setAccess_url(value.toString()); + break; + case "available_till": + distributionModel.setAvailable_till(value.toString()); + break; + case "byte_size": + try { distributionModel.setByte_size(Integer.parseInt(value.toString())); } + catch (NumberFormatException e) { e.printStackTrace(); } + break; + case "data_access": + distributionModel.setData_access(value.toString()); + break; + case "description": + distributionModel.setDescription(value.toString()); + break; + case "download_url": + distributionModel.setDownload_url(value.toString()); + break; + case "format": + break; + case "host": + break; + case "license": + break; + case "title": + distributionModel.setTitle(value.toString()); + break; + } + return distributionModel; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetIdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetIdRDAExportModel.java deleted file mode 100644 index 0267514c5..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetIdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DatasetIdRDAExportModel { - private String dataset_id; - private String dataset_id_type; - - public String getDataset_id() { - return dataset_id; - } - public void setDataset_id(String dataset_id) { - this.dataset_id = dataset_id; - } - - public String getDataset_id_type() { - return dataset_id_type; - } - public void setDataset_id_type(String dataset_id_type) { - this.dataset_id_type = dataset_id_type; - } - - DatasetIdRDAExportModel(String dataset_id, String dataset_id_type) { - this.dataset_id = dataset_id; - this.dataset_id_type = dataset_id_type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java index 9a70ed7d2..dc5814375 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java @@ -3,7 +3,7 @@ package eu.eudat.models.data.rda; public class DatasetMetadataRDAExportModel { private String description; // Not mandatory. private String language; - private DatasetMetadataIdRDAExportModel metadata_id; + private IdRDAExportModel metadata_standard_id; public String getDescription() { return description; @@ -19,17 +19,17 @@ public class DatasetMetadataRDAExportModel { this.language = language; } - public DatasetMetadataIdRDAExportModel getMetadata_id() { - return metadata_id; + public IdRDAExportModel getMetadata_standard_id() { + return metadata_standard_id; } - public void setMetadata_id(DatasetMetadataIdRDAExportModel metadata_id) { - this.metadata_id = metadata_id; + public void setMetadata_standard_id(IdRDAExportModel metadata_standard_id) { + this.metadata_standard_id = metadata_standard_id; } public DatasetMetadataRDAExportModel fromDataModel(String key, Object value) { DatasetMetadataRDAExportModel metadataRDAExportModel = new DatasetMetadataRDAExportModel(); - if (key.contains("metadata_id")) - metadataRDAExportModel.setMetadata_id(new DatasetMetadataIdRDAExportModel().fromDataModel(key, value)); + if (key.contains("metadata_standard_id")) + metadataRDAExportModel.setMetadata_standard_id(new IdRDAExportModel(value.toString(), value.toString())); else if (key.contains("language")) metadataRDAExportModel.setLanguage(value.toString()); else if (key.contains("description")) diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java index 94931b782..0c94ad88a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java @@ -6,31 +6,48 @@ import eu.eudat.data.entities.Dataset; import eu.eudat.logic.utilities.builders.XmlBuilder; import org.apache.commons.collections4.MultiValuedMap; import org.apache.commons.collections4.multimap.ArrayListValuedHashMap; +import org.apache.poi.ss.formula.functions.T; import org.json.JSONObject; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.xpath.*; +import java.text.DateFormat; import java.util.*; public class DatasetRDAExportModel { private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private MultiValuedMap rdaToValueMap; - private DatasetIdRDAExportModel dataset_id; - private String description; - private Date issued; // Created Date, could also use finalized one. - private String language; - private String title; - private String sensitive_data; private String data_quality_assurance; + private IdRDAExportModel dataset_id; + private String description; + private List distribution; + private String issued; // Created Date, could also use finalized one. + private List keyword; + private String language; private List metadata; + private String personal_data; // Allowed Values: yes no unknown. + private String preservation_statement; + private List security_and_privacy; + private String sensitive_data; // Allowed Values: yes no unknown. + private List technical_resource; + private String title; + private String type; // Type according to: http://vocabularies.coar-repositories.org/pubby/resource_type.html - public DatasetIdRDAExportModel getDataset_id() { + public String getData_quality_assurance() { + return data_quality_assurance; + } + public void setData_quality_assurance(String data_quality_assurance) { + this.data_quality_assurance = data_quality_assurance; + } + + public IdRDAExportModel getDataset_id() { return dataset_id; } - public void setDataset_id(DatasetIdRDAExportModel dataset_id) { + public void setDataset_id(IdRDAExportModel dataset_id) { this.dataset_id = dataset_id; } @@ -41,13 +58,27 @@ public class DatasetRDAExportModel { this.description = description; } - public Date getIssued() { + public List getDistribution() { + return distribution; + } + public void setDistribution(List distribution) { + this.distribution = distribution; + } + + public String getIssued() { return issued; } - public void setIssued(Date issued) { + public void setIssued(String issued) { this.issued = issued; } + public List getKeyword() { + return keyword; + } + public void setKeyword(List keyword) { + this.keyword = keyword; + } + public String getLanguage() { return language; } @@ -55,11 +86,32 @@ public class DatasetRDAExportModel { this.language = language; } - public String getTitle() { - return title; + public List getMetadata() { + return metadata; } - public void setTitle(String title) { - this.title = title; + public void setMetadata(List metadata) { + this.metadata = metadata; + } + + public String getPersonal_data() { + return personal_data; + } + public void setPersonal_data(String personal_data) { + this.personal_data = personal_data; + } + + public String getPreservation_statement() { + return preservation_statement; + } + public void setPreservation_statement(String preservation_statement) { + this.preservation_statement = preservation_statement; + } + + public List getSecurity_and_privacy() { + return security_and_privacy; + } + public void setSecurity_and_privacy(List security_and_privacy) { + this.security_and_privacy = security_and_privacy; } public String getSensitive_data() { @@ -69,67 +121,45 @@ public class DatasetRDAExportModel { this.sensitive_data = sensitive_data; } - public String getData_quality_assurance() { - return data_quality_assurance; + public List getTechnical_resource() { + return technical_resource; } - public void setData_quality_assurance(String data_quality_assurance) { - this.data_quality_assurance = data_quality_assurance; + public void setTechnical_resource(List technical_resource) { + this.technical_resource = technical_resource; } - public List getMetadata() { - return metadata; + public String getTitle() { + return title; } - public void setMetadata(List metadata) { - this.metadata = metadata; + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; } public DatasetRDAExportModel fromDataModel(Dataset dataset) { - // Parsing dataset template definition to create a map of which question of the template corresponds to the RDA common standard. Map: TemplateId -> rdaProperty - List rdaPropertiesThatExistOnDatasetTemplate = xmlNodeListFromExpression(dataset.getProfile().getDefinition(), "//rdaCommonStandard/text()"); - List rdaProperties = new LinkedList<>(); - for (String item : rdaPropertiesThatExistOnDatasetTemplate) { - item = item.replace("dataset.", ""); - rdaProperties.add(item); - } - List datasetTemplateIdsWithRdaProperties = xmlNodeListFromExpression(dataset.getProfile().getDefinition(), "//rdaCommonStandard/text()/ancestor::field/@id"); - Map templateIdsToRDAProperties = combineListsIntoOrderedMap(datasetTemplateIdsWithRdaProperties, rdaProperties); + this.rdaToValueMap = getRdaValueMap(dataset); + List distributions = getDatasetDistribution(); + List datasetMetadata = getDatasetMetadata(); + List securityAndPrivacy = getSecurityAndPrivacy(); + List technicalResources = getTechnicalResource(); - // Parsing dataset answers from json to map. Map: TemplateId -> datasetValue - JSONObject jObject = new JSONObject(dataset.getProperties()); - Map templateIdsToValues = jObject.toMap(); - - // Map: rdaProperty -> datasetValue - MultiValuedMap rdaToValueMap = new ArrayListValuedHashMap<>(); - for (String templateId : templateIdsToRDAProperties.keySet()) { - if (templateIdsToValues.containsKey(templateId)) { - rdaToValueMap.put(templateIdsToRDAProperties.get(templateId), templateIdsToValues.get(templateId).toString()); - } - } - - // Creates and fills a map to include metadata keys and values. - MultiValuedMap metadataJsonMap = new ArrayListValuedHashMap<>(); - for (String key : rdaToValueMap.keySet()) { - if (key.startsWith("metadata.")) { - metadataJsonMap.putAll(key.replace("metadata.", ""), rdaToValueMap.get(key)); - } - } - // Removes metadata keys from rdaToValueMap. - for (String metadataKey : metadataJsonMap.keySet()) rdaToValueMap.remove(metadataKey); - - DatasetRDAExportModel datasetRDAExportModel = mapper.convertValue(rdaToValueMap, DatasetRDAExportModel.class); - datasetRDAExportModel.setTitle(dataset.getLabel()); - datasetRDAExportModel.setIssued(dataset.getCreated()); + DatasetRDAExportModel datasetRDAExportModel = mapper.convertValue(this.rdaToValueMap, DatasetRDAExportModel.class); + datasetRDAExportModel.setDataset_id(new IdRDAExportModel(dataset.getId().toString(), "other")); + datasetRDAExportModel.setDescription(dataset.getDescription()); + datasetRDAExportModel.setIssued(DateFormat.getDateInstance(DateFormat.SHORT).format(dataset.getCreated())); datasetRDAExportModel.setLanguage("en"); // mock data; - datasetRDAExportModel.setDataset_id(new DatasetIdRDAExportModel(dataset.getId().toString(), "argos_internal")); - - List datasetMetadataRDAExportModels = new LinkedList<>(); - for (String key : metadataJsonMap.keySet()) { - for (String value : metadataJsonMap.get(key)) { - datasetMetadataRDAExportModels.add(new DatasetMetadataRDAExportModel().fromDataModel(key,value)); - } - } - datasetRDAExportModel.setMetadata(datasetMetadataRDAExportModels); + datasetRDAExportModel.setTitle(dataset.getLabel()); + datasetRDAExportModel.setDistribution(distributions); + datasetRDAExportModel.setMetadata(datasetMetadata); + datasetRDAExportModel.setSecurity_and_privacy(securityAndPrivacy); + datasetRDAExportModel.setTechnical_resource(technicalResources); return datasetRDAExportModel; } @@ -162,4 +192,107 @@ public class DatasetRDAExportModel { } return map; } + + private MultiValuedMap getRdaValueMap(Dataset dataset) { + // Parsing dataset template definition to create a map of which question of the template corresponds to the RDA common standard. Map: TemplateId -> rdaProperty + List rdaPropertiesThatExistOnDatasetTemplate = xmlNodeListFromExpression(dataset.getProfile().getDefinition(), "//rdaCommonStandard/text()"); + List rdaProperties = new LinkedList<>(); + for (String item : rdaPropertiesThatExistOnDatasetTemplate) { + item = item.replace("dataset.", ""); + rdaProperties.add(item); + } + List datasetTemplateIdsWithRdaProperties = xmlNodeListFromExpression(dataset.getProfile().getDefinition(), "//rdaCommonStandard/text()/ancestor::field/@id"); + Map templateIdsToRDAProperties = combineListsIntoOrderedMap(datasetTemplateIdsWithRdaProperties, rdaProperties); + + // Parsing dataset answers from json to map. Map: TemplateId -> datasetValue + JSONObject jObject = new JSONObject(dataset.getProperties()); + Map templateIdsToValues = jObject.toMap(); + + // Map: rdaProperty -> datasetValue + MultiValuedMap rdaToValueMap = new ArrayListValuedHashMap<>(); + for (String templateId : templateIdsToRDAProperties.keySet()) { + if (templateIdsToValues.containsKey(templateId)) { + rdaToValueMap.put(templateIdsToRDAProperties.get(templateId), templateIdsToValues.get(templateId).toString()); + } + } + return rdaToValueMap; + } + + private List getDatasetDistribution() { + // Creates and fills a map to include distribution keys and values. + MultiValuedMap distributionJsonMap = new ArrayListValuedHashMap<>(); + for (String key : this.rdaToValueMap.keySet()) { + if (key.startsWith("distribution.")) { + distributionJsonMap.putAll(key.replace("distribution.", ""), this.rdaToValueMap.get(key)); + } + } + // Removes distribution keys from rdaToValueMap. + for (String distributionKey : distributionJsonMap.keySet()) this.rdaToValueMap.remove(distributionKey); + List distributionModels = new LinkedList<>(); + for (String key : distributionJsonMap.keySet()) { + for (String value : distributionJsonMap.get(key)) { + distributionModels.add(new DatasetDistributionRDAExportModel().fromDataModel(key, value)); + } + } + return distributionModels; + } + + private List getDatasetMetadata() { + // Creates and fills a map to include metadata keys and values. + MultiValuedMap metadataJsonMap = new ArrayListValuedHashMap<>(); + for (String key : this.rdaToValueMap.keySet()) { + if (key.startsWith("metadata.")) { + metadataJsonMap.putAll(key.replace("metadata.", ""), this.rdaToValueMap.get(key)); + } + } + // Removes metadata keys from rdaToValueMap. + for (String metadataKey : metadataJsonMap.keySet()) this.rdaToValueMap.remove(metadataKey); + List datasetMetadataRDAExportModels = new LinkedList<>(); + for (String key : metadataJsonMap.keySet()) { + for (String value : metadataJsonMap.get(key)) { + datasetMetadataRDAExportModels.add(new DatasetMetadataRDAExportModel().fromDataModel(key, value)); + } + } + return datasetMetadataRDAExportModels; + } + + private List getSecurityAndPrivacy() { + // Creates and fills a map to include SecurityAndPrivacy keys and values. + MultiValuedMap securityAndPrivacyJsonMap = new ArrayListValuedHashMap<>(); + for (String key : this.rdaToValueMap.keySet()) { + if (key.startsWith("security_and_privacy.")) { + securityAndPrivacyJsonMap.putAll(key.replace("security_and_privacy.", ""), this.rdaToValueMap.get(key)); + } + } + // Removes SecurityAndPrivacy keys from rdaToValueMap. + for (String securityAndPrivacy : securityAndPrivacyJsonMap.keySet()) this.rdaToValueMap.remove(securityAndPrivacy); + List securityAndPrivacyList= new LinkedList<>(); + for (String key : securityAndPrivacyJsonMap.keySet()) { + for (String value : securityAndPrivacyJsonMap.get(key)) { + securityAndPrivacyList.add(new DatasetSecurityAndPrivacyRDAExportModel().fromDataModel(key, value)); + } + } + return securityAndPrivacyList; + } + + private List getTechnicalResource() { + // Creates and fills a map to include Technical_Resource keys and values. + MultiValuedMap technicalResourceJsonMap = new ArrayListValuedHashMap<>(); + for (String key : this.rdaToValueMap.keySet()) { + if (key.startsWith("technical_resource.")) { + technicalResourceJsonMap.putAll(key.replace("technical_resource.", ""), this.rdaToValueMap.get(key)); + } + } + // Removes Technical_Resource keys from rdaToValueMap. + for (String techResource : technicalResourceJsonMap.keySet()) this.rdaToValueMap.remove(techResource); + List datasetTechnicalResourceRDAExportModel= new LinkedList<>(); + for (String key : technicalResourceJsonMap.keySet()) { + for (String value : technicalResourceJsonMap.get(key)) { + datasetTechnicalResourceRDAExportModel.add(new DatasetTechnicalResourceRDAExportModel().fromDataModel(key, value)); + } + } + return datasetTechnicalResourceRDAExportModel; + } + + } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java new file mode 100644 index 000000000..77115e086 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java @@ -0,0 +1,29 @@ +package eu.eudat.models.data.rda; + +public class DatasetSecurityAndPrivacyRDAExportModel { + private String description; + private String title; + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + + public DatasetSecurityAndPrivacyRDAExportModel fromDataModel(String key, Object value) { + DatasetSecurityAndPrivacyRDAExportModel securityAndPrivacy = new DatasetSecurityAndPrivacyRDAExportModel(); + if (key.contains("description")) + securityAndPrivacy.setDescription(value.toString()); + else if (key.contains("title")) + securityAndPrivacy.setTitle(value.toString()); + return securityAndPrivacy; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java new file mode 100644 index 000000000..96ad0c3fb --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java @@ -0,0 +1,29 @@ +package eu.eudat.models.data.rda; + +public class DatasetTechnicalResourceRDAExportModel { + private String description; + private String name; + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public DatasetTechnicalResourceRDAExportModel fromDataModel(String key, Object value) { + DatasetTechnicalResourceRDAExportModel technicalResource = new DatasetTechnicalResourceRDAExportModel(); + if (key.contains("description")) + technicalResource.setDescription(value.toString()); + else if (key.contains("name")) + technicalResource.setName(value.toString()); + return technicalResource; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java new file mode 100644 index 000000000..47079023f --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java @@ -0,0 +1,52 @@ +package eu.eudat.models.data.rda; + +import eu.eudat.data.entities.UserInfo; + +import java.util.LinkedList; +import java.util.List; + +public class DmpContributorRDAExportModel { + private IdRDAExportModel contributor_id; + private String mbox; + private String name; + private List role; + + public IdRDAExportModel getContributor_id() { + return contributor_id; + } + public void setContributor_id(IdRDAExportModel contributor_id) { + this.contributor_id = contributor_id; + } + + public String getMbox() { + return mbox; + } + public void setMbox(String mbox) { + this.mbox = mbox; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public List getRole() { + return role; + } + public void setRole(List role) { + this.role = role; + } + + public DmpContributorRDAExportModel fromDataModel(UserInfo user, String role) { + DmpContributorRDAExportModel contributor = new DmpContributorRDAExportModel(); + contributor.contributor_id = new IdRDAExportModel(user.getId().toString(), "other"); + contributor.mbox = user.getEmail(); + contributor.name = user.getName(); + contributor.role = new LinkedList<>(); + contributor.role.add(role); + + return contributor; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java new file mode 100644 index 000000000..98abbadd8 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java @@ -0,0 +1,36 @@ +package eu.eudat.models.data.rda; + +public class DmpCostRDAExportModel { + private String currency_code; //Allowed values defined by ISO 4217. + private String description; + private String title; + private String value; + + public String getCurrency_code() { + return currency_code; + } + public void setCurrency_code(String currency_code) { + this.currency_code = currency_code; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpIdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpIdRDAExportModel.java deleted file mode 100644 index 1c7e09793..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpIdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DmpIdRDAExportModel { - private String dmp_id; - private String dmp_id_type; - - public String getDmp_id() { - return dmp_id; - } - public void setDmp_id(String dmp_id) { - this.dmp_id = dmp_id; - } - - public String getDmp_id_type() { - return dmp_id_type; - } - public void setDmp_id_type(String dmp_id_type) { - this.dmp_id_type = dmp_id_type; - } - - DmpIdRDAExportModel(String dmp_id, String dmp_id_type) { - this.dmp_id = dmp_id; - this.dmp_id_type = dmp_id_type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java index a4fab5c74..7c2b02eaf 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java @@ -1,34 +1,66 @@ package eu.eudat.models.data.rda; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.Dataset; import eu.eudat.data.entities.UserDMP; +import eu.eudat.data.entities.UserInfo; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; -import java.util.UUID; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; public class DmpRDAExportModel { - private DmpIdRDAExportModel dmp_id; - private String title; - private String description; - private Date created; - private Date modified; private ContactRDAExportModel contact; + private List contributor; + private List cost; + private String created; + private List dataset; + private String description; + private IdRDAExportModel dmp_id; + private String ethical_issues_description; + private String ethical_issues_exist; // Allowed Values: yes no unknown. + private String ethical_issues_report; private String language; - private String ethical_issues_exist; + private String modified; private ProjectRDAExportModel project; + private String title; - public DmpIdRDAExportModel getDmp_id() { - return dmp_id; + public ContactRDAExportModel getContact() { + return contact; } - public void setDmp_id(DmpIdRDAExportModel dmp_id) { - this.dmp_id = dmp_id; + public void setContact(ContactRDAExportModel contact) { + this.contact = contact; } - public String getTitle() { - return title; + public List getContributor() { + return contributor; } - public void setTitle(String title) { - this.title = title; + public void setContributor(List contributor) { + this.contributor = contributor; + } + + public List getCost() { + return cost; + } + public void setCost(List cost) { + this.cost = cost; + } + + public String getCreated() { + return created; + } + public void setCreated(String created) { + this.created = created; + } + + public List getDataset() { + return dataset; + } + public void setDataset(List dataset) { + this.dataset = dataset; } public String getDescription() { @@ -38,32 +70,18 @@ public class DmpRDAExportModel { this.description = description; } - public Date getCreated() { - return created; + public IdRDAExportModel getDmp_id() { + return dmp_id; } - public void setCreated(Date created) { - this.created = created; + public void setDmp_id(IdRDAExportModel dmp_id) { + this.dmp_id = dmp_id; } - public Date getModified() { - return modified; + public String getEthical_issues_description() { + return ethical_issues_description; } - public void setModified(Date modified) { - this.modified = modified; - } - - public ContactRDAExportModel getContact() { - return contact; - } - public void setContact(ContactRDAExportModel contact) { - this.contact = contact; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; + public void setEthical_issues_description(String ethical_issues_description) { + this.ethical_issues_description = ethical_issues_description; } public String getEthical_issues_exist() { @@ -73,6 +91,27 @@ public class DmpRDAExportModel { this.ethical_issues_exist = ethical_issues_exist; } + public String getEthical_issues_report() { + return ethical_issues_report; + } + public void setEthical_issues_report(String ethical_issues_report) { + this.ethical_issues_report = ethical_issues_report; + } + + public String getLanguage() { + return language; + } + public void setLanguage(String language) { + this.language = language; + } + + public String getModified() { + return modified; + } + public void setModified(String modified) { + this.modified = modified; + } + public ProjectRDAExportModel getProject() { return project; } @@ -80,25 +119,46 @@ public class DmpRDAExportModel { this.project = project; } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } public DmpRDAExportModel fromDataModel(DMP entity) { - if (entity.getDoi() != null) - this.dmp_id = new DmpIdRDAExportModel(entity.getDoi(), "zenodo"); - else - this.dmp_id = new DmpIdRDAExportModel(entity.getId().toString(), "argos_internal"); + DmpRDAExportModel dmpRda = new DmpRDAExportModel(); + dmpRda.contact = new ContactRDAExportModel().fromDataModel(entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); + if (entity.getUsers().stream().anyMatch(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue()))) { + dmpRda.contributor = new LinkedList<>(); + for (UserDMP userdmp : entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue())).collect(Collectors.toList())) { + dmpRda.contributor.add(new DmpContributorRDAExportModel().fromDataModel(userdmp.getUser(), UserDMP.UserDMPRoles.fromInteger(userdmp.getRole()).toString())); + } + } + dmpRda.cost = null; + SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); + dmpRda.created = formatter.format(entity.getCreated()); + dmpRda.dataset = new LinkedList<>(); + for (Dataset dataset : entity.getDataset()) { + if (dataset.getStatus() != Dataset.Status.DELETED.getValue() && dataset.getStatus() != Dataset.Status.CANCELED.getValue()) + dmpRda.dataset.add(new DatasetRDAExportModel().fromDataModel(dataset)); + } + dmpRda.description = entity.getDescription(); + if (entity.getDoi() != null) { + dmpRda.dmp_id = new IdRDAExportModel(entity.getDoi(), "zenodo"); + } + else { + dmpRda.dmp_id = new IdRDAExportModel(entity.getId().toString(), "other"); + } + // Mock up data on "language" and "ethical_issues_*" for now. + // dmpRda.ethical_issues_description = null; + dmpRda.ethical_issues_exist = "unknown"; + // dmpRda.ethical_issues_report = null; + dmpRda.language = "en"; + dmpRda.modified = formatter.format(new Date()); + dmpRda.project = new ProjectRDAExportModel().fromDataModel(entity.getGrant()); + dmpRda.title = entity.getLabel(); - this.title = entity.getLabel(); - this.description = entity.getDescription(); - this.created = entity.getCreated(); - this.modified = entity.getModified(); - this.contact = new ContactRDAExportModel().fromDataModel(entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - // Mock up data on "language" and "ethical_issues" for now. - this.language = "en"; - this.ethical_issues_exist = "unknown"; - - this.project = new ProjectRDAExportModel().fromDataModel(entity.getGrant()); - - return this; + return dmpRda; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FunderIdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FunderIdRDAExportModel.java deleted file mode 100644 index d58abeb5f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FunderIdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class FunderIdRDAExportModel { - private String funder_id; - private String funder_id_type; - - public String getFunder_id() { - return funder_id; - } - public void setFunder_id(String funder_id) { - this.funder_id = funder_id; - } - - public String getFunder_id_type() { - return funder_id_type; - } - public void setFunder_id_type(String funder_id_type) { - this.funder_id_type = funder_id_type; - } - - FunderIdRDAExportModel(String funder_id, String funder_id_type) { - this.funder_id = funder_id; - this.funder_id_type = funder_id_type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java index 0739b7766..5691cae2c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java @@ -4,21 +4,21 @@ import eu.eudat.data.entities.Funder; import eu.eudat.data.entities.Grant; public class FundingRDAExportModel { - private FunderIdRDAExportModel funder_id; - private GrantIdRDAExportModel grant_id; + private IdRDAExportModel funder_id; + private IdRDAExportModel grant_id; private String funding_status; - public FunderIdRDAExportModel getFunder_id() { + public IdRDAExportModel getFunder_id() { return funder_id; } - public void setFunder_id(FunderIdRDAExportModel funder_id) { + public void setFunder_id(IdRDAExportModel funder_id) { this.funder_id = funder_id; } - public GrantIdRDAExportModel getGrant_id() { + public IdRDAExportModel getGrant_id() { return grant_id; } - public void setGrant_id(GrantIdRDAExportModel grant_id) { + public void setGrant_id(IdRDAExportModel grant_id) { this.grant_id = grant_id; } @@ -30,13 +30,14 @@ public class FundingRDAExportModel { } public FundingRDAExportModel fromDataModel(Funder funder, Grant grant) { - this.funding_status = "planned"; // mock data + FundingRDAExportModel funding = new FundingRDAExportModel(); + funding.funding_status = "planned"; // mock data if (funder != null) { - this.funder_id = new FunderIdRDAExportModel(funder.getReference(), "argos_internal"); + funding.funder_id = new IdRDAExportModel(funder.getReference(), "other"); } if (grant != null) { - this.grant_id = new GrantIdRDAExportModel(grant.getReference(), "argos_internal"); + funding.grant_id = new IdRDAExportModel(grant.getReference(), "other"); } - return this; + return funding; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/GrantIdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/GrantIdRDAExportModel.java deleted file mode 100644 index 8bcac2735..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/GrantIdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class GrantIdRDAExportModel { - private String grant_id; - private String grant_id_type; - - public String getGrant_id() { - return grant_id; - } - public void setGrant_id(String grant_id) { - this.grant_id = grant_id; - } - - public String getGrant_id_type() { - return grant_id_type; - } - public void setGrant_id_type(String grant_id_type) { - this.grant_id_type = grant_id_type; - } - - GrantIdRDAExportModel(String grant_id, String grant_id_type) { - this.grant_id = grant_id; - this.grant_id_type = grant_id_type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java new file mode 100644 index 000000000..bac169259 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java @@ -0,0 +1,86 @@ +package eu.eudat.models.data.rda; + +import java.util.List; + +public class HostRDAExportModel { + private String availability; + private String backup__frequency; + private String backup_type; + private String certified_with; // Repository certified with one the following standards: DIN31644 / DINI-Zertifikat / DSA / ISO16363 / ISO16919 /TRAC / WDS / CoreTrustSeal + private String description; + private String geo_location; // Physical location of the data expressed using ISO 3166-1 country code. + private List pid_system; // PID System: ark arxiv bibcode doi ean13 eissn handle igsn isbn issn istc lissn lsid pmid purl upc url urn other + private String storage_type; + private String support_versioning; // Allowed values: yes / no / unknown + private String title; + + public String getAvailability() { + return availability; + } + public void setAvailability(String availability) { + this.availability = availability; + } + + public String getBackup__frequency() { + return backup__frequency; + } + public void setBackup__frequency(String backup__frequency) { + this.backup__frequency = backup__frequency; + } + + public String getBackup_type() { + return backup_type; + } + public void setBackup_type(String backup_type) { + this.backup_type = backup_type; + } + + public String getCertified_with() { + return certified_with; + } + public void setCertified_with(String certified_with) { + this.certified_with = certified_with; + } + + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + public String getGeo_location() { + return geo_location; + } + public void setGeo_location(String geo_location) { + this.geo_location = geo_location; + } + + public List getPid_system() { + return pid_system; + } + public void setPid_system(List pid_system) { + this.pid_system = pid_system; + } + + public String getStorage_type() { + return storage_type; + } + public void setStorage_type(String storage_type) { + this.storage_type = storage_type; + } + + public String getSupport_versioning() { + return support_versioning; + } + public void setSupport_versioning(String support_versioning) { + this.support_versioning = support_versioning; + } + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java new file mode 100644 index 000000000..2aef46e5b --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java @@ -0,0 +1,25 @@ +package eu.eudat.models.data.rda; + +public class IdRDAExportModel { + private String identifier; + private String type; + + public String getIdentifier() { + return identifier; + } + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + IdRDAExportModel(String identifier, String type) { + this.identifier = identifier; + this.type = type; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java new file mode 100644 index 000000000..dec57a467 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java @@ -0,0 +1,20 @@ +package eu.eudat.models.data.rda; + +public class LicenseRDAExportModel { + private String license_ref; + private String start_date; // If date is set in the future, it indicates embargo period. + + public String getLicense_ref() { + return license_ref; + } + public void setLicense_ref(String license_ref) { + this.license_ref = license_ref; + } + + public String getStart_date() { + return start_date; + } + public void setStart_date(String start_date) { + this.start_date = start_date; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java index b4720d350..eae34fa60 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java @@ -8,7 +8,6 @@ import java.util.List; public class RDAExportModel { private DmpRDAExportModel dmp; - private List datasets; public DmpRDAExportModel getDmp() { return dmp; @@ -17,20 +16,8 @@ public class RDAExportModel { this.dmp = dmp; } - public List getDatasets() { - return datasets; - } - public void setDatasets(List datasets) { - this.datasets = datasets; - } - public RDAExportModel fromDataModel(DMP dmp) { this.dmp = new DmpRDAExportModel().fromDataModel(dmp); - this.datasets = new LinkedList<>(); - for (Dataset dataset : dmp.getDataset()) { - if (dataset.getStatus() != Dataset.Status.DELETED.getValue() && dataset.getStatus() != Dataset.Status.CANCELED.getValue()) - this.datasets.add(new DatasetRDAExportModel().fromDataModel(dataset)); - } return this; } } diff --git a/dmp-backend/web/src/main/resources/RDACommonStandards.txt b/dmp-backend/web/src/main/resources/RDACommonStandards.txt index 134b84e73..8c543d6aa 100644 --- a/dmp-backend/web/src/main/resources/RDACommonStandards.txt +++ b/dmp-backend/web/src/main/resources/RDACommonStandards.txt @@ -1,39 +1,39 @@ -ethical_issues_exist -cost -cost.title -cost.description -cost.value -cost.currency_code -contact -contact.mail -contact.name -contact.contact_id -contact.contact_id.contact_id -contact.contact_id.contact_id_type -project -project.title -project.project_start -project.project_end -project.funding -project.funding.funder_id -project.funding.funder_id.funder_id -project.funding.funder_id.funder_id_type -project.funding.grant_id -project.funding.grant_id.grant_id -project.funding.grant_id.grant_id_type -dataset -dataset.title -dataset.type -dataset.personal_data -dataset.sensitive_data -dataset.dataset_id -dataset.dataset_id.dataset_id -dataset.dataset_id.dataset_id_type -dataset.metadata +dataset.data_quality_assurance +dataset.distribution.access_url +dataset.distribution.available_till +dataset.distribution.byte_size +dataset.distribution.data_access +dataset.distribution.description +dataset.distribution.download_url +dataset.distribution.format +dataset.distribution.host.availability +dataset.distribution.host.backup_frequency +dataset.distribution.host.backup_type +dataset.distribution.host.certified_with +dataset.distribution.host.description +dataset.distribution.host.geo_location +dataset.distribution.host.pid_system +dataset.distribution.host.storage_type +dataset.distribution.host.supports_versioning +dataset.distribution.host.title +dataset.distribution.host.url +dataset.distribution.license.license_ref +dataset.distribution.license.start_date +dataset.distribution.title +dataset.keyword +dataset.language dataset.metadata.language -dataset.metadata.metadata_id -dataset.metadata.metadata_id.metadata_id -dataset.metadata.metadata_id.metadata_id_type +dataset.metadata.metadata_standard_id +dataset.metadata.metadata_standard_id.identifier +dataset.metadata.metadata_standard_id.type +dataset.personal_data +dataset.preservation_statement dataset.security_and_privacy +dataset.security_and_privacy.description dataset.security_and_privacy.title -dataset.security_and_privacy.description \ No newline at end of file +dataset.sensitive_data +dataset.technical_resource.description +dataset.technical_resource.technical_resource +dataset.technical_resource.technical_resource.description +dataset.technical_resource.technical_resource.name +dataset.type \ No newline at end of file