DmpBlueprint feractor

This commit is contained in:
Efstratios Giannopoulos 2023-11-02 14:13:13 +02:00
parent c3808b5548
commit 732dfd9bfb
16 changed files with 390 additions and 408 deletions

View File

@ -0,0 +1,22 @@
package eu.eudat.commons.types.dmpblueprint.importexport;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class BlueprintImportExport {
@XmlElement(name = "definition")
private DefinitionImportExport dmpBlueprintDefinition;
public DefinitionImportExport getDmpBlueprintDefinition() {
return dmpBlueprintDefinition;
}
public void setDmpBlueprintDefinition(DefinitionImportExport dmpBlueprintDefinition) {
this.dmpBlueprintDefinition = dmpBlueprintDefinition;
}
}

View File

@ -0,0 +1,21 @@
package eu.eudat.commons.types.dmpblueprint.importexport;
import jakarta.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
public class DefinitionImportExport {
@XmlElementWrapper(name = "sections")
@XmlElement(name = "section")
private List<SectionImportExport> sections;
public List<SectionImportExport> getSections() {
return sections;
}
public void setSections(List<SectionImportExport> sections) {
this.sections = sections;
}
}

View File

@ -1,21 +1,23 @@
package eu.eudat.commons.types.dmpblueprint.importmodel; package eu.eudat.commons.types.dmpblueprint.importexport;
import eu.eudat.commons.types.dmpblueprint.DescriptionTemplateEntity; import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.UUID; @XmlAccessorType(XmlAccessType.FIELD)
public class DescriptionTemplateImportExport {
@XmlRootElement(name = "descriptionTemplate")
public class DescriptionTemplate {
private String id;
private String descriptionTemplateId;
private String label;
private int minMultiplicity;
private int maxMultiplicity;
@XmlAttribute(name = "id") @XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "descriptionTemplateId")
private String descriptionTemplateId;
@XmlAttribute(name = "label")
private String label;
@XmlAttribute(name = "minMultiplicity")
private int minMultiplicity;
@XmlAttribute(name = "maxMultiplicity")
private int maxMultiplicity;
public String getId() { public String getId() {
return id; return id;
} }
@ -24,7 +26,6 @@ public class DescriptionTemplate {
this.id = id; this.id = id;
} }
@XmlAttribute(name = "descriptionTemplateId")
public String getDescriptionTemplateId() { public String getDescriptionTemplateId() {
return descriptionTemplateId; return descriptionTemplateId;
} }
@ -33,7 +34,6 @@ public class DescriptionTemplate {
this.descriptionTemplateId = descriptionTemplateId; this.descriptionTemplateId = descriptionTemplateId;
} }
@XmlAttribute(name = "label")
public String getLabel() { public String getLabel() {
return label; return label;
} }
@ -42,7 +42,6 @@ public class DescriptionTemplate {
this.label = label; this.label = label;
} }
@XmlAttribute(name = "minMultiplicity")
public int getMinMultiplicity() { public int getMinMultiplicity() {
return minMultiplicity; return minMultiplicity;
} }
@ -51,7 +50,6 @@ public class DescriptionTemplate {
this.minMultiplicity = minMultiplicity; this.minMultiplicity = minMultiplicity;
} }
@XmlAttribute(name = "maxMultiplicity")
public int getMaxMultiplicity() { public int getMaxMultiplicity() {
return maxMultiplicity; return maxMultiplicity;
} }
@ -60,14 +58,5 @@ public class DescriptionTemplate {
this.maxMultiplicity = maxMultiplicity; this.maxMultiplicity = maxMultiplicity;
} }
public DescriptionTemplateEntity toEntity() {
DescriptionTemplateEntity descriptionTemplate = new DescriptionTemplateEntity();
descriptionTemplate.setId(UUID.fromString(this.id));
descriptionTemplate.setDescriptionTemplateId(UUID.fromString(this.descriptionTemplateId));
descriptionTemplate.setLabel(this.label);
descriptionTemplate.setMinMultiplicity(this.minMultiplicity);
descriptionTemplate.setMaxMultiplicity(this.maxMultiplicity);
return descriptionTemplate;
}
} }

View File

@ -1,26 +1,27 @@
package eu.eudat.commons.types.dmpblueprint.importmodel; package eu.eudat.commons.types.dmpblueprint.importexport;
import eu.eudat.commons.enums.DmpBlueprintExtraFieldDataType; import jakarta.xml.bind.annotation.XmlAccessType;
import eu.eudat.commons.enums.DmpBlueprintFieldCategory; import jakarta.xml.bind.annotation.XmlAccessorType;
import eu.eudat.commons.types.dmpblueprint.ExtraFieldEntity;
import eu.eudat.commons.types.dmpblueprint.FieldEntity;
import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.UUID; @XmlAccessorType(XmlAccessType.FIELD)
public class ExtraFieldImportExport {
@XmlRootElement(name = "extraField")
public class ExtraField {
private String id;
private short type;
private String label;
private String placeholder;
private String description;
private int ordinal;
private boolean required;
@XmlAttribute(name = "id") @XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "type")
private short type;
@XmlAttribute(name = "label")
private String label;
@XmlAttribute(name = "placeholder")
private String placeholder;
@XmlAttribute(name = "description")
private String description;
@XmlAttribute(name = "ordinal")
private int ordinal;
@XmlAttribute(name = "required")
private boolean required;
public String getId() { public String getId() {
return id; return id;
} }
@ -29,7 +30,6 @@ public class ExtraField {
this.id = id; this.id = id;
} }
@XmlAttribute(name = "type")
public short getType() { public short getType() {
return type; return type;
} }
@ -38,7 +38,6 @@ public class ExtraField {
this.type = type; this.type = type;
} }
@XmlAttribute(name = "label")
public String getLabel() { public String getLabel() {
return label; return label;
} }
@ -47,7 +46,6 @@ public class ExtraField {
this.label = label; this.label = label;
} }
@XmlAttribute(name = "placeholder")
public String getPlaceholder() { public String getPlaceholder() {
return placeholder; return placeholder;
} }
@ -56,7 +54,6 @@ public class ExtraField {
this.placeholder = placeholder; this.placeholder = placeholder;
} }
@XmlAttribute(name = "description")
public String getDescription() { public String getDescription() {
return description; return description;
} }
@ -65,7 +62,6 @@ public class ExtraField {
this.description = description; this.description = description;
} }
@XmlAttribute(name = "ordinal")
public int getOrdinal() { public int getOrdinal() {
return ordinal; return ordinal;
} }
@ -74,7 +70,6 @@ public class ExtraField {
this.ordinal = ordinal; this.ordinal = ordinal;
} }
@XmlAttribute(name = "required")
public boolean isRequired() { public boolean isRequired() {
return required; return required;
} }
@ -83,17 +78,5 @@ public class ExtraField {
this.required = required; this.required = required;
} }
public FieldEntity toEntity() {
ExtraFieldEntity systemField = new ExtraFieldEntity();
systemField.setId(UUID.fromString(this.id));
systemField.setCategory(DmpBlueprintFieldCategory.Extra);
systemField.setType(DmpBlueprintExtraFieldDataType.of(this.type));
systemField.setLabel(this.label);
systemField.setPlaceholder(this.placeholder);
systemField.setDescription(this.description);
systemField.setOrdinal(this.ordinal);
systemField.setRequired(this.required);
return systemField;
}
} }

View File

@ -0,0 +1,94 @@
package eu.eudat.commons.types.dmpblueprint.importexport;
import jakarta.xml.bind.annotation.*;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
public class SectionImportExport {
@XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "label")
private String label;
@XmlAttribute(name = "description")
private String description;
@XmlAttribute(name = "ordinal")
private int ordinal;
@XmlElementWrapper(name = "systemFields")
@XmlElement(name = "systemField")
private List<SystemFieldImportExport> systemFields;
@XmlElementWrapper(name = "extraFields")
@XmlElement(name = "extraField")
private List<ExtraFieldImportExport> extraFields;
@XmlAttribute(name = "hasTemplates")
private boolean hasTemplates;
@XmlElementWrapper(name = "descriptionTemplates")
@XmlElement(name = "descriptionTemplate")
private List<DescriptionTemplateImportExport> descriptionTemplates;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getOrdinal() {
return ordinal;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
public List<SystemFieldImportExport> getSystemFields() {
return systemFields;
}
public void setSystemFields(List<SystemFieldImportExport> systemFields) {
this.systemFields = systemFields;
}
public List<ExtraFieldImportExport> getExtraFields() {
return extraFields;
}
public void setExtraFields(List<ExtraFieldImportExport> extraFields) {
this.extraFields = extraFields;
}
public boolean isHasTemplates() {
return hasTemplates;
}
public void setHasTemplates(boolean hasTemplates) {
this.hasTemplates = hasTemplates;
}
public List<DescriptionTemplateImportExport> getDescriptionTemplates() {
return descriptionTemplates;
}
public void setDescriptionTemplates(List<DescriptionTemplateImportExport> descriptionTemplates) {
this.descriptionTemplates = descriptionTemplates;
}
}

