package org.molgenis.data.mapper.algorithmgenerator.generator; import com.google.common.base.Preconditions; import org.molgenis.data.DataConverter; import org.molgenis.data.DataService; import org.molgenis.data.mapper.algorithmgenerator.bean.Category; import org.molgenis.data.mapper.algorithmgenerator.categorymapper.CategoryMapperUtil; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.meta.model.EntityType; import java.util.ArrayList; import java.util.List; import static org.molgenis.data.support.EntityTypeUtils.isSingleReferenceType; public abstract class AbstractCategoryAlgorithmGenerator implements AlgorithmGenerator { private final DataService dataService; public AbstractCategoryAlgorithmGenerator(DataService dataService) { this.dataService = Preconditions.checkNotNull(dataService); } boolean isXrefOrCategorialDataType(Attribute attribute) { return isSingleReferenceType(attribute); } public List<Category> convertToCategory(Attribute attribute) { List<Category> categories = new ArrayList<>(); EntityType refEntity = attribute.getRefEntity(); if (refEntity != null) { dataService.findAll(refEntity.getName()).forEach(entity -> { String code = DataConverter.toString(entity.get(refEntity.getIdAttribute().getName())); String label = DataConverter.toString(entity.get(refEntity.getLabelAttribute().getName())); Category category = Category.create(code, label, CategoryMapperUtil.convertDescriptionToAmount(label)); if (!categories.contains(category)) { categories.add(category); } }); } return categories; } }