argos/dmp-backend/core/src/main/java/eu/eudat/model/builder/filetransformer/DescriptionTemplateDefiniti...

242 lines
11 KiB
Java

package eu.eudat.model.builder.filetransformer;
import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.commons.JsonHandlingService;
import eu.eudat.commons.XmlHandlingService;
import eu.eudat.commons.types.descriptiontemplate.*;
import eu.eudat.commons.types.descriptiontemplate.fielddata.*;
import eu.eudat.convention.ConventionService;
import eu.eudat.file.transformer.enums.FieldDataExternalDatasetType;
import eu.eudat.file.transformer.enums.FieldType;
import eu.eudat.file.transformer.enums.FieldValidationType;
import eu.eudat.file.transformer.models.descriptiontemplate.definition.*;
import eu.eudat.file.transformer.models.descriptiontemplate.definition.fielddata.*;
import eu.eudat.model.descriptiontemplatedefinition.fielddata.UploadOption;
import gr.cite.tools.data.builder.BuilderFactory;
import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class DescriptionTemplateDefinitionFileTransformerBuilder extends BaseFileTransformerBuilder<DefinitionFileTransformerModel, DefinitionEntity> {
private final QueryFactory queryFactory;
private final BuilderFactory builderFactory;
private final JsonHandlingService jsonHandlingService;
private final XmlHandlingService xmlHandlingService;
private EnumSet<AuthorizationFlags> authorize = EnumSet.of(AuthorizationFlags.None);
@Autowired
public DescriptionTemplateDefinitionFileTransformerBuilder(
ConventionService conventionService,
QueryFactory queryFactory,
BuilderFactory builderFactory, JsonHandlingService jsonHandlingService, XmlHandlingService xmlHandlingService) {
super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionTemplateDefinitionFileTransformerBuilder.class)));
this.queryFactory = queryFactory;
this.builderFactory = builderFactory;
this.jsonHandlingService = jsonHandlingService;
this.xmlHandlingService = xmlHandlingService;
}
public DescriptionTemplateDefinitionFileTransformerBuilder authorize(EnumSet<AuthorizationFlags> values) {
this.authorize = values;
return this;
}
@Override
protected List<FileTransformerBuilderItemResponse<DefinitionFileTransformerModel, DefinitionEntity>> buildInternal(List<DefinitionEntity> data) throws MyApplicationException {
this.logger.debug("building for {}", Optional.ofNullable(data).map(List::size).orElse(0));
if (data == null || data.isEmpty()) return new ArrayList<>();
List<FileTransformerBuilderItemResponse<DefinitionFileTransformerModel, DefinitionEntity>> models = new ArrayList<>();
for (DefinitionEntity d : data) {
DefinitionFileTransformerModel m = new DefinitionFileTransformerModel();
m.setPages(collectPages(d.getPages(), d.getSections()));
models.add(new FileTransformerBuilderItemResponse<>(m, d));
}
this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0));
return models;
}
private List<PageFileTransformerModel> collectPages(List<PageEntity> data, List<SectionEntity> sections) {
List<PageFileTransformerModel> result = new ArrayList<>();
for (PageEntity d: data) {
PageFileTransformerModel m = new PageFileTransformerModel();
m.setId(d.getId());
m.setOrdinal(d.getOrdinal());
m.setTitle(d.getTitle());
m.setSections(collectSections(sections.stream().filter(sectionEntity -> sectionEntity.getPage().equals(d.getId())).toList()));
result.add(m);
}
return result;
}
private List<SectionFileTransformerModel> collectSections(List<SectionEntity> data) {
List<SectionFileTransformerModel> result = new ArrayList<>();
for (SectionEntity d : data) {
SectionFileTransformerModel m = new SectionFileTransformerModel();
m.setId(d.getId());
m.setDescription(d.getDescription());
m.setTitle(d.getTitle());
m.setOrdinal(d.getOrdinal());
m.setDefaultVisibility(d.isDefaultVisibility());
m.setExtendedDescription(d.getExtendedDescription());
m.setMultiplicity(d.getMultiplicity());
m.setNumbering(d.getNumbering());
m.setSections(collectSections(d.getSections()));
m.setFieldSets(collectFieldSet(d.getFieldSets()));
result.add(m);
}
return result;
}
private List<FieldSetFileTransformerModel> collectFieldSet(List<FieldSetEntity> data) {
List<FieldSetFileTransformerModel> result = new ArrayList<>();
for (FieldSetEntity d : data) {
FieldSetFileTransformerModel m = new FieldSetFileTransformerModel();
m.setId(d.getId());
m.setDescription(d.getDescription());
m.setExtendedDescription(d.getExtendedDescription());
m.setAdditionalInformation(d.getAdditionalInformation());
m.setHasCommentField(d.getHasCommentField());
m.setNumbering(d.getNumbering());
m.setOrdinal(d.getOrdinal());
m.setTitle(d.getTitle());
//m.setMultiplicity(); //TODO: No multiplicity in this code (yet)
m.setFields(convertFields(d.getFields()));
result.add(m);
}
return result;
}
private List<FieldFileTransformerModel> convertFields(List<FieldEntity> data) {
List<FieldFileTransformerModel> result = new ArrayList<>();
for (FieldEntity d : data) {
FieldFileTransformerModel m = new FieldFileTransformerModel();
m.setId(d.getId());
m.setSchematics(d.getSchematics());
m.setNumbering(d.getNumbering());
m.setOrdinal(d.getOrdinal());
m.setDefaultValue(d.getDefaultValue());
m.setIncludeInExport(d.getIncludeInExport());
m.setValidations(d.getValidations().stream().map(fieldValidationType -> FieldValidationType.of(fieldValidationType.getValue())).toList());
m.setVisibilityRules(convertVisibilityRules(d.getVisibilityRules()));
m.setData(convertData(d.getData()));
result.add(m);
}
return result;
}
public List<RuleFileTransformerModel> convertVisibilityRules(List<RuleEntity> data) {
List<RuleFileTransformerModel> result = new ArrayList<>();
for (RuleEntity d : data) {
RuleFileTransformerModel m = new RuleFileTransformerModel();
m.setTarget(d.getTarget());
m.setValue(d.getValue());
result.add(m);
}
return result;
}
public BaseFieldDataFileTransformerModel convertData (BaseFieldDataEntity data) {
BaseFieldDataFileTransformerModel m;
switch (data) {
case AutoCompleteDataEntity d -> {
m = new AutoCompleteDataFileTransformerModel();
m.setLabel(d.getLabel());
m.setFieldType(FieldType.of(d.getFieldType().getValue()));
((AutoCompleteDataFileTransformerModel)m).setMultiAutoComplete(d.getMultiAutoComplete());
((AutoCompleteDataFileTransformerModel) m).setAutoCompleteSingleDataList(convertAutoCompleteSingleData(d.getAutoCompleteSingleDataList()));
}
case ExternalDatasetDataEntity d -> {
m = new ExternalDatasetDataFileTransformerModel();
m.setLabel(d.getLabel());
m.setFieldType(FieldType.of(d.getFieldType().getValue()));
((ExternalDatasetDataFileTransformerModel)m).setType(FieldDataExternalDatasetType.of(d.getType().getValue()));
}
case RadioBoxDataEntity d -> {
m = new RadioBoxDataFileTransformerModel();
m.setLabel(d.getLabel());
m.setFieldType(FieldType.of(d.getFieldType().getValue()));
((RadioBoxDataFileTransformerModel) m).setOptions(convertRadioBoxOptions(d.getOptions()));
}
case UploadDataEntity d -> {
m = new UploadDataFileTransformerModel();
m.setLabel(d.getLabel());
m.setFieldType(FieldType.of(d.getFieldType().getValue()));
((UploadDataFileTransformerModel) m).setMaxFileSizeInMB(d.getMaxFileSizeInMB());
((UploadDataFileTransformerModel) m).setTypes(convertUploadDataOptions(d.getTypes()));
}
case WordListDataEntity d -> {
m = new WordListDataFileTransformerModel();
m.setLabel(d.getLabel());
m.setFieldType(FieldType.of(d.getFieldType().getValue()));
((WordListDataFileTransformerModel) m).setMultiList(d.getMultiList());
((WordListDataFileTransformerModel) m).setOptions(d.getOptions().stream().map(this::convertComboBoxOption).toList());
}
default -> m = null;
}
return m;
}
private List<RadioBoxOptionFileTransformerModel> convertRadioBoxOptions(List<RadioBoxDataEntity.Option> data) {
List<RadioBoxOptionFileTransformerModel> result = new ArrayList<>();
for (RadioBoxDataEntity.Option d : data) {
RadioBoxOptionFileTransformerModel m = new RadioBoxOptionFileTransformerModel();
m.setLabel(d.getLabel());
m.setValue(d.getValue());
result.add(m);
}
return result;
}
private List<AutoCompleteSingleDataFileTransformerModel> convertAutoCompleteSingleData(List<AutoCompleteDataEntity.AutoCompleteSingleData> data) {
List<AutoCompleteSingleDataFileTransformerModel> result = new ArrayList<>();
for (AutoCompleteDataEntity.AutoCompleteSingleData d : data) {
AutoCompleteSingleDataFileTransformerModel m = new AutoCompleteSingleDataFileTransformerModel();
m.setUrl(d.getUrl());
m.setAutoCompleteOptions(convertComboBoxOption(d.getAutoCompleteOptions()));
result.add(m);
}
return result;
}
private ComboBoxOptionFileTransformerModel convertComboBoxOption(ComboBoxDataEntity.Option data) {
ComboBoxOptionFileTransformerModel m = new ComboBoxOptionFileTransformerModel();
m.setUri(data.getUri());
m.setSource(data.getSource());
m.setLabel(data.getLabel());
m.setValue(data.getValue());
return m;
}
private List<UploadOptionFileTransformerModel> convertUploadDataOptions(List<UploadDataEntity.Option> data) {
List<UploadOptionFileTransformerModel> result = new ArrayList<>();
for (UploadDataEntity.Option d : data) {
UploadOptionFileTransformerModel m = new UploadOptionFileTransformerModel();
m.setLabel(d.getLabel());
m.setValue(d.getValue());
result.add(m);
}
return result;
}
}