View File

@ -1,26 +1,27 @@
package eu.eudat.commons.types.dmpblueprint.importmodel; package eu.eudat.commons.types.dmpblueprint.importexport;
import eu.eudat.commons.enums.DmpBlueprintFieldCategory; import jakarta.xml.bind.annotation.XmlAccessType;
import eu.eudat.commons.enums.DmpBlueprintSystemFieldType; import jakarta.xml.bind.annotation.XmlAccessorType;
import eu.eudat.commons.types.dmpblueprint.FieldEntity;
import eu.eudat.commons.types.dmpblueprint.SystemFieldEntity;
import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.UUID; @XmlAccessorType(XmlAccessType.FIELD)
public class SystemFieldImportExport {
@XmlRootElement(name = "systemField")
public class SystemField {
private String id;
private short type;
private String label;
private String placeholder;
private String description;
private int ordinal;
private boolean required;
@XmlAttribute(name = "id") @XmlAttribute(name = "id")
private String id;
@XmlAttribute(name = "type")
private short type;
@XmlAttribute(name = "label")
private String label;
@XmlAttribute(name = "placeholder")
private String placeholder;
@XmlAttribute(name = "description")
private String description;
@XmlAttribute(name = "ordinal")
private int ordinal;
@XmlAttribute(name = "required")
private boolean required;
public String getId() { public String getId() {
return id; return id;
} }
@ -29,7 +30,6 @@ public class SystemField {
this.id = id; this.id = id;
} }
@XmlAttribute(name = "type")
public short getType() { public short getType() {
return type; return type;
} }
@ -38,7 +38,6 @@ public class SystemField {
this.type = type; this.type = type;
} }
@XmlAttribute(name = "label")
public String getLabel() { public String getLabel() {
return label; return label;
} }
@ -47,7 +46,6 @@ public class SystemField {
this.label = label; this.label = label;
} }
@XmlAttribute(name = "placeholder")
public String getPlaceholder() { public String getPlaceholder() {
return placeholder; return placeholder;
} }
@ -56,7 +54,6 @@ public class SystemField {
this.placeholder = placeholder; this.placeholder = placeholder;
} }
@XmlAttribute(name = "description")
public String getDescription() { public String getDescription() {
return description; return description;
} }
@ -65,7 +62,6 @@ public class SystemField {
this.description = description; this.description = description;
} }
@XmlAttribute(name = "ordinal")
public int getOrdinal() { public int getOrdinal() {
return ordinal; return ordinal;
} }
@ -74,7 +70,6 @@ public class SystemField {
this.ordinal = ordinal; this.ordinal = ordinal;
} }
@XmlAttribute(name = "required")
public boolean isRequired() { public boolean isRequired() {
return required; return required;
} }
@ -82,18 +77,4 @@ public class SystemField {
public void setRequired(boolean required) { public void setRequired(boolean required) {
this.required = required; this.required = required;
} }
public FieldEntity toEntity() {
SystemFieldEntity systemField = new SystemFieldEntity();
systemField.setId(UUID.fromString(this.id));
systemField.setCategory(DmpBlueprintFieldCategory.System);
systemField.setType(DmpBlueprintSystemFieldType.of(this.type));
systemField.setLabel(this.label);
systemField.setPlaceholder(this.placeholder);
systemField.setDescription(this.description);
systemField.setOrdinal(this.ordinal);
systemField.setRequired(this.required);
return systemField;
}
} }

View File

@ -1,21 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "descriptionTemplates")
public class DescriptionTemplates {
private List<DescriptionTemplate> descriptionTemplates;
@XmlElement(name = "descriptionTemplate")
public List<DescriptionTemplate> getDescriptionTemplates() {
return descriptionTemplates;
}
public void setDescriptionTemplates(List<DescriptionTemplate> descriptionTemplates) {
this.descriptionTemplates = descriptionTemplates;
}
}

View File

@ -1,25 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import eu.eudat.commons.types.dmpblueprint.DefinitionEntity;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "root")
public class DmpBlueprint {
private DmpBlueprintDefinition dmpBlueprintDefinition;
@XmlElement(name = "definition")
public DmpBlueprintDefinition getDmpBlueprintDefinition() {
return dmpBlueprintDefinition;
}
public void setDmpBlueprintDefinition(DmpBlueprintDefinition dmpBlueprintDefinition) {
this.dmpBlueprintDefinition = dmpBlueprintDefinition;
}
public DefinitionEntity toDefinitionEntity() {
return this.dmpBlueprintDefinition.toEntity();
}
}

