public static void writeRepetitionRule(RepetitionRule repetitionRule, XMLStreamWriter xtw) throws XMLStreamException { if (repetitionRule != null) { xtw.writeStartElement(ELEMENT_REPETITION_RULE); if (StringUtils.isNotEmpty(repetitionRule.getRepetitionCounterVariableName())) { xtw.writeAttribute(FLOWABLE_EXTENSIONS_PREFIX, FLOWABLE_EXTENSIONS_NAMESPACE, ATTRIBUTE_REPETITION_COUNTER_VARIABLE_NAME, repetitionRule.getRepetitionCounterVariableName()); } if (StringUtils.isNotEmpty(repetitionRule.getCondition())) { xtw.writeStartElement(ELEMENT_CONDITION); xtw.writeCData(repetitionRule.getCondition()); xtw.writeEndElement(); } xtw.writeEndElement(); } }
@Override protected CmmnElement convert(XMLStreamReader xtr, ConversionHelper conversionHelper) { if (conversionHelper.getCurrentCmmnElement() instanceof PlanItemControl) { RepetitionRule repetitionRule = new RepetitionRule(); repetitionRule.setName(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_NAME)); repetitionRule.setRepetitionCounterVariableName(xtr.getAttributeValue(CmmnXmlConstants.FLOWABLE_EXTENSIONS_NAMESPACE, CmmnXmlConstants.ATTRIBUTE_REPETITION_COUNTER_VARIABLE_NAME)); PlanItemControl planItemControl = (PlanItemControl) conversionHelper.getCurrentCmmnElement(); planItemControl.setRepetitionRule(repetitionRule); return repetitionRule; } return null; }
protected boolean evaluateRepetitionRule(PlanItemInstanceEntity planItemInstanceEntity) { if (hasRepetitionRule(planItemInstanceEntity)) { String repetitionCondition = planItemInstanceEntity.getPlanItem().getItemControl().getRepetitionRule().getCondition(); return evaluateRepetitionRule(planItemInstanceEntity, repetitionCondition); } return false; }
protected String getCounterVariable(PlanItemInstanceEntity repeatingPlanItemInstanceEntity) { String repetitionCounterVariableName = repeatingPlanItemInstanceEntity.getPlanItem().getItemControl().getRepetitionRule().getRepetitionCounterVariableName(); return repetitionCounterVariableName; }
|| (hasRepetitionRule(entryDependentPlanItem) && evaluateRepetitionRule(caseInstanceEntity, entryDependentPlanItem.getItemControl().getRepetitionRule().getCondition())))) { // (terminated state) the plan item instance should not have been created anytime before