2023-10-24 11:47:48 +02:00
package eu.eudat.model.persist ;
2024-02-06 11:27:47 +01:00
import eu.eudat.commons.XmlHandlingService ;
2023-10-24 11:47:48 +02:00
import eu.eudat.commons.enums.DescriptionStatus ;
2024-02-06 11:27:47 +01:00
import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity ;
2023-12-21 17:45:49 +01:00
import eu.eudat.commons.validation.BaseValidator ;
2024-02-06 11:27:47 +01:00
import eu.eudat.data.DescriptionTemplateEntity ;
import eu.eudat.model.DescriptionTemplate ;
import gr.cite.tools.exception.MyNotFoundException ;
2024-01-17 10:20:02 +01:00
import gr.cite.tools.validation.ValidatorFactory ;
import gr.cite.tools.validation.specification.Specification ;
2023-12-21 17:45:49 +01:00
import eu.eudat.convention.ConventionService ;
2024-01-02 13:10:35 +01:00
import eu.eudat.data.DescriptionEntity ;
2023-12-21 17:45:49 +01:00
import eu.eudat.errorcode.ErrorThesaurusProperties ;
2023-11-15 16:06:49 +01:00
import eu.eudat.model.persist.descriptionproperties.PropertyDefinitionPersist ;
2024-02-06 11:27:47 +01:00
import jakarta.persistence.EntityManager ;
2023-12-21 17:45:49 +01:00
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 ;
2023-11-15 16:06:49 +01:00
2023-12-21 17:45:49 +01:00
import java.util.Arrays ;
2023-11-15 16:06:49 +01:00
import java.util.List ;
2023-10-24 11:47:48 +02:00
import java.util.UUID ;
public class DescriptionPersist {
private UUID id ;
private String label ;
2023-12-21 17:45:49 +01:00
public static final String _label = " label " ;
2023-11-15 16:06:49 +01:00
private UUID dmpId ;
2023-10-24 11:47:48 +02:00
2023-12-21 17:45:49 +01:00
public static final String _dmpId = " dmpId " ;
2023-11-15 16:06:49 +01:00
private UUID dmpDescriptionTemplateId ;
2023-10-24 11:47:48 +02:00
2023-12-21 17:45:49 +01:00
public static final String _dmpDescriptionTemplateId = " dmpDescriptionTemplateId " ;
2023-11-24 11:39:26 +01:00
private UUID descriptionTemplateId ;
2023-12-21 17:45:49 +01:00
public static final String _descriptionTemplateId = " descriptionTemplateId " ;
2023-10-24 11:47:48 +02:00
private DescriptionStatus status ;
2023-12-21 17:45:49 +01:00
public static final String _status = " status " ;
2023-10-24 11:47:48 +02:00
private String description ;
2023-11-15 16:06:49 +01:00
private PropertyDefinitionPersist properties ;
2023-12-21 17:45:49 +01:00
public static final String _properties = " properties " ;
2023-11-15 16:06:49 +01:00
private List < String > tags ;
2023-12-21 17:45:49 +01:00
public static final String _tags = " tags " ;
2023-11-15 16:06:49 +01:00
private String hash ;
2023-10-24 11:47:48 +02:00
2023-12-21 17:45:49 +01:00
public static final String _hash = " hash " ;
2023-10-24 11:47:48 +02:00
public UUID getId ( ) {
return id ;
}
public void setId ( UUID id ) {
this . id = id ;
}
public String getLabel ( ) {
return label ;
}
public void setLabel ( String label ) {
this . label = label ;
}
2023-11-15 16:06:49 +01:00
public UUID getDmpId ( ) {
return dmpId ;
2023-10-24 11:47:48 +02:00
}
2023-11-15 16:06:49 +01:00
public void setDmpId ( UUID dmpId ) {
this . dmpId = dmpId ;
2023-10-24 11:47:48 +02:00
}
2023-11-15 16:06:49 +01:00
public UUID getDmpDescriptionTemplateId ( ) {
return dmpDescriptionTemplateId ;
2023-10-24 11:47:48 +02:00
}
2023-11-15 16:06:49 +01:00
public void setDmpDescriptionTemplateId ( UUID dmpDescriptionTemplateId ) {
this . dmpDescriptionTemplateId = dmpDescriptionTemplateId ;
2023-10-24 11:47:48 +02:00
}
public DescriptionStatus getStatus ( ) {
return status ;
}
public void setStatus ( DescriptionStatus status ) {
this . status = status ;
}
public String getDescription ( ) {
return description ;
}
public void setDescription ( String description ) {
this . description = description ;
}
2023-11-15 16:06:49 +01:00
public PropertyDefinitionPersist getProperties ( ) {
return properties ;
}
public void setProperties ( PropertyDefinitionPersist properties ) {
this . properties = properties ;
}
public List < String > getTags ( ) {
return tags ;
}
public void setTags ( List < String > tags ) {
this . tags = tags ;
}
public String getHash ( ) {
return hash ;
2023-10-24 11:47:48 +02:00
}
2023-11-15 16:06:49 +01:00
public void setHash ( String hash ) {
this . hash = hash ;
2023-10-24 11:47:48 +02:00
}
2023-11-24 11:39:26 +01:00
public UUID getDescriptionTemplateId ( ) {
return descriptionTemplateId ;
}
public void setDescriptionTemplateId ( UUID descriptionTemplateId ) {
this . descriptionTemplateId = descriptionTemplateId ;
}
2023-12-21 17:45:49 +01:00
@Component ( DescriptionPersistValidator . ValidatorName )
@Scope ( ConfigurableBeanFactory . SCOPE_PROTOTYPE )
public static class DescriptionPersistValidator extends BaseValidator < DescriptionPersist > {
public static final String ValidatorName = " DescriptionPersistValidator " ;
private final MessageSource messageSource ;
private final ValidatorFactory validatorFactory ;
2024-02-06 11:27:47 +01:00
private final EntityManager entityManager ;
private final XmlHandlingService xmlHandlingService ;
2023-12-21 17:45:49 +01:00
2024-02-06 11:27:47 +01:00
protected DescriptionPersistValidator ( ConventionService conventionService , ErrorThesaurusProperties errors , MessageSource messageSource , ValidatorFactory validatorFactory , EntityManager entityManager , XmlHandlingService xmlHandlingService ) {
2023-12-21 17:45:49 +01:00
super ( conventionService , errors ) ;
this . messageSource = messageSource ;
this . validatorFactory = validatorFactory ;
2024-02-06 11:27:47 +01:00
this . entityManager = entityManager ;
this . xmlHandlingService = xmlHandlingService ;
2023-12-21 17:45:49 +01:00
}
@Override
protected Class < DescriptionPersist > modelClass ( ) {
return DescriptionPersist . class ;
}
@Override
protected List < Specification > specifications ( DescriptionPersist item ) {
2024-02-06 11:27:47 +01:00
DescriptionTemplateEntity descriptionTemplate = this . isValidGuid ( item . getDescriptionTemplateId ( ) ) ? this . entityManager . find ( DescriptionTemplateEntity . class , item . getDescriptionTemplateId ( ) ) : null ;
DefinitionEntity definition = descriptionTemplate = = null ? null : this . xmlHandlingService . fromXmlSafe ( DefinitionEntity . class , descriptionTemplate . getDefinition ( ) ) ;
2023-12-21 17:45:49 +01:00
return Arrays . asList (
2024-02-08 08:40:16 +01:00
// this.spec()
// .iff(() -> this.isValidGuid(item.getId()))
// .must(() -> this.isValidHash(item.getHash()))
// .failOn(DescriptionPersist._hash).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._hash}, LocaleContextHolder.getLocale())),
// this.spec()
// .iff(() -> !this.isValidGuid(item.getId()))
// .must(() -> !this.isValidHash(item.getHash()))
// .failOn(DescriptionPersist._hash).failWith(messageSource.getMessage("Validation_OverPosting", new Object[]{}, LocaleContextHolder.getLocale())),
// this.spec()
// .must(() -> !this.isEmpty(item.getLabel()))
// .failOn(DescriptionPersist._label).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._label}, LocaleContextHolder.getLocale())),
// this.spec()
// .iff(() -> !this.isEmpty(item.getLabel()))
// .must(() -> this.lessEqualLength(item.getLabel(), DescriptionEntity._labelLength))
// .failOn(DescriptionPersist._label).failWith(messageSource.getMessage("Validation_MaxLength", new Object[]{DescriptionPersist._label}, LocaleContextHolder.getLocale())),
// this.spec()
// .must(() -> this.isValidGuid(item.getDmpId()))
// .failOn(DescriptionPersist._dmpId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpId}, LocaleContextHolder.getLocale())),
// this.spec()
// .iff(() -> item.getStatus() == DescriptionStatus.Finalized)
// .must(() -> this.isValidGuid(item.getDescriptionTemplateId()))
// .failOn(DescriptionPersist._descriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._descriptionTemplateId}, LocaleContextHolder.getLocale())),
// this.spec()
// .iff(() -> item.getStatus() == DescriptionStatus.Finalized)
// .must(() -> this.isValidGuid(item.getDmpDescriptionTemplateId()))
// .failOn(DescriptionPersist._dmpDescriptionTemplateId).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._dmpDescriptionTemplateId}, LocaleContextHolder.getLocale())),
// this.spec()
// .must(() -> !this.isNull(item.getStatus()))
// .failOn(DescriptionPersist._status).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._status}, LocaleContextHolder.getLocale())),
// this.spec()
// .iff(() -> item.getStatus() == DescriptionStatus.Finalized)
// .must(() -> !this.isListNullOrEmpty(item.getTags()))
// .failOn(DescriptionPersist._tags).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._tags}, LocaleContextHolder.getLocale())),
//
// this.spec()
// .iff(() -> item.getStatus() == DescriptionStatus.Finalized)
// .must(() -> !this.isNull(item.getProperties()))
// .failOn(DescriptionPersist._properties).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionPersist._properties}, LocaleContextHolder.getLocale())),
// this.refSpec()
// .iff(() -> !this.isNull(item.getProperties()))
// .on(DescriptionPersist._properties)
// .over(item.getProperties())
// .using(() -> this.validatorFactory.validator(PropertyDefinitionPersist.PropertyDefinitionPersistValidator.class).setStatus(item.getStatus()).withDefinition(definition))
2023-12-21 17:45:49 +01:00
) ;
}
}
2023-10-24 11:47:48 +02:00
}