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); } } } }
xtw.writeStartElement(CMMNDI_PREFIX, ELEMENT_DI_DIAGRAM, CMMNDI_NAMESPACE); String caseId = model.getPrimaryCase().getId(); for (String elementId : model.getLocationMap().keySet()) { if (elementId.equals(model.getPrimaryCase().getPlanModel().getId())) { writePlanModel(model.getPrimaryCase().getPlanModel(), model, xtw); PlanItem planItem = model.findPlanItem(elementId); if (planItem != null) { writePlanItem(planItem, model, xtw); if (model.getFlowLocationMap().size() > 0) { Map<String, Association> associationMap = new LinkedHashMap<>(); for (Association association : model.getAssociations()) { associationMap.put(association.getId(), association); for (String elementId : model.getFlowLocationMap().keySet()) { Association association = associationMap.get(elementId); if (association == null) continue;
protected void fillWaypoints(String id, CmmnModel model, ObjectNode elementNode, GraphicInfo diagramInfo) { List<GraphicInfo> flowInfo = model.getFlowLocationGraphicInfo(id); ArrayNode waypointArray = objectMapper.createArrayNode(); for (GraphicInfo graphicInfo : flowInfo) { ObjectNode pointNode = objectMapper.createObjectNode(); fillGraphicInfo(pointNode, graphicInfo, false); waypointArray.add(pointNode); fillDiagramInfo(graphicInfo, diagramInfo); } elementNode.set("waypoints", waypointArray); }
public static void writeRootElement(CmmnModel model, XMLStreamWriter xtw, String encoding) throws Exception { xtw.writeStartDocument(encoding, "1.0"); // start definitions root element xtw.writeStartElement(ELEMENT_DEFINITIONS); xtw.setDefaultNamespace(CMMN_NAMESPACE); xtw.writeDefaultNamespace(CMMN_NAMESPACE); xtw.writeNamespace(XSI_PREFIX, XSI_NAMESPACE); xtw.writeNamespace(FLOWABLE_EXTENSIONS_PREFIX, FLOWABLE_EXTENSIONS_NAMESPACE); xtw.writeNamespace(CMMNDI_PREFIX, CMMNDI_NAMESPACE); xtw.writeNamespace(OMGDC_PREFIX, OMGDC_NAMESPACE); xtw.writeNamespace(OMGDI_PREFIX, OMGDI_NAMESPACE); for (String prefix : model.getNamespaces().keySet()) { if (!defaultNamespaces.contains(prefix) && StringUtils.isNotEmpty(prefix)) xtw.writeNamespace(prefix, model.getNamespaces().get(prefix)); } if (StringUtils.isNotEmpty(model.getTargetNamespace())) { xtw.writeAttribute(ATTRIBUTE_TARGET_NAMESPACE, model.getTargetNamespace()); } else { xtw.writeAttribute(ATTRIBUTE_TARGET_NAMESPACE, CASE_NAMESPACE); } } }
protected void processCaseElements(ServerConfig config, CmmnModel pojoModel, ObjectNode displayNode, GraphicInfo diagramInfo) throws Exception { if (pojoModel.getLocationMap().isEmpty()) { return; diagramInfo.setY(1000); for (Case caseObject : pojoModel.getCases()) { ObjectNode elementNode = objectMapper.createObjectNode(); elementNode.put("id", caseObject.getPlanModel().getId()); elementNode.put("name", caseObject.getPlanModel().getName()); GraphicInfo graphicInfo = pojoModel.getGraphicInfo(caseObject.getPlanModel().getId()); if (graphicInfo != null) { fillGraphicInfo(elementNode, graphicInfo, true); for (Association association : pojoModel.getAssociations()) { ObjectNode elementNode = objectMapper.createObjectNode(); elementNode.put("id", association.getId()); elementNode.put("sourceRef", association.getSourceRef()); elementNode.put("targetRef", association.getTargetRef()); List<GraphicInfo> flowInfo = pojoModel.getFlowLocationGraphicInfo(association.getId()); if (CollectionUtils.isNotEmpty(flowInfo)) { ArrayNode waypointArray = objectMapper.createArrayNode();
protected void processCmmnElements(ConversionHelper conversionHelper) { CmmnModel cmmnModel = conversionHelper.getCmmnModel(); for (Case caze : cmmnModel.getCases()) { processPlanFragment(cmmnModel, caze.getPlanModel()); for (Case caze : cmmnModel.getCases()) { processSentries(caze.getPlanModel(), caze.getPlanModel()); for (CaseElement caseElement : conversionHelper.getCaseElements().get(caze)) { cmmnModel.addGraphicInfo(diShape.getCmmnElementRef(), diShape.getGraphicInfo()); PlanItem planItem = cmmnModel.findPlanItem(association.getSourceRef()); if (planItem == null) { planItem = cmmnModel.findPlanItem(association.getTargetRef()); planItemSourceRef = association.getTargetRef(); } else { cmmnModel.addAssociation(association); cmmnModel.addFlowGraphicInfoList(association.getId(), diEdge.getWaypoints());
@RequestMapping(value = "/rest/case-definitions/{caseDefinitionId}/model-json", method = RequestMethod.GET, produces = "application/json") public JsonNode getModelJSONForCaseDefinition(@PathVariable String caseDefinitionId) { CmmnModel pojoModel = cmmnRepositoryService.getCmmnModel(caseDefinitionId); if (pojoModel == null || pojoModel.getLocationMap().isEmpty()) { throw new InternalServerErrorException("Case definition could not be found with id " + caseDefinitionId); } return processCaseElements(pojoModel, null, null, null); }
protected static void createCmmnShape(CmmnModel model, String elementId, XMLStreamWriter xtw) throws Exception { xtw.writeStartElement(CMMNDI_PREFIX, ELEMENT_DI_SHAPE, CMMNDI_NAMESPACE); String shapeId = "CMMNShape_" + elementId; xtw.writeAttribute(ATTRIBUTE_ID, shapeId); xtw.writeAttribute(ATTRIBUTE_DI_CMMN_ELEMENT_REF, elementId); GraphicInfo graphicInfo = model.getGraphicInfo(elementId); xtw.writeStartElement(OMGDC_PREFIX, ELEMENT_DI_BOUNDS, OMGDC_NAMESPACE); xtw.writeAttribute(ATTRIBUTE_DI_HEIGHT, String.valueOf(graphicInfo.getHeight())); xtw.writeAttribute(ATTRIBUTE_DI_WIDTH, String.valueOf(graphicInfo.getWidth())); xtw.writeAttribute(ATTRIBUTE_DI_X, String.valueOf(graphicInfo.getX())); xtw.writeAttribute(ATTRIBUTE_DI_Y, String.valueOf(graphicInfo.getY())); xtw.writeEndElement(); // The xsd requires a CMMNLabel to be there, even though the spec text says it's optional xtw.writeStartElement(CMMNDI_PREFIX, ELEMENT_DI_LABEL, CMMNDI_NAMESPACE); xtw.writeEndElement(); xtw.writeEndElement(); }
public void processCmmnElements(CmmnModel cmmnModel, CmmnParseResult parseResult) { for (Case caze : cmmnModel.getCases()) { cmmnParseHandlers.parseElement(this, parseResult, caze); } }
public static Case getCase(String caseDefinitionId) { return getCmmnModel(caseDefinitionId).getPrimaryCase(); }
public Case getCmmnCaseForCaseDefinition(CaseDefinitionEntity caseDefinition) { CmmnModel model = getCmmnModelForCaseDefinition(caseDefinition); return (model == null ? null : model.getCaseById(caseDefinition.getKey())); }
protected PlanItem resolvePlanItemFromCmmnModel(CmmnModel cmmnModel, String planItemId, String caseDefinitionId) { PlanItem planItem = cmmnModel.findPlanItem(planItemId); if (planItem == null) { throw new FlowableException("Cannot find plan item '" + planItemId + "' in case definition with id '" + caseDefinitionId + "'"); } return planItem; }
@Override protected void executeParse(CmmnParserImpl cmmnParser, CmmnParseResult cmmnParseResult, Case caze) { CaseDefinitionEntity caseDefinitionEntity = CommandContextUtil.getCaseDefinitionEntityManager().create(); caseDefinitionEntity.setKey(caze.getId()); caseDefinitionEntity.setName(caze.getName()); caseDefinitionEntity.setDescription(caze.getDocumentation()); caseDefinitionEntity.setCategory(cmmnParseResult.getCmmnModel().getTargetNamespace()); caseDefinitionEntity.setDeploymentId(cmmnParseResult.getResourceEntity().getDeploymentId()); cmmnParseResult.addCaseDefinition(caseDefinitionEntity, cmmnParseResult.getResourceEntity(), cmmnParseResult.getCmmnModel()); processPlanFragment(cmmnParser, cmmnParseResult, caze.getPlanModel()); }
diagramInfo.setY(1000); for (Case caseObject : pojoModel.getCases()) { ObjectNode elementNode = objectMapper.createObjectNode(); elementNode.put("id", caseObject.getPlanModel().getId()); elementNode.put("name", caseObject.getPlanModel().getName()); GraphicInfo graphicInfo = pojoModel.getGraphicInfo(caseObject.getPlanModel().getId()); if (graphicInfo != null) { fillGraphicInfo(elementNode, graphicInfo, true); for (Association association : pojoModel.getAssociations()) { ObjectNode elementNode = objectMapper.createObjectNode(); elementNode.put("id", association.getId()); elementNode.put("sourceRef", association.getSourceRef()); elementNode.put("targetRef", association.getTargetRef()); List<GraphicInfo> flowInfo = pojoModel.getFlowLocationGraphicInfo(association.getId()); if (CollectionUtils.isNotEmpty(flowInfo)) { ArrayNode waypointArray = objectMapper.createArrayNode();
@RequestMapping(value = "/rest/admin/case-definitions/{caseDefinitionId}/model-json", method = RequestMethod.GET, produces = "application/json") public JsonNode getCaseDefinitionModelJSON(@PathVariable String caseDefinitionId) { ServerConfig config = retrieveServerConfig(EndpointType.CMMN); ObjectNode displayNode = objectMapper.createObjectNode(); CmmnModel pojoModel = clientService.getCaseDefinitionModel(config, caseDefinitionId); if (!pojoModel.getLocationMap().isEmpty()) { try { GraphicInfo diagramInfo = new GraphicInfo(); processCaseElements(config, pojoModel, displayNode, diagramInfo); displayNode.put("diagramBeginX", diagramInfo.getX()); displayNode.put("diagramBeginY", diagramInfo.getY()); displayNode.put("diagramWidth", diagramInfo.getWidth()); displayNode.put("diagramHeight", diagramInfo.getHeight()); } catch (Exception e) { LOGGER.error("Error creating model JSON", e); } } return displayNode; }
protected void processCriteria(List<Criterion> criteria, String type, CmmnModel model, ArrayNode elementArray) { for (Criterion criterion : criteria) { ObjectNode criterionNode = objectMapper.createObjectNode(); criterionNode.put("id", criterion.getId()); criterionNode.put("name", criterion.getName()); criterionNode.put("type", type); GraphicInfo criterionGraphicInfo = model.getGraphicInfo(criterion.getId()); if (criterionGraphicInfo != null) { fillGraphicInfo(criterionNode, criterionGraphicInfo, true); } elementArray.add(criterionNode); } }
for (Case caseModel : model.getCases()) {
public void executeTaskListeners(TaskEntity taskEntity, String eventType) { if (taskEntity.getScopeDefinitionId() != null) { CmmnModel cmmnModel = CaseDefinitionUtil.getCmmnModel(taskEntity.getScopeDefinitionId()); CaseElement caseElement = cmmnModel.getPrimaryCase().getAllCaseElements().get(taskEntity.getTaskDefinitionKey()); if (caseElement instanceof HumanTask) { HumanTask humanTask = (HumanTask) caseElement; executeTaskListeners(humanTask, taskEntity, eventType); } } }
protected FormInfo getStartForm(CaseDefinition caseDefinition) { FormInfo formInfo = null; CmmnModel cmmnModel = repositoryService.getCmmnModel(caseDefinition.getId()); Case caze = cmmnModel.getCaseById(caseDefinition.getKey()); Stage stage = caze.getPlanModel(); if (StringUtils.isNotEmpty(stage.getFormKey())) { CmmnDeployment deployment = repositoryService.createDeploymentQuery().deploymentId(caseDefinition.getDeploymentId()).singleResult(); formInfo = formRepositoryService.getFormModelByKeyAndParentDeploymentId(stage.getFormKey(), deployment.getParentDeploymentId(), caseDefinition.getTenantId(), cmmnEngineConfiguration.isFallbackToDefaultTenant()); } if (formInfo == null) { // Definition found, but no form attached throw new FlowableObjectNotFoundException("Case definition does not have a start form defined: " + caseDefinition.getId()); } return formInfo; } }
if (pojoModel == null || pojoModel.getLocationMap().isEmpty()) { throw new InternalServerErrorException("Case definition could not be found with id " + caseInstance.getCaseDefinitionId());