public static DecisionDefinitionDto fromDecisionDefinition(DecisionDefinition definition) { DecisionDefinitionDto dto = new DecisionDefinitionDto(); dto.id = definition.getId(); dto.key = definition.getKey(); dto.category = definition.getCategory(); dto.name = definition.getName(); dto.version = definition.getVersion(); dto.resource = definition.getResourceName(); dto.deploymentId = definition.getDeploymentId(); dto.decisionRequirementsDefinitionId = definition.getDecisionRequirementsDefinitionId(); dto.decisionRequirementsDefinitionKey = definition.getDecisionRequirementsDefinitionKey(); dto.tenantId = definition.getTenantId(); dto.historyTimeToLive = definition.getHistoryTimeToLive(); dto.versionTag = definition.getVersionTag(); return dto; }
public InputStream execute(final CommandContext commandContext) { DecisionDefinition decisionDefinition = new GetDeploymentDecisionDefinitionCmd(decisionDefinitionId).execute(commandContext); final String deploymentId = decisionDefinition.getDeploymentId(); final String resourceName = decisionDefinition.getDiagramResourceName(); if (resourceName != null ) { return commandContext.runWithoutAuthorization(new Callable<InputStream>() { public InputStream call() throws Exception { return new GetDeploymentResourceCmd(deploymentId, resourceName).execute(commandContext); } }); } else { return null; } }
public InputStream execute(final CommandContext commandContext) { DecisionDefinition decisionDefinition = new GetDeploymentDecisionDefinitionCmd(decisionDefinitionId).execute(commandContext); final String deploymentId = decisionDefinition.getDeploymentId(); final String resourceName = decisionDefinition.getResourceName(); return commandContext.runWithoutAuthorization(new Callable<InputStream>() { public InputStream call() throws Exception { return new GetDeploymentResourceCmd(deploymentId, resourceName).execute(commandContext); } }); }
@Override public void checkEvaluateDecision(DecisionDefinition decisionDefinition) { if (!getTenantManager().isAuthenticatedTenant(decisionDefinition.getTenantId())) { throw LOG.exceptionCommandWithUnauthorizedTenant("evaluate the decision '"+ decisionDefinition.getId() + "'"); } }
assertEquals("one", decisionDefinition.getKey()); assertEquals("One", decisionDefinition.getName()); assertTrue(decisionDefinition.getId().startsWith("one:1")); assertEquals("Examples", decisionDefinition.getCategory()); assertEquals(1, decisionDefinition.getVersion()); assertEquals("org/camunda/bpm/engine/test/repository/one.dmn", decisionDefinition.getResourceName()); assertEquals(firstDeploymentId, decisionDefinition.getDeploymentId()); assertEquals("one", decisionDefinition.getKey()); assertEquals("One", decisionDefinition.getName()); assertTrue(decisionDefinition.getId().startsWith("one:2")); assertEquals("Examples", decisionDefinition.getCategory()); assertEquals(2, decisionDefinition.getVersion()); assertEquals("org/camunda/bpm/engine/test/repository/one.dmn", decisionDefinition.getResourceName()); assertEquals(secondDeploymentId, decisionDefinition.getDeploymentId()); assertEquals("two", decisionDefinition.getKey()); assertEquals("Two", decisionDefinition.getName()); assertTrue(decisionDefinition.getId().startsWith("two:1")); assertEquals("Examples2", decisionDefinition.getCategory()); assertEquals(1, decisionDefinition.getVersion()); assertEquals("org/camunda/bpm/engine/test/repository/two.dmn", decisionDefinition.getResourceName()); assertEquals(firstDeploymentId, decisionDefinition.getDeploymentId());
protected void initDecisionInstanceEvent(HistoricDecisionInstanceEntity event, DmnDecisionLogicEvaluationEvent evaluationEvent, HistoryEventTypes eventType, HistoricDecisionInstanceEntity rootDecisionInstance) { event.setEventType(eventType.getEventName()); DecisionDefinition decision = (DecisionDefinition) evaluationEvent.getDecision(); event.setDecisionDefinitionId(decision.getId()); event.setDecisionDefinitionKey(decision.getKey()); event.setDecisionDefinitionName(decision.getName()); if (decision.getDecisionRequirementsDefinitionId() != null) { event.setDecisionRequirementsDefinitionId(decision.getDecisionRequirementsDefinitionId()); event.setDecisionRequirementsDefinitionKey(decision.getDecisionRequirementsDefinitionKey()); } // set current time as evaluation time event.setEvaluationTime(ClockUtil.getCurrentTime()); if (event.getRootProcessInstanceId() == null && event.getCaseInstanceId() == null) { if (rootDecisionInstance != null) { event.setRemovalTime(rootDecisionInstance.getRemovalTime()); } else { Date removalTime = calculateRemovalTime(event, decision); event.setRemovalTime(removalTime); } } if (evaluationEvent instanceof DmnDecisionTableEvaluationEvent) { initDecisionInstanceEventForDecisionTable(event, (DmnDecisionTableEvaluationEvent) evaluationEvent); } else if (evaluationEvent instanceof DmnDecisionLiteralExpressionEvaluationEvent) { initDecisionInstanceEventForDecisionLiteralExpression(event, (DmnDecisionLiteralExpressionEvaluationEvent) evaluationEvent); } else { event.setInputs(Collections.<HistoricDecisionInputInstance> emptyList()); event.setOutputs(Collections.<HistoricDecisionOutputInstance> emptyList()); } }
@Deployment(resources = { "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testDecisionDiagramResource.dmn11.xml", "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testDecisionDiagramResource.png" }) @Test public void getDecisionDiagramResource() { String resourcePrefix = "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testDecisionDiagramResource"; DecisionDefinition decisionDefinition = repositoryService.createDecisionDefinitionQuery().singleResult(); assertEquals(resourcePrefix + ".dmn11.xml", decisionDefinition.getResourceName()); assertEquals("decision", decisionDefinition.getKey()); String diagramResourceName = decisionDefinition.getDiagramResourceName(); assertEquals(resourcePrefix + ".png", diagramResourceName); InputStream diagramStream = repositoryService.getResourceAsStream(decisionDefinition.getDeploymentId(), diagramResourceName); final byte[] diagramBytes = IoUtil.readInputStream(diagramStream, "diagram stream"); assertEquals(2540, diagramBytes.length); }
@Deployment(resources = { "org/camunda/bpm/engine/test/api/dmn/Example.dmn"}) public void testDecisionDefinitionUpdateTimeToLiveNull() { //given DecisionDefinition decisionDefinition = findOnlyDecisionDefinition(); //when repositoryService.updateDecisionDefinitionHistoryTimeToLive(decisionDefinition.getId(), null); //then decisionDefinition = (DecisionDefinitionEntity) repositoryService.getDecisionDefinition(decisionDefinition.getId()); assertEquals(null, decisionDefinition.getHistoryTimeToLive()); }
@Test public void drdDeployment() { String deploymentId = testRule.deploy(DRD_SCORE_RESOURCE).getId(); // there should be one decision requirements definition DecisionRequirementsDefinitionQuery query = repositoryService.createDecisionRequirementsDefinitionQuery(); assertEquals(1, query.count()); DecisionRequirementsDefinition decisionRequirementsDefinition = query.singleResult(); assertTrue(decisionRequirementsDefinition.getId().startsWith("score:1:")); assertEquals("score", decisionRequirementsDefinition.getKey()); assertEquals("Score", decisionRequirementsDefinition.getName()); assertEquals("test-drd-1", decisionRequirementsDefinition.getCategory()); assertEquals(1, decisionRequirementsDefinition.getVersion()); assertEquals(DRD_SCORE_RESOURCE, decisionRequirementsDefinition.getResourceName()); assertEquals(deploymentId, decisionRequirementsDefinition.getDeploymentId()); assertNull(decisionRequirementsDefinition.getDiagramResourceName()); // both decisions should have a reference to the decision requirements definition List<DecisionDefinition> decisions = repositoryService.createDecisionDefinitionQuery().orderByDecisionDefinitionKey().asc().list(); assertEquals(2, decisions.size()); DecisionDefinition firstDecision = decisions.get(0); assertEquals("score-decision", firstDecision.getKey()); assertEquals(decisionRequirementsDefinition.getId(), firstDecision.getDecisionRequirementsDefinitionId()); assertEquals("score", firstDecision.getDecisionRequirementsDefinitionKey()); DecisionDefinition secondDecision = decisions.get(1); assertEquals("score-result", secondDecision.getKey()); assertEquals(decisionRequirementsDefinition.getId(), secondDecision.getDecisionRequirementsDefinitionId()); assertEquals("score", secondDecision.getDecisionRequirementsDefinitionKey()); }
protected boolean isDeployedDecisionTable(DmnDecision decision) { if(decision instanceof DecisionDefinition) { return ((DecisionDefinition) decision).getId() != null; } else { return false; } }
@Test public void deployDecisionIndependentFromDrd() { String deploymentIdDecision = testRule.deploy(DMN_SCORE_RESOURCE).getId(); String deploymentIdDrd = testRule.deploy(DRD_SCORE_RESOURCE).getId(); // there should be one decision requirements definition DecisionRequirementsDefinitionQuery query = repositoryService.createDecisionRequirementsDefinitionQuery(); assertEquals(1, query.count()); DecisionRequirementsDefinition decisionRequirementsDefinition = query.singleResult(); assertEquals(1, decisionRequirementsDefinition.getVersion()); assertEquals(deploymentIdDrd, decisionRequirementsDefinition.getDeploymentId()); // and two deployed decisions with different versions List<DecisionDefinition> decisions = repositoryService.createDecisionDefinitionQuery().decisionDefinitionKey("score-decision") .orderByDecisionDefinitionVersion().asc() .list(); assertEquals(2, decisions.size()); DecisionDefinition firstDecision = decisions.get(0); assertEquals(1, firstDecision.getVersion()); assertEquals(deploymentIdDecision, firstDecision.getDeploymentId()); assertNull(firstDecision.getDecisionRequirementsDefinitionId()); DecisionDefinition secondDecision = decisions.get(1); assertEquals(2, secondDecision.getVersion()); assertEquals(deploymentIdDrd, secondDecision.getDeploymentId()); assertEquals(decisionRequirementsDefinition.getId(),secondDecision.getDecisionRequirementsDefinitionId()); }
@Test public void updateHistoryTimeToLiveWithAuthenticatedTenant() { identityService.setAuthentication("user", null, Arrays.asList(TENANT_ONE)); repositoryService.updateDecisionDefinitionHistoryTimeToLive(decisionDefinitionId, 6); DecisionDefinition definition = repositoryService.getDecisionDefinition(decisionDefinitionId); assertThat(definition.getTenantId(), is(TENANT_ONE)); assertThat(definition.getHistoryTimeToLive(), is(6)); }
protected Map<String, DecisionDefinition> getDecisionDefinitionsForTenant(List<DecisionDefinition> decisionDefinitions) { Map<String, DecisionDefinition> definitionsForTenant = new HashMap<String, DecisionDefinition>(); for (DecisionDefinition definition : decisionDefinitions) { definitionsForTenant.put(definition.getTenantId(), definition); } return definitionsForTenant; }
@Deployment @Test public void longDecisionDefinitionKey() { DecisionDefinition decisionDefinition = repositoryService.createDecisionDefinitionQuery().singleResult(); assertFalse(decisionDefinition.getId().startsWith("o123456789")); assertEquals("o123456789o123456789o123456789o123456789o123456789o123456789o123456789", decisionDefinition.getKey()); }
@Deployment( resources = DMN_CHECK_ORDER_RESOURCE ) @Test public void noDrdForSingleDecisionDeployment() { // when the DMN file contains only a single decision definition assertEquals(1, repositoryService.createDecisionDefinitionQuery().count()); // then no decision requirements definition should be created assertEquals(0, repositoryService.createDecisionRequirementsDefinitionQuery().count()); // and the decision should not be linked to a decision requirements definition DecisionDefinition decisionDefinition = repositoryService.createDecisionDefinitionQuery().singleResult(); assertNull(decisionDefinition.getDecisionRequirementsDefinitionId()); assertNull(decisionDefinition.getDecisionRequirementsDefinitionKey()); }
@Deployment(resources = { "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testMultipleDecisionDiagramResource.dmn11.xml", "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testMultipleDecisionDiagramResource.decision1.png", "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testMultipleDecisionDiagramResource.decision2.png", "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testMultipleDecisionDiagramResource.decision3.png" }) @Test public void multipleDiagramResourcesProvided() { String resourcePrefix = "org/camunda/bpm/engine/test/dmn/deployment/DecisionDefinitionDeployerTest.testMultipleDecisionDiagramResource."; DecisionDefinitionQuery decisionDefinitionQuery = repositoryService.createDecisionDefinitionQuery(); assertEquals(3, decisionDefinitionQuery.count()); for (DecisionDefinition decisionDefinition : decisionDefinitionQuery.list()) { assertEquals(resourcePrefix + decisionDefinition.getKey() + ".png", decisionDefinition.getDiagramResourceName()); } }
public Date calculateRemovalTime(HistoricDecisionInstanceEntity historicRootDecisionInstance, DecisionDefinition decisionDefinition) { Integer historyTimeToLive = decisionDefinition.getHistoryTimeToLive(); if (historyTimeToLive != null) { Date evaluationTime = historicRootDecisionInstance.getEvaluationTime(); return determineRemovalTime(evaluationTime, historyTimeToLive); } return null; }
@Override public void checkEvaluateDecision(DecisionDefinition decisionDefinition) { getAuthorizationManager().checkAuthorization(CREATE_INSTANCE, DECISION_DEFINITION, decisionDefinition.getKey()); }
public void testQueryByLatestWithoutTenantId() { // deploy a second version without tenant id deployment(DMN); DecisionDefinitionQuery query = repositoryService .createDecisionDefinitionQuery() .decisionDefinitionKey(DECISION_DEFINITION_KEY) .latestVersion() .withoutTenantId(); assertThat(query.count(), is(1L)); DecisionDefinition decisionDefinition = query.singleResult(); assertThat(decisionDefinition.getTenantId(), is(nullValue())); assertThat(decisionDefinition.getVersion(), is(2)); }
@Test @Deployment(resources = DMN_FILE) public void evaluateDecisionByKeyAndVersion() { // given DecisionDefinition decisionDefinition = engineRule.getRepositoryService().createDecisionDefinitionQuery().singleResult(); // when authRule.init(scenario).withUser("userId").bindResource("decisionDefinitionKey", DECISION_DEFINITION_KEY).start(); DmnDecisionTableResult decisionResult = engineRule.getDecisionService().evaluateDecisionTableByKeyAndVersion(decisionDefinition.getKey(), decisionDefinition.getVersion(), createVariables()); // then if (authRule.assertScenario(scenario)) { assertThatDecisionHasExpectedResult(decisionResult); } }