
001package org.hl7.fhir.r5.terminologies.expansion; 002 003import java.util.List; 004 005import org.hl7.fhir.r5.model.CodeSystem; 006import org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent; 007import org.hl7.fhir.r5.model.CodeSystem.ConceptPropertyComponent; 008import org.hl7.fhir.r5.model.CodeSystem.PropertyComponent; 009import org.hl7.fhir.r5.model.CodeSystem.PropertyType; 010import org.hl7.fhir.r5.model.Enumerations.FilterOperator; 011import org.hl7.fhir.r5.model.ValueSet.ConceptSetFilterComponent; 012import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 013import org.hl7.fhir.utilities.Utilities; 014 015@MarkedToMoveToAdjunctPackage 016public class KnownPropertyFilter extends ConceptFilter { 017 018 private ConceptSetFilterComponent filter; 019 private String code; 020 021 public KnownPropertyFilter(List<String> allErrors, ConceptSetFilterComponent fc, String code) { 022 super (allErrors); 023 this.filter = fc; 024 this.code = code; 025 } 026 027 @Override 028 public boolean includeConcept(CodeSystem cs, ConceptDefinitionComponent def) { 029 ConceptPropertyComponent pc = getPropertyForConcept(def); 030 if (pc != null) { 031 String v = pc.getValue().isPrimitive() ? pc.getValue().primitiveValue() : null; 032 switch (filter.getOp()) { 033 case DESCENDENTOF: throw fail("not supported yet: "+filter.getOp().toCode()); 034 case EQUAL: return filter.getValue().equals(v); 035 case EXISTS: throw fail("not supported yet: "+filter.getOp().toCode()); 036 case GENERALIZES: throw fail("not supported yet: "+filter.getOp().toCode()); 037 case IN: return Utilities.existsInListTrimmed(v, filter.getValue().split("\\,")); 038 case ISA: throw fail("not supported yet: "+filter.getOp().toCode()); 039 case ISNOTA: throw fail("not supported yet: "+filter.getOp().toCode()); 040 case NOTIN: return Utilities.existsInListTrimmed(v, filter.getValue().split("\\,")); 041 case NULL: throw fail("not supported yet: "+filter.getOp().toCode()); 042 case REGEX: throw fail("not supported yet: "+filter.getOp().toCode()); 043 default: 044 throw fail("Shouldn't get here"); 045 } 046 } else { 047 return false; 048 } 049 } 050 051 private ConceptPropertyComponent getPropertyForConcept(ConceptDefinitionComponent def) { 052 for (ConceptPropertyComponent pc : def.getProperty()) { 053 if (pc.hasCode() && pc.getCode().equals(code)) { 054 return pc; 055 } 056 } 057 return null; 058 } 059 060}