package org.molgenis.data.annotation.core.entity.impl.omim; import com.google.common.base.Optional; import com.google.common.collect.FluentIterable; import org.molgenis.data.Entity; import org.molgenis.data.MolgenisDataException; import org.molgenis.data.annotation.core.entity.ResultFilter; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.meta.model.AttributeFactory; import org.molgenis.data.meta.model.EntityType; import org.molgenis.data.meta.model.EntityTypeFactory; import org.molgenis.data.support.DynamicEntity; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import static org.molgenis.data.annotation.core.entity.impl.omim.OmimAnnotator.*; public class OmimResultFilter implements ResultFilter { private EntityTypeFactory entityTypeFactory; private AttributeFactory attributeFactory; private OmimAnnotator omimAnnotator; public OmimResultFilter(EntityTypeFactory entityTypeFactory, AttributeFactory attributeFactory, OmimAnnotator omimAnnotator) { this.entityTypeFactory = entityTypeFactory; this.attributeFactory = attributeFactory; this.omimAnnotator = omimAnnotator; } @Override public Collection<Attribute> getRequiredAttributes() { return Collections.emptyList(); } @Override public Optional<Entity> filterResults(Iterable<Entity> results, Entity annotatedEntity, boolean updateMode) { if (updateMode == true) { throw new MolgenisDataException("This annotator/filter does not support updating of values"); } Optional<Entity> firstResult = FluentIterable.from(results).first(); EntityType emd = entityTypeFactory.create().setName(OmimAnnotator.NAME); emd.addAttributes(Arrays.asList(omimAnnotator.getPhenotypeAttr(), omimAnnotator.getMimNumberAttr(), omimAnnotator.getOmimLocationAttr(), omimAnnotator.getEntryAttr(), omimAnnotator.getTypeAttr())); return firstResult.transform(e -> { Entity result = new DynamicEntity(emd); result.set(OMIM_DISORDER, e.get(OmimRepository.OMIM_PHENOTYPE_COL_NAME)); result.set(OMIM_CAUSAL_IDENTIFIER, e.get(OmimRepository.OMIM_MIM_NUMBER_COL_NAME)); result.set(OMIM_CYTO_LOCATIONS, e.get(OmimRepository.OMIM_CYTO_LOCATION_COL_NAME)); result.set(OMIM_TYPE, e.get(OmimRepository.OMIM_TYPE_COL_NAME).toString()); result.set(OMIM_ENTRY, e.get(OmimRepository.OMIM_ENTRY_COL_NAME).toString()); return result; }); } }