protected boolean deploymentsDiffer(DmnDeploymentEntity deployment, DmnDeploymentEntity saved) { if (deployment.getResources() == null || saved.getResources() == null) { return true; } Map<String, EngineResource> resources = deployment.getResources(); Map<String, EngineResource> savedResources = saved.getResources(); for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); if (savedResource == null) return true; EngineResource resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); byte[] savedBytes = savedResource.getBytes(); if (!Arrays.equals(bytes, savedBytes)) { return true; } } return false; } }
protected BpmnParse createBpmnParseFromResource(EngineResource resource) { String resourceName = resource.getName(); ByteArrayInputStream inputStream = new ByteArrayInputStream(resource.getBytes()); BpmnParse bpmnParse = bpmnParser.createParse() .sourceInputStream(inputStream) .setSourceSystemId(resourceName) .deployment(deployment) .name(resourceName); if (deploymentSettings != null) { // Schema validation if needed if (deploymentSettings.containsKey(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED)) { bpmnParse.setValidateSchema((Boolean) deploymentSettings.get(DeploymentSettings.IS_BPMN20_XSD_VALIDATION_ENABLED)); } // Process validation if needed if (deploymentSettings.containsKey(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED)) { bpmnParse.setValidateProcess((Boolean) deploymentSettings.get(DeploymentSettings.IS_PROCESS_VALIDATION_ENABLED)); } } else { // On redeploy, we assume it is validated at the first deploy bpmnParse.setValidateSchema(false); bpmnParse.setValidateProcess(false); } try { bpmnParse.execute(); } catch (Exception e) { LOGGER.error("Could not parse resource {}", resource.getName(), e); throw e; } return bpmnParse; }
@Override public void insert(DeploymentEntity deployment) { insert(deployment, false); for (EngineResource resource : deployment.getResources().values()) { resource.setDeploymentId(deployment.getId()); getResourceEntityManager().insert((ResourceEntity) resource); } }
protected boolean deploymentsDiffer(DeploymentEntity deployment, DeploymentEntity saved) { if (deployment.getResources() == null || saved.getResources() == null) { return true; } Map<String, EngineResource> resources = deployment.getResources(); Map<String, EngineResource> savedResources = saved.getResources(); for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); if (savedResource == null) return true; if (!savedResource.isGenerated()) { EngineResource resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); byte[] savedBytes = savedResource.getBytes(); if (!Arrays.equals(bytes, savedBytes)) { return true; } } } return false; }
public ParsedDeployment build() { List<DecisionTableEntity> decisionTables = new ArrayList<>(); Map<DecisionTableEntity, DmnParse> decisionTablesToDmnParseMap = new LinkedHashMap<>(); Map<DecisionTableEntity, EngineResource> decisionTablesToResourceMap = new LinkedHashMap<>(); for (EngineResource resource : deployment.getResources().values()) { if (DmnResourceUtil.isDmnResource(resource.getName())) { LOGGER.debug("Processing DMN resource {}", resource.getName()); DmnParse parse = createDmnParseFromResource(resource); for (DecisionTableEntity decisionTable : parse.getDecisionTables()) { decisionTables.add(decisionTable); decisionTablesToDmnParseMap.put(decisionTable, parse); decisionTablesToResourceMap.put(decisionTable, resource); } } } return new ParsedDeployment(deployment, decisionTables, decisionTablesToDmnParseMap, decisionTablesToResourceMap); }
@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()); }
public ParsedDeployment build() { List<ProcessDefinitionEntity> processDefinitions = new ArrayList<>(); Map<ProcessDefinitionEntity, BpmnParse> processDefinitionsToBpmnParseMap = new LinkedHashMap<>(); Map<ProcessDefinitionEntity, EngineResource> processDefinitionsToResourceMap = new LinkedHashMap<>(); DeploymentEntity deploymentEntity = (DeploymentEntity) deployment; for (EngineResource resource : deploymentEntity.getResources().values()) { if (isBpmnResource(resource.getName())) { LOGGER.debug("Processing BPMN resource {}", resource.getName()); BpmnParse parse = createBpmnParseFromResource(resource); for (ProcessDefinitionEntity processDefinition : parse.getProcessDefinitions()) { processDefinitions.add(processDefinition); processDefinitionsToBpmnParseMap.put(processDefinition, parse); processDefinitionsToResourceMap.put(processDefinition, resource); } } } return new ParsedDeployment(deploymentEntity, processDefinitions, processDefinitionsToBpmnParseMap, processDefinitionsToResourceMap); }
protected boolean deploymentsDiffer(CmmnDeploymentEntity deployment, CmmnDeploymentEntity saved) { if (deployment.getResources() == null || saved.getResources() == null) { return true; } Map<String, EngineResource> resources = deployment.getResources(); Map<String, EngineResource> savedResources = saved.getResources(); for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); if (savedResource == null) { return true; } EngineResource resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); byte[] savedBytes = savedResource.getBytes(); if (!Arrays.equals(bytes, savedBytes)) { return true; } } return false; }
protected DmnParse createDmnParseFromResource(EngineResource resource) { String resourceName = resource.getName(); ByteArrayInputStream inputStream = new ByteArrayInputStream(resource.getBytes()); DmnParse dmnParse = dmnParseFactory.createParse() .sourceInputStream(inputStream) .setSourceSystemId(resourceName) .deployment(deployment) .name(resourceName); if (deploymentSettings != null) { // Schema validation if needed if (deploymentSettings.containsKey(DeploymentSettings.IS_DMN_XSD_VALIDATION_ENABLED)) { dmnParse.setValidateSchema((Boolean) deploymentSettings.get(DeploymentSettings.IS_DMN_XSD_VALIDATION_ENABLED)); } } else { // On redeploy, we assume it is validated at the first deploy dmnParse.setValidateSchema(false); } dmnParse.execute(CommandContextUtil.getDmnEngineConfiguration()); return dmnParse; }
/** * Updates all the process definition entities to have the correct resource names. */ public void setResourceNamesOnProcessDefinitions(ParsedDeployment parsedDeployment) { for (ProcessDefinitionEntity processDefinition : parsedDeployment.getAllProcessDefinitions()) { String resourceName = parsedDeployment.getResourceForProcessDefinition(processDefinition).getName(); processDefinition.setResourceName(resourceName); } }
@Override public void insert(AppDeploymentEntity deployment) { super.insert(deployment, true); for (EngineResource resource : deployment.getResources().values()) { resource.setDeploymentId(deployment.getId()); getAppResourceEntityManager().insert((AppResourceEntity) resource); } }
protected boolean deploymentsDiffer(AppDeploymentEntity deployment, AppDeploymentEntity saved) { if (deployment.getResources() == null || saved.getResources() == null) { return true; } Map<String, EngineResource> resources = deployment.getResources(); Map<String, EngineResource> savedResources = saved.getResources(); for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); if (savedResource == null) { return true; } EngineResource resource = resources.get(resourceName); byte[] bytes = resource.getBytes(); byte[] savedBytes = savedResource.getBytes(); if (!Arrays.equals(bytes, savedBytes)) { return true; } } return false; }
/** * Updates all the decision table entities to have the correct resource names. */ public void setResourceNamesOnDecisionTables(ParsedDeployment parsedDeployment) { for (DecisionTableEntity decisionTable : parsedDeployment.getAllDecisionTables()) { String resourceName = parsedDeployment.getResourceForDecisionTable(decisionTable).getName(); decisionTable.setResourceName(resourceName); } }
@Override public void insert(CmmnDeploymentEntity deployment) { super.insert(deployment, true); for (EngineResource resource : deployment.getResources().values()) { resource.setDeploymentId(deployment.getId()); getCmmnResourceEntityManager().insert((CmmnResourceEntity) resource); } }
@Override public CmmnParseResult parse(EngineResource resourceEntity) { try (ByteArrayInputStream inputStream = new ByteArrayInputStream(resourceEntity.getBytes())) { CmmnParseResult cmmnParseResult = parse(resourceEntity, new InputStreamSource(inputStream)); processDI(cmmnParseResult.getCmmnModel(), cmmnParseResult.getAllCaseDefinitions()); return cmmnParseResult; } catch (IOException e) { logger.error("Could not read bytes from CMMN resource", e); return new CmmnParseResult(); } }
protected void setResourceNamesOnCaseDefinitions(CmmnParseResult parseResult) { for (CaseDefinitionEntity caseDefinitionEntity : parseResult.getAllCaseDefinitions()) { String resourceName = parseResult.getResourceForCaseDefinition(caseDefinitionEntity).getName(); caseDefinitionEntity.setResourceName(resourceName); } }
@Override public void insert(DmnDeploymentEntity deployment) { super.insert(deployment, true); for (EngineResource resource : deployment.getResources().values()) { resource.setDeploymentId(deployment.getId()); getResourceEntityManager().insert((DmnResourceEntity) resource); } }
@Override public void deploy(EngineDeployment deployment, Map<String, Object> deploymentSettings) { LOGGER.debug("Processing app deployment {}", deployment.getName()); ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); DeploymentManager deploymentManager = processEngineConfiguration.getDeploymentManager(); Object appResourceObject = null; DeploymentEntity deploymentEntity = (DeploymentEntity) deployment; Map<String, EngineResource> resources = deploymentEntity.getResources(); for (String resourceName : resources.keySet()) { if (resourceName.endsWith(".app")) { LOGGER.info("Processing app resource {}", resourceName); EngineResource resourceEntity = resources.get(resourceName); byte[] resourceBytes = resourceEntity.getBytes(); appResourceObject = processEngineConfiguration.getAppResourceConverter().convertAppResourceToModel(resourceBytes); } } if (appResourceObject != null) { deploymentManager.getAppResourceCache().add(deployment.getId(), appResourceObject); } } }
@Override public void deploy(EngineDeployment deployment, Map<String, Object> deploymentSettings) { LOGGER.debug("Processing deployment {}", deployment.getName()); CmmnParseResult parseResult = new CmmnParseResult(deployment); for (EngineResource resource : deployment.getResources().values()) { if (isCmmnResource(resource.getName())) { LOGGER.debug("Processing CMMN resource {}", resource.getName()); parseResult.merge(cmmnParser.parse(resource)); } } verifyCaseDefinitionsDoNotShareKeys(parseResult.getAllCaseDefinitions()); copyDeploymentValuesToCaseDefinitions(parseResult.getDeployment(), parseResult.getAllCaseDefinitions()); setResourceNamesOnCaseDefinitions(parseResult); createAndPersistNewDiagramsIfNeeded(parseResult); setCaseDefinitionDiagramNames(parseResult); if (deployment.isNew()) { Map<CaseDefinitionEntity, CaseDefinitionEntity> mapOfNewCaseDefinitionToPreviousVersion = getPreviousVersionsOfCaseDefinitions(parseResult); setCaseDefinitionVersionsAndIds(parseResult, mapOfNewCaseDefinitionToPreviousVersion); persistCaseDefinitions(parseResult); } else { makeCaseDefinitionsConsistentWithPersistedVersions(parseResult); } updateCachingAndArtifacts(parseResult); }