Resolving issues with validators, removing old validation methods
This commit is contained in:
parent
7ba374d844
commit
897d099c2c
|
@ -1,11 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import jakarta.validation.ConstraintValidator;
|
|
||||||
import jakarta.validation.ConstraintValidatorContext;
|
|
||||||
|
|
||||||
public class EnumNotNull implements ConstraintValidator<ValidEnum,Object> {
|
|
||||||
@Override
|
|
||||||
public boolean isValid(Object value, ConstraintValidatorContext context) {
|
|
||||||
return value != null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
|
|
||||||
import jakarta.validation.Constraint;
|
|
||||||
import jakarta.validation.Payload;
|
|
||||||
import java.lang.annotation.*;
|
|
||||||
|
|
||||||
@Constraint( validatedBy = { FieldNotNullIfOtherSetValidator.class } )
|
|
||||||
@Documented
|
|
||||||
@Target( { ElementType.TYPE } )
|
|
||||||
@Retention( RetentionPolicy.RUNTIME )
|
|
||||||
public @interface FieldNotNullIfOtherSet {
|
|
||||||
Class<?>[] groups() default {};
|
|
||||||
|
|
||||||
String notNullField() default "id";
|
|
||||||
String otherSetField() default "hash";
|
|
||||||
String failOn() default "hash";
|
|
||||||
|
|
||||||
String message() default "hash is required if id is set";
|
|
||||||
|
|
||||||
Class<? extends Payload>[] payload() default {};
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.old.FieldNotNullIfOtherSet;
|
|
||||||
import org.springframework.beans.BeanWrapperImpl;
|
|
||||||
|
|
||||||
import jakarta.validation.ConstraintValidator;
|
|
||||||
import jakarta.validation.ConstraintValidatorContext;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class FieldNotNullIfOtherSetValidator implements ConstraintValidator<FieldNotNullIfOtherSet, Object> {
|
|
||||||
|
|
||||||
private String notNullField;
|
|
||||||
private String otherSetField;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(FieldNotNullIfOtherSet constraintAnnotation) {
|
|
||||||
this.notNullField = constraintAnnotation.notNullField();
|
|
||||||
this.otherSetField = constraintAnnotation.otherSetField();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isValid(Object entity, ConstraintValidatorContext context) {
|
|
||||||
Object notNullValue = new BeanWrapperImpl(entity)
|
|
||||||
.getPropertyValue(this.notNullField);
|
|
||||||
Object otherSetValue = new BeanWrapperImpl(entity)
|
|
||||||
.getPropertyValue(this.otherSetField);
|
|
||||||
|
|
||||||
boolean hashIsString = Objects.equals(new BeanWrapperImpl(entity)
|
|
||||||
.getPropertyType(this.otherSetField), String.class);
|
|
||||||
|
|
||||||
boolean hashValueEmpty = otherSetValue == null || (hashIsString && ((String)otherSetValue).isBlank());
|
|
||||||
|
|
||||||
if (notNullValue != null && hashValueEmpty) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import jakarta.validation.Constraint;
|
|
||||||
import jakarta.validation.Payload;
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Constraint(validatedBy = FieldsValueMatchValidator.class)
|
|
||||||
@Target({ ElementType.TYPE })
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
public @interface FieldsValueMatch {
|
|
||||||
Class<?>[] groups() default {};
|
|
||||||
|
|
||||||
String field();
|
|
||||||
String fieldMatch();
|
|
||||||
String failOn();
|
|
||||||
|
|
||||||
String message() default "Fields values don't match!";
|
|
||||||
|
|
||||||
Class<? extends Payload>[] payload() default {};
|
|
||||||
|
|
||||||
@Target({ ElementType.TYPE })
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@interface List {
|
|
||||||
FieldsValueMatch[] value();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.old.FieldsValueMatch;
|
|
||||||
import org.springframework.beans.BeanWrapperImpl;
|
|
||||||
|
|
||||||
import jakarta.validation.ConstraintValidator;
|
|
||||||
import jakarta.validation.ConstraintValidatorContext;
|
|
||||||
|
|
||||||
public class FieldsValueMatchValidator implements ConstraintValidator<FieldsValueMatch, Object> {
|
|
||||||
|
|
||||||
private String field;
|
|
||||||
private String fieldMatch;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(FieldsValueMatch constraintAnnotation) {
|
|
||||||
this.field = constraintAnnotation.field();
|
|
||||||
this.fieldMatch = constraintAnnotation.fieldMatch();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isValid(Object entity, ConstraintValidatorContext context) {
|
|
||||||
|
|
||||||
Object fieldValue = new BeanWrapperImpl(entity).getPropertyValue(field);
|
|
||||||
Object fieldMatchValue = new BeanWrapperImpl(entity).getPropertyValue(fieldMatch);
|
|
||||||
|
|
||||||
if (fieldValue != null) {
|
|
||||||
return fieldValue.equals(fieldMatchValue);
|
|
||||||
} else {
|
|
||||||
return fieldMatchValue == null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import jakarta.validation.Constraint;
|
|
||||||
import jakarta.validation.Payload;
|
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
|
||||||
|
|
||||||
@Constraint( validatedBy = { RequiredOneFieldValidator.class } )
|
|
||||||
@Documented
|
|
||||||
@Target( { ElementType.TYPE } )
|
|
||||||
@Retention( RetentionPolicy.RUNTIME )
|
|
||||||
public @interface RequiredOneField {
|
|
||||||
|
|
||||||
String message() default "One field is required";
|
|
||||||
|
|
||||||
Class<?>[] groups() default {};
|
|
||||||
|
|
||||||
Class<? extends Payload>[] payload() default {};
|
|
||||||
|
|
||||||
String[] fieldNames();
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.old.RequiredOneField;
|
|
||||||
import jakarta.validation.ConstraintValidator;
|
|
||||||
import jakarta.validation.ConstraintValidatorContext;
|
|
||||||
import org.apache.commons.beanutils.PropertyUtils;
|
|
||||||
|
|
||||||
|
|
||||||
public class RequiredOneFieldValidator implements ConstraintValidator<RequiredOneField, Object> {
|
|
||||||
|
|
||||||
private String[] fieldNames;
|
|
||||||
|
|
||||||
public void initialize(RequiredOneField constraintAnnotation) {
|
|
||||||
this.fieldNames = constraintAnnotation.fieldNames();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {
|
|
||||||
|
|
||||||
if (object == null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
int requiredCount = 0;
|
|
||||||
try {
|
|
||||||
for (String fieldName:fieldNames){
|
|
||||||
|
|
||||||
Object property = PropertyUtils.getProperty(object, fieldName);
|
|
||||||
if (property != null) {
|
|
||||||
requiredCount = requiredCount + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (requiredCount == 1){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.old.EnumNotNull;
|
|
||||||
import jakarta.validation.Constraint;
|
|
||||||
import jakarta.validation.Payload;
|
|
||||||
import java.lang.annotation.*;
|
|
||||||
|
|
||||||
|
|
||||||
@Constraint(validatedBy = EnumNotNull.class)
|
|
||||||
@Documented
|
|
||||||
@Target({ ElementType.FIELD })
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
public @interface ValidEnum {
|
|
||||||
String message() default "enum is required";
|
|
||||||
Class<?>[] groups() default {};
|
|
||||||
Class<? extends Payload>[] payload() default {};
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
|
|
||||||
import jakarta.validation.Constraint;
|
|
||||||
import jakarta.validation.Payload;
|
|
||||||
import java.lang.annotation.*;
|
|
||||||
|
|
||||||
@Constraint( validatedBy = { ValidIdValidator.class } )
|
|
||||||
@Documented
|
|
||||||
@Target( { ElementType.FIELD } )
|
|
||||||
@Retention( RetentionPolicy.RUNTIME )
|
|
||||||
public @interface ValidId {
|
|
||||||
Class<?>[] groups() default {};
|
|
||||||
|
|
||||||
String message() default "id set but not valid";
|
|
||||||
|
|
||||||
Class<? extends Payload>[] payload() default {};
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.old.ValidId;
|
|
||||||
import eu.eudat.convention.ConventionService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
import jakarta.validation.ConstraintValidator;
|
|
||||||
import jakarta.validation.ConstraintValidatorContext;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class ValidIdValidator implements ConstraintValidator<ValidId, Object> {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ConventionService conventionService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(ValidId constraintAnnotation) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
|
|
||||||
if(o == null) return true;
|
|
||||||
else if(o instanceof UUID){
|
|
||||||
UUID uuidId = (UUID)o;
|
|
||||||
return this.conventionService.isValidGuid(uuidId);
|
|
||||||
}
|
|
||||||
else if(o instanceof Integer){
|
|
||||||
Integer intId = (Integer)o;
|
|
||||||
return this.conventionService.isValidId(intId);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
String stringId = o.toString();
|
|
||||||
UUID uuidId = null;
|
|
||||||
try {
|
|
||||||
uuidId = UUID.fromString(stringId);
|
|
||||||
}catch (Exception ex){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return this.conventionService.isValidGuid(uuidId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
package eu.eudat.commons.validation.old;
|
|
||||||
|
|
||||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
|
||||||
import gr.cite.tools.exception.MyValidationException;
|
|
||||||
import gr.cite.tools.validation.BaseValidationService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import jakarta.validation.Validator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class ValidationServiceImpl extends BaseValidationService {
|
|
||||||
|
|
||||||
private final ErrorThesaurusProperties errors;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public ValidationServiceImpl(Validator validator, ErrorThesaurusProperties errors) {
|
|
||||||
super(validator);
|
|
||||||
this.errors = errors;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> void validateForce(T item, Class<?>... groups) {
|
|
||||||
List<Map.Entry<String, List<String>>> validationErrors = this.validate(item, groups);
|
|
||||||
if (validationErrors != null && !validationErrors.isEmpty()) {
|
|
||||||
throw new MyValidationException(this.errors.getModelValidation().getCode(),
|
|
||||||
this.errors.getModelValidation().getMessage(),
|
|
||||||
validationErrors);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +1,14 @@
|
||||||
package eu.eudat.integrationevent.outbox.notification;
|
package eu.eudat.integrationevent.outbox.notification;
|
||||||
|
|
||||||
|
|
||||||
import eu.eudat.audit.AuditableAction;
|
import eu.eudat.audit.AuditableAction;
|
||||||
import eu.eudat.commons.enums.ContactInfoType;
|
import eu.eudat.commons.enums.ContactInfoType;
|
||||||
import eu.eudat.commons.enums.notification.NotificationContactType;
|
import eu.eudat.commons.enums.notification.NotificationContactType;
|
||||||
import eu.eudat.commons.enums.notification.NotificationNotifyState;
|
import eu.eudat.commons.enums.notification.NotificationNotifyState;
|
||||||
import eu.eudat.commons.enums.notification.NotificationTrackingProcess;
|
import eu.eudat.commons.enums.notification.NotificationTrackingProcess;
|
||||||
import eu.eudat.commons.enums.notification.NotificationTrackingState;
|
import eu.eudat.commons.enums.notification.NotificationTrackingState;
|
||||||
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
import eu.eudat.data.UserContactInfoEntity;
|
import eu.eudat.data.UserContactInfoEntity;
|
||||||
import eu.eudat.data.UserEntity;
|
import eu.eudat.data.UserEntity;
|
||||||
import eu.eudat.integrationevent.outbox.OutboxIntegrationEvent;
|
|
||||||
import eu.eudat.integrationevent.outbox.OutboxService;
|
import eu.eudat.integrationevent.outbox.OutboxService;
|
||||||
import eu.eudat.model.persist.notification.NotificationPersist;
|
import eu.eudat.model.persist.notification.NotificationPersist;
|
||||||
import eu.eudat.query.UserContactInfoQuery;
|
import eu.eudat.query.UserContactInfoQuery;
|
||||||
|
@ -19,7 +18,6 @@ import gr.cite.tools.auditing.AuditService;
|
||||||
import gr.cite.tools.data.query.QueryFactory;
|
import gr.cite.tools.data.query.QueryFactory;
|
||||||
import gr.cite.tools.exception.MyApplicationException;
|
import gr.cite.tools.exception.MyApplicationException;
|
||||||
import gr.cite.tools.logging.LoggerService;
|
import gr.cite.tools.logging.LoggerService;
|
||||||
import gr.cite.tools.validation.ValidationService;
|
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
@ -28,79 +26,86 @@ import org.springframework.web.context.annotation.RequestScope;
|
||||||
import javax.management.InvalidApplicationException;
|
import javax.management.InvalidApplicationException;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequestScope
|
@RequestScope
|
||||||
public class NotificationIntegrationEventHandlerImpl implements NotificationIntegrationEventHandler {
|
public class NotificationIntegrationEventHandlerImpl implements NotificationIntegrationEventHandler {
|
||||||
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(NotificationIntegrationEventHandlerImpl.class));
|
|
||||||
private final NotificationService notificationService;
|
|
||||||
private final ValidationService validationService;
|
|
||||||
private final QueryFactory queryFactory;
|
|
||||||
private final AuditService auditService;
|
|
||||||
private final OutboxService outboxService;
|
|
||||||
|
|
||||||
@Autowired
|
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(NotificationIntegrationEventHandlerImpl.class));
|
||||||
public NotificationIntegrationEventHandlerImpl(
|
|
||||||
OutboxService outboxService,
|
|
||||||
NotificationService notificationService,
|
|
||||||
ValidationService validationService,
|
|
||||||
QueryFactory queryFactory,
|
|
||||||
AuditService auditService) {
|
|
||||||
this.outboxService = outboxService;
|
|
||||||
this.notificationService = notificationService;
|
|
||||||
this.validationService = validationService;
|
|
||||||
this.queryFactory = queryFactory;
|
|
||||||
this.auditService = auditService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
private final NotificationService notificationService;
|
||||||
public void handle(NotificationIntegrationEvent event) throws InvalidApplicationException {
|
|
||||||
|
private final QueryFactory queryFactory;
|
||||||
|
|
||||||
|
private final AuditService auditService;
|
||||||
|
|
||||||
|
private final OutboxService outboxService;
|
||||||
|
|
||||||
|
private final ValidatorFactory validatorFactory;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public NotificationIntegrationEventHandlerImpl(
|
||||||
|
OutboxService outboxService,
|
||||||
|
NotificationService notificationService,
|
||||||
|
QueryFactory queryFactory,
|
||||||
|
AuditService auditService, ValidatorFactory validatorFactory) {
|
||||||
|
this.outboxService = outboxService;
|
||||||
|
this.notificationService = notificationService;
|
||||||
|
this.validatorFactory = validatorFactory;
|
||||||
|
this.queryFactory = queryFactory;
|
||||||
|
this.auditService = auditService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(NotificationIntegrationEvent event) throws InvalidApplicationException {
|
||||||
// OutboxIntegrationEvent message = new OutboxIntegrationEvent();
|
// OutboxIntegrationEvent message = new OutboxIntegrationEvent();
|
||||||
// message.setMessageId(UUID.randomUUID());
|
// message.setMessageId(UUID.randomUUID());
|
||||||
// message.setType(OutboxIntegrationEvent.NOTIFY);
|
// message.setType(OutboxIntegrationEvent.NOTIFY);
|
||||||
// message.setEvent(event);
|
// message.setEvent(event);
|
||||||
// this.outboxService.publish(message);
|
// this.outboxService.publish(message);
|
||||||
NotificationPersist persist = new NotificationPersist();
|
NotificationPersist persist = new NotificationPersist();
|
||||||
persist.setType(event.getNotificationType());
|
persist.setType(event.getNotificationType());
|
||||||
persist.setUserId(event.getUserId());
|
persist.setUserId(event.getUserId());
|
||||||
persist.setContactHint(event.getContactHint());
|
persist.setContactHint(event.getContactHint());
|
||||||
persist.setContactTypeHint(event.getContactTypeHint());
|
persist.setContactTypeHint(event.getContactTypeHint());
|
||||||
persist.setData(event.getData());
|
persist.setData(event.getData());
|
||||||
persist.setNotifyState(NotificationNotifyState.PENDING);
|
persist.setNotifyState(NotificationNotifyState.PENDING);
|
||||||
persist.setNotifiedWith(NotificationContactType.EMAIL);
|
persist.setNotifiedWith(NotificationContactType.EMAIL);
|
||||||
persist.setRetryCount(0);
|
persist.setRetryCount(0);
|
||||||
persist.setTrackingState(NotificationTrackingState.UNDEFINED);
|
persist.setTrackingState(NotificationTrackingState.UNDEFINED);
|
||||||
persist.setTrackingProcess(NotificationTrackingProcess.PENDING);
|
persist.setTrackingProcess(NotificationTrackingProcess.PENDING);
|
||||||
persist.setTrackingData(null);
|
persist.setTrackingData(null);
|
||||||
persist.setProvenanceRef(event.getProvenanceRef());
|
persist.setProvenanceRef(event.getProvenanceRef());
|
||||||
persist.setNotifiedAt(Instant.now());
|
persist.setNotifiedAt(Instant.now());
|
||||||
//validationService.validateForce(persist); //TODO
|
validatorFactory.validator(NotificationPersist.NotificationPersistValidator.class).validateForce(persist);
|
||||||
if (isNotificationConsistent(persist)) {
|
if (isNotificationConsistent(persist)) {
|
||||||
notificationService.persist(persist, null);
|
notificationService.persist(persist, null);
|
||||||
auditService.track(AuditableAction.Notification_Persist, "notification_event", event);
|
auditService.track(AuditableAction.Notification_Persist, "notification_event", event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isNotificationConsistent(NotificationPersist notification) {
|
private boolean isNotificationConsistent(NotificationPersist notification) {
|
||||||
switch (notification.getContactTypeHint()){
|
switch (notification.getContactTypeHint()) {
|
||||||
case IN_APP:{
|
case IN_APP: {
|
||||||
if (notification.getUserId() == null) return false;
|
if (notification.getUserId() == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
List<UserEntity> users = this.queryFactory.query(UserQuery.class).ids(notification.getUserId()).collect();
|
List<UserEntity> users = this.queryFactory.query(UserQuery.class).ids(notification.getUserId()).collect();
|
||||||
return users.size() > 0;
|
return !users.isEmpty();
|
||||||
}
|
}
|
||||||
case EMAIL:{
|
case EMAIL: {
|
||||||
if (notification.getContactHint() != null && !notification.getContactHint().isBlank()) return true;
|
if (notification.getContactHint() != null && !notification.getContactHint().isBlank())
|
||||||
|
return true;
|
||||||
|
|
||||||
if (notification.getUserId() == null) return false;
|
if (notification.getUserId() == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
List<UserContactInfoEntity> userContactInfoEntities = this.queryFactory.query(UserContactInfoQuery.class).types(ContactInfoType.Email).userIds(notification.getUserId()).collect();
|
List<UserContactInfoEntity> userContactInfoEntities = this.queryFactory.query(UserContactInfoQuery.class).types(ContactInfoType.Email).userIds(notification.getUserId()).collect();
|
||||||
return userContactInfoEntities.size() > 0;
|
return !userContactInfoEntities.isEmpty();
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
throw new MyApplicationException("invalid type " + notification.getContactTypeHint());
|
throw new MyApplicationException("invalid type " + notification.getContactTypeHint());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,13 +90,13 @@ public class CloneDmpPersist {
|
||||||
.must(() -> this.isValidGuid(item.getId()))
|
.must(() -> this.isValidGuid(item.getId()))
|
||||||
.failOn(CloneDmpPersist._id).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._id}, LocaleContextHolder.getLocale())),
|
.failOn(CloneDmpPersist._id).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._id}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> this.isEmpty(item.getLabel()))
|
.must(() -> !this.isEmpty(item.getLabel()))
|
||||||
.failOn(CloneDmpPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._label}, LocaleContextHolder.getLocale())),
|
.failOn(CloneDmpPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._label}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> this.isEmpty(item.getDescription()))
|
.must(() -> !this.isEmpty(item.getDescription()))
|
||||||
.failOn(CloneDmpPersist._description).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._description}, LocaleContextHolder.getLocale())),
|
.failOn(CloneDmpPersist._description).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._description}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> this.isNull(item.getDescriptions()))
|
.must(() -> !this.isNull(item.getDescriptions()))
|
||||||
.failOn(CloneDmpPersist._descriptions).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._descriptions}, LocaleContextHolder.getLocale()))
|
.failOn(CloneDmpPersist._descriptions).failWith(messageSource.getMessage("Validation_Required", new Object[]{CloneDmpPersist._descriptions}, LocaleContextHolder.getLocale()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package eu.eudat.model.persist;
|
||||||
import eu.eudat.commons.enums.DescriptionStatus;
|
import eu.eudat.commons.enums.DescriptionStatus;
|
||||||
import eu.eudat.commons.validation.BaseValidator;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.ValidatorFactory;
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
import eu.eudat.commons.validation.old.FieldNotNullIfOtherSet;
|
|
||||||
import eu.eudat.commons.validation.specification.Specification;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.data.DescriptionEntity;
|
import eu.eudat.data.DescriptionEntity;
|
||||||
|
@ -19,7 +18,6 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@FieldNotNullIfOtherSet(message = "{validation.hashempty}")
|
|
||||||
public class DescriptionPersist {
|
public class DescriptionPersist {
|
||||||
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
@ -193,19 +191,23 @@ public class DescriptionPersist {
|
||||||
.must(() -> this.isValidGuid(item.getDmpId()))
|
.must(() -> this.isValidGuid(item.getDmpId()))
|
||||||
.failOn(DescriptionPersist._dmpId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpId}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._dmpId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized)
|
||||||
.must(() -> this.isValidGuid(item.getDescriptionTemplateId()))
|
.must(() -> this.isValidGuid(item.getDescriptionTemplateId()))
|
||||||
.failOn(DescriptionPersist._descriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._descriptionTemplateId}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._descriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._descriptionTemplateId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized)
|
||||||
.must(() -> this.isValidGuid(item.getDmpDescriptionTemplateId()))
|
.must(() -> this.isValidGuid(item.getDmpDescriptionTemplateId()))
|
||||||
.failOn(DescriptionPersist._dmpDescriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpDescriptionTemplateId}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._dmpDescriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpDescriptionTemplateId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isNull(item.getStatus()))
|
.must(() -> !this.isNull(item.getStatus()))
|
||||||
.failOn(DescriptionPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._status}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._status}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getTags()))
|
.must(() -> !this.isNull(item.getTags()))
|
||||||
.failOn(DescriptionPersist._tags).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._tags}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._tags).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._tags}, LocaleContextHolder.getLocale())),
|
||||||
|
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getProperties()))
|
.must(() -> !this.isNull(item.getProperties()))
|
||||||
.failOn(DescriptionPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._properties}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._properties}, LocaleContextHolder.getLocale())),
|
||||||
this.refSpec()
|
this.refSpec()
|
||||||
|
@ -214,10 +216,11 @@ public class DescriptionPersist {
|
||||||
.over(item.getProperties())
|
.over(item.getProperties())
|
||||||
.using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class)),
|
.using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class)),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getReferences()))
|
.must(() -> !this.isNull(item.getReferences()))
|
||||||
.failOn(DescriptionPersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._references}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionPersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._references}, LocaleContextHolder.getLocale())),
|
||||||
this.navSpec()
|
this.navSpec()
|
||||||
.iff(() -> !this.isNull(item.getReferences()))
|
.iff(() -> item.getStatus() == DescriptionStatus.Finalized && !this.isNull(item.getReferences()))
|
||||||
.on(DescriptionPersist._references)
|
.on(DescriptionPersist._references)
|
||||||
.over(item.getReferences())
|
.over(item.getReferences())
|
||||||
.using(() -> this.validatorFactory.validator(DescriptionReferencePersist.DescriptionReferencePersistValidator.class))
|
.using(() -> this.validatorFactory.validator(DescriptionReferencePersist.DescriptionReferencePersistValidator.class))
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class DescriptionStatusPersist {
|
||||||
protected List<Specification> specifications(DescriptionStatusPersist item) {
|
protected List<Specification> specifications(DescriptionStatusPersist item) {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isValidGuid(item.getId()))
|
.must(() -> this.isValidGuid(item.getId()))
|
||||||
.failOn(DescriptionStatusPersist._id).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionStatusPersist._id}, LocaleContextHolder.getLocale())),
|
.failOn(DescriptionStatusPersist._id).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionStatusPersist._id}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.iff(() -> this.isValidGuid(item.getId()))
|
.iff(() -> this.isValidGuid(item.getId()))
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
package eu.eudat.model.persist;
|
package eu.eudat.model.persist;
|
||||||
|
|
||||||
|
import eu.eudat.commons.enums.DmpStatus;
|
||||||
import eu.eudat.commons.validation.BaseValidator;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.specification.Specification;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||||
|
import eu.eudat.model.persist.validation.StatusAware;
|
||||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.MessageSource;
|
import org.springframework.context.MessageSource;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
@ -42,12 +44,14 @@ public class DmpDescriptionTemplatePersist {
|
||||||
|
|
||||||
@Component(DmpDescriptionTemplatePersistValidator.ValidatorName)
|
@Component(DmpDescriptionTemplatePersistValidator.ValidatorName)
|
||||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
public static class DmpDescriptionTemplatePersistValidator extends BaseValidator<DmpDescriptionTemplatePersist> {
|
public static class DmpDescriptionTemplatePersistValidator extends BaseValidator<DmpDescriptionTemplatePersist> implements StatusAware<DmpStatus> {
|
||||||
|
|
||||||
public static final String ValidatorName = "DmpDescriptionTemplatePersistValidator";
|
public static final String ValidatorName = "DmpDescriptionTemplatePersistValidator";
|
||||||
|
|
||||||
private final MessageSource messageSource;
|
private final MessageSource messageSource;
|
||||||
|
|
||||||
|
private DmpStatus status;
|
||||||
|
|
||||||
protected DmpDescriptionTemplatePersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) {
|
protected DmpDescriptionTemplatePersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) {
|
||||||
super(conventionService, errors);
|
super(conventionService, errors);
|
||||||
this.messageSource = messageSource;
|
this.messageSource = messageSource;
|
||||||
|
@ -62,13 +66,21 @@ public class DmpDescriptionTemplatePersist {
|
||||||
protected List<Specification> specifications(DmpDescriptionTemplatePersist item) {
|
protected List<Specification> specifications(DmpDescriptionTemplatePersist item) {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> this.status == DmpStatus.Finalized)
|
||||||
.must(() -> this.isValidGuid(item.getDescriptionTemplateGroupId()))
|
.must(() -> this.isValidGuid(item.getDescriptionTemplateGroupId()))
|
||||||
.failOn(DmpDescriptionTemplatePersist._descriptionTemplateGroupId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._descriptionTemplateGroupId}, LocaleContextHolder.getLocale())),
|
.failOn(DmpDescriptionTemplatePersist._descriptionTemplateGroupId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._descriptionTemplateGroupId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> this.status == DmpStatus.Finalized)
|
||||||
.must(() -> this.isValidGuid(item.getSectionId()))
|
.must(() -> this.isValidGuid(item.getSectionId()))
|
||||||
.failOn(DmpDescriptionTemplatePersist._sectionId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._sectionId}, LocaleContextHolder.getLocale()))
|
.failOn(DmpDescriptionTemplatePersist._sectionId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpDescriptionTemplatePersist._sectionId}, LocaleContextHolder.getLocale()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DmpDescriptionTemplatePersistValidator setStatus(DmpStatus status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,11 @@ import eu.eudat.commons.enums.DmpAccessType;
|
||||||
import eu.eudat.commons.enums.DmpStatus;
|
import eu.eudat.commons.enums.DmpStatus;
|
||||||
import eu.eudat.commons.validation.BaseValidator;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.ValidatorFactory;
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
import eu.eudat.commons.validation.old.FieldNotNullIfOtherSet;
|
|
||||||
import eu.eudat.commons.validation.old.ValidEnum;
|
|
||||||
import eu.eudat.commons.validation.old.ValidId;
|
|
||||||
import eu.eudat.commons.validation.specification.Specification;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.data.DescriptionEntity;
|
|
||||||
import eu.eudat.data.DmpEntity;
|
import eu.eudat.data.DmpEntity;
|
||||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||||
import eu.eudat.model.persist.descriptionproperties.PropertyDefinitionPersist;
|
|
||||||
import eu.eudat.model.persist.dmpproperties.DmpPropertiesPersist;
|
import eu.eudat.model.persist.dmpproperties.DmpPropertiesPersist;
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import jakarta.validation.constraints.Size;
|
|
||||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.MessageSource;
|
import org.springframework.context.MessageSource;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
@ -197,33 +188,37 @@ public class DmpPersist {
|
||||||
.must(() -> !this.isNull(item.getStatus()))
|
.must(() -> !this.isNull(item.getStatus()))
|
||||||
.failOn(DmpPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._status}, LocaleContextHolder.getLocale())),
|
.failOn(DmpPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._status}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DmpStatus.Finalized)
|
||||||
.must(() -> this.isValidGuid(item.getBlueprint()))
|
.must(() -> this.isValidGuid(item.getBlueprint()))
|
||||||
.failOn(DmpPersist._blueprint).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._blueprint}, LocaleContextHolder.getLocale())),
|
.failOn(DmpPersist._blueprint).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._blueprint}, LocaleContextHolder.getLocale())),
|
||||||
|
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DmpStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getProperties()))
|
.must(() -> !this.isNull(item.getProperties()))
|
||||||
.failOn(DmpPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._properties}, LocaleContextHolder.getLocale())),
|
.failOn(DmpPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._properties}, LocaleContextHolder.getLocale())),
|
||||||
this.refSpec()
|
this.refSpec()
|
||||||
.iff(() -> !this.isNull(item.getProperties()))
|
.iff(() -> !this.isNull(item.getProperties()))
|
||||||
.on(DmpPersist._properties)
|
.on(DmpPersist._properties)
|
||||||
.over(item.getProperties())
|
.over(item.getProperties())
|
||||||
.using(() -> this.validatorFactory.validator(DmpPropertiesPersist.DmpPropertiesPersistValidator.class)),
|
.using(() -> this.validatorFactory.validator(DmpPropertiesPersist.DmpPropertiesPersistValidator.class).setStatus(item.getStatus())),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DmpStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getReferences()))
|
.must(() -> !this.isNull(item.getReferences()))
|
||||||
.failOn(DmpPersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._references}, LocaleContextHolder.getLocale())),
|
.failOn(DmpPersist._references).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._references}, LocaleContextHolder.getLocale())),
|
||||||
this.navSpec()
|
this.navSpec()
|
||||||
.iff(() -> !this.isNull(item.getReferences()))
|
.iff(() -> item.getStatus() == DmpStatus.Finalized && !this.isNull(item.getReferences()))
|
||||||
.on(DmpPersist._references)
|
.on(DmpPersist._references)
|
||||||
.over(item.getReferences())
|
.over(item.getReferences())
|
||||||
.using(() -> this.validatorFactory.validator(DmpReferencePersist.DmpReferencePersistValidator.class)),
|
.using(() -> this.validatorFactory.validator(DmpReferencePersist.DmpReferencePersistValidator.class)),
|
||||||
this.spec()
|
this.spec()
|
||||||
|
.iff(() -> item.getStatus() == DmpStatus.Finalized)
|
||||||
.must(() -> !this.isNull(item.getDescriptionTemplates()))
|
.must(() -> !this.isNull(item.getDescriptionTemplates()))
|
||||||
.failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
|
.failOn(DmpPersist._descriptionTemplates).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpPersist._descriptionTemplates}, LocaleContextHolder.getLocale())),
|
||||||
this.navSpec()
|
this.navSpec()
|
||||||
.iff(() -> !this.isNull(item.getDescriptionTemplates()))
|
.iff(() -> !this.isNull(item.getDescriptionTemplates()))
|
||||||
.on(DmpPersist._descriptionTemplates)
|
.on(DmpPersist._descriptionTemplates)
|
||||||
.over(item.getDescriptionTemplates())
|
.over(item.getDescriptionTemplates())
|
||||||
.using(() -> this.validatorFactory.validator(DmpDescriptionTemplatePersist.DmpDescriptionTemplatePersistValidator.class))
|
.using(() -> this.validatorFactory.validator(DmpDescriptionTemplatePersist.DmpDescriptionTemplatePersistValidator.class).setStatus(item.getStatus()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,7 @@ public class DmpReferencePersist {
|
||||||
.using(() -> this.validatorFactory.validator(ReferencePersist.ReferencePersistValidator.class))
|
.using(() -> this.validatorFactory.validator(ReferencePersist.ReferencePersistValidator.class))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class DmpUserInviteTypePersist {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
this.spec()
|
this.spec()
|
||||||
.iff(() -> this.isEmpty(item.getEmail()))
|
.iff(() -> this.isEmpty(item.getEmail()))
|
||||||
.must(() -> !this.isValidGuid(item.getUserId()))
|
.must(() -> this.isValidGuid(item.getUserId()))
|
||||||
.failOn(DmpUserInviteTypePersist._userId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpUserInviteTypePersist._userId}, LocaleContextHolder.getLocale())),
|
.failOn(DmpUserInviteTypePersist._userId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpUserInviteTypePersist._userId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.iff(() -> !this.isValidGuid(item.getUserId()))
|
.iff(() -> !this.isValidGuid(item.getUserId()))
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class DmpUserPersist {
|
||||||
protected List<Specification> specifications(DmpUserPersist item) {
|
protected List<Specification> specifications(DmpUserPersist item) {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isValidGuid(item.getUser()))
|
.must(() -> this.isValidGuid(item.getUser()))
|
||||||
.failOn(DmpUserPersist._user).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpUserPersist._user}, LocaleContextHolder.getLocale())),
|
.failOn(DmpUserPersist._user).failWith(messageSource.getMessage("Validation_Required", new Object[]{DmpUserPersist._user}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isNull(item.getRole()))
|
.must(() -> !this.isNull(item.getRole()))
|
||||||
|
|
|
@ -119,7 +119,7 @@ public class NewVersionDmpPersist {
|
||||||
.must(() -> !this.isEmpty(item.getDescription()))
|
.must(() -> !this.isEmpty(item.getDescription()))
|
||||||
.failOn(NewVersionDmpPersist._description).failWith(messageSource.getMessage("Validation_Required", new Object[]{NewVersionDmpPersist._description}, LocaleContextHolder.getLocale())),
|
.failOn(NewVersionDmpPersist._description).failWith(messageSource.getMessage("Validation_Required", new Object[]{NewVersionDmpPersist._description}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isValidGuid(item.getBlueprintId()))
|
.must(() -> this.isValidGuid(item.getBlueprintId()))
|
||||||
.failOn(NewVersionDmpPersist._blueprintId).failWith(messageSource.getMessage("Validation_Required", new Object[]{NewVersionDmpPersist._blueprintId}, LocaleContextHolder.getLocale())),
|
.failOn(NewVersionDmpPersist._blueprintId).failWith(messageSource.getMessage("Validation_Required", new Object[]{NewVersionDmpPersist._blueprintId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isNull(item.getDescriptions()))
|
.must(() -> !this.isNull(item.getDescriptions()))
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class DepositRequest {
|
||||||
.must(() -> !this.isEmpty(item.getRepositoryId()))
|
.must(() -> !this.isEmpty(item.getRepositoryId()))
|
||||||
.failOn(DepositRequest._repositoryId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DepositRequest._repositoryId}, LocaleContextHolder.getLocale())),
|
.failOn(DepositRequest._repositoryId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DepositRequest._repositoryId}, LocaleContextHolder.getLocale())),
|
||||||
this.spec()
|
this.spec()
|
||||||
.must(() -> !this.isValidGuid(item.getDmpId()))
|
.must(() -> this.isValidGuid(item.getDmpId()))
|
||||||
.failOn(DepositRequest._dmpId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DepositRequest._dmpId}, LocaleContextHolder.getLocale()))
|
.failOn(DepositRequest._dmpId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DepositRequest._dmpId}, LocaleContextHolder.getLocale()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
package eu.eudat.model.persist.dmpproperties;
|
package eu.eudat.model.persist.dmpproperties;
|
||||||
|
|
||||||
|
import eu.eudat.commons.enums.DmpStatus;
|
||||||
import eu.eudat.commons.validation.BaseValidator;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.ValidatorFactory;
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
import eu.eudat.commons.validation.specification.Specification;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||||
|
import eu.eudat.model.persist.DmpPersist;
|
||||||
|
import eu.eudat.model.persist.validation.StatusAware;
|
||||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
@ -40,12 +43,14 @@ public class DmpPropertiesPersist {
|
||||||
|
|
||||||
@Component(DmpPropertiesPersistValidator.ValidatorName)
|
@Component(DmpPropertiesPersistValidator.ValidatorName)
|
||||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
public static class DmpPropertiesPersistValidator extends BaseValidator<DmpPropertiesPersist> {
|
public static class DmpPropertiesPersistValidator extends BaseValidator<DmpPropertiesPersist> implements StatusAware<DmpStatus> {
|
||||||
|
|
||||||
public static final String ValidatorName = "DmpPropertiesPersistValidator";
|
public static final String ValidatorName = "DmpPropertiesPersistValidator";
|
||||||
|
|
||||||
private final ValidatorFactory validatorFactory;
|
private final ValidatorFactory validatorFactory;
|
||||||
|
|
||||||
|
private DmpStatus status;
|
||||||
|
|
||||||
protected DmpPropertiesPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory) {
|
protected DmpPropertiesPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, ValidatorFactory validatorFactory) {
|
||||||
super(conventionService, errors);
|
super(conventionService, errors);
|
||||||
this.validatorFactory = validatorFactory;
|
this.validatorFactory = validatorFactory;
|
||||||
|
@ -60,17 +65,24 @@ public class DmpPropertiesPersist {
|
||||||
protected List<Specification> specifications(DmpPropertiesPersist item) {
|
protected List<Specification> specifications(DmpPropertiesPersist item) {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
this.refSpec()
|
this.refSpec()
|
||||||
.iff(() -> !this.isNull(item.getDmpBlueprintValues()))
|
.iff(() -> this.status == DmpStatus.Finalized && !this.isNull(item.getDmpBlueprintValues()))
|
||||||
.on(DmpPropertiesPersist._dmpBlueprintValues)
|
.on(DmpPropertiesPersist._dmpBlueprintValues)
|
||||||
.over(item.getDmpBlueprintValues())
|
.over(item.getDmpBlueprintValues())
|
||||||
.using(() -> this.validatorFactory.validator(DmpBlueprintValuePersist.DmpBlueprintValuePersistValidator.class)),
|
.using(() -> this.validatorFactory.validator(DmpBlueprintValuePersist.DmpBlueprintValuePersistValidator.class)),
|
||||||
this.refSpec()
|
this.refSpec()
|
||||||
.iff(() -> !this.isNull(item.getContacts()))
|
.iff(() -> this.status == DmpStatus.Finalized && !this.isNull(item.getContacts()))
|
||||||
.on(DmpPropertiesPersist._contacts)
|
.on(DmpPropertiesPersist._contacts)
|
||||||
.over(item.getContacts())
|
.over(item.getContacts())
|
||||||
.using(() -> this.validatorFactory.validator(DmpContactPersist.DmpContactPersistValidator.class))
|
.using(() -> this.validatorFactory.validator(DmpContactPersist.DmpContactPersistValidator.class))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DmpPropertiesPersistValidator setStatus(DmpStatus status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,23 +4,29 @@ import eu.eudat.commons.enums.notification.NotificationContactType;
|
||||||
import eu.eudat.commons.enums.notification.NotificationNotifyState;
|
import eu.eudat.commons.enums.notification.NotificationNotifyState;
|
||||||
import eu.eudat.commons.enums.notification.NotificationTrackingProcess;
|
import eu.eudat.commons.enums.notification.NotificationTrackingProcess;
|
||||||
import eu.eudat.commons.enums.notification.NotificationTrackingState;
|
import eu.eudat.commons.enums.notification.NotificationTrackingState;
|
||||||
import eu.eudat.commons.validation.old.FieldNotNullIfOtherSet;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.old.ValidId;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import eu.eudat.convention.ConventionService;
|
||||||
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||||
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
|
import org.springframework.context.MessageSource;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@FieldNotNullIfOtherSet(message = "{validation.hashempty}")
|
|
||||||
public class NotificationPersist {
|
public class NotificationPersist {
|
||||||
|
|
||||||
@ValidId(message = "{validation.invalidid}")
|
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@NotNull(message = "{validation.empty}")
|
|
||||||
private UUID userId;
|
private UUID userId;
|
||||||
|
|
||||||
|
public static final String _userId = "userId";
|
||||||
|
|
||||||
private UUID type;
|
private UUID type;
|
||||||
|
|
||||||
private NotificationContactType contactTypeHint;
|
private NotificationContactType contactTypeHint;
|
||||||
|
@ -47,6 +53,8 @@ public class NotificationPersist {
|
||||||
|
|
||||||
private String hash;
|
private String hash;
|
||||||
|
|
||||||
|
public static final String _hash = "hash";
|
||||||
|
|
||||||
public UUID getId() {
|
public UUID getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -166,4 +174,41 @@ public class NotificationPersist {
|
||||||
public void setHash(String hash) {
|
public void setHash(String hash) {
|
||||||
this.hash = hash;
|
this.hash = hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Component(NotificationPersistValidator.ValidatorName)
|
||||||
|
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
|
public static class NotificationPersistValidator extends BaseValidator<NotificationPersist> {
|
||||||
|
|
||||||
|
public static final String ValidatorName = "NotificationPersistValidator";
|
||||||
|
|
||||||
|
private final MessageSource messageSource;
|
||||||
|
|
||||||
|
protected NotificationPersistValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) {
|
||||||
|
super(conventionService, errors);
|
||||||
|
this.messageSource = messageSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<NotificationPersist> modelClass() {
|
||||||
|
return NotificationPersist.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<Specification> specifications(NotificationPersist item) {
|
||||||
|
return Arrays.asList(
|
||||||
|
this.spec()
|
||||||
|
.iff(() -> this.isValidGuid(item.getId()))
|
||||||
|
.must(() -> this.isValidHash(item.getHash()))
|
||||||
|
.failOn(NotificationPersist._hash).failWith(messageSource.getMessage("Validation_Required", new Object[]{NotificationPersist._hash}, LocaleContextHolder.getLocale())),
|
||||||
|
this.spec()
|
||||||
|
.iff(() -> !this.isValidGuid(item.getId()))
|
||||||
|
.must(() -> !this.isValidHash(item.getHash()))
|
||||||
|
.failOn(NotificationPersist._hash).failWith(messageSource.getMessage("Validation_OverPosting", new Object[]{}, LocaleContextHolder.getLocale())),
|
||||||
|
this.spec()
|
||||||
|
.must(() -> this.isValidGuid(item.getUserId()))
|
||||||
|
.failOn(NotificationPersist._userId).failWith(messageSource.getMessage("Validation_Required", new Object[]{NotificationPersist._userId}, LocaleContextHolder.getLocale()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,14 +2,10 @@ package eu.eudat.model.persist.referencedefinition;
|
||||||
|
|
||||||
import eu.eudat.commons.enums.ReferenceFieldDataType;
|
import eu.eudat.commons.enums.ReferenceFieldDataType;
|
||||||
import eu.eudat.commons.validation.BaseValidator;
|
import eu.eudat.commons.validation.BaseValidator;
|
||||||
import eu.eudat.commons.validation.old.ValidEnum;
|
|
||||||
|
|
||||||
import eu.eudat.commons.validation.specification.Specification;
|
import eu.eudat.commons.validation.specification.Specification;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
import eu.eudat.errorcode.ErrorThesaurusProperties;
|
||||||
import eu.eudat.model.persist.DescriptionTemplateTypePersist;
|
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
import org.springframework.context.MessageSource;
|
import org.springframework.context.MessageSource;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package eu.eudat.model.persist.validation;
|
||||||
|
|
||||||
|
public interface StatusAware<T extends Enum<?>> {
|
||||||
|
|
||||||
|
StatusAware<T> setStatus(T status);
|
||||||
|
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ import eu.eudat.commons.types.descriptiontemplate.*;
|
||||||
import eu.eudat.commons.types.descriptiontemplate.fielddata.BaseFieldDataEntity;
|
import eu.eudat.commons.types.descriptiontemplate.fielddata.BaseFieldDataEntity;
|
||||||
import eu.eudat.commons.types.descriptiontemplate.importexport.*;
|
import eu.eudat.commons.types.descriptiontemplate.importexport.*;
|
||||||
import eu.eudat.commons.types.notification.*;
|
import eu.eudat.commons.types.notification.*;
|
||||||
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
import eu.eudat.configurations.notification.NotificationProperties;
|
import eu.eudat.configurations.notification.NotificationProperties;
|
||||||
import eu.eudat.convention.ConventionService;
|
import eu.eudat.convention.ConventionService;
|
||||||
import eu.eudat.data.DescriptionTemplateEntity;
|
import eu.eudat.data.DescriptionTemplateEntity;
|
||||||
|
@ -81,11 +82,13 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DescriptionTemplateServiceImpl implements DescriptionTemplateService {
|
public class DescriptionTemplateServiceImpl implements DescriptionTemplateService {
|
||||||
|
|
||||||
private List<Semantic> semantics = null;
|
private List<Semantic> semantics = null;
|
||||||
|
|
||||||
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DescriptionTemplateServiceImpl.class));
|
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DescriptionTemplateServiceImpl.class));
|
||||||
|
|
||||||
private final EntityManager entityManager;
|
private final EntityManager entityManager;
|
||||||
|
|
||||||
private final UserScope userScope;
|
private final UserScope userScope;
|
||||||
|
|
||||||
private final AuthorizationService authorizationService;
|
private final AuthorizationService authorizationService;
|
||||||
|
@ -93,20 +96,33 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
private final DeleterFactory deleterFactory;
|
private final DeleterFactory deleterFactory;
|
||||||
|
|
||||||
private final BuilderFactory builderFactory;
|
private final BuilderFactory builderFactory;
|
||||||
|
|
||||||
private final ConventionService conventionService;
|
private final ConventionService conventionService;
|
||||||
|
|
||||||
private final MessageSource messageSource;
|
private final MessageSource messageSource;
|
||||||
|
|
||||||
private final XmlHandlingService xmlHandlingService;
|
private final XmlHandlingService xmlHandlingService;
|
||||||
|
|
||||||
private final FieldDataHelperServiceProvider fieldDataHelperServiceProvider;
|
private final FieldDataHelperServiceProvider fieldDataHelperServiceProvider;
|
||||||
|
|
||||||
private final QueryFactory queryFactory;
|
private final QueryFactory queryFactory;
|
||||||
|
|
||||||
private final ErrorThesaurusProperties errors;
|
private final ErrorThesaurusProperties errors;
|
||||||
private final ValidationService validationService;
|
|
||||||
private final TenantScope tenantScope;
|
private final TenantScope tenantScope;
|
||||||
|
|
||||||
private final ResponseUtilsService responseUtilsService;
|
private final ResponseUtilsService responseUtilsService;
|
||||||
|
|
||||||
private final StorageFileService storageFileService;
|
private final StorageFileService storageFileService;
|
||||||
|
|
||||||
private final JsonHandlingService jsonHandlingService;
|
private final JsonHandlingService jsonHandlingService;
|
||||||
|
|
||||||
private final NotificationIntegrationEventHandler eventHandler;
|
private final NotificationIntegrationEventHandler eventHandler;
|
||||||
|
|
||||||
private final NotificationProperties notificationProperties;
|
private final NotificationProperties notificationProperties;
|
||||||
|
|
||||||
|
private final ValidatorFactory validatorFactory;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DescriptionTemplateServiceImpl(
|
public DescriptionTemplateServiceImpl(
|
||||||
EntityManager entityManager,
|
EntityManager entityManager,
|
||||||
|
@ -116,7 +132,15 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
ConventionService conventionService,
|
ConventionService conventionService,
|
||||||
MessageSource messageSource,
|
MessageSource messageSource,
|
||||||
XmlHandlingService xmlHandlingService,
|
XmlHandlingService xmlHandlingService,
|
||||||
FieldDataHelperServiceProvider fieldDataHelperServiceProvider, QueryFactory queryFactory, ErrorThesaurusProperties errors, ValidationService validationService, TenantScope tenantScope, ResponseUtilsService responseUtilsService, StorageFileService storageFileService, JsonHandlingService jsonHandlingService, NotificationIntegrationEventHandler eventHandler, NotificationProperties notificationProperties) {
|
FieldDataHelperServiceProvider fieldDataHelperServiceProvider,
|
||||||
|
QueryFactory queryFactory, ErrorThesaurusProperties errors,
|
||||||
|
TenantScope tenantScope,
|
||||||
|
ResponseUtilsService responseUtilsService,
|
||||||
|
StorageFileService storageFileService,
|
||||||
|
JsonHandlingService jsonHandlingService,
|
||||||
|
NotificationIntegrationEventHandler eventHandler,
|
||||||
|
NotificationProperties notificationProperties,
|
||||||
|
ValidatorFactory validatorFactory) {
|
||||||
this.entityManager = entityManager;
|
this.entityManager = entityManager;
|
||||||
this.userScope = userScope;
|
this.userScope = userScope;
|
||||||
this.authorizationService = authorizationService;
|
this.authorizationService = authorizationService;
|
||||||
|
@ -128,15 +152,15 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
this.fieldDataHelperServiceProvider = fieldDataHelperServiceProvider;
|
this.fieldDataHelperServiceProvider = fieldDataHelperServiceProvider;
|
||||||
this.queryFactory = queryFactory;
|
this.queryFactory = queryFactory;
|
||||||
this.errors = errors;
|
this.errors = errors;
|
||||||
this.validationService = validationService;
|
|
||||||
this.tenantScope = tenantScope;
|
this.tenantScope = tenantScope;
|
||||||
this.responseUtilsService = responseUtilsService;
|
this.responseUtilsService = responseUtilsService;
|
||||||
this.storageFileService = storageFileService;
|
this.storageFileService = storageFileService;
|
||||||
this.jsonHandlingService = jsonHandlingService;
|
this.jsonHandlingService = jsonHandlingService;
|
||||||
this.eventHandler = eventHandler;
|
this.eventHandler = eventHandler;
|
||||||
this.notificationProperties = notificationProperties;
|
this.notificationProperties = notificationProperties;
|
||||||
|
this.validatorFactory = validatorFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
//region Persist
|
//region Persist
|
||||||
|
|
||||||
public DescriptionTemplate persist(DescriptionTemplatePersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException {
|
public DescriptionTemplate persist(DescriptionTemplatePersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException {
|
||||||
|
@ -149,9 +173,12 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
DescriptionTemplateEntity data;
|
DescriptionTemplateEntity data;
|
||||||
if (isUpdate) {
|
if (isUpdate) {
|
||||||
data = this.entityManager.find(DescriptionTemplateEntity.class, model.getId());
|
data = this.entityManager.find(DescriptionTemplateEntity.class, model.getId());
|
||||||
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (data == null)
|
||||||
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
if (data.getStatus() == DescriptionTemplateStatus.Finalized) throw new MyForbiddenException("Can not update finalized template");
|
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash()))
|
||||||
|
throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
|
||||||
|
if (data.getStatus() == DescriptionTemplateStatus.Finalized)
|
||||||
|
throw new MyForbiddenException("Can not update finalized template");
|
||||||
} else {
|
} else {
|
||||||
data = new DescriptionTemplateEntity();
|
data = new DescriptionTemplateEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
|
@ -159,7 +186,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
data.setCreatedAt(Instant.now());
|
data.setCreatedAt(Instant.now());
|
||||||
data.setGroupId(UUID.randomUUID());
|
data.setGroupId(UUID.randomUUID());
|
||||||
data.setVersionStatus(DescriptionTemplateVersionStatus.Current);
|
data.setVersionStatus(DescriptionTemplateVersionStatus.Current);
|
||||||
data.setVersion((short)1);
|
data.setVersion((short) 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.setDescription(model.getDescription());
|
data.setDescription(model.getDescription());
|
||||||
|
@ -173,22 +200,24 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
this.entityManager.merge(data);
|
this.entityManager.merge(data);
|
||||||
else
|
else
|
||||||
this.entityManager.persist(data);
|
this.entityManager.persist(data);
|
||||||
|
|
||||||
this.persistUsers(data.getId(), model.getUsers());
|
this.persistUsers(data.getId(), model.getUsers());
|
||||||
if (!isUpdate) this.addOwner(data);
|
if (!isUpdate)
|
||||||
|
this.addOwner(data);
|
||||||
|
|
||||||
this.entityManager.flush();
|
this.entityManager.flush();
|
||||||
|
|
||||||
return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data);
|
return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void persistUsers(UUID id, List<UserDescriptionTemplatePersist> users) throws InvalidApplicationException {
|
private void persistUsers(UUID id, List<UserDescriptionTemplatePersist> users) throws InvalidApplicationException {
|
||||||
if (users == null) users = new ArrayList<>();
|
if (users == null)
|
||||||
|
users = new ArrayList<>();
|
||||||
List<UserDescriptionTemplateEntity> items = this.queryFactory.query(UserDescriptionTemplateQuery.class).isActive(IsActive.Active).descriptionTemplateIds(id).collect();
|
List<UserDescriptionTemplateEntity> items = this.queryFactory.query(UserDescriptionTemplateQuery.class).isActive(IsActive.Active).descriptionTemplateIds(id).collect();
|
||||||
List<UUID> updatedCreatedIds = new ArrayList<>();
|
List<UUID> updatedCreatedIds = new ArrayList<>();
|
||||||
for (UserDescriptionTemplatePersist user : users) {
|
for (UserDescriptionTemplatePersist user : users) {
|
||||||
UserDescriptionTemplateEntity data = items.stream().filter(x -> x.getUserId().equals(user.getUserId()) && x.getRole().equals(user.getRole())).findFirst().orElse(null);
|
UserDescriptionTemplateEntity data = items.stream().filter(x -> x.getUserId().equals(user.getUserId()) && x.getRole().equals(user.getRole())).findFirst().orElse(null);
|
||||||
if (data == null){
|
if (data == null) {
|
||||||
data = new UserDescriptionTemplateEntity();
|
data = new UserDescriptionTemplateEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
data.setIsActive(IsActive.Active);
|
data.setIsActive(IsActive.Active);
|
||||||
|
@ -202,10 +231,11 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
}
|
}
|
||||||
updatedCreatedIds.add(data.getId());
|
updatedCreatedIds.add(data.getId());
|
||||||
}
|
}
|
||||||
List<UserDescriptionTemplateEntity> toDelete = items.stream().filter(x-> updatedCreatedIds.stream().noneMatch(y-> y.equals(x.getId()))).collect(Collectors.toList());
|
List<UserDescriptionTemplateEntity> toDelete = items.stream().filter(x -> updatedCreatedIds.stream().noneMatch(y -> y.equals(x.getId()))).collect(Collectors.toList());
|
||||||
|
|
||||||
this.deleterFactory.deleter(UserDescriptionTemplateDeleter.class).delete(toDelete);
|
this.deleterFactory.deleter(UserDescriptionTemplateDeleter.class).delete(toDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendJoinMail(UserDescriptionTemplateEntity userDescriptionTemplate) throws InvalidApplicationException {
|
private void sendJoinMail(UserDescriptionTemplateEntity userDescriptionTemplate) throws InvalidApplicationException {
|
||||||
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
||||||
event.setTenant(tenantScope.getTenant());
|
event.setTenant(tenantScope.getTenant());
|
||||||
|
@ -233,6 +263,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
eventHandler.handle(event);
|
eventHandler.handle(event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addOwner(DescriptionTemplateEntity descriptionTemplateEntity) throws InvalidApplicationException {
|
private void addOwner(DescriptionTemplateEntity descriptionTemplateEntity) throws InvalidApplicationException {
|
||||||
UserDescriptionTemplateEntity data = new UserDescriptionTemplateEntity();
|
UserDescriptionTemplateEntity data = new UserDescriptionTemplateEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
|
@ -245,18 +276,19 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
this.entityManager.persist(data);
|
this.entityManager.persist(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist){
|
private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist) {
|
||||||
DefinitionEntity data = new DefinitionEntity();
|
DefinitionEntity data = new DefinitionEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getSections())){
|
return data;
|
||||||
|
if (!this.conventionService.isListNullOrEmpty(persist.getSections())) {
|
||||||
data.setSections(new ArrayList<>());
|
data.setSections(new ArrayList<>());
|
||||||
for (SectionPersist sectionPersist: persist.getSections()) {
|
for (SectionPersist sectionPersist : persist.getSections()) {
|
||||||
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getPages())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getPages())) {
|
||||||
data.setPages(new ArrayList<>());
|
data.setPages(new ArrayList<>());
|
||||||
for (PagePersist pagePersist: persist.getPages()) {
|
for (PagePersist pagePersist : persist.getPages()) {
|
||||||
data.getPages().add(this.buildPageEntity(pagePersist));
|
data.getPages().add(this.buildPageEntity(pagePersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -264,9 +296,10 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
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;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setDescription(persist.getDescription());
|
data.setDescription(persist.getDescription());
|
||||||
|
@ -276,16 +309,16 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
data.setPage(persist.getPage());
|
data.setPage(persist.getPage());
|
||||||
data.setTitle(persist.getTitle());
|
data.setTitle(persist.getTitle());
|
||||||
|
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getSections())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getSections())) {
|
||||||
data.setSections(new ArrayList<>());
|
data.setSections(new ArrayList<>());
|
||||||
for (SectionPersist sectionPersist: persist.getSections()) {
|
for (SectionPersist sectionPersist : persist.getSections()) {
|
||||||
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getFieldSets())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getFieldSets())) {
|
||||||
data.setFieldSets(new ArrayList<>());
|
data.setFieldSets(new ArrayList<>());
|
||||||
for (FieldSetPersist fieldSetPersist: persist.getFieldSets()) {
|
for (FieldSetPersist fieldSetPersist : persist.getFieldSets()) {
|
||||||
data.getFieldSets().add(this.buildFieldSetEntity(fieldSetPersist));
|
data.getFieldSets().add(this.buildFieldSetEntity(fieldSetPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -293,9 +326,10 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull FieldSetEntity buildFieldSetEntity(FieldSetPersist persist){
|
private @NotNull FieldSetEntity buildFieldSetEntity(FieldSetPersist persist) {
|
||||||
FieldSetEntity data = new FieldSetEntity();
|
FieldSetEntity data = new FieldSetEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setDescription(persist.getDescription());
|
data.setDescription(persist.getDescription());
|
||||||
|
@ -304,22 +338,24 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
data.setNumbering(persist.getNumbering());
|
data.setNumbering(persist.getNumbering());
|
||||||
data.setAdditionalInformation(persist.getAdditionalInformation());
|
data.setAdditionalInformation(persist.getAdditionalInformation());
|
||||||
data.setTitle(persist.getTitle());
|
data.setTitle(persist.getTitle());
|
||||||
if (persist.getMultiplicity() != null) data.setMultiplicity(this.buildMultiplicityEntity(persist.getMultiplicity()));
|
if (persist.getMultiplicity() != null)
|
||||||
|
data.setMultiplicity(this.buildMultiplicityEntity(persist.getMultiplicity()));
|
||||||
data.setHasCommentField(persist.getHasCommentField());
|
data.setHasCommentField(persist.getHasCommentField());
|
||||||
data.setTitle(persist.getTitle());
|
data.setTitle(persist.getTitle());
|
||||||
|
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getFields())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getFields())) {
|
||||||
data.setFields(new ArrayList<>());
|
data.setFields(new ArrayList<>());
|
||||||
for (FieldPersist fieldPersist: persist.getFields()) {
|
for (FieldPersist fieldPersist : persist.getFields()) {
|
||||||
data.getFields().add(this.buildFieldEntity(fieldPersist));
|
data.getFields().add(this.buildFieldEntity(fieldPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull FieldEntity buildFieldEntity(FieldPersist persist){
|
private @NotNull FieldEntity buildFieldEntity(FieldPersist persist) {
|
||||||
FieldEntity data = new FieldEntity();
|
FieldEntity data = new FieldEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setOrdinal(persist.getOrdinal());
|
data.setOrdinal(persist.getOrdinal());
|
||||||
|
@ -328,56 +364,65 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
data.setDefaultValue(persist.getDefaultValue());
|
data.setDefaultValue(persist.getDefaultValue());
|
||||||
data.setValidations(persist.getValidations());
|
data.setValidations(persist.getValidations());
|
||||||
data.setIncludeInExport(persist.getIncludeInExport());
|
data.setIncludeInExport(persist.getIncludeInExport());
|
||||||
if (persist.getData() != null) data.setData(this.buildFieldDataEntity(persist.getData()));
|
if (persist.getData() != null)
|
||||||
|
data.setData(this.buildFieldDataEntity(persist.getData()));
|
||||||
|
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getVisibilityRules())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getVisibilityRules())) {
|
||||||
data.setVisibilityRules(new ArrayList<>());
|
data.setVisibilityRules(new ArrayList<>());
|
||||||
for (RulePersist fieldPersist: persist.getVisibilityRules()) {
|
for (RulePersist fieldPersist : persist.getVisibilityRules()) {
|
||||||
data.getVisibilityRules().add(this.buildRuleEntity(fieldPersist));
|
data.getVisibilityRules().add(this.buildRuleEntity(fieldPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseFieldDataEntity<?> buildFieldDataEntity(BaseFieldDataPersist persist){
|
private BaseFieldDataEntity<?> buildFieldDataEntity(BaseFieldDataPersist persist) {
|
||||||
if (persist == null) return null;
|
if (persist == null)
|
||||||
|
return null;
|
||||||
return this.fieldDataHelperServiceProvider.get(persist.getFieldType()).applyPersist(persist);
|
return this.fieldDataHelperServiceProvider.get(persist.getFieldType()).applyPersist(persist);
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull RuleEntity buildRuleEntity(RulePersist persist){
|
private @NotNull RuleEntity buildRuleEntity(RulePersist persist) {
|
||||||
RuleEntity data = new RuleEntity();
|
RuleEntity data = new RuleEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
data.setTarget(persist.getTarget());
|
data.setTarget(persist.getTarget());
|
||||||
data.setValue(persist.getValue());
|
data.setValue(persist.getValue());
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull MultiplicityEntity buildMultiplicityEntity(MultiplicityPersist persist){
|
private @NotNull MultiplicityEntity buildMultiplicityEntity(MultiplicityPersist persist) {
|
||||||
MultiplicityEntity data = new MultiplicityEntity();
|
MultiplicityEntity data = new MultiplicityEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
if (persist.getMax() != null) data.setMax(persist.getMax());
|
if (persist.getMax() != null)
|
||||||
if (persist.getMin() != null) data.setMin(persist.getMin());
|
data.setMax(persist.getMax());
|
||||||
if (persist.getPlaceholder() != null) data.setPlaceholder(persist.getPlaceholder());
|
if (persist.getMin() != null)
|
||||||
if (persist.getTableView() != null) data.setTableView(persist.getTableView());
|
data.setMin(persist.getMin());
|
||||||
|
if (persist.getPlaceholder() != null)
|
||||||
|
data.setPlaceholder(persist.getPlaceholder());
|
||||||
|
if (persist.getTableView() != null)
|
||||||
|
data.setTableView(persist.getTableView());
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull PageEntity buildPageEntity(PagePersist persist){
|
private @NotNull PageEntity buildPageEntity(PagePersist persist) {
|
||||||
PageEntity data = new PageEntity();
|
PageEntity data = new PageEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setOrdinal(persist.getOrdinal());
|
data.setOrdinal(persist.getOrdinal());
|
||||||
data.setTitle(persist.getTitle());
|
data.setTitle(persist.getTitle());
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Delete
|
//region Delete
|
||||||
|
|
||||||
public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException {
|
public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException {
|
||||||
logger.debug("deleting dataset: {}", id);
|
logger.debug("deleting dataset: {}", id);
|
||||||
|
|
||||||
|
@ -387,9 +432,9 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Clone
|
//region Clone
|
||||||
|
|
||||||
public DescriptionTemplate buildClone(UUID id, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException {
|
public DescriptionTemplate 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));
|
||||||
|
|
||||||
|
@ -397,7 +442,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
|
|
||||||
DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id);
|
DescriptionTemplateQuery query = this.queryFactory.query(DescriptionTemplateQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id);
|
||||||
DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields));
|
DescriptionTemplate model = this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields));
|
||||||
if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (model == null)
|
||||||
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
|
|
||||||
model.setLabel(model.getLabel() + " new ");
|
model.setLabel(model.getLabel() + " new ");
|
||||||
model.setId(null);
|
model.setId(null);
|
||||||
|
@ -408,80 +454,89 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignDefinition(Definition model){
|
private void reassignDefinition(Definition model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (model.getSections() != null){
|
if (model.getSections() != null) {
|
||||||
for (Section section : model.getSections()) {
|
for (Section section : model.getSections()) {
|
||||||
this.reassignSection(section);
|
this.reassignSection(section);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.getPages() != null){
|
if (model.getPages() != null) {
|
||||||
for (Page page : model.getPages()) {
|
for (Page page : model.getPages()) {
|
||||||
this.reassignPage(page);
|
this.reassignPage(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignPage(Page model){
|
private void reassignPage(Page model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID().toString());
|
model.setId(UUID.randomUUID().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignSection(Section model){
|
private void reassignSection(Section model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID().toString());
|
model.setId(UUID.randomUUID().toString());
|
||||||
|
|
||||||
if (model.getSections() != null){
|
if (model.getSections() != null) {
|
||||||
for (Section section : model.getSections()) {
|
for (Section section : model.getSections()) {
|
||||||
this.reassignSection(section);
|
this.reassignSection(section);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (model.getFieldSets() != null){
|
if (model.getFieldSets() != null) {
|
||||||
for (eu.eudat.model.descriptiontemplatedefinition.FieldSet fieldSet : model.getFieldSets()) {
|
for (eu.eudat.model.descriptiontemplatedefinition.FieldSet fieldSet : model.getFieldSets()) {
|
||||||
this.reassignFieldSet(fieldSet);
|
this.reassignFieldSet(fieldSet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignFieldSet(eu.eudat.model.descriptiontemplatedefinition.FieldSet model){
|
private void reassignFieldSet(eu.eudat.model.descriptiontemplatedefinition.FieldSet model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID().toString());
|
model.setId(UUID.randomUUID().toString());
|
||||||
|
|
||||||
if (model.getFields() != null){
|
if (model.getFields() != null) {
|
||||||
for (Field field : model.getFields()) {
|
for (Field field : model.getFields()) {
|
||||||
this.reassignField(field);
|
this.reassignField(field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignField(Field model){
|
private void reassignField(Field model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID().toString());
|
model.setId(UUID.randomUUID().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region NewVersion
|
//region NewVersion
|
||||||
|
|
||||||
public DescriptionTemplate createNewVersion(NewVersionDescriptionTemplatePersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException {
|
public DescriptionTemplate createNewVersion(NewVersionDescriptionTemplatePersist model, FieldSet fields) throws MyForbiddenException, MyValidationException, MyApplicationException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException {
|
||||||
logger.debug(new MapLogEntry("persisting data descriptionTemplateType").And("model", model).And("fields", fields));
|
logger.debug(new MapLogEntry("persisting data descriptionTemplateType").And("model", model).And("fields", fields));
|
||||||
|
|
||||||
this.authorizationService.authorizeForce(Permission.CreateNewVersionDescriptionTemplate);
|
this.authorizationService.authorizeForce(Permission.CreateNewVersionDescriptionTemplate);
|
||||||
|
|
||||||
DescriptionTemplateEntity oldDescriptionTemplateEntity = this.entityManager.find(DescriptionTemplateEntity.class, model.getId());
|
DescriptionTemplateEntity oldDescriptionTemplateEntity = this.entityManager.find(DescriptionTemplateEntity.class, model.getId());
|
||||||
if (oldDescriptionTemplateEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (oldDescriptionTemplateEntity == null)
|
||||||
if (!this.conventionService.hashValue(oldDescriptionTemplateEntity.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
|
if (!this.conventionService.hashValue(oldDescriptionTemplateEntity.getUpdatedAt()).equals(model.getHash()))
|
||||||
|
throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
|
||||||
|
|
||||||
DescriptionTemplateQuery latestVersionDescriptionTemplateEntityQuery = this.queryFactory.query(DescriptionTemplateQuery.class).versionStatuses(DescriptionTemplateVersionStatus.Current).groupIds(oldDescriptionTemplateEntity.getGroupId());
|
DescriptionTemplateQuery latestVersionDescriptionTemplateEntityQuery = this.queryFactory.query(DescriptionTemplateQuery.class).versionStatuses(DescriptionTemplateVersionStatus.Current).groupIds(oldDescriptionTemplateEntity.getGroupId());
|
||||||
List<DescriptionTemplateEntity> latestVersionDescriptionTemplates = latestVersionDescriptionTemplateEntityQuery.collect();
|
List<DescriptionTemplateEntity> latestVersionDescriptionTemplates = latestVersionDescriptionTemplateEntityQuery.collect();
|
||||||
if (latestVersionDescriptionTemplates.isEmpty()) throw new MyValidationException("Previous template not found");
|
if (latestVersionDescriptionTemplates.isEmpty())
|
||||||
if (latestVersionDescriptionTemplates.size() > 1) throw new MyValidationException("Multiple previous template found");
|
throw new MyValidationException("Previous template not found");
|
||||||
if (!latestVersionDescriptionTemplates.get(0).getVersion().equals(oldDescriptionTemplateEntity.getVersion())){
|
if (latestVersionDescriptionTemplates.size() > 1)
|
||||||
|
throw new MyValidationException("Multiple previous template found");
|
||||||
|
if (!latestVersionDescriptionTemplates.get(0).getVersion().equals(oldDescriptionTemplateEntity.getVersion())) {
|
||||||
throw new MyValidationException(this.errors.getDescriptionTemplateNewVersionConflict().getCode(), this.errors.getDescriptionTemplateNewVersionConflict().getMessage());
|
throw new MyValidationException(this.errors.getDescriptionTemplateNewVersionConflict().getCode(), this.errors.getDescriptionTemplateNewVersionConflict().getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
DescriptionTemplateEntity data = new DescriptionTemplateEntity();
|
DescriptionTemplateEntity data = new DescriptionTemplateEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
data.setIsActive(IsActive.Active);
|
data.setIsActive(IsActive.Active);
|
||||||
|
@ -489,32 +544,32 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
data.setUpdatedAt(Instant.now());
|
data.setUpdatedAt(Instant.now());
|
||||||
data.setVersionStatus(DescriptionTemplateVersionStatus.Current);
|
data.setVersionStatus(DescriptionTemplateVersionStatus.Current);
|
||||||
data.setGroupId(oldDescriptionTemplateEntity.getGroupId());
|
data.setGroupId(oldDescriptionTemplateEntity.getGroupId());
|
||||||
data.setVersion((short)(oldDescriptionTemplateEntity.getVersion() + 1));
|
data.setVersion((short) (oldDescriptionTemplateEntity.getVersion() + 1));
|
||||||
data.setDescription(model.getDescription());
|
data.setDescription(model.getDescription());
|
||||||
data.setLabel(model.getLabel());
|
data.setLabel(model.getLabel());
|
||||||
data.setTypeId(model.getType());
|
data.setTypeId(model.getType());
|
||||||
data.setLanguage(model.getLanguage());
|
data.setLanguage(model.getLanguage());
|
||||||
data.setStatus(model.getStatus());
|
data.setStatus(model.getStatus());
|
||||||
data.setDefinition(this.xmlHandlingService.toXml(this.buildDefinitionEntity(model.getDefinition())));
|
data.setDefinition(this.xmlHandlingService.toXml(this.buildDefinitionEntity(model.getDefinition())));
|
||||||
|
|
||||||
this.entityManager.persist(data);
|
this.entityManager.persist(data);
|
||||||
|
|
||||||
this.persistUsers(data.getId(), model.getUsers());
|
this.persistUsers(data.getId(), model.getUsers());
|
||||||
|
|
||||||
//this.addOwner(data);
|
//this.addOwner(data);
|
||||||
|
|
||||||
oldDescriptionTemplateEntity.setVersionStatus(DescriptionTemplateVersionStatus.Previous);
|
oldDescriptionTemplateEntity.setVersionStatus(DescriptionTemplateVersionStatus.Previous);
|
||||||
this.entityManager.merge(oldDescriptionTemplateEntity);
|
this.entityManager.merge(oldDescriptionTemplateEntity);
|
||||||
|
|
||||||
this.entityManager.flush();
|
this.entityManager.flush();
|
||||||
|
|
||||||
return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data);
|
return this.builderFactory.builder(DescriptionTemplateBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DescriptionTemplate._id), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Import
|
//region Import
|
||||||
|
|
||||||
public DescriptionTemplate importXml(byte[] bytes, UUID id, String label, FieldSet fields) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, TransformerException, InvalidApplicationException, IOException, InstantiationException, IllegalAccessException, SAXException {
|
public DescriptionTemplate importXml(byte[] bytes, UUID id, 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("fields", fields));
|
logger.debug(new MapLogEntry("import data").And("bytes", bytes).And("fields", fields));
|
||||||
|
|
||||||
|
@ -529,7 +584,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
persist.setLanguage(importXml.getLanguage());
|
persist.setLanguage(importXml.getLanguage());
|
||||||
persist.setType(importXml.getType());
|
persist.setType(importXml.getType());
|
||||||
persist.setDefinition(this.xmlDefinitionToPersist(importXml));
|
persist.setDefinition(this.xmlDefinitionToPersist(importXml));
|
||||||
this.validationService.validateForce(persist);
|
this.validatorFactory.validator(DescriptionTemplatePersist.DescriptionTemplatePersistValidator.class).validateForce(persist);
|
||||||
return this.persist(persist, fields);
|
return this.persist(persist, fields);
|
||||||
} else {
|
} else {
|
||||||
NewVersionDescriptionTemplatePersist persist = new NewVersionDescriptionTemplatePersist();
|
NewVersionDescriptionTemplatePersist persist = new NewVersionDescriptionTemplatePersist();
|
||||||
|
@ -540,19 +595,21 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
persist.setLanguage(importXml.getLanguage());
|
persist.setLanguage(importXml.getLanguage());
|
||||||
persist.setDefinition(this.xmlDefinitionToPersist(importXml));
|
persist.setDefinition(this.xmlDefinitionToPersist(importXml));
|
||||||
persist.setType(importXml.getType());
|
persist.setType(importXml.getType());
|
||||||
|
|
||||||
DescriptionTemplateEntity oldDescriptionTemplateEntity = this.entityManager.find(DescriptionTemplateEntity.class, id);
|
DescriptionTemplateEntity oldDescriptionTemplateEntity = this.entityManager.find(DescriptionTemplateEntity.class, id);
|
||||||
if (oldDescriptionTemplateEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (oldDescriptionTemplateEntity == null)
|
||||||
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
persist.setHash(this.conventionService.hashValue(oldDescriptionTemplateEntity.getUpdatedAt()));
|
persist.setHash(this.conventionService.hashValue(oldDescriptionTemplateEntity.getUpdatedAt()));
|
||||||
this.validationService.validateForce(persist);
|
this.validatorFactory.validator(DescriptionTemplatePersist.DescriptionTemplatePersistValidator.class).validateForce(persist);
|
||||||
return this.createNewVersion(persist, fields);
|
return this.createNewVersion(persist, fields);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DefinitionPersist xmlDefinitionToPersist(DescriptionTemplateImportExport importExport){
|
public DefinitionPersist xmlDefinitionToPersist(DescriptionTemplateImportExport importExport) {
|
||||||
DefinitionPersist definitionPersist = new DefinitionPersist();
|
DefinitionPersist definitionPersist = new DefinitionPersist();
|
||||||
if(importExport == null) return null;
|
if (importExport == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
List<PagePersist> pagesDatasetEntity = new LinkedList<>();
|
List<PagePersist> pagesDatasetEntity = new LinkedList<>();
|
||||||
List<SectionPersist> sectionDatasetEntity = new LinkedList<>();
|
List<SectionPersist> sectionDatasetEntity = new LinkedList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(importExport.getPages())) {
|
if (!this.conventionService.isListNullOrEmpty(importExport.getPages())) {
|
||||||
|
@ -570,8 +627,8 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
|
|
||||||
return definitionPersist;
|
return definitionPersist;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PagePersist xmlPageToPersist(PageImportExport importExport){
|
public PagePersist xmlPageToPersist(PageImportExport importExport) {
|
||||||
PagePersist pageEntity = new PagePersist();
|
PagePersist pageEntity = new PagePersist();
|
||||||
pageEntity.setId(importExport.getId());
|
pageEntity.setId(importExport.getId());
|
||||||
pageEntity.setOrdinal(importExport.getOrdinal());
|
pageEntity.setOrdinal(importExport.getOrdinal());
|
||||||
|
@ -594,7 +651,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
sectionEntity.setPage(importExport.getPage());
|
sectionEntity.setPage(importExport.getPage());
|
||||||
sectionEntity.setDescription(importExport.getDescription());
|
sectionEntity.setDescription(importExport.getDescription());
|
||||||
List<FieldSetPersist> fieldSetEntity = new LinkedList<>();
|
List<FieldSetPersist> fieldSetEntity = new LinkedList<>();
|
||||||
if(!this.conventionService.isListNullOrEmpty(importExport.getFieldSets())) {
|
if (!this.conventionService.isListNullOrEmpty(importExport.getFieldSets())) {
|
||||||
for (FieldSetImportExport xmlFieldSet : importExport.getFieldSets()) {
|
for (FieldSetImportExport xmlFieldSet : importExport.getFieldSets()) {
|
||||||
fieldSetEntity.add(this.toFieldSetModel(xmlFieldSet));
|
fieldSetEntity.add(this.toFieldSetModel(xmlFieldSet));
|
||||||
}
|
}
|
||||||
|
@ -606,7 +663,6 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return sectionEntity;
|
return sectionEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public FieldSetPersist toFieldSetModel(FieldSetImportExport importExport) {
|
public FieldSetPersist toFieldSetModel(FieldSetImportExport importExport) {
|
||||||
FieldSetPersist fieldSet1Entity = new FieldSetPersist();
|
FieldSetPersist fieldSet1Entity = new FieldSetPersist();
|
||||||
fieldSet1Entity.setId(importExport.getId());
|
fieldSet1Entity.setId(importExport.getId());
|
||||||
|
@ -619,7 +675,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
fieldSet1Entity.setAdditionalInformation(importExport.getAdditionalInformation());
|
fieldSet1Entity.setAdditionalInformation(importExport.getAdditionalInformation());
|
||||||
|
|
||||||
List<FieldPersist> fieldsEntity = new LinkedList<>();
|
List<FieldPersist> fieldsEntity = new LinkedList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(importExport.getFields())){
|
if (!this.conventionService.isListNullOrEmpty(importExport.getFields())) {
|
||||||
for (FieldImportExport xmlField : importExport.getFields()) {
|
for (FieldImportExport xmlField : importExport.getFields()) {
|
||||||
fieldsEntity.add(this.xmlFieldToPersist(xmlField));
|
fieldsEntity.add(this.xmlFieldToPersist(xmlField));
|
||||||
}
|
}
|
||||||
|
@ -628,15 +684,14 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return fieldSet1Entity;
|
return fieldSet1Entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public FieldPersist xmlFieldToPersist(FieldImportExport importExport) {
|
public FieldPersist xmlFieldToPersist(FieldImportExport importExport) {
|
||||||
FieldPersist fieldEntity = new FieldPersist();
|
FieldPersist fieldEntity = new FieldPersist();
|
||||||
fieldEntity.setId(importExport.getId());
|
fieldEntity.setId(importExport.getId());
|
||||||
fieldEntity.setOrdinal(importExport.getOrdinal());
|
fieldEntity.setOrdinal(importExport.getOrdinal());
|
||||||
fieldEntity.setValidations(importExport.getValidations());
|
fieldEntity.setValidations(importExport.getValidations());
|
||||||
fieldEntity.setDefaultValue(importExport.getDefaultValue());
|
fieldEntity.setDefaultValue(importExport.getDefaultValue());
|
||||||
List<RulePersist> rulePersists = new ArrayList<>();
|
List<RulePersist> rulePersists = new ArrayList<>();
|
||||||
if(importExport.getVisibilityRules() !=null) {
|
if (importExport.getVisibilityRules() != null) {
|
||||||
for (RuleImportExport xmlRule : importExport.getVisibilityRules()) {
|
for (RuleImportExport xmlRule : importExport.getVisibilityRules()) {
|
||||||
rulePersists.add(this.toRuleModel(xmlRule));
|
rulePersists.add(this.toRuleModel(xmlRule));
|
||||||
}
|
}
|
||||||
|
@ -652,14 +707,13 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return fieldEntity;
|
return fieldEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RulePersist toRuleModel(RuleImportExport importExport){
|
public RulePersist toRuleModel(RuleImportExport importExport) {
|
||||||
RulePersist ruleEntity = new RulePersist();
|
RulePersist ruleEntity = new RulePersist();
|
||||||
ruleEntity.setTarget(importExport.getTarget());
|
ruleEntity.setTarget(importExport.getTarget());
|
||||||
ruleEntity.setValue(importExport.getValue());
|
ruleEntity.setValue(importExport.getValue());
|
||||||
return ruleEntity;
|
return ruleEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public MultiplicityPersist xmlMultiplicityToPersist(MultiplicityImportXml importXml) {
|
public MultiplicityPersist xmlMultiplicityToPersist(MultiplicityImportXml importXml) {
|
||||||
MultiplicityPersist multiplicityEntity = new MultiplicityPersist();
|
MultiplicityPersist multiplicityEntity = new MultiplicityPersist();
|
||||||
multiplicityEntity.setMax(importXml.getMax());
|
multiplicityEntity.setMax(importXml.getMax());
|
||||||
|
@ -668,9 +722,9 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
multiplicityEntity.setTableView(importXml.getTableView());
|
multiplicityEntity.setTableView(importXml.getTableView());
|
||||||
return multiplicityEntity;
|
return multiplicityEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Export
|
//region Export
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -679,20 +733,21 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
|
|
||||||
this.authorizationService.authorizeForce(Permission.ExportDescriptionTemplate);
|
this.authorizationService.authorizeForce(Permission.ExportDescriptionTemplate);
|
||||||
DescriptionTemplateEntity data = this.entityManager.find(DescriptionTemplateEntity.class, id);
|
DescriptionTemplateEntity data = this.entityManager.find(DescriptionTemplateEntity.class, id);
|
||||||
if (data == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (data == null)
|
||||||
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DescriptionTemplate.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
|
|
||||||
DefinitionEntity definition = this.xmlHandlingService.fromXml(DefinitionEntity.class, data.getDefinition());
|
DefinitionEntity definition = this.xmlHandlingService.fromXml(DefinitionEntity.class, data.getDefinition());
|
||||||
String xml = this.xmlHandlingService.toXml(this.definitionXmlToExport(data, definition));
|
String xml = this.xmlHandlingService.toXml(this.definitionXmlToExport(data, definition));
|
||||||
return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml");
|
return this.responseUtilsService.buildResponseFileFromText(xml, data.getLabel() + ".xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
private DescriptionTemplateImportExport definitionXmlToExport(DescriptionTemplateEntity data, DefinitionEntity entity){
|
private DescriptionTemplateImportExport definitionXmlToExport(DescriptionTemplateEntity data, DefinitionEntity entity) {
|
||||||
DescriptionTemplateImportExport xml = new DescriptionTemplateImportExport();
|
DescriptionTemplateImportExport xml = new DescriptionTemplateImportExport();
|
||||||
xml.setType(data.getTypeId());
|
xml.setType(data.getTypeId());
|
||||||
xml.setLanguage(data.getLanguage());
|
xml.setLanguage(data.getLanguage());
|
||||||
xml.setDescription(data.getDescription());
|
xml.setDescription(data.getDescription());
|
||||||
List<PageImportExport> pagesDatasetEntity = new LinkedList<>();
|
List<PageImportExport> pagesDatasetEntity = new LinkedList<>();
|
||||||
for (PageEntity xmlPage: entity.getPages()) {
|
for (PageEntity xmlPage : entity.getPages()) {
|
||||||
pagesDatasetEntity.add(this.pageXmlToExport(xmlPage, entity.getSections()));
|
pagesDatasetEntity.add(this.pageXmlToExport(xmlPage, entity.getSections()));
|
||||||
}
|
}
|
||||||
xml.setPages(pagesDatasetEntity);
|
xml.setPages(pagesDatasetEntity);
|
||||||
|
@ -700,7 +755,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PageImportExport pageXmlToExport(PageEntity entity, List<SectionEntity> sectionEntities){
|
private PageImportExport pageXmlToExport(PageEntity entity, List<SectionEntity> sectionEntities) {
|
||||||
PageImportExport xml = new PageImportExport();
|
PageImportExport xml = new PageImportExport();
|
||||||
xml.setId(entity.getId());
|
xml.setId(entity.getId());
|
||||||
xml.setOrdinal(entity.getOrdinal());
|
xml.setOrdinal(entity.getOrdinal());
|
||||||
|
@ -714,7 +769,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xml.setSections(sectionsListEntity);
|
xml.setSections(sectionsListEntity);
|
||||||
|
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -728,14 +783,14 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xml.setSections(sectionsListEntity);
|
xml.setSections(sectionsListEntity);
|
||||||
|
|
||||||
xml.setId(entity.getId());
|
xml.setId(entity.getId());
|
||||||
xml.setOrdinal(entity.getOrdinal());
|
xml.setOrdinal(entity.getOrdinal());
|
||||||
xml.setTitle(entity.getTitle());
|
xml.setTitle(entity.getTitle());
|
||||||
xml.setPage(entity.getPage());
|
xml.setPage(entity.getPage());
|
||||||
xml.setDescription(entity.getDescription());
|
xml.setDescription(entity.getDescription());
|
||||||
List<FieldSetImportExport> fieldSetEntity = new LinkedList<>();
|
List<FieldSetImportExport> fieldSetEntity = new LinkedList<>();
|
||||||
if(!this.conventionService.isListNullOrEmpty(entity.getFieldSets())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getFieldSets())) {
|
||||||
for (FieldSetEntity xmlFieldSet : entity.getFieldSets()) {
|
for (FieldSetEntity xmlFieldSet : entity.getFieldSets()) {
|
||||||
fieldSetEntity.add(this.fieldSetXmlToExport(xmlFieldSet));
|
fieldSetEntity.add(this.fieldSetXmlToExport(xmlFieldSet));
|
||||||
}
|
}
|
||||||
|
@ -746,7 +801,6 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private FieldSetImportExport fieldSetXmlToExport(FieldSetEntity entity) {
|
private FieldSetImportExport fieldSetXmlToExport(FieldSetEntity entity) {
|
||||||
FieldSetImportExport fieldSet1Entity = new FieldSetImportExport();
|
FieldSetImportExport fieldSet1Entity = new FieldSetImportExport();
|
||||||
fieldSet1Entity.setId(entity.getId());
|
fieldSet1Entity.setId(entity.getId());
|
||||||
|
@ -759,7 +813,7 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
fieldSet1Entity.setAdditionalInformation(entity.getAdditionalInformation());
|
fieldSet1Entity.setAdditionalInformation(entity.getAdditionalInformation());
|
||||||
|
|
||||||
List<FieldImportExport> fieldsEntity = new LinkedList<>();
|
List<FieldImportExport> fieldsEntity = new LinkedList<>();
|
||||||
if (entity.getFields() != null){
|
if (entity.getFields() != null) {
|
||||||
for (FieldEntity xmlField : entity.getFields()) {
|
for (FieldEntity xmlField : entity.getFields()) {
|
||||||
fieldsEntity.add(this.fieldXmlToExport(xmlField));
|
fieldsEntity.add(this.fieldXmlToExport(xmlField));
|
||||||
}
|
}
|
||||||
|
@ -768,15 +822,14 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return fieldSet1Entity;
|
return fieldSet1Entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private FieldImportExport fieldXmlToExport(FieldEntity entity) {
|
private FieldImportExport fieldXmlToExport(FieldEntity entity) {
|
||||||
FieldImportExport xml = new FieldImportExport();
|
FieldImportExport xml = new FieldImportExport();
|
||||||
xml.setId(entity.getId());
|
xml.setId(entity.getId());
|
||||||
xml.setOrdinal(entity.getOrdinal());
|
xml.setOrdinal(entity.getOrdinal());
|
||||||
xml.setValidations(entity.getValidations());
|
xml.setValidations(entity.getValidations());
|
||||||
xml.setDefaultValue(entity.getDefaultValue());
|
xml.setDefaultValue(entity.getDefaultValue());
|
||||||
List<RuleImportExport> rulePersists = new ArrayList<>();
|
List<RuleImportExport> rulePersists = new ArrayList<>();
|
||||||
if(!this.conventionService.isListNullOrEmpty(entity.getVisibilityRules())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getVisibilityRules())) {
|
||||||
for (RuleEntity xmlRule : entity.getVisibilityRules()) {
|
for (RuleEntity xmlRule : entity.getVisibilityRules()) {
|
||||||
rulePersists.add(this.toRuleModel(xmlRule));
|
rulePersists.add(this.toRuleModel(xmlRule));
|
||||||
}
|
}
|
||||||
|
@ -792,14 +845,13 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RuleImportExport toRuleModel(RuleEntity entity){
|
private RuleImportExport toRuleModel(RuleEntity entity) {
|
||||||
RuleImportExport xml = new RuleImportExport();
|
RuleImportExport xml = new RuleImportExport();
|
||||||
xml.setTarget(entity.getTarget());
|
xml.setTarget(entity.getTarget());
|
||||||
xml.setValue(entity.getValue());
|
xml.setValue(entity.getValue());
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private MultiplicityImportXml multiplicityXmlToExport(MultiplicityEntity entity) {
|
private MultiplicityImportXml multiplicityXmlToExport(MultiplicityEntity entity) {
|
||||||
MultiplicityImportXml xml = new MultiplicityImportXml();
|
MultiplicityImportXml xml = new MultiplicityImportXml();
|
||||||
xml.setMax(entity.getMax());
|
xml.setMax(entity.getMax());
|
||||||
|
@ -808,25 +860,25 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
xml.setTableView(entity.getTableView());
|
xml.setTableView(entity.getTableView());
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region
|
//region
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getSemantics(String query) throws IOException {
|
public List<String> getSemantics(String query) throws IOException {
|
||||||
List<Semantic> semantics = this.getSemantics();
|
List<Semantic> semantics = this.getSemantics();
|
||||||
List<String> filteredSemantics = semantics.stream().map(Semantic::getName).collect(Collectors.toList());
|
List<String> filteredSemantics = semantics.stream().map(Semantic::getName).collect(Collectors.toList());
|
||||||
if(query != null && !query.isEmpty()){
|
if (query != null && !query.isEmpty()) {
|
||||||
filteredSemantics = semantics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Semantic::getName).collect(Collectors.toList());
|
filteredSemantics = semantics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Semantic::getName).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
return filteredSemantics;
|
return filteredSemantics;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Semantic> getSemantics() throws IOException {
|
public List<Semantic> getSemantics() throws IOException {
|
||||||
this.authorizationService.authorizeForce(Permission.BrowseDescriptionTemplate);
|
this.authorizationService.authorizeForce(Permission.BrowseDescriptionTemplate);
|
||||||
|
|
||||||
if (semantics == null) {
|
if (semantics == null) {
|
||||||
semantics = new ArrayList<>();
|
semantics = new ArrayList<>();
|
||||||
this.loadSemantics();
|
this.loadSemantics();
|
||||||
|
@ -840,13 +892,12 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
|
||||||
try {
|
try {
|
||||||
String json = new String(bytes, StandardCharsets.UTF_8);
|
String json = new String(bytes, StandardCharsets.UTF_8);
|
||||||
semantics = List.of(jsonHandlingService.fromJson(Semantic[].class, json));
|
semantics = List.of(jsonHandlingService.fromJson(Semantic[].class, json));
|
||||||
}
|
} catch (IOException e) {
|
||||||
catch (IOException e) {
|
|
||||||
logger.error(e.getMessage(), e);
|
logger.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,13 @@ 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.*;
|
import eu.eudat.commons.enums.DmpBlueprintFieldCategory;
|
||||||
|
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.commons.types.dmpblueprint.importexport.*;
|
||||||
|
import eu.eudat.commons.validation.ValidatorFactory;
|
||||||
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;
|
||||||
|
@ -33,7 +37,6 @@ 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;
|
||||||
|
@ -70,13 +73,19 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
private final BuilderFactory builderFactory;
|
private final BuilderFactory builderFactory;
|
||||||
|
|
||||||
private final ConventionService conventionService;
|
private final ConventionService conventionService;
|
||||||
|
|
||||||
private final MessageSource messageSource;
|
private final MessageSource messageSource;
|
||||||
|
|
||||||
private final QueryFactory queryFactory;
|
private final QueryFactory queryFactory;
|
||||||
|
|
||||||
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;
|
|
||||||
|
private final ValidatorFactory validatorFactory;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DmpBlueprintServiceImpl(
|
public DmpBlueprintServiceImpl(
|
||||||
EntityManager entityManager,
|
EntityManager entityManager,
|
||||||
|
@ -85,10 +94,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
BuilderFactory builderFactory,
|
BuilderFactory builderFactory,
|
||||||
ConventionService conventionService,
|
ConventionService conventionService,
|
||||||
MessageSource messageSource, QueryFactory queryFactory,
|
MessageSource messageSource, QueryFactory queryFactory,
|
||||||
ResponseUtilsService responseUtilsService,
|
ResponseUtilsService responseUtilsService,
|
||||||
XmlHandlingService xmlHandlingService,
|
XmlHandlingService xmlHandlingService,
|
||||||
ErrorThesaurusProperties errors,
|
ErrorThesaurusProperties errors,
|
||||||
ValidationService validationService) {
|
ValidatorFactory validatorFactory) {
|
||||||
this.entityManager = entityManager;
|
this.entityManager = entityManager;
|
||||||
this.authorizationService = authorizationService;
|
this.authorizationService = authorizationService;
|
||||||
this.deleterFactory = deleterFactory;
|
this.deleterFactory = deleterFactory;
|
||||||
|
@ -99,7 +108,7 @@ 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;
|
this.validatorFactory = validatorFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
//region Persist
|
//region Persist
|
||||||
|
@ -114,8 +123,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
DmpBlueprintEntity data;
|
DmpBlueprintEntity data;
|
||||||
if (isUpdate) {
|
if (isUpdate) {
|
||||||
data = this.entityManager.find(DmpBlueprintEntity.class, model.getId());
|
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()));
|
if (data == null)
|
||||||
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
|
throw new MyNotFoundException(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());
|
||||||
} else {
|
} else {
|
||||||
data = new DmpBlueprintEntity();
|
data = new DmpBlueprintEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
|
@ -127,46 +138,51 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
data.setStatus(model.getStatus());
|
data.setStatus(model.getStatus());
|
||||||
data.setUpdatedAt(Instant.now());
|
data.setUpdatedAt(Instant.now());
|
||||||
data.setDefinition(this.xmlHandlingService.toXml(this.buildDefinitionEntity(model.getDefinition())));
|
data.setDefinition(this.xmlHandlingService.toXml(this.buildDefinitionEntity(model.getDefinition())));
|
||||||
|
|
||||||
if (isUpdate) this.entityManager.merge(data);
|
if (isUpdate)
|
||||||
else this.entityManager.persist(data);
|
this.entityManager.merge(data);
|
||||||
|
else
|
||||||
|
this.entityManager.persist(data);
|
||||||
|
|
||||||
this.entityManager.flush();
|
this.entityManager.flush();
|
||||||
|
|
||||||
return this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DmpBlueprint._id), data);
|
return this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(BaseFieldSet.build(fields, DmpBlueprint._id), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist){
|
private @NotNull DefinitionEntity buildDefinitionEntity(DefinitionPersist persist) {
|
||||||
DefinitionEntity data = new DefinitionEntity();
|
DefinitionEntity data = new DefinitionEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getSections())){
|
return data;
|
||||||
|
if (!this.conventionService.isListNullOrEmpty(persist.getSections())) {
|
||||||
data.setSections(new ArrayList<>());
|
data.setSections(new ArrayList<>());
|
||||||
for (SectionPersist sectionPersist: persist.getSections()) {
|
for (SectionPersist sectionPersist : persist.getSections()) {
|
||||||
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
data.getSections().add(this.buildSectionEntity(sectionPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setDescription(persist.getDescription());
|
data.setDescription(persist.getDescription());
|
||||||
data.setLabel(persist.getLabel());
|
data.setLabel(persist.getLabel());
|
||||||
data.setOrdinal(persist.getOrdinal());
|
data.setOrdinal(persist.getOrdinal());
|
||||||
data.setHasTemplates(persist.getHasTemplates());
|
data.setHasTemplates(persist.getHasTemplates());
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getFields())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getFields())) {
|
||||||
data.setFields(new ArrayList<>());
|
data.setFields(new ArrayList<>());
|
||||||
for (FieldPersist fieldPersist: persist.getFields()) {
|
for (FieldPersist fieldPersist : persist.getFields()) {
|
||||||
data.getFields().add(this.buildExtraFieldEntity(fieldPersist));
|
data.getFields().add(this.buildExtraFieldEntity(fieldPersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.conventionService.isListNullOrEmpty(persist.getDescriptionTemplates())){
|
if (!this.conventionService.isListNullOrEmpty(persist.getDescriptionTemplates())) {
|
||||||
data.setDescriptionTemplates(new ArrayList<>());
|
data.setDescriptionTemplates(new ArrayList<>());
|
||||||
for (DescriptionTemplatePersist descriptionTemplatePersist: persist.getDescriptionTemplates()) {
|
for (DescriptionTemplatePersist descriptionTemplatePersist : persist.getDescriptionTemplates()) {
|
||||||
data.getDescriptionTemplates().add(this.buildDescriptionTemplateEntity(descriptionTemplatePersist));
|
data.getDescriptionTemplates().add(this.buildDescriptionTemplateEntity(descriptionTemplatePersist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,9 +190,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull DescriptionTemplateEntity buildDescriptionTemplateEntity(DescriptionTemplatePersist persist){
|
private @NotNull DescriptionTemplateEntity buildDescriptionTemplateEntity(DescriptionTemplatePersist persist) {
|
||||||
DescriptionTemplateEntity data = new DescriptionTemplateEntity();
|
DescriptionTemplateEntity data = new DescriptionTemplateEntity();
|
||||||
if (persist == null) return data;
|
if (persist == null)
|
||||||
|
return data;
|
||||||
|
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
data.setDescriptionTemplateId(persist.getDescriptionTemplateId());
|
data.setDescriptionTemplateId(persist.getDescriptionTemplateId());
|
||||||
|
@ -187,16 +204,17 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull FieldEntity buildExtraFieldEntity(FieldPersist persist){
|
private @NotNull FieldEntity buildExtraFieldEntity(FieldPersist persist) {
|
||||||
if (persist == null) return new ExtraFieldEntity();
|
if (persist == null)
|
||||||
|
return new ExtraFieldEntity();
|
||||||
FieldEntity data;
|
FieldEntity data;
|
||||||
if (DmpBlueprintFieldCategory.Extra.equals(persist.getCategory())){
|
if (DmpBlueprintFieldCategory.Extra.equals(persist.getCategory())) {
|
||||||
ExtraFieldEntity dataTyped = new ExtraFieldEntity();
|
ExtraFieldEntity dataTyped = new ExtraFieldEntity();
|
||||||
dataTyped.setType(((ExtraFieldPersist)persist).getDataType());
|
dataTyped.setType(((ExtraFieldPersist) persist).getDataType());
|
||||||
data = dataTyped;
|
data = dataTyped;
|
||||||
} else {
|
} else {
|
||||||
SystemFieldEntity dataTyped = new SystemFieldEntity();
|
SystemFieldEntity dataTyped = new SystemFieldEntity();
|
||||||
dataTyped.setType(((SystemFieldPersist)persist).getSystemFieldType());
|
dataTyped.setType(((SystemFieldPersist) persist).getSystemFieldType());
|
||||||
data = dataTyped;
|
data = dataTyped;
|
||||||
}
|
}
|
||||||
data.setId(persist.getId());
|
data.setId(persist.getId());
|
||||||
|
@ -213,7 +231,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Delete
|
//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);
|
||||||
|
|
||||||
|
@ -223,20 +241,22 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region FieldInBlueprint
|
//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());
|
||||||
if (definition == null || definition.getSections() == null) return false;
|
if (definition == null || definition.getSections() == null)
|
||||||
|
return false;
|
||||||
for(SectionEntity section: definition.getSections()){
|
|
||||||
if (section.getFields() == null) continue;
|
for (SectionEntity section : definition.getSections()) {
|
||||||
for(FieldEntity field: section.getFields()){
|
if (section.getFields() == null)
|
||||||
if(field.getCategory().equals(DmpBlueprintFieldCategory.System)){
|
continue;
|
||||||
SystemFieldEntity systemField = (SystemFieldEntity)field;
|
for (FieldEntity field : section.getFields()) {
|
||||||
if(systemField.getType().equals(type)){
|
if (field.getCategory().equals(DmpBlueprintFieldCategory.System)) {
|
||||||
|
SystemFieldEntity systemField = (SystemFieldEntity) field;
|
||||||
|
if (systemField.getType().equals(type)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,9 +265,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean fieldInBlueprint(UUID id, DmpBlueprintSystemFieldType type) {
|
public boolean fieldInBlueprint(UUID id, DmpBlueprintSystemFieldType type) {
|
||||||
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, id);
|
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()));
|
if (data == null)
|
||||||
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
return this.fieldInBlueprint(data, type);
|
return this.fieldInBlueprint(data, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,71 +283,78 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
|
|
||||||
DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id);
|
DmpBlueprintQuery query = this.queryFactory.query(DmpBlueprintQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).ids(id);
|
||||||
DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields));
|
DmpBlueprint model = this.builderFactory.builder(DmpBlueprintBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fields, query.firstAs(fields));
|
||||||
if (model == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
if (model == null)
|
||||||
|
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, DmpBlueprint.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
||||||
|
|
||||||
model.setLabel(model.getLabel() + " new ");
|
model.setLabel(model.getLabel() + " new ");
|
||||||
model.setId(null);
|
model.setId(null);
|
||||||
model.setHash(null);
|
model.setHash(null);
|
||||||
model.setStatus(DmpBlueprintStatus.Draft);
|
model.setStatus(DmpBlueprintStatus.Draft);
|
||||||
this.reassignDefinition(model.getDefinition());
|
this.reassignDefinition(model.getDefinition());
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignDefinition(Definition model){
|
private void reassignDefinition(Definition model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
if (model.getSections() != null){
|
|
||||||
|
if (model.getSections() != null) {
|
||||||
for (Section section : model.getSections()) {
|
for (Section section : model.getSections()) {
|
||||||
this.reassignSection(section);
|
this.reassignSection(section);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignSection(Section model){
|
private void reassignSection(Section model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID());
|
model.setId(UUID.randomUUID());
|
||||||
|
|
||||||
if (model.getFields() != null){
|
if (model.getFields() != null) {
|
||||||
for (Field field : model.getFields()) {
|
for (Field field : model.getFields()) {
|
||||||
this.reassignField(field);
|
this.reassignField(field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (model.getDescriptionTemplates() != null){
|
if (model.getDescriptionTemplates() != null) {
|
||||||
for (DescriptionTemplate descriptionTemplate : model.getDescriptionTemplates()) {
|
for (DescriptionTemplate descriptionTemplate : model.getDescriptionTemplates()) {
|
||||||
this.reassignDescriptionTemplate(descriptionTemplate);
|
this.reassignDescriptionTemplate(descriptionTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignField(Field model){
|
private void reassignField(Field model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID());
|
model.setId(UUID.randomUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reassignDescriptionTemplate(DescriptionTemplate model){
|
private void reassignDescriptionTemplate(DescriptionTemplate model) {
|
||||||
if (model == null) return;
|
if (model == null)
|
||||||
|
return;
|
||||||
model.setId(UUID.randomUUID());
|
model.setId(UUID.randomUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Export
|
//region Export
|
||||||
|
|
||||||
public ResponseEntity<byte[]> exportXml(UUID id) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, TransformerException, InvalidApplicationException {
|
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);
|
||||||
DmpBlueprintEntity data = this.entityManager.find(DmpBlueprintEntity.class, id);
|
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()));
|
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.xmlHandlingService.toXml(this.definitionXmlToExport(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 DefinitionImportExport definitionXmlToExport(DefinitionEntity entity){
|
private DefinitionImportExport definitionXmlToExport(DefinitionEntity entity) {
|
||||||
if (entity == null) return null;
|
if (entity == null)
|
||||||
|
return null;
|
||||||
DefinitionImportExport xml = new DefinitionImportExport();
|
DefinitionImportExport xml = new DefinitionImportExport();
|
||||||
List<SectionImportExport> dmpBlueprintSections = new ArrayList<>();
|
List<SectionImportExport> dmpBlueprintSections = new ArrayList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(entity.getSections())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getSections())) {
|
||||||
|
@ -347,19 +375,19 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
xml.setHasTemplates(entity.getHasTemplates());
|
xml.setHasTemplates(entity.getHasTemplates());
|
||||||
List<SystemFieldImportExport> dmpBlueprintSystemFieldModels = new LinkedList<>();
|
List<SystemFieldImportExport> dmpBlueprintSystemFieldModels = new LinkedList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
|
||||||
for (SystemFieldEntity systemField : entity.getFields().stream().filter(x-> x.getCategory() == DmpBlueprintFieldCategory.System).map(x-> (SystemFieldEntity)x).toList()) {
|
for (SystemFieldEntity systemField : entity.getFields().stream().filter(x -> x.getCategory() == DmpBlueprintFieldCategory.System).map(x -> (SystemFieldEntity) x).toList()) {
|
||||||
dmpBlueprintSystemFieldModels.add(this.systemFieldXmlToExport(systemField));
|
dmpBlueprintSystemFieldModels.add(this.systemFieldXmlToExport(systemField));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xml.setSystemFields(dmpBlueprintSystemFieldModels);
|
xml.setSystemFields(dmpBlueprintSystemFieldModels);
|
||||||
List<ExtraFieldImportExport> dmpBlueprintExtraFieldModels = new LinkedList<>();
|
List<ExtraFieldImportExport> dmpBlueprintExtraFieldModels = new LinkedList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getFields())) {
|
||||||
for (ExtraFieldEntity systemField : entity.getFields().stream().filter(x-> x.getCategory() == DmpBlueprintFieldCategory.Extra).map(x-> (ExtraFieldEntity)x).toList()) {
|
for (ExtraFieldEntity systemField : entity.getFields().stream().filter(x -> x.getCategory() == DmpBlueprintFieldCategory.Extra).map(x -> (ExtraFieldEntity) x).toList()) {
|
||||||
dmpBlueprintExtraFieldModels.add(this.extraFieldXmlToExport(systemField));
|
dmpBlueprintExtraFieldModels.add(this.extraFieldXmlToExport(systemField));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xml.setExtraFields(dmpBlueprintExtraFieldModels);
|
xml.setExtraFields(dmpBlueprintExtraFieldModels);
|
||||||
|
|
||||||
List<DescriptionTemplateImportExport> dmpBlueprintDescriptionTemplates = new LinkedList<>();
|
List<DescriptionTemplateImportExport> dmpBlueprintDescriptionTemplates = new LinkedList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(entity.getDescriptionTemplates())) {
|
if (!this.conventionService.isListNullOrEmpty(entity.getDescriptionTemplates())) {
|
||||||
for (DescriptionTemplateEntity descriptionTemplate : entity.getDescriptionTemplates()) {
|
for (DescriptionTemplateEntity descriptionTemplate : entity.getDescriptionTemplates()) {
|
||||||
|
@ -404,11 +432,10 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
//region Import
|
//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));
|
||||||
|
|
||||||
|
@ -418,16 +445,18 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
|
|
||||||
persist.setLabel(label);
|
persist.setLabel(label);
|
||||||
persist.setStatus(DmpBlueprintStatus.Draft);
|
persist.setStatus(DmpBlueprintStatus.Draft);
|
||||||
|
|
||||||
BlueprintImportExport dmpDefinition = this.xmlHandlingService.fromXml(BlueprintImportExport.class, new String(bytes, StandardCharsets.UTF_8));
|
|
||||||
if(dmpDefinition != null) persist.setDefinition(this.xmlDefinitionToPersist(dmpDefinition.getDmpBlueprintDefinition()));
|
|
||||||
|
|
||||||
this.validationService.validateForce(persist);
|
BlueprintImportExport dmpDefinition = this.xmlHandlingService.fromXml(BlueprintImportExport.class, new String(bytes, StandardCharsets.UTF_8));
|
||||||
|
if (dmpDefinition != null)
|
||||||
|
persist.setDefinition(this.xmlDefinitionToPersist(dmpDefinition.getDmpBlueprintDefinition()));
|
||||||
|
|
||||||
|
this.validatorFactory.validator(DmpBlueprintPersist.DmpBlueprintPersistValidator.class).validateForce(persist);
|
||||||
return this.persist(persist, fields);
|
return this.persist(persist, fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
private DefinitionPersist xmlDefinitionToPersist(DefinitionImportExport importXml){
|
private DefinitionPersist xmlDefinitionToPersist(DefinitionImportExport importXml) {
|
||||||
if (importXml == null) return null;
|
if (importXml == null)
|
||||||
|
return null;
|
||||||
DefinitionPersist persist = new DefinitionPersist();
|
DefinitionPersist persist = new DefinitionPersist();
|
||||||
List<SectionPersist> dmpBlueprintSections = new ArrayList<>();
|
List<SectionPersist> dmpBlueprintSections = new ArrayList<>();
|
||||||
if (!this.conventionService.isListNullOrEmpty(importXml.getSections())) {
|
if (!this.conventionService.isListNullOrEmpty(importXml.getSections())) {
|
||||||
|
@ -503,7 +532,7 @@ public class DmpBlueprintServiceImpl implements DmpBlueprintService {
|
||||||
persist.setRequired(importXml.isRequired());
|
persist.setRequired(importXml.isRequired());
|
||||||
return persist;
|
return persist;
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue