Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring

This commit is contained in:
Sofia Papacharalampous 2024-04-29 15:18:59 +03:00
commit 8a16098fc1
32 changed files with 1065 additions and 159 deletions

View File

@ -7,7 +7,7 @@ public class ExternalIdentifierEntity {
private String type;
public String getIdentifier() {
return identifier;
return this.identifier;
}
public void setIdentifier(String identifier) {
@ -15,7 +15,7 @@ public class ExternalIdentifierEntity {
}
public String getType() {
return type;
return this.type;
}
public void setType(String type) {

View File

@ -11,7 +11,7 @@ public class FieldEntity {
private ExternalIdentifierEntity externalIdentifier;
public String getTextValue() {
return textValue;
return this.textValue;
}
public void setTextValue(String textValue) {
@ -19,7 +19,7 @@ public class FieldEntity {
}
public List<String> getTextListValue() {
return textListValue;
return this.textListValue;
}
public void setTextListValue(List<String> textListValue) {
@ -27,7 +27,7 @@ public class FieldEntity {
}
public Instant getDateValue() {
return dateValue;
return this.dateValue;
}
public void setDateValue(Instant dateValue) {
@ -35,7 +35,7 @@ public class FieldEntity {
}
public ExternalIdentifierEntity getExternalIdentifier() {
return externalIdentifier;
return this.externalIdentifier;
}
public void setExternalIdentifier(ExternalIdentifierEntity externalIdentifier) {

View File

@ -6,7 +6,7 @@ public class PropertyDefinitionEntity {
private Map<String, PropertyDefinitionFieldSetEntity> fieldSets;
public Map<String, PropertyDefinitionFieldSetEntity> getFieldSets() {
return fieldSets;
return this.fieldSets;
}
public void setFieldSets(Map<String, PropertyDefinitionFieldSetEntity> fieldSets) {

View File

@ -6,7 +6,7 @@ public class PropertyDefinitionFieldSetEntity {
private List<PropertyDefinitionFieldSetItemEntity> items;
public List<PropertyDefinitionFieldSetItemEntity> getItems() {
return items;
return this.items;
}
public void setItems(List<PropertyDefinitionFieldSetItemEntity> items) {

View File

@ -8,7 +8,7 @@ public class PropertyDefinitionFieldSetItemEntity {
private int ordinal;
public Map<String, FieldEntity> getFields() {
return fields;
return this.fields;
}
public void setFields(Map<String, FieldEntity> fields) {
@ -16,7 +16,7 @@ public class PropertyDefinitionFieldSetItemEntity {
}
public String getComment() {
return comment;
return this.comment;
}
public void setComment(String comment) {
@ -24,7 +24,7 @@ public class PropertyDefinitionFieldSetItemEntity {
}
public int getOrdinal() {
return ordinal;
return this.ordinal;
}
public void setOrdinal(int ordinal) {

View File

@ -13,7 +13,7 @@ public class DmpContactEntity {
private String email;
public UUID getUserId() {
return userId;
return this.userId;
}
public void setUserId(UUID userId) {
@ -21,7 +21,7 @@ public class DmpContactEntity {
}
public String getFirstName() {
return firstName;
return this.firstName;
}
public void setFirstName(String firstName) {
@ -29,7 +29,7 @@ public class DmpContactEntity {
}
public String getLastName() {
return lastName;
return this.lastName;
}
public void setLastName(String lastName) {
@ -37,7 +37,7 @@ public class DmpContactEntity {
}
public String getEmail() {
return email;
return this.email;
}
public void setEmail(String email) {

View File

@ -9,7 +9,7 @@ public class DmpPropertiesEntity {
private List<DmpContactEntity> contacts;
public List<DmpBlueprintValueEntity> getDmpBlueprintValues() {
return dmpBlueprintValues;
return this.dmpBlueprintValues;
}
public void setDmpBlueprintValues(List<DmpBlueprintValueEntity> dmpBlueprintValues) {
@ -17,7 +17,7 @@ public class DmpPropertiesEntity {
}
public List<DmpContactEntity> getContacts() {
return contacts;
return this.contacts;
}
public void setContacts(List<DmpContactEntity> contacts) {

View File

@ -0,0 +1,35 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpBlueprintValueImportExport {
@XmlElement(name = "fieldId")
private UUID fieldId;
@XmlElement(name = "value")
private String value;
public UUID getFieldId() {
return this.fieldId;
}
public void setFieldId(UUID fieldId) {
this.fieldId = fieldId;
}
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
}

View File

@ -0,0 +1,66 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpContactImportExport {
@XmlElement(name = "userId")
private UUID userId;
@XmlElement(name = "name")
private String name;
@XmlElement(name = "firstName")
private String firstName;
@XmlElement(name = "lastName")
private String lastName;
@XmlElement(name = "email")
private String email;
public UUID getUserId() {
return this.userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
public String getFirstName() {
return this.firstName;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}

View File

@ -0,0 +1,33 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpDescriptionTemplateImportExport {
@XmlElement(name = "descriptionTemplateGroupId")
private UUID descriptionTemplateGroupId;
@XmlElement(name = "sectionId")
private UUID sectionId;
public UUID getDescriptionTemplateGroupId() {
return this.descriptionTemplateGroupId;
}
public void setDescriptionTemplateGroupId(UUID descriptionTemplateGroupId) {
this.descriptionTemplateGroupId = descriptionTemplateGroupId;
}
public UUID getSectionId() {
return this.sectionId;
}
public void setSectionId(UUID sectionId) {
this.sectionId = sectionId;
}
}

View File

@ -0,0 +1,164 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.*;
import org.opencdmp.commons.enums.DmpAccessType;
import org.opencdmp.commons.types.dmpblueprint.importexport.BlueprintImportExport;
import java.time.Instant;
import java.util.List;
import java.util.UUID;
@XmlRootElement(name = "dmp")
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpImportExport {
@XmlElement(name = "id")
private UUID id;
@XmlElement(name = "description")
private String description;
@XmlElement(name = "title")
private String title;
@XmlElement(name = "language")
private String language;
@XmlElement(name = "access")
private DmpAccessType access;
@XmlElementWrapper(name = "contacts")
@XmlElement(name = "contact")
private List<DmpContactImportExport> contacts;
@XmlElementWrapper(name = "users")
@XmlElement(name = "user")
private List<DmpUserImportExport> users;
@XmlElement(name = "finalizedAt")
private Instant finalizedAt;
@XmlElement(name = "publicAfter")
private Instant publicAfter;
@XmlElement(name = "blueprint")
private BlueprintImportExport blueprint;
@XmlElementWrapper(name = "blueprintValues")
@XmlElement(name = "blueprintValue")
private List<DmpBlueprintValueImportExport> blueprintValues;
@XmlElementWrapper(name = "descriptionTemplates")
@XmlElement(name = "descriptionTemplate")
private List<DmpDescriptionTemplateImportExport> descriptionTemplates;
@XmlElementWrapper(name = "references")
@XmlElement(name = "reference")
private List<DmpReferenceImportExport> references;
public UUID getId() {
return this.id;
}
public void setId(UUID id) {
this.id = id;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLanguage() {
return this.language;
}
public void setLanguage(String language) {
this.language = language;
}
public DmpAccessType getAccess() {
return this.access;
}
public void setAccess(DmpAccessType access) {
this.access = access;
}
public List<DmpContactImportExport> getContacts() {
return this.contacts;
}
public void setContacts(List<DmpContactImportExport> contacts) {
this.contacts = contacts;
}
public List<DmpUserImportExport> getUsers() {
return this.users;
}
public void setUsers(List<DmpUserImportExport> users) {
this.users = users;
}
public Instant getFinalizedAt() {
return this.finalizedAt;
}
public void setFinalizedAt(Instant finalizedAt) {
this.finalizedAt = finalizedAt;
}
public Instant getPublicAfter() {
return this.publicAfter;
}
public void setPublicAfter(Instant publicAfter) {
this.publicAfter = publicAfter;
}
public BlueprintImportExport getBlueprint() {
return this.blueprint;
}
public void setBlueprint(BlueprintImportExport blueprint) {
this.blueprint = blueprint;
}
public List<DmpBlueprintValueImportExport> getBlueprintValues() {
return this.blueprintValues;
}
public void setBlueprintValues(List<DmpBlueprintValueImportExport> blueprintValues) {
this.blueprintValues = blueprintValues;
}
public List<DmpDescriptionTemplateImportExport> getDescriptionTemplates() {
return this.descriptionTemplates;
}
public void setDescriptionTemplates(List<DmpDescriptionTemplateImportExport> descriptionTemplates) {
this.descriptionTemplates = descriptionTemplates;
}
public List<DmpReferenceImportExport> getReferences() {
return this.references;
}
public void setReferences(List<DmpReferenceImportExport> references) {
this.references = references;
}
}

View File

@ -0,0 +1,62 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpReferenceImportExport {
@XmlElement(name = "id")
private UUID id;
@XmlElement(name = "label")
private String label;
@XmlElement(name = "reference")
private String reference;
@XmlElement(name = "fieldId")
private UUID fieldId;
@XmlElement(name = "type")
private DmpReferenceTypeImportExport type;
public UUID getId() {
return this.id;
}
public void setId(UUID id) {
this.id = id;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public String getReference() {
return this.reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public DmpReferenceTypeImportExport getType() {
return this.type;
}
public void setType(DmpReferenceTypeImportExport type) {
this.type = type;
}
public UUID getFieldId() {
return this.fieldId;
}
public void setFieldId(UUID fieldId) {
this.fieldId = fieldId;
}
}

View File

@ -0,0 +1,45 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import org.opencdmp.commons.enums.DmpUserRole;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpReferenceTypeImportExport {
@XmlElement(name = "id")
private UUID id;
@XmlElement(name = "name")
private String name;
@XmlElement(name = "code")
private String code;
public UUID getId() {
return this.id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
}

View File

@ -0,0 +1,56 @@
package org.opencdmp.commons.types.dmp.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import org.opencdmp.commons.enums.DmpUserRole;
import java.util.UUID;
@XmlAccessorType(XmlAccessType.FIELD)
public class DmpUserImportExport {
@XmlElement(name = "id")
private UUID id;
@XmlElement(name = "name")
private String name;
@XmlElement(name = "role")
private DmpUserRole role;
@XmlElement(name = "sectionId")
private UUID sectionId;
public UUID getId() {
return this.id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public DmpUserRole getRole() {
return this.role;
}
public void setRole(DmpUserRole role) {
this.role = role;
}
public UUID getSectionId() {
return this.sectionId;
}
public void setSectionId(UUID sectionId) {
this.sectionId = sectionId;
}
}

View File

@ -1,19 +1,46 @@
package org.opencdmp.commons.types.dmpblueprint.importexport;
import jakarta.persistence.Column;
import jakarta.persistence.Id;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.opencdmp.data.DmpBlueprintEntity;
import java.util.UUID;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class BlueprintImportExport {
@XmlElement(name = "id")
private UUID id;
@XmlElement(name = "label")
private String label;
@XmlElement(name = "definition")
private DefinitionImportExport dmpBlueprintDefinition;
public UUID getId() {
return this.id;
}
public void setId(UUID id) {
this.id = id;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public DefinitionImportExport getDmpBlueprintDefinition() {
return dmpBlueprintDefinition;
return this.dmpBlueprintDefinition;
}
public void setDmpBlueprintDefinition(DefinitionImportExport dmpBlueprintDefinition) {

View File

@ -26,7 +26,7 @@ public class DmpDescriptionTemplatePersist {
public static final String _sectionId = "sectionId";
public UUID getDescriptionTemplateGroupId() {
return descriptionTemplateGroupId;
return this.descriptionTemplateGroupId;
}
public void setDescriptionTemplateGroupId(UUID descriptionTemplateGroupId) {
@ -34,7 +34,7 @@ public class DmpDescriptionTemplatePersist {
}
public UUID getSectionId() {
return sectionId;
return this.sectionId;
}
public void setSectionId(UUID sectionId) {
@ -66,10 +66,10 @@ public class DmpDescriptionTemplatePersist {
return Arrays.asList(
this.spec()
.must(() -> this.isValidGuid(item.getDescriptionTemplateGroupId()))
.failOn(DmpDescriptionTemplatePersist._descriptionTemplateGroupId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._descriptionTemplateGroupId}, LocaleContextHolder.getLocale())),
.failOn(DmpDescriptionTemplatePersist._descriptionTemplateGroupId).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._descriptionTemplateGroupId}, LocaleContextHolder.getLocale())),
this.spec()
.must(() -> this.isValidGuid(item.getSectionId()))
.failOn(DmpDescriptionTemplatePersist._sectionId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._sectionId}, LocaleContextHolder.getLocale()))
.failOn(DmpDescriptionTemplatePersist._sectionId).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._sectionId}, LocaleContextHolder.getLocale()))
);
}

View File

@ -74,7 +74,7 @@ public class DmpPersist {
public static final String _hash = "hash";
public UUID getId() {
return id;
return this.id;
}
public void setId(UUID id) {
@ -82,7 +82,7 @@ public class DmpPersist {
}
public String getLabel() {
return label;
return this.label;
}
public void setLabel(String label) {
@ -90,7 +90,7 @@ public class DmpPersist {
}
public DmpStatus getStatus() {
return status;
return this.status;
}
public void setStatus(DmpStatus status) {
@ -98,7 +98,7 @@ public class DmpPersist {
}
public DmpPropertiesPersist getProperties() {
return properties;
return this.properties;
}
public void setProperties(DmpPropertiesPersist properties) {
@ -106,7 +106,7 @@ public class DmpPersist {
}
public String getDescription() {
return description;
return this.description;
}
public void setDescription(String description) {
@ -114,7 +114,7 @@ public class DmpPersist {
}
public String getLanguage() {
return language;
return this.language;
}
public void setLanguage(String language) {
@ -122,7 +122,7 @@ public class DmpPersist {
}
public UUID getBlueprint() {
return blueprint;
return this.blueprint;
}
public void setBlueprint(UUID blueprint) {
@ -130,7 +130,7 @@ public class DmpPersist {
}
public DmpAccessType getAccessType() {
return accessType;
return this.accessType;
}
public void setAccessType(DmpAccessType accessType) {
@ -138,7 +138,7 @@ public class DmpPersist {
}
public List<DmpDescriptionTemplatePersist> getDescriptionTemplates() {
return descriptionTemplates;
return this.descriptionTemplates;
}
public void setDescriptionTemplates(List<DmpDescriptionTemplatePersist> descriptionTemplates) {
@ -146,7 +146,7 @@ public class DmpPersist {
}
public List<DmpUserPersist> getUsers() {
return users;
return this.users;
}
public void setUsers(List<DmpUserPersist> users) {
@ -154,7 +154,7 @@ public class DmpPersist {
}
public String getHash() {
return hash;
return this.hash;
}
public void setHash(String hash) {
@ -212,34 +212,34 @@ public class DmpPersist {
this.spec()
.iff(() -> this.isValidGuid(item.getId()))
.must(() -> this.isValidHash(item.getHash()))
.failOn(DmpPersist._hash).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._hash}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._hash).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._hash}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> !this.isValidGuid(item.getId()))
.must(() -> !this.isValidHash(item.getHash()))
.failOn(DmpPersist._hash).failWith(messageSource.getMessage("Validation_OverPosting", new Object[]{}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._hash).failWith(this.messageSource.getMessage("Validation_OverPosting", new Object[]{}, LocaleContextHolder.getLocale())),
this.spec()
.must(() -> !this.isEmpty(item.getLabel()))
.failOn(DmpPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._label}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._label).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._label}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> !this.isEmpty(item.getLabel()))
.must(() -> this.lessEqualLength(item.getLabel(), DmpEntity._labelLength))
.failOn(DmpPersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{DmpPersist._label}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._label).failWith(this.messageSource.getMessage("Validation_MaxLength", new Object[]{DmpPersist._label}, LocaleContextHolder.getLocale())),
this.spec()
.must(() -> !this.isNull(item.getStatus()))
.failOn(DmpPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._status}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._status).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._status}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> this.isValidGuid(item.getBlueprint()))
.failOn(DmpPersist._blueprint).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._blueprint}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._blueprint).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._blueprint}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> !this.isNull(item.getProperties()))
.failOn(DmpPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._properties}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._properties).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._properties}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> this.isDescriptionTemplateMultiplicityValid(finalDmpBlueprintEntity, item.getId()))
.failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation.InvalidDescriptionTemplateMultiplicityOnDMP", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._descriptionTemplates).failWith(this.messageSource.getMessage("Validation.InvalidDescriptionTemplateMultiplicityOnDMP", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
this.refSpec()
.iff(() -> !this.isNull(item.getProperties()))
.on(DmpPersist._properties)
@ -248,15 +248,15 @@ public class DmpPersist {
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> !this.isNull(item.getLanguage()))
.failOn(DmpPersist._language).failWith(messageSource.getMessage("Validation_Required", new Object[]{languageFieldLabel != null ? languageFieldLabel : DmpBlueprintSystemFieldType.Language.name()}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._language).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{languageFieldLabel != null ? languageFieldLabel : DmpBlueprintSystemFieldType.Language.name()}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> !this.isNull(item.getAccessType()))
.failOn(DmpPersist._accessType).failWith(messageSource.getMessage("Validation_Required", new Object[]{accessFieldLabel != null ? accessFieldLabel : DmpBlueprintSystemFieldType.AccessRights.name()}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._accessType).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{accessFieldLabel != null ? accessFieldLabel : DmpBlueprintSystemFieldType.AccessRights.name()}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> item.getStatus() == DmpStatus.Finalized)
.must(() -> !this.isListNullOrEmpty(item.getDescriptionTemplates()))
.failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
.failOn(DmpPersist._descriptionTemplates).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
this.navSpec()
.iff(() -> !this.isListNullOrEmpty(item.getDescriptionTemplates()))
.on(DmpPersist._descriptionTemplates)

View File

@ -37,7 +37,7 @@ public class DmpBlueprintValuePersist {
public static final String _reference = "reference";
public UUID getFieldId() {
return fieldId;
return this.fieldId;
}
public void setFieldId(UUID fieldId) {
@ -45,7 +45,7 @@ public class DmpBlueprintValuePersist {
}
public String getFieldValue() {
return fieldValue;
return this.fieldValue;
}
public void setFieldValue(String fieldValue) {
@ -53,7 +53,7 @@ public class DmpBlueprintValuePersist {
}
public List<ReferencePersist> getReferences() {
return references;
return this.references;
}
public void setReferences(List<ReferencePersist> references) {
@ -61,7 +61,7 @@ public class DmpBlueprintValuePersist {
}
public ReferencePersist getReference() {
return reference;
return this.reference;
}
public void setReference(ReferencePersist reference) {
@ -95,29 +95,29 @@ public class DmpBlueprintValuePersist {
@Override
protected List<Specification> specifications(DmpBlueprintValuePersist item) {
fieldEntity = definition != null && this.isValidGuid(item.getFieldId())? definition.getFieldById(item.getFieldId()).stream().findFirst().orElse(null) : null;
boolean required = fieldEntity != null && fieldEntity.isRequired();
this.fieldEntity = this.definition != null && this.isValidGuid(item.getFieldId())? this.definition.getFieldById(item.getFieldId()).stream().findFirst().orElse(null) : null;
boolean required = this.fieldEntity != null && this.fieldEntity.isRequired();
return Arrays.asList(
this.spec()
.must(() -> this.isValidGuid(item.getFieldId()))
.failOn(DmpBlueprintValuePersist._fieldId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpBlueprintValuePersist._fieldId}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._fieldId).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{DmpBlueprintValuePersist._fieldId}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.Extra) && this.isListNullOrEmpty(item.getReferences()) && required)
.iff(() -> this.fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.Extra) && this.isListNullOrEmpty(item.getReferences()) && required)
.must(() -> !this.isEmpty(item.getFieldValue()))
.failOn(DmpBlueprintValuePersist._fieldValue).failWith(messageSource.getMessage("Validation_Required", new Object[]{fieldEntity.getLabel()}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._fieldValue).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{this.fieldEntity.getLabel()}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType) && this.isEmpty(item.getFieldValue()) && ((ReferenceTypeFieldEntity)fieldEntity).getMultipleSelect() && required)
.iff(() -> this.fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType) && this.isEmpty(item.getFieldValue()) && ((ReferenceTypeFieldEntity) this.fieldEntity).getMultipleSelect() && required)
.must(() -> !this.isListNullOrEmpty(item.getReferences()))
// TODO: Cast Exception
// .failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : this.getReferenceTypeName(fieldEntity)}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : DmpBlueprintValuePersist._references}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._references).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(this.fieldEntity.getLabel()) ? this.fieldEntity.getLabel() : DmpBlueprintValuePersist._references}, LocaleContextHolder.getLocale())),
this.spec()
.iff(() -> fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType) && this.isEmpty(item.getFieldValue()) && !((ReferenceTypeFieldEntity)fieldEntity).getMultipleSelect() && required)
.iff(() -> this.fieldEntity.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType) && this.isEmpty(item.getFieldValue()) && !((ReferenceTypeFieldEntity) this.fieldEntity).getMultipleSelect() && required)
.must(() -> !this.isNull(item.getReference()))
// TODO: Cast Exception
// .failOn(DmpBlueprintValuePersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : this.getReferenceTypeName(fieldEntity)}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._reference).failWith(messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(fieldEntity.getLabel()) ? fieldEntity.getLabel() : DmpBlueprintValuePersist._reference}, LocaleContextHolder.getLocale())),
.failOn(DmpBlueprintValuePersist._reference).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{!this.isEmpty(this.fieldEntity.getLabel()) ? this.fieldEntity.getLabel() : DmpBlueprintValuePersist._reference}, LocaleContextHolder.getLocale())),
this.navSpec()
.iff(() -> !this.isListNullOrEmpty(item.getReferences()))
.on(DmpBlueprintValuePersist._references)

View File

@ -1,5 +1,6 @@
package org.opencdmp.service.dmp;
import org.opencdmp.commons.types.dmp.importexport.DmpImportExport;
import org.opencdmp.model.Dmp;
import org.opencdmp.model.DmpUser;
import org.opencdmp.model.DmpValidationResult;
@ -11,6 +12,7 @@ import gr.cite.tools.exception.MyValidationException;
import gr.cite.tools.fieldset.FieldSet;
import jakarta.xml.bind.JAXBException;
import org.springframework.http.ResponseEntity;
import org.xml.sax.SAXException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
@ -50,4 +52,7 @@ public interface DmpService {
void dmpInvitationAccept(String token) throws InvalidApplicationException, IOException;
}
DmpImportExport exportXmlEntity(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException;
ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException;
}

View File

@ -14,6 +14,7 @@ import org.opencdmp.commons.types.actionconfirmation.DmpInvitationEntity;
import org.opencdmp.commons.types.dmp.DmpBlueprintValueEntity;
import org.opencdmp.commons.types.dmp.DmpContactEntity;
import org.opencdmp.commons.types.dmp.DmpPropertiesEntity;
import org.opencdmp.commons.types.dmp.importexport.*;
import org.opencdmp.commons.types.dmpblueprint.ReferenceTypeFieldEntity;
import org.opencdmp.commons.types.dmpblueprint.SectionEntity;
import org.opencdmp.commons.types.dmpreference.DmpReferenceDataEntity;
@ -47,6 +48,7 @@ import org.opencdmp.model.persist.referencedefinition.FieldPersist;
import org.opencdmp.query.*;
import org.opencdmp.service.actionconfirmation.ActionConfirmationService;
import org.opencdmp.service.description.DescriptionService;
import org.opencdmp.service.dmpblueprint.DmpBlueprintService;
import org.opencdmp.service.elastic.ElasticService;
import org.opencdmp.service.filetransformer.FileTransformerService;
import gr.cite.commons.web.authz.service.AuthorizationService;
@ -66,6 +68,7 @@ import gr.cite.tools.validation.ValidationFailure;
import gr.cite.tools.validation.ValidatorFactory;
import jakarta.xml.bind.JAXBException;
import org.jetbrains.annotations.NotNull;
import org.opencdmp.service.responseutils.ResponseUtilsService;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
@ -75,11 +78,13 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.xml.sax.SAXException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.management.InvalidApplicationException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
@ -135,6 +140,8 @@ public class DmpServiceImpl implements DmpService {
private final AnnotationEntityRemovalIntegrationEventHandler annotationEntityRemovalIntegrationEventHandler;
private final AuthorizationContentResolver authorizationContentResolver;
private final TenantScope tenantScope;
private final ResponseUtilsService responseUtilsService;
private final DmpBlueprintService dmpBlueprintService;
@Autowired
public DmpServiceImpl(
TenantEntityManager entityManager,
@ -156,7 +163,7 @@ public class DmpServiceImpl implements DmpService {
FileTransformerService fileTransformerService,
ValidatorFactory validatorFactory,
ElasticService elasticService,
AnnotationEntityTouchedIntegrationEventHandler annotationEntityTouchedIntegrationEventHandler, AnnotationEntityRemovalIntegrationEventHandler annotationEntityRemovalIntegrationEventHandler, AuthorizationContentResolver authorizationContentResolver, TenantScope tenantScope) {
AnnotationEntityTouchedIntegrationEventHandler annotationEntityTouchedIntegrationEventHandler, AnnotationEntityRemovalIntegrationEventHandler annotationEntityRemovalIntegrationEventHandler, AuthorizationContentResolver authorizationContentResolver, TenantScope tenantScope, ResponseUtilsService responseUtilsService, DmpBlueprintService dmpBlueprintService) {
this.entityManager = entityManager;
this.authorizationService = authorizationService;
this.deleterFactory = deleterFactory;
@ -180,6 +187,8 @@ public class DmpServiceImpl implements DmpService {
this.annotationEntityRemovalIntegrationEventHandler = annotationEntityRemovalIntegrationEventHandler;
this.authorizationContentResolver = authorizationContentResolver;
this.tenantScope = tenantScope;
this.responseUtilsService = responseUtilsService;
this.dmpBlueprintService = dmpBlueprintService;
}
public Dmp persist(DmpPersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, IOException {
@ -191,9 +200,9 @@ public class DmpServiceImpl implements DmpService {
DmpEntity data = this.patchAndSave(model);
DmpBlueprintEntity blueprintEntity = this.entityManager.find(DmpBlueprintEntity.class, data.getBlueprintId());
if (blueprintEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (blueprintEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
org.opencdmp.commons.types.dmpblueprint.DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(org.opencdmp.commons.types.dmpblueprint.DefinitionEntity.class, blueprintEntity.getDefinition());
if (definition == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), org.opencdmp.commons.types.dmpblueprint.DefinitionEntity.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (definition == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), org.opencdmp.commons.types.dmpblueprint.DefinitionEntity.class.getSimpleName()}, LocaleContextHolder.getLocale()));
this.patchAndSaveReferences(this.buildDmpReferencePersists(model.getProperties()), data.getId(), definition);
@ -201,7 +210,7 @@ public class DmpServiceImpl implements DmpService {
this.patchAndSaveTemplates(data.getId(), model.getDescriptionTemplates());
if (!isUpdate && userScope.isSet()) {
if (!isUpdate && this.userScope.isSet()) {
this.addOwner(data);
if (model.getUsers() == null) model.setUsers(new ArrayList<>());
if (model.getUsers().stream().noneMatch(x-> x.getUser() != null && x.getUser().equals(this.userScope.getUserIdSafe()) && DmpUserRole.Owner.equals(x.getRole()))) model.getUsers().add(this.createOwnerPersist());
@ -233,7 +242,7 @@ public class DmpServiceImpl implements DmpService {
private DmpUserPersist createOwnerPersist() {
DmpUserPersist persist = new DmpUserPersist();
persist.setRole(DmpUserRole.Owner);
persist.setUser(userScope.getUserIdSafe());
persist.setUser(this.userScope.getUserIdSafe());
return persist;
}
@ -244,7 +253,7 @@ public class DmpServiceImpl implements DmpService {
data.setCreatedAt(Instant.now());
data.setUpdatedAt(Instant.now());
data.setRole(DmpUserRole.Owner);
data.setUserId(userScope.getUserId());
data.setUserId(this.userScope.getUserId());
data.setDmpId(dmpEntity.getId());
this.entityManager.persist(data);
@ -279,7 +288,7 @@ public class DmpServiceImpl implements DmpService {
List<ContactPair> contactPairs = new ArrayList<>();
contactPairs.add(new ContactPair(ContactInfoType.Email, query.first().getValue()));
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
event.setContactHint(this.jsonHandlingService.toJsonSafe(contactData));
this.applyNotificationType(dmp.getStatus(), event);
NotificationFieldData data = new NotificationFieldData();
@ -289,18 +298,18 @@ public class DmpServiceImpl implements DmpService {
fieldInfoList.add(new FieldInfo("{name}", DataType.String, dmp.getLabel()));
fieldInfoList.add(new FieldInfo("{id}", DataType.String, dmp.getId().toString()));
data.setFields(fieldInfoList);
event.setData(jsonHandlingService.toJsonSafe(data));
event.setData(this.jsonHandlingService.toJsonSafe(data));
eventHandler.handle(event);
this.eventHandler.handle(event);
}
private void applyNotificationType(DmpStatus status, NotifyIntegrationEvent event) {
switch (status) {
case Draft:
event.setNotificationType(notificationProperties.getDmpModifiedType());
event.setNotificationType(this.notificationProperties.getDmpModifiedType());
break;
case Finalized:
event.setNotificationType(notificationProperties.getDmpFinalisedType());
event.setNotificationType(this.notificationProperties.getDmpFinalisedType());
break;
default:
throw new MyApplicationException("Unsupported Dmp Status.");
@ -313,7 +322,7 @@ public class DmpServiceImpl implements DmpService {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation(id)), Permission.DeleteDmp);
DmpEntity data = this.entityManager.find(DmpEntity.class, id);
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (data == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
EntityDoiQuery entityDoiQuery = this.queryFactory.query(EntityDoiQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).types(EntityType.DMP).entityIds(data.getId());
if (entityDoiQuery.count() > 0) throw new MyApplicationException("DMP is deposited can not deleted");
@ -349,7 +358,7 @@ public class DmpServiceImpl implements DmpService {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation( model.getId())), Permission.CreateNewVersionDmp);
DmpEntity oldDmpEntity = this.entityManager.find(DmpEntity.class, model.getId());
if (oldDmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (oldDmpEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(oldDmpEntity.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
List<DmpEntity> latestVersionDmps = this.queryFactory.query(DmpQuery.class)
@ -383,6 +392,7 @@ public class DmpServiceImpl implements DmpService {
newDmp.setStatus(DmpStatus.Draft);
newDmp.setProperties(oldDmpEntity.getProperties());
newDmp.setBlueprintId(model.getBlueprintId());
newDmp.setAccessType(oldDmpEntity.getAccessType());
newDmp.setCreatorId(this.userScope.getUserId());
this.entityManager.persist(newDmp);
@ -500,7 +510,7 @@ public class DmpServiceImpl implements DmpService {
DmpEntity existingDmpEntity = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(model.getId()).firstAs(fields);
if (!this.conventionService.isValidGuid(model.getId()) || existingDmpEntity == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DmpEntity newDmp = new DmpEntity();
newDmp.setId(UUID.randomUUID());
@ -582,7 +592,7 @@ public class DmpServiceImpl implements DmpService {
DmpEntity resultingDmpEntity = this.queryFactory.query(DmpQuery.class).ids(newDmp.getId()).firstAs(fields);
if (!this.conventionService.isListNullOrEmpty(model.getDescriptions())){
for (UUID description: model.getDescriptions()) {
descriptionService.clone(newDmp.getId(), description);
this.descriptionService.clone(newDmp.getId(), description);
}
}
return this.builderFactory.builder(DmpBuilder.class).build(fields, resultingDmpEntity);
@ -595,7 +605,7 @@ public class DmpServiceImpl implements DmpService {
if (!disableDelete && (model == null || model.stream().noneMatch(x-> x.getUser() != null && DmpUserRole.Owner.equals(x.getRole())))) throw new MyApplicationException("At least one owner required");
DmpEntity dmpEntity = this.entityManager.find(DmpEntity.class, dmpId);
if (dmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{dmpId, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmpEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{dmpId, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
List<DmpUserEntity> existingUsers = this.queryFactory.query(DmpUserQuery.class)
.dmpIds(dmpId)
@ -641,7 +651,7 @@ public class DmpServiceImpl implements DmpService {
public Dmp removeUser(DmpUserRemovePersist model, FieldSet fields) throws InvalidApplicationException, IOException {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation(model.getDmpId())), Permission.AssignDmpUsers);
DmpEntity data = this.entityManager.find(DmpEntity.class, model.getDmpId());
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (data == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
List<DmpUserEntity> existingUsers = this.queryFactory.query(DmpUserQuery.class)
.dmpIds(model.getDmpId()).ids(model.getId()).userRoles(model.getRole())
@ -652,7 +662,7 @@ public class DmpServiceImpl implements DmpService {
this.entityManager.flush();
DmpEntity dmpEntity = this.entityManager.find(DmpEntity.class, model.getDmpId());
if (dmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getDmpId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmpEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getDmpId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
this.elasticService.persistDmp(dmpEntity);
this.annotationEntityTouchedIntegrationEventHandler.handleDmp(dmpEntity.getId());
@ -677,7 +687,7 @@ public class DmpServiceImpl implements DmpService {
DmpEntity data;
if (isUpdate) {
data = this.entityManager.find(DmpEntity.class, model.getId());
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (data == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
if (model.getStatus() != null && model.getStatus() == DmpStatus.Finalized && data.getStatus() != DmpStatus.Finalized) {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation(model.getId())), Permission.FinalizeDmp);
@ -691,7 +701,7 @@ public class DmpServiceImpl implements DmpService {
data.setVersion((short) 1);
data.setStatus(DmpStatus.Draft);
data.setVersionStatus(DmpVersionStatus.NotFinalized);
data.setCreatorId(userScope.getUserId());
data.setCreatorId(this.userScope.getUserId());
data.setBlueprintId(model.getBlueprint());
data.setIsActive(IsActive.Active);
data.setCreatedAt(Instant.now());
@ -804,10 +814,10 @@ public class DmpServiceImpl implements DmpService {
ReferenceEntity referenceEntity;
if (this.conventionService.isValidGuid(referencePersist.getId())){
referenceEntity = this.entityManager.find(ReferenceEntity.class, referencePersist.getId());
if (referenceEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{referencePersist.getId(), Reference.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (referenceEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{referencePersist.getId(), Reference.class.getSimpleName()}, LocaleContextHolder.getLocale()));
} else {
ReferenceTypeFieldEntity fieldEntity = blueprintDefinition.getFieldById(model.getData().getBlueprintFieldId()).stream().filter(x-> x.getCategory().equals(DmpBlueprintFieldCategory.ReferenceType)).map(x-> (ReferenceTypeFieldEntity)x).findFirst().orElse(null);
if (fieldEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getData().getBlueprintFieldId(), ReferenceTypeFieldEntity.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (fieldEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getData().getBlueprintFieldId(), ReferenceTypeFieldEntity.class.getSimpleName()}, LocaleContextHolder.getLocale()));
referenceEntity = this.queryFactory.query(ReferenceQuery.class).sourceTypes(referencePersist.getSourceType()).typeIds(fieldEntity.getReferenceTypeId()).sources(referencePersist.getSource()).isActive(IsActive.Active).references(referencePersist.getReference()).first();
if (referenceEntity == null){
@ -826,14 +836,14 @@ public class DmpServiceImpl implements DmpService {
referenceEntity.setSourceType(referencePersist.getSourceType());
try {
ReferenceTypeEntity referenceType = this.queryFactory.query(ReferenceTypeQuery.class).ids(fieldEntity.getReferenceTypeId()).firstAs(new BaseFieldSet().ensure(ReferenceType._id).ensure(ReferenceTypeEntity._tenantId));
if (referenceType == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{fieldEntity.getReferenceTypeId(), ReferenceType.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (referenceType == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{fieldEntity.getReferenceTypeId(), ReferenceType.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (referenceEntity.getSourceType().equals(ReferenceSourceType.External) && !this.tenantScope.isDefaultTenant() && referenceType.getTenantId() == null){
this.tenantScope.setTempTenant(this.entityManager.getEntityManager(), null, this.tenantScope.getDefaultTenantCode());
}
this.entityManager.persist(referenceEntity);
} finally {
tenantScope.removeTempTenant(this.entityManager.getEntityManager());
this.tenantScope.removeTempTenant(this.entityManager.getEntityManager());
}
}
}
@ -930,7 +940,7 @@ public class DmpServiceImpl implements DmpService {
DmpEntity dmp = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(id).isActive(IsActive.Active).first();
if (dmp == null){
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
}
if (dmp.getStatus().equals(DmpStatus.Finalized)){
@ -985,7 +995,7 @@ public class DmpServiceImpl implements DmpService {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation(id)), Permission.UndoFinalizeDmp);
DmpEntity dmp = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(id).isActive(IsActive.Active).firstAs(fields);
if (dmp == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmp == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!dmp.getStatus().equals(DmpStatus.Finalized)) throw new MyApplicationException("DMP is already drafted");
@ -1009,7 +1019,7 @@ public class DmpServiceImpl implements DmpService {
DmpEntity dmp = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(id).isActive(IsActive.Active).first();
if (dmp == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmp == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DmpValidationResult dmpValidationResult = new DmpValidationResult(dmp.getId(), DmpValidationOutput.Invalid);
@ -1028,7 +1038,7 @@ public class DmpServiceImpl implements DmpService {
if (data == null) return persist;
DmpBlueprintEntity dmpBlueprintEntity = this.entityManager.find(DmpBlueprintEntity.class, data.getBlueprintId());
if (dmpBlueprintEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmpBlueprintEntity == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{data.getBlueprintId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
persist.setId(data.getId());
persist.setHash(data.getId().toString());
@ -1046,9 +1056,9 @@ public class DmpServiceImpl implements DmpService {
for (DmpUserEntity user: dmpUserEntities) {
persist.getUsers().add(this.buildDmpUserPersist(user));
}
};
}
List<DmpReferenceEntity> dmpReferenceEntities = this.queryFactory.query(DmpReferenceQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).dmpIds(data.getId()).isActives(IsActive.Active).collect();
List<DmpReferenceEntity> dmpReferenceEntities = this.queryFactory.query(DmpReferenceQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).dmpIds(data.getId()).isActives(IsActive.Active).collect();
org.opencdmp.commons.types.dmpblueprint.DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(org.opencdmp.commons.types.dmpblueprint.DefinitionEntity.class, dmpBlueprintEntity.getDefinition());
@ -1058,8 +1068,8 @@ public class DmpServiceImpl implements DmpService {
for (DmpDescriptionTemplateEntity descriptionTemplateEntity: dmpDescriptionTemplateEntities) {
persist.getDescriptionTemplates().add(this.buildDmpDescriptionTemplatePersists(descriptionTemplateEntity, definition.getSections()));
}
};
persist.setProperties(this.buildDmpPropertyDefinitionPersist( this.jsonHandlingService.fromJsonSafe(DmpPropertiesEntity.class, data.getProperties()), dmpReferenceEntities, definition.getSections()));
}
persist.setProperties(this.buildDmpPropertyDefinitionPersist( this.jsonHandlingService.fromJsonSafe(DmpPropertiesEntity.class, data.getProperties()), dmpReferenceEntities, definition.getSections()));
return persist;
}
@ -1250,8 +1260,8 @@ public class DmpServiceImpl implements DmpService {
List<ContactPair> contactPairs = new ArrayList<>();
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
event.setNotificationType(notificationProperties.getDmpInvitationExistingUserType());
event.setContactHint(this.jsonHandlingService.toJsonSafe(contactData));
event.setNotificationType(this.notificationProperties.getDmpInvitationExistingUserType());
NotificationFieldData data = new NotificationFieldData();
List<FieldInfo> fieldInfoList = new ArrayList<>();
fieldInfoList.add(new FieldInfo("{recipient}", DataType.String, recipient.getName()));
@ -1260,8 +1270,8 @@ public class DmpServiceImpl implements DmpService {
fieldInfoList.add(new FieldInfo("{dmprole}", DataType.String, role.toString()));
fieldInfoList.add(new FieldInfo("{id}", DataType.String, dmp.getId().toString()));
data.setFields(fieldInfoList);
event.setData(jsonHandlingService.toJsonSafe(data));
eventHandler.handle(event);
event.setData(this.jsonHandlingService.toJsonSafe(data));
this.eventHandler.handle(event);
}
private void sendDmpInvitationExternalUser(String email, DmpEntity dmp, DmpUserRole role) throws JAXBException, InvalidApplicationException {
@ -1272,9 +1282,9 @@ public class DmpServiceImpl implements DmpService {
List<ContactPair> contactPairs = new ArrayList<>();
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
event.setContactHint(this.jsonHandlingService.toJsonSafe(contactData));
event.setContactTypeHint(NotificationContactType.EMAIL);
event.setNotificationType(notificationProperties.getDmpInvitationExternalUserType());
event.setNotificationType(this.notificationProperties.getDmpInvitationExternalUserType());
NotificationFieldData data = new NotificationFieldData();
List<FieldInfo> fieldInfoList = new ArrayList<>();
fieldInfoList.add(new FieldInfo("{recipient}", DataType.String, email));
@ -1282,8 +1292,8 @@ public class DmpServiceImpl implements DmpService {
fieldInfoList.add(new FieldInfo("{dmpname}", DataType.String, dmp.getLabel()));
fieldInfoList.add(new FieldInfo("{dmprole}", DataType.String, role.toString()));
data.setFields(fieldInfoList);
event.setData(jsonHandlingService.toJsonSafe(data));
eventHandler.handle(event);
event.setData(this.jsonHandlingService.toJsonSafe(data));
this.eventHandler.handle(event);
}
private String createActionConfirmation(String email, DmpEntity dmp, DmpUserRole role) throws JAXBException, InvalidApplicationException {
@ -1293,7 +1303,7 @@ public class DmpServiceImpl implements DmpService {
persist.setToken(UUID.randomUUID().toString());
persist.setDmpInvitation(new DmpInvitationPersist(email, dmp.getId(), role));
persist.setExpiresAt(Instant.now().plusSeconds(this.notificationProperties.getEmailExpirationTimeSeconds()));
validatorFactory.validator(ActionConfirmationPersist.ActionConfirmationPersistValidator.class).validateForce(persist);
this.validatorFactory.validator(ActionConfirmationPersist.ActionConfirmationPersistValidator.class).validateForce(persist);
this.actionConfirmationService.persist(persist, null);
return persist.getToken();
@ -1330,4 +1340,180 @@ public class DmpServiceImpl implements DmpService {
this.annotationEntityTouchedIntegrationEventHandler.handleDmp(dmpInvitation.getDmpId());
}
//region Export
@Override
public DmpImportExport exportXmlEntity(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException {
logger.debug(new MapLogEntry("export xml").And("id", id));
this.authorizationService.authorizeForce(Permission.ExportDmp);
DmpEntity data = this.entityManager.find(DmpEntity.class, id);
if (data == null)
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DmpPropertiesEntity definition = this.jsonHandlingService.fromJson(DmpPropertiesEntity.class, data.getProperties());
return this.definitionXmlToExport(data, definition);
}
@Override
public ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException {
logger.debug(new MapLogEntry("export xml").And("id", id));
this.authorizationService.authorizeForce(Permission.ExportDmp);
DmpEntity data = this.entityManager.find(DmpEntity.class, id);
if (data == null)
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
String xml = this.xmlHandlingService.toXml(this.exportXmlEntity(data.getId()));
return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml");
}
private DmpImportExport definitionXmlToExport(DmpEntity data, DmpPropertiesEntity propertiesEntity) throws InvalidApplicationException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException {
DmpImportExport xml = new DmpImportExport();
xml.setId(data.getId());
xml.setDescription(data.getDescription());
xml.setTitle(data.getLabel());
xml.setLanguage(data.getLanguage());
xml.setAccess(data.getAccessType());
xml.setFinalizedAt(data.getFinalizedAt());
xml.setPublicAfter(data.getPublicAfter());
if (propertiesEntity != null && !this.conventionService.isListNullOrEmpty(propertiesEntity.getContacts())) {
List<DmpContactImportExport> dmpContactImportExports = new LinkedList<>();
List<UserEntity> users = this.queryFactory.query(UserQuery.class).ids(propertiesEntity.getContacts().stream().filter(x-> x.getUserId() != null).map(DmpContactEntity::getUserId).distinct().toList()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActive(IsActive.Active).collect();
Map<UUID, UserEntity> usersMap = users == null ? new HashMap<>() : users.stream().collect(Collectors.toMap(UserEntity::getId, x-> x));
for (DmpContactEntity contactEntity : propertiesEntity.getContacts()) {
dmpContactImportExports.add(this.dmpContactToExport(contactEntity, usersMap));
}
xml.setContacts(dmpContactImportExports);
}
List<DmpUserEntity> dmpUsers = this.queryFactory.query(DmpUserQuery.class).dmpIds(data.getId()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActives(IsActive.Active).collect();
if (!this.conventionService.isListNullOrEmpty(dmpUsers)) {
List<UserEntity> users = this.queryFactory.query(UserQuery.class).ids(dmpUsers.stream().map(DmpUserEntity::getUserId).distinct().toList()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActive(IsActive.Active).collect();
Map<UUID, UserEntity> usersMap = users == null ? new HashMap<>() : users.stream().collect(Collectors.toMap(UserEntity::getId, x-> x));
List<DmpUserImportExport> dmpUserImportExports = new LinkedList<>();
for (DmpUserEntity dmpUserEntity : dmpUsers) {
dmpUserImportExports.add(this.dmpUserToExport(dmpUserEntity, usersMap));
}
xml.setUsers(dmpUserImportExports);
}
DmpBlueprintEntity blueprintEntity = this.queryFactory.query(DmpBlueprintQuery.class).ids(data.getBlueprintId()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActive(IsActive.Active).first();
if (blueprintEntity != null) {
xml.setBlueprint(this.dmpBlueprintService.getExportXmlEntity(blueprintEntity.getId()));
}
List<DmpDescriptionTemplateEntity> dmpDescriptionTemplateEntities = this.queryFactory.query(DmpDescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).dmpIds(data.getId()).isActive(IsActive.Active).collect();
if (!this.conventionService.isListNullOrEmpty(dmpDescriptionTemplateEntities)) {
List<DmpDescriptionTemplateImportExport> dmpDescriptionTemplateImportExports = new LinkedList<>();
for (DmpDescriptionTemplateEntity descriptionTemplateEntity : dmpDescriptionTemplateEntities) {
dmpDescriptionTemplateImportExports.add(this.dmpDescriptionTemplateToExport(descriptionTemplateEntity));
}
xml.setDescriptionTemplates(dmpDescriptionTemplateImportExports);
}
if (propertiesEntity != null && !this.conventionService.isListNullOrEmpty(propertiesEntity.getDmpBlueprintValues())) {
List<DmpBlueprintValueImportExport> dmpDescriptionTemplateImportExports = new LinkedList<>();
for (DmpBlueprintValueEntity dmpBlueprintValueEntity : propertiesEntity.getDmpBlueprintValues()) {
dmpDescriptionTemplateImportExports.add(this.dmpBlueprintValueToExport(dmpBlueprintValueEntity));
}
xml.setBlueprintValues(dmpDescriptionTemplateImportExports);
}
List<DmpReferenceEntity> dmpReferences = this.queryFactory.query(DmpReferenceQuery.class).dmpIds(data.getId()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActives(IsActive.Active).collect();
if (!this.conventionService.isListNullOrEmpty(dmpReferences)) {
List<ReferenceEntity> references = this.queryFactory.query(ReferenceQuery.class).ids(dmpReferences.stream().map(DmpReferenceEntity::getReferenceId).distinct().toList()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActive(IsActive.Active).collect();
Map<UUID, ReferenceEntity> referenceEntityMap = references == null ? new HashMap<>() : references.stream().collect(Collectors.toMap(ReferenceEntity::getId, x-> x));
List<ReferenceTypeEntity> referenceTypes = references == null ? new ArrayList<>() : this.queryFactory.query(ReferenceTypeQuery.class).ids(references.stream().map(ReferenceEntity::getTypeId).distinct().toList()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).isActive(IsActive.Active).collect();
Map<UUID, ReferenceTypeEntity> referenceTypeEntityMap = referenceTypes == null ? new HashMap<>() : referenceTypes.stream().collect(Collectors.toMap(ReferenceTypeEntity::getId, x-> x));
List<DmpReferenceImportExport> dmpReferenceImportExports = new LinkedList<>();
for (DmpReferenceEntity descriptionTemplateEntity : dmpReferences) {
dmpReferenceImportExports.add(this.dmpReferenceToExport(descriptionTemplateEntity, referenceEntityMap, referenceTypeEntityMap));
}
xml.setReferences(dmpReferenceImportExports);
}
return xml;
}
private DmpReferenceImportExport dmpReferenceToExport(DmpReferenceEntity entity, Map<UUID, ReferenceEntity> referenceEntityMap, Map<UUID, ReferenceTypeEntity> referenceTypeEntityMap) {
DmpReferenceImportExport xml = new DmpReferenceImportExport();
if (entity == null) return xml;
DmpReferenceDataEntity referenceData = this.jsonHandlingService.fromJsonSafe(DmpReferenceDataEntity.class, entity.getData());
if (referenceData != null) xml.setFieldId(referenceData.getBlueprintFieldId());
ReferenceEntity reference = referenceEntityMap.getOrDefault(entity.getReferenceId(), null);
if (reference != null){
xml.setId(reference.getId());
xml.setLabel(reference.getLabel());
xml.setReference(reference.getReference());
ReferenceTypeEntity referenceType = referenceTypeEntityMap.getOrDefault(reference.getTypeId(), null);
if (referenceType != null) xml.setType(this.dmpReferenceTypeToExport(referenceType));
}
return xml;
}
private DmpReferenceTypeImportExport dmpReferenceTypeToExport(ReferenceTypeEntity entity) {
DmpReferenceTypeImportExport xml = new DmpReferenceTypeImportExport();
if (entity == null) return xml;
xml.setId(entity.getId());
xml.setCode(entity.getCode());
xml.setName(entity.getName());
return xml;
}
private DmpBlueprintValueImportExport dmpBlueprintValueToExport(DmpBlueprintValueEntity entity) {
DmpBlueprintValueImportExport xml = new DmpBlueprintValueImportExport();
if (entity == null) return xml;
xml.setFieldId(entity.getFieldId());
xml.setValue(entity.getValue());
return xml;
}
private DmpDescriptionTemplateImportExport dmpDescriptionTemplateToExport(DmpDescriptionTemplateEntity entity) {
DmpDescriptionTemplateImportExport xml = new DmpDescriptionTemplateImportExport();
if (entity == null) return xml;
xml.setDescriptionTemplateGroupId(entity.getDescriptionTemplateGroupId());
xml.setSectionId(entity.getSectionId());
return xml;
}
private DmpUserImportExport dmpUserToExport(DmpUserEntity entity, Map<UUID, UserEntity> usersMap) {
DmpUserImportExport xml = new DmpUserImportExport();
if (entity == null) return xml;
xml.setId(entity.getUserId());
UserEntity userEntity = usersMap.getOrDefault(entity.getUserId(), null);
if (userEntity != null){
xml.setName(userEntity.getName());
}
xml.setRole(entity.getRole());
xml.setSectionId(entity.getSectionId());
return xml;
}
private DmpContactImportExport dmpContactToExport(DmpContactEntity entity, Map<UUID, UserEntity> usersMap) {
DmpContactImportExport xml = new DmpContactImportExport();
if (entity == null) return xml;
UserEntity userEntity = entity.getUserId() == null ? null : usersMap.getOrDefault(entity.getUserId(), null);
if (userEntity != null){
xml.setName(userEntity.getName());
}
xml.setUserId(entity.getUserId());
xml.setEmail(entity.getEmail());
xml.setFirstName(entity.getFirstName());
xml.setLastName(entity.getLastName());
return xml;
}
//endregion
}

View File

@ -2,6 +2,7 @@ package org.opencdmp.service.dmpblueprint;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.opencdmp.commons.enums.DmpBlueprintSystemFieldType;
import org.opencdmp.commons.types.dmpblueprint.importexport.BlueprintImportExport;
import org.opencdmp.data.DmpBlueprintEntity;
import org.opencdmp.model.DmpBlueprint;
import org.opencdmp.model.persist.DmpBlueprintPersist;
@ -34,6 +35,8 @@ public interface DmpBlueprintService {
DmpBlueprint createNewVersion(NewVersionDmpBlueprintPersist model, FieldSet fieldSet) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException;
BlueprintImportExport getExportXmlEntity(UUID id) throws MyForbiddenException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException;
ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException;
DmpBlueprint importXml(byte[] bytes, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException;
}

View File

@ -120,7 +120,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
if (isUpdate) {
data = this.entityManager.find(DmpBlueprintEntity.class, model.getId());
if (data == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash()))
throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
if (data.getStatus().equals(DmpBlueprintStatus.Finalized))
@ -138,7 +138,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
DmpBlueprintStatus previousStatus = data.getStatus();
if (model.getDefinition() != null && !model.getDefinition().getSections().stream().anyMatch(x -> x.getHasTemplates())) {
if (model.getDefinition() != null && model.getDefinition().getSections().stream().noneMatch(SectionPersist::getHasTemplates)) {
throw new MyValidationException(this.errors.getDmpBlueprintHasNoDescriptionTemplates().getCode(), this.errors.getDmpBlueprintHasNoDescriptionTemplates().getMessage());
}
@ -323,7 +323,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
public boolean fieldInBlueprint(UUID id, DmpBlueprintSystemFieldType type) throws InvalidApplicationException {
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, id);
if (data == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
return this.fieldInBlueprint(data, type);
}
@ -339,7 +339,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(id);
DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).build(fields, query.firstAs(fields));
if (model == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
model.setLabel(model.getLabel() + " new ");
model.setId(null);
@ -391,7 +391,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
DmpBlueprintEntity oldDmpBlueprintEntity = this.entityManager.find(DmpBlueprintEntity.class, model.getId());
if (oldDmpBlueprintEntity == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(oldDmpBlueprintEntity.getUpdatedAt()).equals(model.getHash()))
throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
if (!this.tenantScope.isSet() || !Objects.equals(oldDmpBlueprintEntity.getTenantId(), this.tenantScope.getTenant())) throw new MyForbiddenException(this.errors.getTenantTampering().getCode(), this.errors.getTenantTampering().getMessage());
@ -443,19 +443,44 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
//region Export
public ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException {
logger.debug(new MapLogEntry("persisting data").And("id", id));
@Override
public BlueprintImportExport getExportXmlEntity(UUID id) throws MyForbiddenException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException {
logger.debug(new MapLogEntry("export xml").And("id", id));
this.authorizationService.authorizeForce(Permission.ExportDmpBlueprint);
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, id);
if (data == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DefinitionEntity dmpDefinition = this.xmlHandlingService.fromXml(DefinitionEntity.class, data.getDefinition());
String xml = this.xmlHandlingService.toXml(this.definitionXmlToExport(dmpDefinition));
return this.definitionXmlToExport(data);
}
@Override
public ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException {
logger.debug(new MapLogEntry("export xml").And("id", id));
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, id);
if (data == null)
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
String xml = this.xmlHandlingService.toXml(this.getExportXmlEntity(id));
return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml");
}
private BlueprintImportExport definitionXmlToExport(DmpBlueprintEntity entity) throws JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException {
if (entity == null)
return null;
BlueprintImportExport xml = new BlueprintImportExport();
xml.setId(entity.getId());
xml.setLabel(entity.getLabel());
DefinitionEntity dmpDefinition = this.xmlHandlingService.fromXml(DefinitionEntity.class, entity.getDefinition());
xml.setDmpBlueprintDefinition(this.definitionXmlToExport(dmpDefinition));
return xml;
}
private DefinitionImportExport definitionXmlToExport(DefinitionEntity entity) {
if (entity == null)
return null;
@ -572,8 +597,18 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
persist.setStatus(DmpBlueprintStatus.Draft);
BlueprintImportExport dmpDefinition = this.xmlHandlingService.fromXml(BlueprintImportExport.class, new String(bytes, StandardCharsets.UTF_8));
if (dmpDefinition != null)
if (dmpDefinition != null) {
persist.setDefinition(this.xmlDefinitionToPersist(dmpDefinition.getDmpBlueprintDefinition()));
if (dmpDefinition.getId() != null) {
persist.setId(dmpDefinition.getId());
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, dmpDefinition.getId());
if (data == null) {
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{dmpDefinition.getId(), DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
}
persist.setHash(this.conventionService.hashValue(data.getUpdatedAt()));
}
persist.setLabel(dmpDefinition.getLabel());
}
this.validatorFactory.validator(DmpBlueprintPersist.DmpBlueprintPersistValidator.class).validateForce(persist);
return this.persist(persist, fields);

View File

@ -121,7 +121,7 @@ public class FileTransformerServiceImpl implements FileTransformerService {
String tenantCode = this.tenantScope.isSet() && this.tenantScope.isMultitenant() ? this.tenantScope.getTenantCode() : "";
FileTransformerSourcesCacheService.FileTransformerSourceCacheValue cacheValue = this.fileTransformerSourcesCacheService.lookup(this.fileTransformerSourcesCacheService.buildKey(tenantCode));
if (cacheValue == null) {
List<FileTransformerSourceEntity> fileTransformerSourceEntities = new ArrayList<>(fileTransformerProperties.getSources());
List<FileTransformerSourceEntity> fileTransformerSourceEntities = new ArrayList<>(this.fileTransformerProperties.getSources());
if (this.tenantScope.isSet() && this.tenantScope.isMultitenant()) {
TenantConfigurationQuery tenantConfigurationQuery = this.queryFactory.query(TenantConfigurationQuery.class).isActive(IsActive.Active).types(TenantConfigurationType.FileTransformerPlugins);
if (this.tenantScope.isDefaultTenant()) tenantConfigurationQuery.tenantIsSet(false);
@ -165,7 +165,7 @@ public class FileTransformerServiceImpl implements FileTransformerService {
item.setUrl(source.getUrl());
item.setIssuerUrl(source.getIssuerUrl());
item.setClientId(source.getClientId());
if (!this.conventionService.isNullOrEmpty(source.getClientSecret())) item.setClientSecret(this.encryptionService.decryptAES(source.getClientSecret(), tenantProperties.getConfigEncryptionAesKey(), tenantProperties.getConfigEncryptionAesIv()));
if (!this.conventionService.isNullOrEmpty(source.getClientSecret())) item.setClientSecret(this.encryptionService.decryptAES(source.getClientSecret(), this.tenantProperties.getConfigEncryptionAesKey(), this.tenantProperties.getConfigEncryptionAesIv()));
item.setScope(source.getScope());
items.add(item);
}
@ -201,8 +201,8 @@ public class FileTransformerServiceImpl implements FileTransformerService {
FileTransformerConfigurationCacheService.FileTransformerConfigurationCacheValue cacheValue = this.fileTransformerConfigurationCacheService.lookup(this.fileTransformerConfigurationCacheService.buildKey(transformerSource.getTransformerId(), tenantCode));
if (cacheValue == null){
try {
FileTransformerRepository fileTransformerRepository = getRepository(transformerSource.getTransformerId());
if (fileTransformerRepository == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{transformerSource.getTransformerId(), FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileTransformerRepository fileTransformerRepository = this.getRepository(transformerSource.getTransformerId());
if (fileTransformerRepository == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{transformerSource.getTransformerId(), FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileTransformerConfiguration configuration = fileTransformerRepository.getConfiguration();
cacheValue = new FileTransformerConfigurationCacheService.FileTransformerConfigurationCacheValue(transformerSource.getTransformerId(), tenantCode, configuration);
@ -223,17 +223,17 @@ public class FileTransformerServiceImpl implements FileTransformerService {
public org.opencdmp.model.file.FileEnvelope exportDmp(UUID dmpId, String repositoryId, String format) throws InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException, InvalidApplicationException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException {
this.authorizationService.authorize(Permission.EditDmp);
//GK: First get the right client
FileTransformerRepository repository = getRepository(repositoryId);
if (repository == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{format, FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileTransformerRepository repository = this.getRepository(repositoryId);
if (repository == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{format, FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
//GK: Second get the Target Data Management Plan
DmpQuery query = this.queryFactory.query(DmpQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(dmpId);
DmpModel dmpFileTransformerModel = this.builderFactory.builder(DmpCommonModelBuilder.class).useSharedStorage(repository.getConfiguration().isUseSharedStorage()).setRepositoryId(repository.getConfiguration().getFileTransformerId()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).build(query.first());
if (dmpFileTransformerModel == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{dmpId, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (dmpFileTransformerModel == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{dmpId, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileEnvelopeModel fileEnvelope = repository.exportDmp(dmpFileTransformerModel, format);
org.opencdmp.model.file.FileEnvelope result = new org.opencdmp.model.file.FileEnvelope();
byte[] data = repository.getConfiguration().isUseSharedStorage() ? storageFileService.readByFileRefAsBytesSafe(fileEnvelope.getFileRef(), StorageType.Transformer) : fileEnvelope.getFile();
byte[] data = repository.getConfiguration().isUseSharedStorage() ? this.storageFileService.readByFileRefAsBytesSafe(fileEnvelope.getFileRef(), StorageType.Transformer) : fileEnvelope.getFile();
result.setFile(data);
result.setFilename(fileEnvelope.getFilename());
return result;
@ -243,17 +243,17 @@ public class FileTransformerServiceImpl implements FileTransformerService {
public org.opencdmp.model.file.FileEnvelope exportDescription(UUID descriptionId, String repositoryId, String format) throws InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException, InvalidApplicationException, NoSuchAlgorithmException, BadPaddingException, InvalidKeyException {
this.authorizationService.authorize(Permission.EditDmp);
//GK: First get the right client
FileTransformerRepository repository = getRepository(repositoryId);
if (repository == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{format, FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileTransformerRepository repository = this.getRepository(repositoryId);
if (repository == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{format, FileTransformerRepository.class.getSimpleName()}, LocaleContextHolder.getLocale()));
//GK: Second get the Target Data Management Plan
DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).ids(descriptionId);
DescriptionModel descriptionFileTransformerModel = this.builderFactory.builder(DescriptionCommonModelBuilder.class).setRepositoryId(repository.getConfiguration().getFileTransformerId()).useSharedStorage(repository.getConfiguration().isUseSharedStorage()).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermission).build(query.first());
if (descriptionFileTransformerModel == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{descriptionId, Description.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (descriptionFileTransformerModel == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{descriptionId, Description.class.getSimpleName()}, LocaleContextHolder.getLocale()));
FileEnvelopeModel fileEnvelope = repository.exportDescription(descriptionFileTransformerModel, format);
org.opencdmp.model.file.FileEnvelope result = new org.opencdmp.model.file.FileEnvelope();
byte[] data = repository.getConfiguration().isUseSharedStorage() ? storageFileService.readByFileRefAsBytesSafe(fileEnvelope.getFileRef(), StorageType.Transformer) : fileEnvelope.getFile(); //TODO: shared storage should be per repository
byte[] data = repository.getConfiguration().isUseSharedStorage() ? this.storageFileService.readByFileRefAsBytesSafe(fileEnvelope.getFileRef(), StorageType.Transformer) : fileEnvelope.getFile(); //TODO: shared storage should be per repository
result.setFile(data);
result.setFilename(fileEnvelope.getFilename());
return result;

View File

@ -173,10 +173,6 @@ export class DmpService {
return this.httpClient.get(`${this.apiBase}/${id}/export/${format}`, { responseType: 'blob', observe: 'response', headers: this.headers });
}
public downloadPDF(id: string): Observable<HttpResponse<Blob>> {
let headerPdf: HttpHeaders = this.headers.set('Content-Type', 'application/pdf')
return this.httpClient.get(`${this.apiBase}/${id}/export/Pdf`, { responseType: 'blob', observe: 'response', headers: headerPdf });
}
// public downloadJson(id: string): Observable<HttpResponse<Blob>> {
// return this.httpClient.get(this.actionUrl + 'rda/' + id, { responseType: 'blob', observe: 'response' });

View File

@ -9,6 +9,7 @@ import { FileUtils } from '../utilities/file-utils.service';
import { AuthService } from '../auth/auth.service';
import { RepositoryFileFormat } from '@app/core/model/file/file-format.model';
import { FileTransformerEntityType } from '@app/core/common/enum/file-transformer-entity-type';
import { DmpService } from '../dmp/dmp.service';
@Injectable()
export class FileTransformerService extends BaseService {
@ -17,12 +18,21 @@ export class FileTransformerService extends BaseService {
private fileTransformerHttpService: FileTransformerHttpService,
private matomoService: MatomoService,
private fileUtils: FileUtils,
private dmpService: DmpService,
private authentication: AuthService,
) { super(); }
private _initialized: boolean = false;
private _loading: boolean = false;
private xmlExportRepo: RepositoryFileFormat = {
entityTypes: [FileTransformerEntityType.Description, FileTransformerEntityType.Dmp],
format: "xml",
hasLogo: true,
icon: "fa-file-code-o",
repositoryId: "app_xml_export"
}
private _availableFormats: RepositoryFileFormat[] = [];
get availableFormats(): RepositoryFileFormat[] {
if (!this.authentication.currentAccountIsAuthenticated()){
@ -49,6 +59,7 @@ export class FileTransformerService extends BaseService {
return [];
})).subscribe(items => {
this._availableFormats = items;
this._availableFormats.push(this.xmlExportRepo)
this._loading = false;
this._initialized = true;
});
@ -56,18 +67,29 @@ export class FileTransformerService extends BaseService {
exportDmp(id: Guid, repositoryId: string, format: string) {
this._loading = true;
this.fileTransformerHttpService.exportDmp(id, repositoryId, format).pipe(takeUntil(this._destroyed), catchError((error) => {
this._loading = false;
return null;
})).subscribe(result => {
if (result !== null) {
const blob = new Blob([result.body], { type: 'application/octet-stream' });
const filename = this.fileUtils.getFilenameFromContentDispositionHeader(result.headers.get('Content-Disposition'));
if (repositoryId == this.xmlExportRepo.repositoryId) {
this.dmpService.downloadXML(id)
.pipe(takeUntil(this._destroyed))
.subscribe(response => {
const blob = new Blob([response.body], { type: 'application/xml' });
const filename = this.fileUtils.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition'));
FileSaver.saveAs(blob, filename);
this.matomoService.trackDownload('dmps', format, id.toString());
}
});
});
} else {
this.fileTransformerHttpService.exportDmp(id, repositoryId, format).pipe(takeUntil(this._destroyed), catchError((error) => {
this._loading = false;
return null;
})).subscribe(result => {
if (result !== null) {
const blob = new Blob([result.body], { type: 'application/octet-stream' });
const filename = this.fileUtils.getFilenameFromContentDispositionHeader(result.headers.get('Content-Disposition'));
FileSaver.saveAs(blob, filename);
this.matomoService.trackDownload('dmps', format, id.toString());
}
});
}
}
exportDescription(id: Guid, repositoryId: string, format: string) {

View File

@ -434,18 +434,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
});
}
downloadPDF(id: string) {
this.dmpService.downloadPDF(id)
.pipe(takeUntil(this._destroyed))
.subscribe(response => {
const blob = new Blob([response.body], { type: 'application/pdf' });
const filename = this.fileUtils.getFilenameFromContentDispositionHeader(response.headers.get('Content-Disposition'));
FileSaver.saveAs(blob, filename);
this.matomoService.trackDownload('dmps', "pdf", id);
});
}
downloadJson(id: string) {
//TODO: add this
// this.dmpService.downloadJson(id)

View File

@ -75,7 +75,7 @@ You can add one or more **fields** by clicking the `Add Field` button. For every
For a field you can specify:
- **Field Type**: There are three field types available. `System`, `External Reference` and `Custom`. There is more information available in the [Field Types](/docs/documentation/administration/blueprints/field-types) section.
- **Field Type**: There are three field types available. `System`, `External Reference` and `Custom`. There is more information available in the [Field Types](/docs/documentation/administration/blueprints/field-types?t=blueprint) section.
- **System Field**: The specific system field we want to add. <br/>*Only applicable if we add a field of type `System`.*
- **Reference Type**: The type of external reference we want to add. For more information, you can refer to the [Reference Types](/docs/documentation/administration/reference-types) section of our docs.<br/>*Only applicable if we add a field of type `External Reference`.*
- **Label**: A label for the field.

View File

@ -1 +1,44 @@
TODO: Add info about field types
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
In general, there are tree categories of fields that can be used.
- **System**: These are predefined fields that refer to system or specification information when filled by the end users. The available system fields are the following:
- **Title**: Refers to a title of an entity.
- **Description**: Refers to a description of an entity.
- **Language**: Refers to the language to be used. The languages being displayed to the end user are discussed [here](/docs/documentation/administration/languages).
- **Contact**: Refers to contact information about who should be responsible for the entity.
- **Access**: Indicates if an entity is publicly available. The end user will have to select between `Public` or `Restricted`.
- **User**: Refers to users registered to the platform.
- **External Reference**: These are fields that connect to a locally defined or an external source (an external API in most cases). There is more information available in the [Reference Types](/docs/documentation/administration/reference-types) section.
- **Custom**: These are generic fields that can be added to provide any type of information. The available data types are the following:
- **Text**
- **Rich Text**
- **Date**
- **Number**
:::info
Let's explore some specifics based on where these fields are getting setup.
<Tabs queryString="t">
<TabItem value="blueprint" label="Blueprints">
In the case of [plan blueprints](/docs/documentation/administration/blueprints/) you define the field you want by making two choices, what is the field category and then what is the system field type or the reference type or the data type respectively.
</TabItem>
<TabItem value="template" label="Description Templates">
In the case of [description templates](/docs/documentation/administration/templates/) the field type options are 'combined' in one dropdown control. The only difference here is that the options are separated inside that single dropdown based on the field category.
In the case of custom fields, you can specify the UI control that will be used in the forms. The elements that are supported are the following:
- **Text Area**: A regular text area (multiple lines)
- **Rich Text Area**: A rich text editor
- **Free Text**: A regular text box (one line)
- **File Upload**
- **Switch**
- **Radio Box**
- **Select**
- **Checkbox**
- **Date Picker**
</TabItem>
</Tabs>
:::

View File

@ -1 +1,137 @@
TODO: Add info about semantics
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
:::info
By **Semantics** we mean a relation a field can have with a part of a data archive specification. When the users try to add semantics, a list of suggestions drops down, containing semantics for `RDA` and `Zenodo`.
:::
These are the semantics suggestions.
<Tabs>
<TabItem value="rda" label="RDA" className="outer-tab">
<Tabs>
<TabItem value="plans" label="Plans">
- `rda.dmp.contact`
- `rda.dmp.contact.contact_id.identifier`
- `rda.dmp.contact.contact_id.type`
- `rda.dmp.contact.mbox`
- `rda.dmp.contact.name`
- `rda.dmp.contributor`
- `rda.dmp.contributor.contributor_id.identifier`
- `rda.dmp.contributor.contributor_id.type`
- `rda.dmp.contributor.mbox`
- `rda.dmp.contributor.name`
- `rda.dmp.contributor.role`
- `rda.dmp.cost`
- `rda.dmp.cost.currency_code`
- `rda.dmp.cost.description`
- `rda.dmp.cost.title`
- `rda.dmp.cost.value`
- `rda.dmp.created`
- `rda.dmp.description`
- `rda.dmp.dmp_id`
- `rda.dmp.dmp_id.identifier`
- `rda.dmp.dmp_id.type`
- `rda.dmp.ethical_issues_description`
- `rda.dmp.ethical_issues_exist`
- `rda.dmp.ethical_issues_report`
- `rda.dmp.language`
- `rda.dmp.modified`
- `rda.dmp.project`
- `rda.dmp.project.description`
- `rda.dmp.project.end`
- `rda.dmp.project.funding`
- `rda.dmp.project.funding.funder_id.identifier`
- `rda.dmp.project.funding.funder_id.type`
- `rda.dmp.project.funding.funding_status`
- `rda.dmp.project.funding.grant_id.identifier`
- `rda.dmp.project.funding.grant_id.type`
- `rda.dmp.project.start`
- `rda.dmp.dmp.project.title`
- `rda.dmp.title`
</TabItem>
<TabItem value="descriptions" label="Descriptions">
- `rda.dataset.data_quality_assurance`
- `rda.dataset.distribution.access_url`
- `rda.dataset.distribution.available_until`
- `rda.dataset.distribution.byte_size`
- `rda.dataset.distribution.data_access`
- `rda.dataset.distribution.description`
- `rda.dataset.distribution.download_url`
- `rda.dataset.distribution.format`
- `rda.dataset.distribution.host.availability`
- `rda.dataset.distribution.host.backup_frequency`
- `rda.dataset.distribution.host.backup_type`
- `rda.dataset.distribution.host.certified_with`
- `rda.dataset.distribution.host.description`
- `rda.dataset.distribution.host.geo_location`
- `rda.dataset.distribution.host.pid_system`
- `rda.dataset.distribution.host.storage_type`
- `rda.dataset.distribution.host.supports_versioning`
- `rda.dataset.distribution.host.title`
- `rda.dataset.distribution.host.url`
- `rda.dataset.distribution.license.license_ref`
- `rda.dataset.distribution.license.start_date`
- `rda.dataset.distribution.title`
- `rda.dataset.keyword`
- `rda.dataset.language`
- `rda.dataset.metadata.description`
- `rda.dataset.metadata.language`
- `rda.dataset.metadata.metadata_standard_id`
- `rda.dataset.metadata.metadata_standard_id.identifier`
- `rda.dataset.metadata.metadata_standard_id.type`
- `rda.dataset.personal_data`
- `rda.dataset.preservation_statement`
- `rda.dataset.security_and_privacy`
- `rda.dataset.security_and_privacy.description`
- `rda.dataset.security_and_privacy.title`
- `rda.dataset.sensitive_data`
- `rda.dataset.technical_resource.description`
- `rda.dataset.technical_resource.name`
- `rda.dataset.title`
- `rda.dataset.type`
- `rda.dataset.issued`
- `rda.dataset.dataset_id`
- `rda.dataset.dataset_id.identifier`
- `rda.dataset.dataset_id.type`
- `rda.dataset.description`
</TabItem>
</Tabs>
</TabItem>
<TabItem value="zenodo" label="Zenodo">
- `zenodo.related_identifiers.isCitedBy`
- `zenodo.related_identifiers.cites`
- `zenodo.related_identifiers.isSupplementTo`
- `zenodo.related_identifiers.isSupplementedBy`
- `zenodo.related_identifiers.isContinuedBy`
- `zenodo.related_identifiers.continues`
- `zenodo.related_identifiers.isDescribedBy`
- `zenodo.related_identifiers.describes`
- `zenodo.related_identifiers.hasMetadata`
- `zenodo.related_identifiers.isMetadataFor`
- `zenodo.related_identifiers.isNewVersionOf`
- `zenodo.related_identifiers.isPreviousVersionOf`
- `zenodo.related_identifiers.isPartOf`
- `zenodo.related_identifiers.hasPart`
- `zenodo.related_identifiers.isReferencedBy`
- `zenodo.related_identifiers.references`
- `zenodo.related_identifiers.isDocumentedBy`
- `zenodo.related_identifiers.documents`
- `zenodo.related_identifiers.isCompiledBy`
- `zenodo.related_identifiers.compiles`
- `zenodo.related_identifiers.isVariantFormOf`
- `zenodo.related_identifiers.isOriginalFormof`
- `zenodo.related_identifiers.isIdenticalTo`
- `zenodo.related_identifiers.isAlternateIdentifier`
- `zenodo.related_identifiers.isReviewedBy`
- `zenodo.related_identifiers.reviews`
- `zenodo.related_identifiers.isDerivedFrom`
- `zenodo.related_identifiers.isSourceOf`
- `zenodo.related_identifiers.requires`
- `zenodo.related_identifiers.isRequiredBy`
- `zenodo.related_identifiers.isObsoletedBy`
- `zenodo.related_identifiers.obsoletes`
</TabItem>
</Tabs>

View File

@ -3,4 +3,4 @@ sidebar_position: 11
description: Configure the tenant you are logged in with
---
# Tenant configuration
# Tenant Configuration

View File

@ -3,8 +3,8 @@ import type { Config } from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
const config: Config = {
title: 'OpenDMP',
tagline: 'OpenDMP',
title: 'OpenCDMP',
tagline: 'OpenCDMP Docs',
favicon: 'img/favicon.ico',
// Set the production url of your site here
@ -58,9 +58,9 @@ const config: Config = {
// Replace with your project's social card
image: 'img/docusaurus-social-card.jpg',
navbar: {
title: 'OpenDMP',
title: 'OpenCDMP',
logo: {
alt: 'OpenDMP Logo',
alt: 'OpenCDMP Logo',
src: 'img/logo.svg',
},
items: [
@ -78,7 +78,7 @@ const config: Config = {
},
{
href: 'https://test4.opendmp.eu/splash/',
label: 'Visit OpenDMP',
label: 'Visit OpenCDMP',
position: 'right',
},
],
@ -138,7 +138,7 @@ const config: Config = {
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} OpenDMP. Built with Docusaurus.`,
copyright: `Copyright © ${new Date().getFullYear()} OpenCDMP. Built with Docusaurus.`,
},
prism: {
theme: prismThemes.github,

View File

@ -28,3 +28,7 @@
--ifm-color-primary-lightest: #4fddbf;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}
.outer-tab {
margin-left: 1rem;
}