package eu.eudat.service.fielddatahelper; import eu.eudat.authorization.AuthorizationFlags; import eu.eudat.commonmodels.models.descriptiotemplate.fielddata.LabelAndMultiplicityDataModel; import eu.eudat.commonmodels.models.descriptiotemplate.fielddata.SelectDataModel; import eu.eudat.commons.types.descriptiontemplate.fielddata.LabelAndMultiplicityDataEntity; import eu.eudat.commons.types.descriptiontemplate.fielddata.UploadDataEntity; import eu.eudat.commons.types.descriptiontemplate.importexport.fielddata.UploadDataImportExport; import eu.eudat.convention.ConventionService; import eu.eudat.model.builder.commonmodels.descriptiontemplate.fielddata.LabelAndMultiplicityDataCommonModelBuilder; import eu.eudat.model.builder.commonmodels.descriptiontemplate.fielddata.UploadDataCommonModelBuilder; import eu.eudat.model.builder.descriptiontemplatedefinition.fielddata.UploadDataBuilder; import eu.eudat.model.descriptiontemplatedefinition.fielddata.UploadData; import eu.eudat.model.persist.descriptiontemplatedefinition.fielddata.*; import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.validation.Validator; import gr.cite.tools.validation.ValidatorFactory; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; @Component public class UploadFieldDataHelperService extends BaseFieldDataHelperService { private final ConventionService conventionService; private final BuilderFactory builderFactory; private final ValidatorFactory validatorFactory; public UploadFieldDataHelperService(ConventionService conventionService, BuilderFactory builderFactory, ValidatorFactory validatorFactory) { this.conventionService = conventionService; this.builderFactory = builderFactory; this.validatorFactory = validatorFactory; } @Override public UploadDataEntity newDataInstanceInternal() { return new UploadDataEntity(); } @Override public UploadData newModelInstanceInternal() { return new UploadData(); } @Override public UploadDataPersist newPersistModelInstanceInternal() { return new UploadDataPersist(); } @Override protected UploadDataImportExport newImportExportInstanceInternal() { return new UploadDataImportExport(); } @Override protected SelectDataModel newCommonModelInstanceInternal() { return new SelectDataModel(); } @Override public Class getDataClass() { return UploadDataEntity.class; } @Override public Class getModelClass() { return UploadData.class; } @Override public Class getPersistModelClass() { return UploadDataPersist.class; } @Override public Class getImportExportClass() { return UploadDataImportExport.class; } @Override public Class getCommonModelClass() { return SelectDataModel.class; } @Override public Validator getPersistModelValidator() { return this.validatorFactory.validator(UploadDataPersist.UploadDataPersistValidator.class); } @Override public List buildInternal(FieldSet fieldSet, List data, EnumSet authorizationFlags){ return this.builderFactory.builder(UploadDataBuilder.class).authorize(authorizationFlags).build(fieldSet, data); } @Override protected List buildCommonModelInternal(List data, EnumSet authorizationFlags) { return this.builderFactory.builder(UploadDataCommonModelBuilder.class).authorize(authorizationFlags).build(data); } @Override protected UploadDataEntity applyPersistInternal(UploadDataPersist persist, UploadDataEntity data) { if (!this.conventionService.isListNullOrEmpty(persist.getTypes())){ data.setTypes(new ArrayList<>()); for (UploadDataPersist.UploadOptionPersist uploadOptionPersist: persist.getTypes()) { data.getTypes().add(this.buildOption(uploadOptionPersist)); } } data.setMaxFileSizeInMB(persist.getMaxFileSizeInMB()); return data; } private @NotNull UploadDataEntity.UploadDataOptionEntity buildOption(UploadDataPersist.UploadOptionPersist persist){ UploadDataEntity.UploadDataOptionEntity data = new UploadDataEntity.UploadDataOptionEntity(); if (persist == null) return data; data.setLabel(persist.getLabel()); data.setValue(persist.getValue()); return data; } @Override protected UploadDataPersist importExportMapDataToPersistInternal(UploadDataImportExport data, UploadDataPersist persist) { if (!this.conventionService.isListNullOrEmpty(data.getTypes())){ persist.setTypes(new ArrayList<>()); for (UploadDataImportExport.UploadDataOption option: data.getTypes()) { persist.getTypes().add(this.buildOption(option)); } } persist.setMaxFileSizeInMB(data.getMaxFileSizeInMB()); return persist; } private @NotNull UploadDataPersist.UploadOptionPersist buildOption(UploadDataImportExport.UploadDataOption data){ UploadDataPersist.UploadOptionPersist persist = new UploadDataPersist.UploadOptionPersist(); if (data == null) return persist; persist.setLabel(data.getLabel()); persist.setValue(data.getValue()); return persist; } @Override protected UploadDataImportExport dataToImportExportXmlInternal(UploadDataEntity data, UploadDataImportExport xml) { if (!this.conventionService.isListNullOrEmpty(data.getTypes())){ xml.setTypes(new ArrayList<>()); for (UploadDataEntity.UploadDataOptionEntity option: data.getTypes()) { xml.getTypes().add(this.buildOption(option)); } } xml.setMaxFileSizeInMB(data.getMaxFileSizeInMB()); return xml; } @Override protected boolean isMultiValueInternal(UploadDataEntity data) { return false; } private @NotNull UploadDataImportExport.UploadDataOption buildOption(UploadDataEntity.UploadDataOptionEntity data){ UploadDataImportExport.UploadDataOption xml = new UploadDataImportExport.UploadDataOption(); if (data == null) return xml; xml.setLabel(data.getLabel()); xml.setValue(data.getValue()); return xml; } }