View File

@ -1,37 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import eu.eudat.commons.types.dmpblueprint.DefinitionEntity;
import eu.eudat.commons.types.dmpblueprint.SectionEntity;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.LinkedList;
import java.util.List;
@XmlRootElement(name = "definition")
public class DmpBlueprintDefinition {
private Sections sections;
@XmlElement(name = "sections")
public Sections getSections() {
return sections;
}
public void setSections(Sections sections) {
this.sections = sections;
}
public DefinitionEntity toEntity() {
DefinitionEntity dmpBlueprint = new DefinitionEntity();
List<SectionEntity> dmpBlueprintSections = new LinkedList<>();
if (this.sections != null && this.sections.getSections() != null) {
for (Section section : this.sections.getSections()) {
dmpBlueprintSections.add(section.toEntity());
}
}
dmpBlueprint.setSections(dmpBlueprintSections);
return dmpBlueprint;
}
}

View File

@ -1,21 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "extraFields")
public class ExtraFields {
private List<ExtraField> extraFields;
@XmlElement(name = "extraField")
public List<ExtraField> getExtraFields() {
return extraFields;
}
public void setExtraFields(List<ExtraField> extraFields) {
this.extraFields = extraFields;
}
}

View File

@ -1,127 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import eu.eudat.commons.types.dmpblueprint.DescriptionTemplateEntity;
import eu.eudat.commons.types.dmpblueprint.FieldEntity;
import eu.eudat.commons.types.dmpblueprint.SectionEntity;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@XmlRootElement(name = "section")
public class Section {
private String id;
private String label;
private String description;
private int ordinal;
private SystemFields systemFields;
private ExtraFields extraFields;
private boolean hasTemplates;
private DescriptionTemplates descriptionTemplates;
@XmlAttribute(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlAttribute(name = "label")
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@XmlAttribute(name = "description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@XmlAttribute(name = "ordinal")
public int getOrdinal() {
return ordinal;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
@XmlElement(name = "systemFields")
public SystemFields getSystemFields() {
return systemFields;
}
public void setSystemFields(SystemFields systemFields) {
this.systemFields = systemFields;
}
@XmlElement(name = "extraFields")
public ExtraFields getExtraFields() {
return extraFields;
}
public void setExtraFields(ExtraFields extraFields) {
this.extraFields = extraFields;
}
@XmlAttribute(name = "hasTemplates")
public boolean isHasTemplates() {
return hasTemplates;
}
public void setHasTemplates(boolean hasTemplates) {
this.hasTemplates = hasTemplates;
}
@XmlElement(name = "descriptionTemplates")
public DescriptionTemplates getDescriptionTemplates() {
return descriptionTemplates;
}
public void setDescriptionTemplates(DescriptionTemplates descriptionTemplates) {
this.descriptionTemplates = descriptionTemplates;
}
public SectionEntity toEntity() {
SectionEntity section = new SectionEntity();
section.setId(UUID.fromString(this.id));
section.setLabel(this.label);
section.setDescription(this.description);
section.setOrdinal(this.ordinal);
section.setHasTemplates(this.hasTemplates);
List<FieldEntity> dmpBlueprintFieldModels = new LinkedList<>();
if (this.systemFields != null && this.systemFields.getSystemFields() != null) {
for (SystemField systemField : this.systemFields.getSystemFields()) {
dmpBlueprintFieldModels.add(systemField.toEntity());
}
}
if (this.extraFields != null&& this.extraFields.getExtraFields() != null) {
for (ExtraField extraField : this.extraFields.getExtraFields()) {
dmpBlueprintFieldModels.add(extraField.toEntity());
}
}
section.setFields(dmpBlueprintFieldModels);
List<DescriptionTemplateEntity> dmpBlueprintDescriptionTemplates = new LinkedList<>();
if (this.descriptionTemplates != null && this.descriptionTemplates.getDescriptionTemplates() != null) {
for (DescriptionTemplate descriptionTemplate : this.descriptionTemplates.getDescriptionTemplates()) {
dmpBlueprintDescriptionTemplates.add(descriptionTemplate.toEntity());
}
}
section.setDescriptionTemplates(dmpBlueprintDescriptionTemplates);
return section;
}
}

View File

@ -1,20 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "sections")
public class Sections {
private List<Section> sections;
@XmlElement(name = "section")
public List<Section> getSections() {
return sections;
}
public void setSections(List<Section> sections) {
this.sections = sections;
}
}

View File

@ -1,21 +0,0 @@
package eu.eudat.commons.types.dmpblueprint.importmodel;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "systemFields")
public class SystemFields {
private List<SystemField> systemFields;
@XmlElement(name = "systemField")
public List<SystemField> getSystemFields() {
return systemFields;
}
public void setSystemFields(List<SystemField> systemFields) {
this.systemFields = systemFields;
}
}

View File

@ -31,6 +31,6 @@ public interface DmpBlueprintService {
DmpBlueprint buildClone(UUID id, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException; DmpBlueprint buildClone(UUID id, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException;
ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException; 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; DmpBlueprint importXml(byte[] bytes, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException;
} }

View File

@ -4,11 +4,9 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.authorization.Permission; import eu.eudat.authorization.Permission;
import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.XmlHandlingService;
import eu.eudat.commons.enums.DmpBlueprintFieldCategory; import eu.eudat.commons.enums.*;
import eu.eudat.commons.enums.DmpBlueprintStatus;
import eu.eudat.commons.enums.DmpBlueprintSystemFieldType;
import eu.eudat.commons.enums.IsActive;
import eu.eudat.commons.types.dmpblueprint.*; import eu.eudat.commons.types.dmpblueprint.*;
import eu.eudat.commons.types.dmpblueprint.importexport.*;
import eu.eudat.convention.ConventionService; import eu.eudat.convention.ConventionService;
import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.data.DmpBlueprintEntity;
import eu.eudat.errorcode.ErrorThesaurusProperties; import eu.eudat.errorcode.ErrorThesaurusProperties;
@ -35,6 +33,7 @@ import gr.cite.tools.fieldset.BaseFieldSet;
import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.fieldset.FieldSet;
import gr.cite.tools.logging.LoggerService; import gr.cite.tools.logging.LoggerService;
import gr.cite.tools.logging.MapLogEntry; import gr.cite.tools.logging.MapLogEntry;
import gr.cite.tools.validation.ValidationService;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.JAXBException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -44,8 +43,6 @@ import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import javax.management.InvalidApplicationException; import javax.management.InvalidApplicationException;
@ -55,6 +52,7 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -77,6 +75,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
private final ResponseUtilsService responseUtilsService; private final ResponseUtilsService responseUtilsService;
private final XmlHandlingService xmlHandlingService; private final XmlHandlingService xmlHandlingService;
private final ErrorThesaurusProperties errors; private final ErrorThesaurusProperties errors;
private final ValidationService validationService;
@Autowired @Autowired
public DmpBlueprintServiceImpl( public DmpBlueprintServiceImpl(
@ -86,7 +85,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
BuilderFactory builderFactory, BuilderFactory builderFactory,
ConventionService conventionService, ConventionService conventionService,
MessageSource messageSource, QueryFactory queryFactory, MessageSource messageSource, QueryFactory queryFactory,
ResponseUtilsService responseUtilsService, XmlHandlingService xmlHandlingService, ErrorThesaurusProperties errors) { ResponseUtilsService responseUtilsService,
XmlHandlingService xmlHandlingService,
ErrorThesaurusProperties errors,
ValidationService validationService) {
this.entityManager = entityManager; this.entityManager = entityManager;
this.authorizationService = authorizationService; this.authorizationService = authorizationService;
this.deleterFactory = deleterFactory; this.deleterFactory = deleterFactory;
@ -97,8 +99,11 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
this.responseUtilsService = responseUtilsService; this.responseUtilsService = responseUtilsService;
this.xmlHandlingService = xmlHandlingService; this.xmlHandlingService = xmlHandlingService;
this.errors = errors; this.errors = errors;
this.validationService = validationService;
} }
//region Persist
public DmpBlueprint persist(DmpBlueprintPersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, JsonProcessingException, TransformerException, ParserConfigurationException { public DmpBlueprint persist(DmpBlueprintPersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, JsonProcessingException, TransformerException, ParserConfigurationException {
logger.debug(new MapLogEntry("persisting data").And("model", model).And("fields", fields)); logger.debug(new MapLogEntry("persisting data").And("model", model).And("fields", fields));
@ -143,7 +148,6 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
return data; return data;
} }
private @NotNull SectionEntity buildSectionEntity(SectionPersist persist){ private @NotNull SectionEntity buildSectionEntity(SectionPersist persist){
SectionEntity data = new SectionEntity(); SectionEntity data = new SectionEntity();
if (persist == null) return data; if (persist == null) return data;
@ -206,6 +210,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
return data; return data;
} }
//endregion
//region Delete
public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException { public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException {
logger.debug("deleting : {}", id); logger.debug("deleting : {}", id);
@ -214,6 +222,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
this.deleterFactory.deleter(DmpBlueprintDeleter.class).deleteAndSaveByIds(List.of(id)); this.deleterFactory.deleter(DmpBlueprintDeleter.class).deleteAndSaveByIds(List.of(id));
} }
//endregion
//region FieldInBlueprint
public boolean fieldInBlueprint(DmpBlueprintEntity dmpBlueprintEntity, DmpBlueprintSystemFieldType type) { public boolean fieldInBlueprint(DmpBlueprintEntity dmpBlueprintEntity, DmpBlueprintSystemFieldType type) {
DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(DefinitionEntity.class, dmpBlueprintEntity.getDefinition()); DefinitionEntity definition = this.xmlHandlingService.fromXmlSafe(DefinitionEntity.class, dmpBlueprintEntity.getDefinition());
@ -239,6 +251,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
return this.fieldInBlueprint(data, type); return this.fieldInBlueprint(data, type);
} }
//endregion
//region Clone
public DmpBlueprint buildClone(UUID id, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException { public DmpBlueprint buildClone(UUID id, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException {
logger.debug(new MapLogEntry("persisting data").And("id", id).And("fields", fields)); logger.debug(new MapLogEntry("persisting data").And("id", id).And("fields", fields));
@ -293,7 +309,11 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
model.setId(UUID.randomUUID()); model.setId(UUID.randomUUID());
} }
public ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException { //endregion
//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)); logger.debug(new MapLogEntry("persisting data").And("id", id));
this.authorizationService.authorizeForce(Permission.ExportDmpBlueprint); this.authorizationService.authorizeForce(Permission.ExportDmpBlueprint);
@ -301,45 +321,189 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale())); if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
DefinitionEntity dmpDefinition = this.xmlHandlingService.fromXml(DefinitionEntity.class, data.getDefinition()); DefinitionEntity dmpDefinition = this.xmlHandlingService.fromXml(DefinitionEntity.class, data.getDefinition());
String xml = this.buildExportXml(dmpDefinition); String xml = this.xmlHandlingService.toXml(this.definitionXmlToExport(dmpDefinition));
return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml"); return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml");
} }
private String buildExportXml(DefinitionEntity dmpDefinition) throws TransformerException, ParserConfigurationException { private DefinitionImportExport definitionXmlToExport(DefinitionEntity entity){
Document xmlDoc = this.xmlHandlingService.getDocument(); if (entity == null) return null;
Element root = xmlDoc.createElement("root"); DefinitionImportExport xml = new DefinitionImportExport();
Element definition = xmlDoc.createElement("definition"); List<SectionImportExport> dmpBlueprintSections = new ArrayList<>();
Element sections = xmlDoc.createElement("sections"); if (!this.conventionService.isListNullOrEmpty(entity.getSections())) {
for (SectionEntity section : dmpDefinition.getSections()) { for (SectionEntity section : entity.getSections()) {
sections.appendChild(section.toXml(xmlDoc)); dmpBlueprintSections.add(this.sectionXmlToExport(section));
} }
definition.appendChild(sections);
root.appendChild(definition);
xmlDoc.appendChild(root);
return this.xmlHandlingService.generateXml(xmlDoc);
} }
xml.setSections(dmpBlueprintSections);
return xml;
}
private SectionImportExport sectionXmlToExport(SectionEntity entity) {
SectionImportExport xml = new SectionImportExport();
xml.setId(entity.getId().toString());
xml.setLabel(entity.getLabel());
xml.setDescription(entity.getDescription());
xml.setOrdinal(entity.getOrdinal());
xml.setHasTemplates(entity.getHasTemplates());
List<SystemFieldImportExport> dmpBlueprintSystemFieldModels = new LinkedList<>();
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
for (SystemFieldEntity systemField : entity.getFields().stream().filter(x-> x.getCategory() == DmpBlueprintFieldCategory.System).map(x-> (SystemFieldEntity)x).toList()) {
dmpBlueprintSystemFieldModels.add(this.systemFieldXmlToExport(systemField));
}
}
xml.setSystemFields(dmpBlueprintSystemFieldModels);
List<ExtraFieldImportExport> dmpBlueprintExtraFieldModels = new LinkedList<>();
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
for (ExtraFieldEntity systemField : entity.getFields().stream().filter(x-> x.getCategory() == DmpBlueprintFieldCategory.Extra).map(x-> (ExtraFieldEntity)x).toList()) {
dmpBlueprintExtraFieldModels.add(this.extraFieldXmlToExport(systemField));
}
}
xml.setExtraFields(dmpBlueprintExtraFieldModels);
List<DescriptionTemplateImportExport> dmpBlueprintDescriptionTemplates = new LinkedList<>();
if (!this.conventionService.isListNullOrEmpty(entity.getDescriptionTemplates())) {
for (DescriptionTemplateEntity descriptionTemplate : entity.getDescriptionTemplates()) {
dmpBlueprintDescriptionTemplates.add(this.descriptionTemplateXmlToExport(descriptionTemplate));
}
}
xml.setDescriptionTemplates(dmpBlueprintDescriptionTemplates);
return xml;
}
private DescriptionTemplateImportExport descriptionTemplateXmlToExport(DescriptionTemplateEntity entity) {
DescriptionTemplateImportExport xml = new DescriptionTemplateImportExport();
xml.setId(entity.getId().toString());
xml.setDescriptionTemplateId(entity.getDescriptionTemplateId().toString());
xml.setLabel(entity.getLabel());
xml.setMinMultiplicity(entity.getMinMultiplicity());
xml.setMaxMultiplicity(entity.getMaxMultiplicity());
return xml;
}
private ExtraFieldImportExport extraFieldXmlToExport(ExtraFieldEntity entity) {
ExtraFieldImportExport xml = new ExtraFieldImportExport();
xml.setId(entity.getId().toString());
xml.setType(entity.getType().getValue());
xml.setLabel(entity.getLabel());
xml.setPlaceholder(entity.getPlaceholder());
xml.setDescription(entity.getDescription());
xml.setOrdinal(entity.getOrdinal());
xml.setRequired(entity.isRequired());
return xml;
}
private SystemFieldImportExport systemFieldXmlToExport(SystemFieldEntity entity) {
SystemFieldImportExport xml = new SystemFieldImportExport();
xml.setId(entity.getId().toString());
xml.setType(entity.getType().getValue());
xml.setLabel(entity.getLabel());
xml.setPlaceholder(entity.getPlaceholder());
xml.setDescription(entity.getDescription());
xml.setOrdinal(entity.getOrdinal());
xml.setRequired(entity.isRequired());
return xml;
}
//endregion
//region Import
public DmpBlueprint importXml(byte[] bytes, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException { public DmpBlueprint importXml(byte[] bytes, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException {
logger.debug(new MapLogEntry("import data").And("bytes", bytes).And("label", label).And("fields", fields)); logger.debug(new MapLogEntry("import data").And("bytes", bytes).And("label", label).And("fields", fields));
this.authorizationService.authorizeForce(Permission.ImportDmpBlueprint); this.authorizationService.authorizeForce(Permission.ImportDmpBlueprint);
eu.eudat.commons.types.dmpblueprint.importmodel.DmpBlueprint dmpDefinition = this.xmlHandlingService.fromXml(eu.eudat.commons.types.dmpblueprint.importmodel.DmpBlueprint.class, new String(bytes, StandardCharsets.UTF_8)); DmpBlueprintPersist persist = new DmpBlueprintPersist();
DmpBlueprintEntity data = new DmpBlueprintEntity();
data.setId(UUID.randomUUID());
data.setIsActive(IsActive.Active);
data.setCreatedAt(Instant.now());
data.setLabel(label); persist.setLabel(label);
data.setStatus(DmpBlueprintStatus.Draft); persist.setStatus(DmpBlueprintStatus.Draft);
data.setUpdatedAt(Instant.now());
data.setDefinition(this.xmlHandlingService.toXml(dmpDefinition.toDefinitionEntity()));
this.entityManager.persist(data); BlueprintImportExport dmpDefinition = this.xmlHandlingService.fromXml(BlueprintImportExport.class, new String(bytes, StandardCharsets.UTF_8));
if(dmpDefinition != null) persist.setDefinition(this.xmlDefinitionToPersist(dmpDefinition.getDmpBlueprintDefinition()));
this.entityManager.flush(); this.validationService.validateForce(persist);
return this.persist(persist, fields);
return this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrPermission).build(BaseFieldSet.build(fields, DmpBlueprint._id), data); }
}
private DefinitionPersist xmlDefinitionToPersist(DefinitionImportExport importXml){
if (importXml == null) return null;
DefinitionPersist persist = new DefinitionPersist();
List<SectionPersist> dmpBlueprintSections = new ArrayList<>();
if (!this.conventionService.isListNullOrEmpty(importXml.getSections())) {
for (SectionImportExport section : importXml.getSections()) {
dmpBlueprintSections.add(this.xmlSectionToPersist(section));
}
}
persist.setSections(dmpBlueprintSections);
return persist;
}
private SectionPersist xmlSectionToPersist(SectionImportExport importXml) {
SectionPersist persist = new SectionPersist();
persist.setId(UUID.fromString(importXml.getId()));
persist.setLabel(importXml.getLabel());
persist.setDescription(importXml.getDescription());
persist.setOrdinal(importXml.getOrdinal());
persist.setHasTemplates(importXml.isHasTemplates());
List<FieldPersist> dmpBlueprintFieldModels = new LinkedList<>();
if (!this.conventionService.isListNullOrEmpty(importXml.getSystemFields())) {
for (SystemFieldImportExport systemField : importXml.getSystemFields()) {
dmpBlueprintFieldModels.add(this.xmlSystemFieldToPersist(systemField));
}
}
if (!this.conventionService.isListNullOrEmpty(importXml.getExtraFields())) {
for (ExtraFieldImportExport extraField : importXml.getExtraFields()) {
dmpBlueprintFieldModels.add(this.xmlExtraFieldToPersist(extraField));
}
}
persist.setFields(dmpBlueprintFieldModels);
List<DescriptionTemplatePersist> dmpBlueprintDescriptionTemplates = new LinkedList<>();
if (!this.conventionService.isListNullOrEmpty(importXml.getDescriptionTemplates())) {
for (DescriptionTemplateImportExport descriptionTemplate : importXml.getDescriptionTemplates()) {
dmpBlueprintDescriptionTemplates.add(this.xmlDescriptionTemplateToPersist(descriptionTemplate));
}
}
persist.setDescriptionTemplates(dmpBlueprintDescriptionTemplates);
return persist;
}
private DescriptionTemplatePersist xmlDescriptionTemplateToPersist(DescriptionTemplateImportExport importXml) {
DescriptionTemplatePersist persist = new DescriptionTemplatePersist();
persist.setId(UUID.fromString(importXml.getId()));
persist.setDescriptionTemplateId(UUID.fromString(importXml.getDescriptionTemplateId()));
persist.setLabel(importXml.getLabel());
persist.setMinMultiplicity(importXml.getMinMultiplicity());
persist.setMaxMultiplicity(importXml.getMaxMultiplicity());
return persist;
}
private FieldPersist xmlExtraFieldToPersist(ExtraFieldImportExport importXml) {
ExtraFieldPersist persist = new ExtraFieldPersist();
persist.setId(UUID.fromString(importXml.getId()));
persist.setCategory(DmpBlueprintFieldCategory.Extra);
persist.setDataType(DmpBlueprintExtraFieldDataType.of(importXml.getType()));
persist.setLabel(importXml.getLabel());
persist.setPlaceholder(importXml.getPlaceholder());
persist.setDescription(importXml.getDescription());
persist.setOrdinal(importXml.getOrdinal());
persist.setRequired(importXml.isRequired());
return persist;
}
private FieldPersist xmlSystemFieldToPersist(SystemFieldImportExport importXml) {
SystemFieldPersist persist = new SystemFieldPersist();
persist.setId(UUID.fromString(importXml.getId()));
persist.setCategory(DmpBlueprintFieldCategory.System);
persist.setSystemFieldType(DmpBlueprintSystemFieldType.of(importXml.getType()));
persist.setLabel(importXml.getLabel());
persist.setPlaceholder(importXml.getPlaceholder());
persist.setDescription(importXml.getDescription());
persist.setOrdinal(importXml.getOrdinal());
persist.setRequired(importXml.isRequired());
return persist;
}
//endregion
} }

View File

@ -159,7 +159,7 @@ public class DmpBlueprintController {
} }
@RequestMapping(method = RequestMethod.GET, value = {"/xml/export/{id}"}, produces = "application/xml") @RequestMapping(method = RequestMethod.GET, value = {"/xml/export/{id}"}, produces = "application/xml")
public @ResponseBody ResponseEntity getXml(@PathVariable UUID id) throws JAXBException, ParserConfigurationException, IOException, TransformerException, InstantiationException, IllegalAccessException, SAXException { public @ResponseBody ResponseEntity getXml(@PathVariable UUID id) throws JAXBException, ParserConfigurationException, IOException, TransformerException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException {
logger.debug(new MapLogEntry("persisting" + DmpBlueprint.class.getSimpleName()).And("id", id)); logger.debug(new MapLogEntry("persisting" + DmpBlueprint.class.getSimpleName()).And("id", id));
ResponseEntity response = this.dmpBlueprintService.exportXml(id); ResponseEntity response = this.dmpBlueprintService.exportXml(id);