diff --git a/dmp-backend/core/pom.xml b/dmp-backend/core/pom.xml
index fe0ba767e..6f863585b 100644
--- a/dmp-backend/core/pom.xml
+++ b/dmp-backend/core/pom.xml
@@ -32,7 +32,7 @@
gr.cite
validation
- 3.0.2
+ 3.0.3
gr.cite
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/enums/FieldType.java b/dmp-backend/core/src/main/java/eu/eudat/commons/enums/FieldType.java
index 7f5ba87b2..d3fe953ba 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/commons/enums/FieldType.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/enums/FieldType.java
@@ -81,4 +81,34 @@ public enum FieldType implements DatabaseEnum {
public static FieldType of(String i) {
return map.get(i);
}
+
+ public static boolean isNotImplemented(FieldType fieldType){
+ return fieldType.equals(FieldType.EXTERNAL_SELECT) || fieldType.equals(FieldType.INTERNAL_DMP_ENTRIES_RESEARCHERS) || fieldType.equals(FieldType.INTERNAL_DMP_ENTRIES_DMPS) ||
+ fieldType.equals(FieldType.INTERNAL_DMP_ENTRIES_DATASETS);
+ }
+
+ public static boolean isReferenceType(FieldType fieldType){
+ return fieldType.equals(FieldType.ORGANIZATIONS) || fieldType.equals(FieldType.RESEARCHERS) || fieldType.equals(FieldType.SERVICES) ||
+ fieldType.equals(FieldType.REGISTRIES) || fieldType.equals(FieldType.PUBLICATIONS) || fieldType.equals(FieldType.TAXONOMIES)||
+ fieldType.equals(FieldType.LICENSES) || fieldType.equals(FieldType.DATA_REPOSITORIES) || fieldType.equals(FieldType.PUB_REPOSITORIES)||
+ fieldType.equals(FieldType.JOURNAL_REPOSITORIES) || fieldType.equals(FieldType.EXTERNAL_DATASETS);
+ }
+
+ public static boolean isTextType(FieldType fieldType){
+ return fieldType.equals(FieldType.FREE_TEXT) || fieldType.equals(FieldType.CHECK_BOX) || fieldType.equals(FieldType.TEXT_AREA) ||
+ fieldType.equals(FieldType.RICH_TEXT_AREA) || fieldType.equals(FieldType.UPLOAD) || fieldType.equals(FieldType.BOOLEAN_DECISION) ||
+ fieldType.equals(FieldType.RADIO_BOX) || fieldType.equals(FieldType.CURRENCY);
+ }
+
+ public static boolean isTextListType(FieldType fieldType){
+ return fieldType.equals(FieldType.SELECT) || fieldType.equals(FieldType.TAGS);
+ }
+
+ public static boolean isDateType(FieldType fieldType){
+ return fieldType.equals(FieldType.DATE_PICKER);
+ }
+
+ public static boolean isExternalIdentifierType(FieldType fieldType){
+ return fieldType.equals(FieldType.VALIDATION) || fieldType.equals(FieldType.DATASET_IDENTIFIER) ;
+ }
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/ExternalIdentifierEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/ExternalIdentifierEntity.java
new file mode 100644
index 000000000..42e8cc744
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/ExternalIdentifierEntity.java
@@ -0,0 +1,25 @@
+package eu.eudat.commons.types.description;
+
+public class ExternalIdentifierEntity {
+
+ private String identifier;
+
+ private String type;
+
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ public void setIdentifier(String identifier) {
+ this.identifier = identifier;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/FieldEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/FieldEntity.java
index e8e060723..0e5dac41a 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/FieldEntity.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/description/FieldEntity.java
@@ -1,13 +1,44 @@
package eu.eudat.commons.types.description;
-public class FieldEntity {
- private String value;
- public String getValue() {
- return value;
+import java.time.Instant;
+import java.util.List;
+
+public class FieldEntity {
+ private String textValue;
+ private List textListValue;
+ private Instant dateValue;
+ private ExternalIdentifierEntity externalIdentifier;
+
+ public String getTextValue() {
+ return textValue;
}
- public void setValue(String value) {
- this.value = value;
+ public void setTextValue(String textValue) {
+ this.textValue = textValue;
+ }
+
+ public List getTextListValue() {
+ return textListValue;
+ }
+
+ public void setTextListValue(List textListValue) {
+ this.textListValue = textListValue;
+ }
+
+ public Instant getDateValue() {
+ return dateValue;
+ }
+
+ public void setDateValue(Instant dateValue) {
+ this.dateValue = dateValue;
+ }
+
+ public ExternalIdentifierEntity getExternalIdentifier() {
+ return externalIdentifier;
+ }
+
+ public void setExternalIdentifier(ExternalIdentifierEntity externalIdentifier) {
+ this.externalIdentifier = externalIdentifier;
}
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptionreference/DescriptionReferenceDataEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptionreference/DescriptionReferenceDataEntity.java
new file mode 100644
index 000000000..b63a2097b
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptionreference/DescriptionReferenceDataEntity.java
@@ -0,0 +1,15 @@
+package eu.eudat.commons.types.descriptionreference;
+
+import java.util.UUID;
+
+public class DescriptionReferenceDataEntity {
+ private String fieldId;
+
+ public String getFieldId() {
+ return fieldId;
+ }
+
+ public void setFieldId(String fieldId) {
+ this.fieldId = fieldId;
+ }
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/DefinitionEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/DefinitionEntity.java
index e88d6bc3e..5d6fda2e7 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/DefinitionEntity.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/DefinitionEntity.java
@@ -39,6 +39,11 @@ public class DefinitionEntity {
}
return fieldSetsEntities;
}
+
+ public List getFieldSetById(String id) {
+ return this.getAllFieldSets().stream().filter(x-> id.equals(x.getId())).toList();
+ }
+
public List getFieldById(String id) {
return this.getAllField().stream().filter(x-> id.equals(x.getId())).toList();
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/FieldSetEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/FieldSetEntity.java
index 11f453f73..dc70c2a0a 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/FieldSetEntity.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/descriptiontemplate/FieldSetEntity.java
@@ -104,4 +104,8 @@ public class FieldSetEntity {
public List getAllField() {
return this.getFields() == null ? new ArrayList<>() : this.getFields();
}
+
+ public List getFieldById(String id) {
+ return this.getAllField().stream().filter(x-> id.equals(x.getId())).toList();
+ }
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java
index 837c446b2..e9456005f 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/BaseValidator.java
@@ -49,6 +49,20 @@ public abstract class BaseValidator extends AbstractValidator {
return value == null;
}
+ protected boolean isBoolean(String value) {
+ return value != null && Arrays.stream(new String[]{"true", "false"})
+ .anyMatch(b -> b.equalsIgnoreCase(value));
+ }
+
+ protected boolean isUUID(String value) {
+ try {
+ UUID.fromString(value);
+ return true;
+ } catch (Exception e){
+ return false;
+ }
+ }
+
protected Boolean isNull(Collection> value) {
return value == null;
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/DescriptionReference.java b/dmp-backend/core/src/main/java/eu/eudat/model/DescriptionReference.java
index 4d5856b36..4e5398702 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/model/DescriptionReference.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/model/DescriptionReference.java
@@ -1,6 +1,8 @@
package eu.eudat.model;
import eu.eudat.commons.enums.IsActive;
+import eu.eudat.model.descriptionreference.DescriptionReferenceData;
+import eu.eudat.model.dmpreference.DmpReferenceData;
import java.time.Instant;
import java.util.UUID;
@@ -35,6 +37,9 @@ public class DescriptionReference {
public static final String _hash = "hash";
+ private DescriptionReferenceData data;
+ public static final String _data = "data";
+
public UUID getId() {
return id;
}
@@ -83,6 +88,14 @@ public class DescriptionReference {
this.isActive = isActive;
}
+ public DescriptionReferenceData getData() {
+ return data;
+ }
+
+ public void setData(DescriptionReferenceData data) {
+ this.data = data;
+ }
+
public String getHash() {
return hash;
}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java
index 66629b89d..5d7c0a6d4 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionBuilder.java
@@ -2,9 +2,12 @@ package eu.eudat.model.builder;
import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.commons.JsonHandlingService;
+import eu.eudat.commons.XmlHandlingService;
import eu.eudat.commons.types.description.PropertyDefinitionEntity;
+import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity;
import eu.eudat.convention.ConventionService;
import eu.eudat.data.DescriptionEntity;
+import eu.eudat.data.DescriptionTemplateEntity;
import eu.eudat.data.UserRoleEntity;
import eu.eudat.model.*;
import eu.eudat.model.builder.descriptionpropertiesdefinition.PropertyDefinitionBuilder;
@@ -33,18 +36,20 @@ public class DescriptionBuilder extends BaseBuilder authorize = EnumSet.of(AuthorizationFlags.None);
@Autowired
public DescriptionBuilder(
- ConventionService conventionService,
- QueryFactory queryFactory,
- BuilderFactory builderFactory, JsonHandlingService jsonHandlingService) {
+ ConventionService conventionService,
+ QueryFactory queryFactory,
+ BuilderFactory builderFactory, JsonHandlingService jsonHandlingService, XmlHandlingService xmlHandlingService) {
super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionBuilder.class)));
this.queryFactory = queryFactory;
this.builderFactory = builderFactory;
this.jsonHandlingService = jsonHandlingService;
+ this.xmlHandlingService = xmlHandlingService;
}
public DescriptionBuilder authorize(EnumSet values) {
@@ -78,6 +83,9 @@ public class DescriptionBuilder extends BaseBuilder userItemsMap = this.collectUsers(userFields, data);
FieldSet definitionPropertiesFields = fields.extractPrefixed(this.asPrefix(Description._properties));
+
+ Map definitionEntityMap = !definitionPropertiesFields.isEmpty() ? this.collectDescriptionTemplateDefinitions(data) : null;
+
List models = new ArrayList<>();
for (DescriptionEntity d : data) {
Description m = new Description();
@@ -98,7 +106,7 @@ public class DescriptionBuilder extends BaseBuilder collectDescriptionTemplateDefinitions(List data) throws MyApplicationException {
+ if (data.isEmpty())
+ return null;
+ this.logger.debug("checking related - {}", DefinitionEntity.class.getSimpleName());
+
+ Map itemMap = new HashMap<>();
+ DescriptionTemplateQuery q = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(this.authorize).ids(data.stream().map(DescriptionEntity::getDescriptionTemplateId).distinct().collect(Collectors.toList()));
+ List items = q.collectAs(new BaseFieldSet().ensure(eu.eudat.model.DescriptionTemplate._id).ensure(DescriptionTemplate._definition));
+ for (DescriptionTemplateEntity item : items){
+ DefinitionEntity definition =this.xmlHandlingService.fromXmlSafe(DefinitionEntity.class, item.getDefinition());
+ itemMap.put(item.getId(), definition);
+ }
+
+ return itemMap;
+ }
+
private Map collectDmps(FieldSet fields, List data) throws MyApplicationException {
if (fields.isEmpty() || data.isEmpty())
return null;
diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionReferenceBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionReferenceBuilder.java
index 4fa6bc883..2e4a6dabb 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionReferenceBuilder.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/DescriptionReferenceBuilder.java
@@ -1,11 +1,17 @@
package eu.eudat.model.builder;
import eu.eudat.authorization.AuthorizationFlags;
+import eu.eudat.commons.JsonHandlingService;
+import eu.eudat.commons.types.descriptionreference.DescriptionReferenceDataEntity;
+import eu.eudat.commons.types.dmpreference.DmpReferenceDataEntity;
import eu.eudat.convention.ConventionService;
import eu.eudat.data.DescriptionReferenceEntity;
import eu.eudat.model.Description;
import eu.eudat.model.DescriptionReference;
+import eu.eudat.model.DmpReference;
import eu.eudat.model.Reference;
+import eu.eudat.model.builder.descriptionreference.DescriptionReferenceDataBuilder;
+import eu.eudat.model.builder.dmpreference.DmpReferenceDataBuilder;
import eu.eudat.query.DescriptionQuery;
import eu.eudat.query.ReferenceQuery;
import gr.cite.tools.data.builder.BuilderFactory;
@@ -33,14 +39,16 @@ public class DescriptionReferenceBuilder extends BaseBuilder authorize = EnumSet.of(AuthorizationFlags.None);
+ private final JsonHandlingService jsonHandlingService;
@Autowired
public DescriptionReferenceBuilder(
- ConventionService conventionService,
- BuilderFactory builderFactory, QueryFactory queryFactory) {
+ ConventionService conventionService,
+ BuilderFactory builderFactory, QueryFactory queryFactory, JsonHandlingService jsonHandlingService) {
super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionReferenceBuilder.class)));
this.builderFactory = builderFactory;
this.queryFactory = queryFactory;
+ this.jsonHandlingService = jsonHandlingService;
}
public DescriptionReferenceBuilder authorize(EnumSet values) {
@@ -60,9 +68,10 @@ public class DescriptionReferenceBuilder extends BaseBuilder descriptionItemsMap = this.collectDescriptions(descriptionFields, data);
+
+ FieldSet dataFields = fields.extractPrefixed(this.asPrefix(DescriptionReference._data));
List models = new ArrayList<>();
-
for (DescriptionReferenceEntity d : data) {
DescriptionReference m = new DescriptionReference();
if (fields.hasField(this.asIndexer(DescriptionReference._id))) m.setId(d.getId());
@@ -72,7 +81,10 @@ public class DescriptionReferenceBuilder extends BaseBuilder values = objectMapper.readValue(d.getValue(), new TypeReference>() {});
+ List