use of com.b2international.snowowl.snomed.core.SnomedDisplayTermType in project snow-owl by b2ihealthcare.
the class SnomedConceptSearchRequestEvaluator method evaluate.
@Override
public Concepts evaluate(ResourceURI uri, ServiceProvider context, Options search) {
final String preferredDisplay = search.getString(OptionKey.DISPLAY);
SnomedDisplayTermType displayTermType;
if (preferredDisplay != null) {
displayTermType = SnomedDisplayTermType.getEnum(preferredDisplay);
} else {
displayTermType = SnomedDisplayTermType.PT;
}
final SnomedConceptSearchRequestBuilder req = SnomedRequests.prepareSearchConcept();
evaluateTermFilterOptions(req, search);
if (search.containsKey(OptionKey.ID)) {
req.filterByIds(search.getCollection(OptionKey.ID, String.class));
}
if (search.containsKey(OptionKey.ACTIVE)) {
req.filterByActive(search.getBoolean(OptionKey.ACTIVE));
}
if (search.containsKey(OptionKey.PARENT)) {
req.filterByParents(search.getCollection(OptionKey.PARENT, String.class));
}
if (search.containsKey(OptionKey.ANCESTOR)) {
req.filterByAncestors(search.getCollection(OptionKey.ANCESTOR, String.class));
}
if (search.containsKey(OptionKey.TERM_TYPE)) {
req.filterByDescriptionType(search.getString(OptionKey.TERM_TYPE));
}
if (search.containsKey(OptionKey.QUERY) || search.containsKey(OptionKey.MUST_NOT_QUERY)) {
StringBuilder query = new StringBuilder();
if (search.containsKey(OptionKey.QUERY)) {
query.append("(").append(Ecl.or(search.getCollection(OptionKey.QUERY, String.class))).append(")");
} else {
query.append(Ecl.ANY);
}
if (search.containsKey(OptionKey.MUST_NOT_QUERY)) {
query.append(" MINUS (").append(Ecl.or(search.getCollection(OptionKey.MUST_NOT_QUERY, String.class))).append(")");
}
req.filterByEcl(query.toString());
}
boolean requestedExpand = search.containsKey(OptionKey.EXPAND);
// make sure preferredDescriptions() and displayTermType expansion data are always loaded
Options expand = ExpandParser.parse("preferredDescriptions()").merge(requestedExpand ? search.getOptions(OptionKey.EXPAND) : Options.empty());
if (!Strings.isNullOrEmpty(displayTermType.getExpand())) {
expand = ExpandParser.parse(displayTermType.getExpand()).merge(expand);
}
SnomedConcepts matches = req.setLocales(search.getList(OptionKey.LOCALES, ExtendedLocale.class)).setSearchAfter(search.getString(OptionKey.AFTER)).setLimit(search.get(OptionKey.LIMIT, Integer.class)).setFields(search.getList(OptionKey.FIELDS, String.class)).setExpand(expand).sortBy(search.containsKey(SearchResourceRequest.OptionKey.SORT_BY) ? search.getList(SearchResourceRequest.OptionKey.SORT_BY, SearchResourceRequest.Sort.class) : null).build(uri).execute(context);
return new Concepts(matches.stream().map(concept -> toConcept(uri, concept, displayTermType.getLabel(concept), requestedExpand)).collect(Collectors.toList()), matches.getSearchAfter(), matches.getLimit(), matches.getTotal());
}
use of com.b2international.snowowl.snomed.core.SnomedDisplayTermType in project snow-owl by b2ihealthcare.
the class SnomedConceptMapSearchRequestEvaluator method toCollectionResource.
private ConceptMapMappings toCollectionResource(SnomedReferenceSetMembers referenceSetMembers, ResourceURI uri, ServiceProvider context, Options search, SnomedDisplayTermType snomedDisplayTermType) {
final Set<String> refSetsToFetch = referenceSetMembers.stream().map(SnomedReferenceSetMember::getRefsetId).collect(Collectors.toSet());
final Map<String, SnomedConcept> refSetsById = SnomedRequests.prepareSearchConcept().all().filterByIds(refSetsToFetch).setLocales(search.getList(OptionKey.LOCALES, ExtendedLocale.class)).setExpand("pt(),referenceSet()").build(uri).execute(context.service(IEventBus.class)).getSync(1, TimeUnit.MINUTES).stream().collect(Collectors.toMap(SnomedConcept::getId, concept -> concept));
final Map<String, ComponentURI> targetComponentsByRefSetId = getTargetComponentsByRefSetId(context, refSetsById);
List<ConceptMapMapping> mappings = referenceSetMembers.stream().filter(m -> SnomedConcept.TYPE.equals(m.getReferencedComponent().getComponentType())).map(m -> {
return toMapping(m, uri, targetComponentsByRefSetId.get(m.getRefsetId()), snomedDisplayTermType, refSetsById);
}).collect(Collectors.toList());
if (!mappings.isEmpty()) {
final Map<String, Concept> conceptsById = Multimaps.index(mappings, mapping -> mapping.getTargetComponentURI().resourceUri()).asMap().entrySet().stream().filter(entry -> !TerminologyRegistry.UNSPECIFIED.equals(entry.getKey().getResourceId())).map(entry -> {
final Set<String> idsToFetch = entry.getValue().stream().map(map -> map.getTargetComponentURI().identifier()).collect(Collectors.toSet());
return CodeSystemRequests.prepareSearchConcepts().all().filterByCodeSystemUri(entry.getKey()).filterByIds(idsToFetch).buildAsync().execute(context.service(IEventBus.class)).getSync(5, TimeUnit.MINUTES).stream().collect(Collectors.toMap(Concept::getId, c -> c));
}).flatMap(map -> map.entrySet().stream()).collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue(), (concept1, concept2) -> concept1));
mappings = mappings.stream().map(mapping -> {
final String mapTargetId = mapping.getTargetComponentURI().identifier();
if (conceptsById.containsKey(mapTargetId) && !mapping.getTargetComponentURI().isUnspecified()) {
final Concept concept = conceptsById.get(mapTargetId);
return mapping.toBuilder().targetTerm(concept.getTerm()).targetIconId(concept.getIconId()).build();
} else {
return mapping;
}
}).collect(Collectors.toList());
}
return new ConceptMapMappings(mappings, referenceSetMembers.getSearchAfter(), referenceSetMembers.getLimit(), referenceSetMembers.getTotal());
}
use of com.b2international.snowowl.snomed.core.SnomedDisplayTermType in project snow-owl by b2ihealthcare.
the class SnomedConceptMapSearchRequestEvaluator method evaluate.
@Override
public ConceptMapMappings evaluate(ResourceURI uri, ServiceProvider context, Options search) {
final String preferredDisplay = search.get(OptionKey.DISPLAY, String.class);
final SnomedDisplayTermType snomedDisplayTermType = SnomedDisplayTermType.getEnum(preferredDisplay);
SnomedReferenceSetMembers referenceSetMembers = fetchRefsetMembers(uri, context, search, snomedDisplayTermType);
return toCollectionResource(referenceSetMembers, uri, context, search, snomedDisplayTermType);
}
Aggregations