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 static PredicateGeneratedElementInstance generateElementInstanceForPredicate( ArchetypeReference ar, OperatorKind op, String idElement, DataValue dv, Guide guide, DateTime dateTime, boolean resolvePredicates) { Collection<RuleReference> previousRuleReferences = new ArrayList<>(); ElementInstance elementInstance = ar.getElementInstancesMap().get(idElement); if (elementInstance instanceof GeneratedElementInstance) { GeneratedElementInstance generatedElementInstance = (GeneratedElementInstance) elementInstance; previousRuleReferences.addAll(generatedElementInstance.getRuleReferences()); } if (dv != null && guide != null && dateTime != null && resolvePredicates) { dv = ElementInstanceCollectionManager.resolvePredicate(dv, op, Collections.singleton(guide), dateTime.toCalendar(Locale.getDefault())); } PredicateGeneratedElementInstance predicateGeneratedElementInstance = new PredicateGeneratedElementInstanceBuilder() .setId(idElement) .setDataValue(dv) .setArchetypeReference(ar) .setOperatorKind(op) .createPredicateGeneratedElementInstance(); predicateGeneratedElementInstance.getRuleReferences().addAll(previousRuleReferences); return predicateGeneratedElementInstance; }
String gtCode = getGTCodeForPredicate(archetypeBinding, path, dv); if (gtCode != null) { ei.getRuleReferences().add(new RuleReference(guideId, gtCode));
.setOperatorKind(predicateOriginalEI.getOperatorKind()) .createPredicateGeneratedElementInstance(); pgei.setRuleReferences(predicateOriginalEI.getRuleReferences());