protected boolean isStageContainerOfAnyPlanItemDefinition(String stageId, Collection<PlanItemMoveEntry> moveToPlanItems) { Optional<Stage> isUsed = moveToPlanItems.stream() .map(PlanItemMoveEntry::getNewPlanItem) .map(PlanItem::getPlanItemDefinition) .map(PlanItemDefinition::getParentStage) .filter(Objects::nonNull) .filter(elementStage -> elementStage.getId().equals(stageId)) .findAny(); return isUsed.isPresent(); }
protected Optional<PlanItemInstance> getPlanItemInstance(List<PlanItemInstance> stagePlanItemInstances, Stage stage) { PlanItemInstance planItemInstance = null; for (PlanItemInstance p : stagePlanItemInstances) { if (p.getPlanItemDefinitionId().equals(stage.getId())) { if (p.getEndedTime() == null) { planItemInstance = p; // one that's not ended yet has precedence } else { if (planItemInstance == null) { planItemInstance = p; } } } } return Optional.ofNullable(planItemInstance); }
private boolean isStageAncestor(String stageId, PlanItemDefinition planItemDefinition) { while (planItemDefinition.getParentStage() != null) { String currentStageId = planItemDefinition.getParentStage().getId(); if (currentStageId != null && currentStageId.equals(stageId)) { return true; } planItemDefinition = planItemDefinition.getParentStage(); } return false; }
protected static void internalGetParentPlanItems(PlanItem planItem, List<PlanItem> parentPlanItems) { Stage parentStage = planItem.getParentStage(); if (parentStage != null && !parentStage.isPlanModel()) { PlanItem parentPlanItem = parentStage.findPlanItemForPlanItemDefinitionInPlanFragmentOrUpwards(parentStage.getId()); if (parentPlanItem != null) { parentPlanItems.add(parentPlanItem); internalGetParentPlanItems(parentPlanItem, parentPlanItems); } } }
protected static void writePlanModel(Stage stage, CmmnModel model, XMLStreamWriter xtw) throws Exception { createCmmnShape(model, stage.getId(), xtw); for (Criterion criterion : stage.getExitCriteria()) { createCmmnShape(model, criterion.getId(), xtw); } }
public void processDI(CmmnModel cmmnModel, List<CaseDefinitionEntity> caseDefinitions) { if (caseDefinitions.isEmpty()) { return; } if (!cmmnModel.getLocationMap().isEmpty()) { List<String> planModelIds = new ArrayList<>(); for (Case caseObject : cmmnModel.getCases()) { planModelIds.add(caseObject.getPlanModel().getId()); } // Verify if all referenced elements exist for (String cmmnReference : cmmnModel.getLocationMap().keySet()) { if (planModelIds.contains(cmmnReference)) { continue; } if (cmmnModel.findPlanItem(cmmnReference) == null && cmmnModel.getCriterion(cmmnReference) == null) { logger.warn("Invalid reference in diagram interchange definition: could not find {}", cmmnReference); } } for (Case caseObject : cmmnModel.getCases()) { CaseDefinitionEntity caseDefinition = getCaseDefinition(caseObject.getId(), caseDefinitions); if (caseDefinition != null) { caseDefinition.setHasGraphicalNotation(true); } } } }
MovePlanItemInstanceEntityContainer movePlanItemInstanceEntityContainer, CommandContext commandContext) { if (caseInstanceChangeState.getCurrentStageInstances().containsKey(stage.getId())) { return (PlanItemInstanceEntity) caseInstanceChangeState.getCurrentStageInstances().get(stage.getId()).get(0); if (caseInstanceChangeState.getCreatedStageInstances().containsKey(stage.getId())) { return caseInstanceChangeState.getCreatedStageInstances().get(stage.getId()); parentStageInstance = createStageHierarchy(stage.getParentStage(), defaultParentPlanItemInstance, stagesToCreate, movingPlanItemInstanceIds, caseInstanceChangeState, movePlanItemInstanceEntityContainer, commandContext); caseInstanceChangeState.getCreatedStageInstances().put(stage.getParentStage().getId(), parentStageInstance);
if (elementId.equals(model.getPrimaryCase().getPlanModel().getId())) { writePlanModel(model.getPrimaryCase().getPlanModel(), model, xtw);
for (Stage stage : stages) { if (stage.isIncludeInStageOverview()) { StageResponse stageResponse = new StageResponse(stage.getId(), stage.getName()); Optional<PlanItemInstance> planItemInstance = getPlanItemInstance(stagePlanItemInstances, stage);
if (!caseInstanceChangeState.getCreatedStageInstances().containsKey(stage.getId()) && !isStageAncestorOfAnyPlanItemInstance(stage.getId(), movingPlanItemInstances)) { stagesToCreate.put(stage.getId(), stage); if (!caseInstanceChangeState.getCreatedStageInstances().containsKey(stage.getId())) { PlanItemInstanceEntity stageInstance = createStageHierarchy(stage, defaultContinueParentPlanItemInstance, stagesToCreate, movingPlanItemInstanceIds, caseInstanceChangeState, movePlanItemInstanceEntityContainer, commandContext); caseInstanceChangeState.addCreatedStageInstance(stage.getId(), stageInstance); PlanItemDefinition newPlanItemDefinition = newPlanItem.getPlanItemDefinition(); PlanItemInstanceEntity parentPlanItemInstance = null; if (newPlanItemDefinition.getParentStage() != null && caseInstanceChangeState.getCreatedStageInstances().containsKey(newPlanItemDefinition.getParentStage().getId())) { parentPlanItemInstance = caseInstanceChangeState.getCreatedStageInstances().get(newPlanItemDefinition.getParentStage().getId()); } else { parentPlanItemInstance = defaultContinueParentPlanItemInstance;
protected PlanItemInstanceEntity deleteParentPlanItemInstances(String parentId, List<PlanItemMoveEntry> moveToPlanItemMoveEntries, Set<String> planItemInstanceIdsNotToDelete, CommandContext commandContext) { PlanItemInstanceEntityManager planItemInstanceEntityManager = CommandContextUtil.getPlanItemInstanceEntityManager(commandContext); PlanItemInstanceEntity parentPlanItemInstance = null; if (parentId != null) { parentPlanItemInstance = planItemInstanceEntityManager.findById(parentId); } if (parentPlanItemInstance != null && parentPlanItemInstance.isStage()) { Stage parentStage = (Stage) parentPlanItemInstance.getPlanItem().getPlanItemDefinition(); if (!isStageAncestorOfAnyNewPlanItemDefinitions(parentStage.getId(), moveToPlanItemMoveEntries)) { PlanItemInstanceEntity toDeleteParentExecution = resolveParentPlanItemInstanceToDelete(parentPlanItemInstance, moveToPlanItemMoveEntries); PlanItemInstanceEntity finalDeleteExecution = null; if (toDeleteParentExecution != null) { finalDeleteExecution = toDeleteParentExecution; } else { finalDeleteExecution = parentPlanItemInstance; } parentPlanItemInstance = finalDeleteExecution.getStagePlanItemInstanceEntity(); CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext); Date currentTime = cmmnEngineConfiguration.getClock().getCurrentTime(); finalDeleteExecution.setEndedTime(currentTime); finalDeleteExecution.setTerminatedTime(currentTime); finalDeleteExecution.setState(PlanItemInstanceState.TERMINATED); } } return parentPlanItemInstance; }