public Optional<PlanItem> findPlanItem(String planItemId) { return planItems.stream() .filter(planItem -> planItem.getId().equals(planItemId)) .findFirst(); }
/** * Returns a list of {@link PlanItemInstanceEntity} instances for the given {@link CaseInstanceEntity}, irregardless of the state. */ public static List<PlanItemInstanceEntity> findChildPlanItemInstances(CaseInstanceEntity caseInstanceEntity, PlanItem planItem) { return getAllChildPlanItemInstances(caseInstanceEntity).stream() .filter(planItemInstance -> planItem.getId().equals(planItemInstance.getPlanItem().getId())) .collect(Collectors.toList()); }
/** * Returns a list of {@link PlanItemInstanceEntity} instances for the given {@link CaseInstanceEntity}, * which have a plan item that matches any of the given plan items and which are in any state. */ public static List<PlanItemInstanceEntity> findChildPlanItemInstances(CaseInstanceEntity caseInstanceEntity, List<PlanItem> planItems) { List<String> planItemIds = planItems.stream().map(PlanItem::getId).collect(Collectors.toList()); List<PlanItemInstanceEntity> childPlanItemInstances = getAllChildPlanItemInstances(caseInstanceEntity); return childPlanItemInstances.stream() .filter(planItemInstance -> planItemIds.contains(planItemInstance.getPlanItem().getId())) .collect(Collectors.toList()); }
/** * Similar to {@link #findChildPlanItemInstances(CaseInstanceEntity, List)}, but returns a map {planItemId, List<PlanItemInstances>} */ public static Map<String, List<PlanItemInstanceEntity>> findChildPlanItemInstancesMap(CaseInstanceEntity caseInstanceEntity, List<PlanItem> planItems) { Map<String, List<PlanItemInstanceEntity>> result = new HashMap<>(); List<String> planItemIds = planItems.stream().map(PlanItem::getId).collect(Collectors.toList()); List<PlanItemInstanceEntity> childPlanItemInstances = getAllChildPlanItemInstances(caseInstanceEntity); for (PlanItemInstanceEntity childPlanItemInstance : childPlanItemInstances) { PlanItem childPlanItem = childPlanItemInstance.getPlanItem(); if (planItemIds.contains(childPlanItem.getId())) { if (!result.containsKey(childPlanItem.getId())) { result.put(childPlanItem.getId(), new ArrayList<>()); } result.get(childPlanItem.getId()).add(childPlanItemInstance); } } return result; }
/** * Returns a list of {@link PlanItemInstanceEntity} instances for the given {@link CaseInstanceEntity}, * which have a plan item that matches the given plan item and which are non terminal. */ public static List<PlanItemInstanceEntity> findNonTerminalChildPlanItemInstances(CaseInstanceEntity caseInstanceEntity, PlanItem planItem) { List<PlanItemInstanceEntity> childPlanItemInstances = getAllChildPlanItemInstances(caseInstanceEntity); return childPlanItemInstances.stream() .filter(planItemInstance -> planItem.getId().equals(planItemInstance.getPlanItem().getId()) && !PlanItemInstanceState.isInTerminalState(planItemInstance)) .collect(Collectors.toList()); }
protected boolean childPlanItemInstanceForPlanItemExists(PlanItemInstanceEntity stagePlanItemInstanceEntity, PlanItem planItem) { List<PlanItemInstanceEntity> childPlanItemInstances = stagePlanItemInstanceEntity.getChildPlanItemInstances(); if (childPlanItemInstances != null && !childPlanItemInstances.isEmpty()) { for (PlanItemInstanceEntity childPlanItemInstanceEntity : childPlanItemInstances) { if (childPlanItemInstanceEntity.getPlanItem() != null && planItem.getId().equals(childPlanItemInstanceEntity.getPlanItem().getId())) { return true; } } } return false; }
@Override public boolean isRetained(PlanItemInstanceEntity entity, Object param) { Map<String, Object> map = (Map<String, Object>) param; String caseInstanceId = (String) map.get("caseInstanceId"); String planItemId = (String) map.get("planItemId"); return caseInstanceId.equals(entity.getCaseInstanceId()) && planItemId.equals(entity.getPlanItem().getId()); }
@Override public String toString() { PlanItem planItem = planItemInstanceEntity.getPlanItem(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[Trigger PlanItem] "); if (planItem.getName() != null) { stringBuilder.append(planItem.getName()); stringBuilder.append(" ("); stringBuilder.append(planItem.getId()); stringBuilder.append(")"); } else { stringBuilder.append(planItem.getId()); } return stringBuilder.toString(); }
@Override public String toString() { PlanItem planItem = planItemInstanceEntity.getPlanItem(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[Async activate PlanItem] "); if (planItem.getName() != null) { stringBuilder.append(planItem.getName()); stringBuilder.append(" ("); stringBuilder.append(planItem.getId()); stringBuilder.append(")"); } else { stringBuilder.append(planItem.getId()); } if (entryCriterionId != null) { stringBuilder.append("via entry criterion ").append(entryCriterionId); } return stringBuilder.toString(); }
@Override public String toString() { PlanItem planItem = planItemInstanceEntity.getPlanItem(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[Activate PlanItem] "); if (planItem.getName() != null) { stringBuilder.append(planItem.getName()); stringBuilder.append(" ("); stringBuilder.append(planItem.getId()); stringBuilder.append(") "); } else { stringBuilder.append(planItem.getId()); } if (entryCriterionId != null) { stringBuilder.append("via entry criterion ").append(entryCriterionId); } return stringBuilder.toString(); } }
public static boolean criterionHasOnPartDependingOnPlanItem(Criterion criterion, PlanItem planItem, String event) { Sentry sentry = criterion.getSentry(); if (sentry != null) { for (SentryOnPart sentryOnPart : sentry.getOnParts()) { if (sentryOnPart.getSource().getId().equals(planItem.getId()) && sentryOnPart.getStandardEvent().equals(event)) { return true; } } } return false; }
protected boolean planItemsShareDirectParentStage(PlanItem planItemOne, PlanItem planItemTwo) { Stage parentStage = planItemOne.getParentStage(); return parentStage.findPlanItemInPlanFragmentOrDownwards(planItemTwo.getId()) != null; }
@Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); PlanItem planItem = planItemInstanceEntity.getPlanItem(); stringBuilder.append("[Change PlanItem state] "); if (planItem != null) { if (planItem.getName() != null) { stringBuilder.append(planItem.getName()); stringBuilder.append(" (id: "); stringBuilder.append(planItem.getId()); stringBuilder.append(")"); } else { stringBuilder.append(planItem.getId()); } } else { stringBuilder.append("(plan item instance with id ").append(planItemInstanceEntity.getId()).append(")"); } stringBuilder.append(", "); stringBuilder.append("new state: [").append(getNewState()).append("]"); stringBuilder.append(" with transition ["); stringBuilder.append(getLifeCycleTransition()); stringBuilder.append("]"); return stringBuilder.toString(); }
@Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[Evaluate Criteria] case instance "); if (caseInstanceEntity != null) { stringBuilder.append(caseInstanceEntity.getId()); } else { stringBuilder.append(caseInstanceEntityId); } if (planItemLifeCycleEvent != null) { stringBuilder.append(" with transition '").append(planItemLifeCycleEvent.getTransition()).append("' having fired"); if (planItemLifeCycleEvent.getPlanItem() != null) { stringBuilder.append(" for plan item ").append(planItemLifeCycleEvent.getPlanItem().getId()); if (planItemLifeCycleEvent.getPlanItem().getName() != null) { stringBuilder.append(" (").append(planItemLifeCycleEvent.getPlanItem().getName()).append(")"); } } } return stringBuilder.toString(); }
public boolean sentryOnPartMatchesCurrentLifeCycleEvent(SentryOnPart sentryOnPart) { return planItemLifeCycleEvent.getPlanItem().getId().equals(sentryOnPart.getSourceRef()) && planItemLifeCycleEvent.getTransition().equals(sentryOnPart.getStandardEvent()); }
protected List<PlanItem> gatherEventListenerDependencies(PlanItem planItem) { List<PlanItem> eventListenerDependencies = Stream.concat( planItem.getEntryDependencies().stream().filter(p -> p.getPlanItemDefinition() instanceof EventListener), planItem.getExitDependencies().stream().filter(p -> p.getPlanItemDefinition() instanceof EventListener)) .collect(Collectors.toList()); // Special case: if the current plan item is a stage, we need to also verify all event listeners // that reference a child plan item of this stage. Normally this will happen automatically, unless // the child plan item instances haven't been created yet (e.g with nested stages). // As such, we need to check all plan items for which there hasn't been a plan item instance yet. if (planItem.getPlanItemDefinition() instanceof PlanFragment && PlanItemInstanceState.isInTerminalState(planItemInstanceEntity)) { // This is only true when stopping, not when a plan item gets activated (in that case, the child plan items can still be created and no special care is needed) List<PlanItem> childPlanItemsWithDependencies = getChildPlanItemsWithDependencies((PlanFragment) planItem.getPlanItemDefinition()); CaseInstanceEntity caseInstanceEntity = CommandContextUtil .getCaseInstanceEntityManager(commandContext).findById(planItemInstanceEntity.getCaseInstanceId()); Map<String, List<PlanItemInstanceEntity>> childPlanItemInstancesMap = CaseInstanceUtil .findChildPlanItemInstancesMap(caseInstanceEntity, childPlanItemsWithDependencies); for (PlanItem childPlanItemWithDependencies : childPlanItemsWithDependencies) { if (!childPlanItemInstancesMap.containsKey(childPlanItemWithDependencies.getId())) { eventListenerDependencies.addAll(childPlanItemWithDependencies.getEntryDependencies().stream() .filter(p -> p.getPlanItemDefinition() instanceof EventListener).collect(Collectors.toList())); eventListenerDependencies.addAll(childPlanItemWithDependencies.getExitDependencies().stream() .filter(p -> p.getPlanItemDefinition() instanceof EventListener).collect(Collectors.toList())); } } } return eventListenerDependencies; }
protected static void writePlanItem(PlanItem planItem, CmmnModel model, XMLStreamWriter xtw) throws Exception { createCmmnShape(model, planItem.getId(), xtw); for (Criterion criterion : planItem.getEntryCriteria()) { createCmmnShape(model, criterion.getId(), xtw); } for (Criterion criterion : planItem.getExitCriteria()) { createCmmnShape(model, criterion.getId(), xtw); } }
planItemInstanceEntity.setElementId(planItem.getId()); PlanItemDefinition planItemDefinition = planItem.getPlanItemDefinition(); if (planItemDefinition != null) {