private Integer getComparisonNumber(PredicateGeneratedElementInstance pred) { if (OperatorKind.IS_A.equals(pred.getOperatorKind())) { return 0; } else if (OperatorKind.IS_NOT_A.equals(pred.getOperatorKind())) { return 1; } else if (OperatorKind.EQUALITY.equals(pred.getOperatorKind())) { return 2; } else if (OperatorKind.INEQUAL.equals(pred.getOperatorKind())) { return 3; } else if (OperatorKind.GREATER_THAN_OR_EQUAL.equals(pred.getOperatorKind())) { return 4; } else if (OperatorKind.LESS_THAN_OR_EQUAL.equals(pred.getOperatorKind())) { return 5; } else if (OperatorKind.GREATER_THAN.equals(pred.getOperatorKind())) { return 6; } else if (OperatorKind.LESS_THAN.equals(pred.getOperatorKind())) { return 7; } else if (OperatorKind.MAX.equals(pred.getOperatorKind())) { return 8; } else if (OperatorKind.MIN.equals(pred.getOperatorKind())) { return 9; } return 0; }
private static DataValue getResolveDataValueIfNeeded(Map<String, Guide> guideMap, Calendar date, ElementInstance ei, Set<String> guideIds) { DataValue dv = ei.getDataValue(); if (ei instanceof PredicateGeneratedElementInstance) { Set<String> localGuideIds = new HashSet<>(); PredicateGeneratedElementInstance pgei = ((PredicateGeneratedElementInstance) ei); for (RuleReference ruleReference : pgei.getRuleReferences()) { Guide guide = guideMap.get(ruleReference.getGuideId()); if (guide == null) { LoggerFactory.getLogger(ElementInstanceCollectionManager.class).warn("Null guideline for rule reference '" + ruleReference + "'"); } else { localGuideIds.add(guide.getId()); } } Collection<Guide> localGuides = new ArrayList<>(); for (String guideId : localGuideIds) { Guide guide = guideMap.get(guideId); localGuides.add(guide); } if (pgei.getOperatorKind().equals(OperatorKind.IS_A)) { dv = ei.getDataValue(); } else { dv = resolvePredicate(ei.getDataValue(), pgei.getOperatorKind(), localGuides, date); } guideIds.addAll(localGuideIds); } return dv; }
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); } }
public boolean matches(GeneratedArchetypeReference ar1, ArchetypeReference ar2, Map<String, Guide> guideMap, Calendar date) { if (!ar1.getIdArchetype().equals(ar2.getIdArchetype())) { return false; } else { for (String idElement : ar1.getElementInstancesMap().keySet()) { ElementInstance ei1 = ar1.getElementInstancesMap().get(idElement); ElementInstance ei2 = ar2.getElementInstancesMap().get(idElement); if (ei1 instanceof PredicateGeneratedElementInstance) { if (ei2 != null) { OperatorKind operatorKind = ((PredicateGeneratedElementInstance) ei1).getOperatorKind(); Set<String> guideIds = new HashSet<>(); DataValue dv = getResolveDataValueIfNeeded(guideMap, date, ei1, guideIds); DataValue dv2 = getResolveDataValueIfNeeded(guideMap, date, ei2, guideIds); Collection<Guide> guides = getGuides(guideMap, guideIds); if (!matches(dv, dv2, operatorKind, guides)) { return false; } } else { return false; } } } return true; } }
if (prevEI instanceof PredicateGeneratedElementInstance) { PredicateGeneratedElementInstance pgeiPrev = (PredicateGeneratedElementInstance) prevEI; if (!pgeiNew.getOperatorKind().equals(pgeiPrev.getOperatorKind()) || DVUtil.compareDVs(pgeiNew.getDataValue(), pgeiPrev.getDataValue()) != 0) {
if (guideManager != null) { Collection<Guide> guides = getGuides(guideManager, predicateOriginalEI, dv); dv = ElementInstanceCollectionManager.resolvePredicate(dv, predicateOriginalEI.getOperatorKind(), guides, date); .setDataValue(dv) .setArchetypeReference(arAux) .setOperatorKind(predicateOriginalEI.getOperatorKind()) .createPredicateGeneratedElementInstance(); pgei.setRuleReferences(predicateOriginalEI.getRuleReferences());