argos/dmp-backend/core/src/main/java/eu/eudat/service/fielddatahelper/BaseFieldDataHelperService....

70 lines
2.9 KiB
Java

package eu.eudat.service.fielddatahelper;
import eu.eudat.authorization.AuthorizationFlags;
import eu.eudat.commons.types.descriptiontemplate.fielddata.BaseFieldDataEntity;
import eu.eudat.commons.types.descriptiontemplate.fielddata.BooleanDecisionDataEntity;
import eu.eudat.model.descriptiontemplatedefinition.fielddata.BaseFieldData;
import eu.eudat.model.descriptiontemplatedefinition.fielddata.BooleanDecisionData;
import eu.eudat.model.persist.descriptiontemplatedefinition.fielddata.BaseFieldDataPersist;
import eu.eudat.model.persist.descriptiontemplatedefinition.fielddata.BooleanDecisionDataPersist;
import gr.cite.tools.fieldset.FieldSet;
import org.w3c.dom.Element;
import java.util.EnumSet;
import java.util.List;
import java.util.stream.Collectors;
public abstract class BaseFieldDataHelperService<M extends BaseFieldData, PM extends BaseFieldDataPersist, D extends BaseFieldDataEntity<?>> implements FieldDataHelperService {
protected abstract D newDataInstanceInternal();
protected abstract M newModelInstanceInternal();
protected abstract PM newPersistModelInstanceInternal();
protected abstract List<M> buildInternal(FieldSet fieldSet, List<D> datas, EnumSet<AuthorizationFlags> authorizationFlags);
protected abstract D applyPersistInternal(PM persist, D data);
protected abstract PM mapDataToPersist(D data, PM persist);
@Override
public BaseFieldDataEntity<?> newDataInstance() {
return this.newDataInstanceInternal();
}
@Override
public BaseFieldData newModelInstance() {
return this.newModelInstanceInternal();
}
@Override
public BaseFieldDataPersist newPersistModelInstance() {
return this.newPersistModelInstanceInternal();
}
@Override
public BaseFieldDataPersist mapDataToPersist(BaseFieldDataEntity<?> data) {
PM model = this.newPersistModelInstanceInternal();
model.setFieldType(this.getFormType());
model.setLabel(data.getLabel());
return this.mapDataToPersist((D)data, model);
}
@Override
public BaseFieldDataEntity<?> applyPersist(BaseFieldDataPersist persist){
BaseFieldDataEntity<?> instance = this.newDataInstance();
return this.applyPersist(persist, instance);
}
@Override
public BaseFieldDataEntity<?> applyPersist(BaseFieldDataPersist persist, BaseFieldDataEntity<?> data){
data.setLabel(persist.getLabel());
return this.applyPersistInternal((PM)persist, (D)data);
}
@Override
public BaseFieldData buildOne(FieldSet fieldSet, BaseFieldDataEntity<?> data, EnumSet<AuthorizationFlags> authorizationFlags){
List<BaseFieldData> models = this.build(fieldSet, List.of(data), authorizationFlags);
if (models == null || models.isEmpty()) return null;
return models.get(0);
}
@Override
public List<BaseFieldData> build(FieldSet fieldSet, List<BaseFieldDataEntity<?>> datas, EnumSet<AuthorizationFlags> authorizationFlags) {
return this.buildInternal(fieldSet, datas.stream().map(x-> (D) x).collect(Collectors.toList()), authorizationFlags).stream().map(x-> (M)x).collect(Collectors.toList());
}
}