private void filterEquals( PredicateGeneratedElementInstance predicate, Collection<ArchetypeReference> ehrArchetypeReferences, boolean negation) { final Set<ArchetypeReference> archetypeReferencesToRemove = new HashSet<>(); for (ArchetypeReference archetypeReference : ehrArchetypeReferences) { ElementInstance elementInstance = archetypeReference.getElementInstancesMap().get(predicate.getId()); if (elementInstance != null) { DataValue dataValue = elementInstance.getDataValue(); if (dataValue != null) { boolean equals = dataValue.equals(predicate.getDataValue()); if ((!equals && !negation) || (equals && negation)) { archetypeReferencesToRemove.add(elementInstance.getArchetypeReference()); } } else { archetypeReferencesToRemove.add(elementInstance.getArchetypeReference()); } } } ehrArchetypeReferences.removeAll(archetypeReferencesToRemove); }
private void filterIsA( PredicateGeneratedElementInstance predicate, Collection<ArchetypeReference> ehrArchetypeReferences, boolean negation) { final Set<ArchetypeReference> archetypeReferencesToRemove = new HashSet<>(); final Set<CodePhrase> codePhrases = getCodePhrases(predicate); ElementInstance elementInstance; for (ArchetypeReference archetypeReference : ehrArchetypeReferences) { elementInstance = archetypeReference.getElementInstancesMap().get(predicate.getId()); if (elementInstance != null && codePhrases != null) { CodePhrase codePhrase = getCodePhrase(elementInstance); try { if (codePhrase != null) { if ("local".equalsIgnoreCase(codePhrase.getTerminologyId().name())) { filterIsALocalTerminology(negation, archetypeReferencesToRemove, codePhrases, elementInstance, codePhrase); } else { filterIsAExternalTerminology(negation, archetypeReferencesToRemove, codePhrases, elementInstance, codePhrase); } } else { archetypeReferencesToRemove.add(elementInstance.getArchetypeReference()); } } catch (Exception exception) { archetypeReferencesToRemove.add(elementInstance.getArchetypeReference()); logger.warn("Filter isA ", exception); } } } ehrArchetypeReferences.removeAll(archetypeReferencesToRemove); }
if (newEI instanceof PredicateGeneratedElementInstance) { PredicateGeneratedElementInstance pgeiNew = (PredicateGeneratedElementInstance) newEI; ElementInstance prevEI = arPrev.getElementInstancesMap().get(pgeiNew.getId()); if (prevEI instanceof PredicateGeneratedElementInstance) { PredicateGeneratedElementInstance pgeiPrev = (PredicateGeneratedElementInstance) prevEI; .setId(pgeiPrev.getId()) .setArchetypeReference(pgeiPrev.getArchetypeReference()) .setNullFlavour(OpenEHRConstUI.NULL_FLAVOUR_CODE_NO_INFO)
private void filterEhrData( Collection<ArchetypeReference> ehrArchetypeReferences, Calendar date, PredicateGeneratedElementInstance predicate) { if (OperatorKind.MAX.equals(predicate.getOperatorKind())) { filterMaxMin(predicate.getId(), ehrArchetypeReferences, true); } else if (OperatorKind.MIN.equals(predicate.getOperatorKind())) { filterMaxMin(predicate.getId(), ehrArchetypeReferences, false); } else if (OperatorKind.IS_A.equals(predicate.getOperatorKind())) { filterIsA(predicate, ehrArchetypeReferences, false); } else if (OperatorKind.IS_NOT_A.equals(predicate.getOperatorKind())) { filterIsA(predicate, ehrArchetypeReferences, true); } else if (OperatorKind.EQUALITY.equals(predicate.getOperatorKind())) { filterEquals(predicate, ehrArchetypeReferences, false); } else if (OperatorKind.INEQUAL.equals(predicate.getOperatorKind())) { filterEquals(predicate, ehrArchetypeReferences, true); } else if (OperatorKind.GREATER_THAN_OR_EQUAL.equals(predicate.getOperatorKind())) { filterGreaterLessThanPredicate(predicate.getId(), predicate.getDataValue(), ehrArchetypeReferences, true, date); } else if (OperatorKind.LESS_THAN_OR_EQUAL.equals(predicate.getOperatorKind())) { filterGreaterLessThanPredicate(predicate.getId(), predicate.getDataValue(), ehrArchetypeReferences, false, date); } }
.setId(predicateOriginalEI.getId()) .setDataValue(dv) .setArchetypeReference(arAux)