use of org.camunda.bpm.model.dmn.instance.Rule in project camunda-engine-dmn by camunda.
the class DefaultDmnTransform method transformDecisionTable.
protected DmnDecisionTableImpl transformDecisionTable(DecisionTable decisionTable) {
DmnElementTransformHandler<DecisionTable, DmnDecisionTableImpl> handler = handlerRegistry.getHandler(DecisionTable.class);
DmnDecisionTableImpl dmnDecisionTable = handler.handleElement(this, decisionTable);
for (Input input : decisionTable.getInputs()) {
parent = dmnDecisionTable;
this.decisionTable = dmnDecisionTable;
DmnDecisionTableInputImpl dmnInput = transformDecisionTableInput(input);
if (dmnInput != null) {
dmnDecisionTable.getInputs().add(dmnInput);
notifyTransformListeners(input, dmnInput);
}
}
boolean needsName = decisionTable.getOutputs().size() > 1;
Set<String> usedNames = new HashSet<String>();
for (Output output : decisionTable.getOutputs()) {
parent = dmnDecisionTable;
this.decisionTable = dmnDecisionTable;
DmnDecisionTableOutputImpl dmnOutput = transformDecisionTableOutput(output);
if (dmnOutput != null) {
// validate output name
String outputName = dmnOutput.getOutputName();
if (needsName && outputName == null) {
throw LOG.compoundOutputsShouldHaveAnOutputName(dmnDecisionTable, dmnOutput);
}
if (usedNames.contains(outputName)) {
throw LOG.compoundOutputWithDuplicateName(dmnDecisionTable, dmnOutput);
}
usedNames.add(outputName);
dmnDecisionTable.getOutputs().add(dmnOutput);
notifyTransformListeners(output, dmnOutput);
}
}
for (Rule rule : decisionTable.getRules()) {
parent = dmnDecisionTable;
this.decisionTable = dmnDecisionTable;
DmnDecisionTableRuleImpl dmnRule = transformDecisionTableRule(rule);
if (dmnRule != null) {
dmnDecisionTable.getRules().add(dmnRule);
notifyTransformListeners(rule, dmnRule);
}
}
return dmnDecisionTable;
}
use of org.camunda.bpm.model.dmn.instance.Rule in project camunda-engine-dmn by camunda.
the class DefaultDmnTransform method transformDecisionTableRule.
protected DmnDecisionTableRuleImpl transformDecisionTableRule(Rule rule) {
DmnElementTransformHandler<Rule, DmnDecisionTableRuleImpl> handler = handlerRegistry.getHandler(Rule.class);
DmnDecisionTableRuleImpl dmnRule = handler.handleElement(this, rule);
// validate rule id
if (dmnRule.getId() == null) {
throw LOG.decisionTableRuleIdIsMissing(decision, dmnRule);
}
List<DmnDecisionTableInputImpl> inputs = this.decisionTable.getInputs();
List<InputEntry> inputEntries = new ArrayList<InputEntry>(rule.getInputEntries());
if (inputs.size() != inputEntries.size()) {
throw LOG.differentNumberOfInputsAndInputEntries(inputs.size(), inputEntries.size(), dmnRule);
}
for (InputEntry inputEntry : inputEntries) {
parent = dmnRule;
DmnExpressionImpl condition = transformInputEntry(inputEntry);
dmnRule.getConditions().add(condition);
}
List<DmnDecisionTableOutputImpl> outputs = this.decisionTable.getOutputs();
List<OutputEntry> outputEntries = new ArrayList<OutputEntry>(rule.getOutputEntries());
if (outputs.size() != outputEntries.size()) {
throw LOG.differentNumberOfOutputsAndOutputEntries(outputs.size(), outputEntries.size(), dmnRule);
}
for (OutputEntry outputEntry : outputEntries) {
parent = dmnRule;
DmnExpressionImpl conclusion = transformOutputEntry(outputEntry);
dmnRule.getConclusions().add(conclusion);
}
return dmnRule;
}
use of org.camunda.bpm.model.dmn.instance.Rule in project camunda-bpm-platform by camunda.
the class DmnModelElementInstanceCmdTest method testRepositoryService.
@Deployment(resources = "org/camunda/bpm/engine/test/repository/one.dmn")
public void testRepositoryService() {
String decisionDefinitionId = repositoryService.createDecisionDefinitionQuery().decisionDefinitionKey(DECISION_KEY).singleResult().getId();
DmnModelInstance modelInstance = repositoryService.getDmnModelInstance(decisionDefinitionId);
assertNotNull(modelInstance);
Collection<Decision> decisions = modelInstance.getModelElementsByType(Decision.class);
assertEquals(1, decisions.size());
Collection<DecisionTable> decisionTables = modelInstance.getModelElementsByType(DecisionTable.class);
assertEquals(1, decisionTables.size());
Collection<Input> inputs = modelInstance.getModelElementsByType(Input.class);
assertEquals(1, inputs.size());
Collection<Output> outputs = modelInstance.getModelElementsByType(Output.class);
assertEquals(1, outputs.size());
Collection<Rule> rules = modelInstance.getModelElementsByType(Rule.class);
assertEquals(2, rules.size());
}
use of org.camunda.bpm.model.dmn.instance.Rule in project camunda-dmn-model by camunda.
the class ExampleTestCompatibility method shouldWriteElements.
@Test
public void shouldWriteElements() throws Exception {
modelInstance = Dmn.createEmptyModel();
// Definitions
Definitions definitions = generateNamedElement(Definitions.class, "definitions");
definitions.setNamespace(TEST_NAMESPACE);
modelInstance.setDocumentElement(definitions);
// Decision
Decision decision = generateNamedElement(Decision.class, "Check Order");
definitions.addChildElement(decision);
// Decision table
DecisionTable decisionTable = generateElement(DecisionTable.class);
decision.addChildElement(decisionTable);
// 1. Input clause
Input input = generateElement(Input.class, 1);
input.setLabel("Customer Status");
InputExpression inputExpression = generateElement(InputExpression.class, 1);
inputExpression.setTypeRef("string");
Text text = generateElement(Text.class);
text.setTextContent("status");
inputExpression.setText(text);
input.setInputExpression(inputExpression);
InputValues inputValues = generateElement(InputValues.class);
text = generateElement(Text.class);
text.setTextContent("\"bronze\",\"silver\",\"gold\"");
inputValues.setText(text);
input.setInputValues(inputValues);
decisionTable.getInputs().add(input);
// 2. Input clause
input = generateElement(Input.class, 2);
input.setLabel("Order Sum");
inputExpression = generateElement(InputExpression.class, 2);
inputExpression.setTypeRef("double");
text = generateElement(Text.class);
text.setTextContent("sum");
inputExpression.setText(text);
input.setInputExpression(inputExpression);
decisionTable.getInputs().add(input);
// 1. Output clause
Output output = generateElement(Output.class, 1);
output.setLabel("Check Result");
output.setName("result");
output.setTypeRef("string");
OutputValues outputValues = generateElement(OutputValues.class);
text = generateElement(Text.class);
text.setTextContent("\"ok\",\"notok\"");
outputValues.setText(text);
output.setOutputValues(outputValues);
decisionTable.getOutputs().add(output);
// 2. Output clause
output = generateElement(Output.class, 2);
output.setLabel("Reason");
output.setName("reason");
output.setTypeRef("string");
decisionTable.getOutputs().add(output);
// 1. Rule
Rule rule = generateElement(Rule.class, 1);
InputEntry inputEntry = generateElement(InputEntry.class, 1);
text = generateElement(Text.class);
text.setTextContent("\"bronze\"");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
inputEntry = generateElement(InputEntry.class, 2);
text = generateElement(Text.class);
text.setTextContent("");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
OutputEntry outputEntry = generateElement(OutputEntry.class, 1);
text = generateElement(Text.class);
text.setTextContent("\"notok\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
outputEntry = generateElement(OutputEntry.class, 2);
text = generateElement(Text.class);
text.getDomElement().addCDataSection("\"work on your status first, as bronze you're not going to get anything\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
decisionTable.getRules().add(rule);
// 2. Rule
rule = generateElement(Rule.class, 2);
inputEntry = generateElement(InputEntry.class, 3);
text = generateElement(Text.class);
text.setTextContent("\"silver\"");
rule.getInputEntries().add(inputEntry);
inputEntry.setText(text);
inputEntry = generateElement(InputEntry.class, 4);
text = generateElement(Text.class);
text.getDomElement().addCDataSection("< 1000");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
outputEntry = generateElement(OutputEntry.class, 3);
text = generateElement(Text.class);
text.setTextContent("\"ok\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
outputEntry = generateElement(OutputEntry.class, 4);
text = generateElement(Text.class);
text.setTextContent("\"you little fish will get what you want\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
decisionTable.getRules().add(rule);
// 3. Rule
rule = generateElement(Rule.class, 3);
inputEntry = generateElement(InputEntry.class, 5);
text = generateElement(Text.class);
text.setTextContent("\"silver\"");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
inputEntry = generateElement(InputEntry.class, 6);
text = generateElement(Text.class);
text.getDomElement().addCDataSection(">= 1000");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
outputEntry = generateElement(OutputEntry.class, 5);
text = generateElement(Text.class);
text.setTextContent("\"notok\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
outputEntry = generateElement(OutputEntry.class, 6);
text = generateElement(Text.class);
text.setTextContent("\"you took too much man, you took too much!\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
decisionTable.getRules().add(rule);
// 4. Rule
rule = generateElement(Rule.class, 4);
inputEntry = generateElement(InputEntry.class, 7);
text = generateElement(Text.class);
text.setTextContent("\"gold\"");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
inputEntry = generateElement(InputEntry.class, 8);
text = generateElement(Text.class);
text.setTextContent("");
inputEntry.setText(text);
rule.getInputEntries().add(inputEntry);
outputEntry = generateElement(OutputEntry.class, 7);
text = generateElement(Text.class);
text.setTextContent("\"ok\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
outputEntry = generateElement(OutputEntry.class, 8);
text = generateElement(Text.class);
text.setTextContent("\"you get anything you want\"");
outputEntry.setText(text);
rule.getOutputEntries().add(outputEntry);
decisionTable.getRules().add(rule);
assertModelEqualsFile(EXAMPLE_DMN);
}
use of org.camunda.bpm.model.dmn.instance.Rule in project camunda-dmn-model by camunda.
the class ExampleTestCompatibility method shouldGetElements.
@Test
public void shouldGetElements() {
// Definitions
Definitions definitions = modelInstance.getDefinitions();
assertThat(definitions).isNotNull();
assertThat(definitions.getId()).isEqualTo("definitions");
assertThat(definitions.getName()).isEqualTo("definitions");
assertThat(definitions.getNamespace()).isEqualTo(TEST_NAMESPACE);
assertElementIsEqualToId(definitions, "definitions");
// Imports
Collection<Import> imports = definitions.getImports();
assertThat(imports).isEmpty();
// Item definitions
Collection<ItemDefinition> itemDefinitions = definitions.getItemDefinitions();
assertThat(itemDefinitions).isEmpty();
// DRG elements
Collection<DrgElement> drgElements = definitions.getDrgElements();
assertThat(drgElements).isNotEmpty().hasSize(1);
// Decision
Decision decision = (Decision) drgElements.iterator().next();
assertThat(decision).isNotNull();
assertThat(decision.getId()).isEqualTo("decision");
assertThat(decision.getName()).isEqualTo("Check Order");
assertElementIsEqualToId(decision, "decision");
// Decision table
DecisionTable decisionTable = (DecisionTable) decision.getExpression();
assertThat(decisionTable).isNotNull();
assertThat(decisionTable.getId()).isEqualTo("decisionTable");
assertElementIsEqualToId(decisionTable, "decisionTable");
// Input clauses
List<Input> inputs = new ArrayList<Input>(decisionTable.getInputs());
assertThat(inputs).hasSize(2);
Iterator<Input> inputIterator = inputs.iterator();
// 1. Input clause
Input input = inputIterator.next();
assertThat(input.getId()).isEqualTo("input1");
assertThat(input.getLabel()).isEqualTo("Customer Status");
InputExpression inputExpression = input.getInputExpression();
assertThat(inputExpression.getId()).isEqualTo("inputExpression1");
assertThat(inputExpression.getTypeRef()).isEqualTo("string");
assertThat(inputExpression.getText().getTextContent()).isEqualTo("status");
InputValues inputValues = input.getInputValues();
assertThat(inputValues.getText().getTextContent()).isEqualTo("\"bronze\",\"silver\",\"gold\"");
// 2. Input clause
input = inputIterator.next();
assertThat(input.getId()).isEqualTo("input2");
assertThat(input.getLabel()).isEqualTo("Order Sum");
inputExpression = input.getInputExpression();
assertThat(inputExpression.getId()).isEqualTo("inputExpression2");
assertThat(inputExpression.getTypeRef()).isEqualTo("double");
// Output clause
List<Output> outputs = new ArrayList<Output>(decisionTable.getOutputs());
assertThat(outputs).hasSize(2);
// 1. Output clause
Output output = outputs.get(0);
assertThat(output.getId()).isEqualTo("output1");
assertThat(output.getLabel()).isEqualTo("Check Result");
assertThat(output.getName()).isEqualTo("result");
assertThat(output.getTypeRef()).isEqualTo("string");
OutputValues outputValues = output.getOutputValues();
assertThat(outputValues.getText().getTextContent()).isEqualTo("\"ok\",\"notok\"");
// 2. Output clause
output = outputs.get(1);
assertThat(output.getId()).isEqualTo("output2");
assertThat(output.getLabel()).isEqualTo("Reason");
assertThat(output.getName()).isEqualTo("reason");
assertThat(output.getTypeRef()).isEqualTo("string");
// Rules
List<Rule> rules = new ArrayList<Rule>(decisionTable.getRules());
// 1. Rule
Rule rule = rules.get(0);
assertThat(rule.getId()).isEqualTo("rule1");
List<InputEntry> inputEntries = new ArrayList<InputEntry>(rule.getInputEntries());
assertThat(inputEntries).hasSize(2);
assertThat(inputEntries.get(0).getText().getTextContent()).isEqualTo("\"bronze\"");
assertThat(inputEntries.get(1).getText().getTextContent()).isEmpty();
List<OutputEntry> outputEntries = new ArrayList<OutputEntry>(rule.getOutputEntries());
assertThat(outputEntries).hasSize(2);
assertThat(outputEntries.get(0).getText().getTextContent()).isEqualTo("\"notok\"");
assertThat(outputEntries.get(1).getText().getTextContent()).isEqualTo("\"work on your status first, as bronze you're not going to get anything\"");
// 2. Rule
rule = rules.get(1);
assertThat(rule.getId()).isEqualTo("rule2");
inputEntries = new ArrayList<InputEntry>(rule.getInputEntries());
assertThat(inputEntries).hasSize(2);
assertThat(inputEntries.get(0).getText().getTextContent()).isEqualTo("\"silver\"");
assertThat(inputEntries.get(1).getText().getTextContent()).isEqualTo("< 1000");
outputEntries = new ArrayList<OutputEntry>(rule.getOutputEntries());
assertThat(outputEntries).hasSize(2);
assertThat(outputEntries.get(0).getText().getTextContent()).isEqualTo("\"ok\"");
assertThat(outputEntries.get(1).getText().getTextContent()).isEqualTo("\"you little fish will get what you want\"");
// 3. Rule
rule = rules.get(2);
assertThat(rule.getId()).isEqualTo("rule3");
inputEntries = new ArrayList<InputEntry>(rule.getInputEntries());
assertThat(inputEntries).hasSize(2);
assertThat(inputEntries.get(0).getText().getTextContent()).isEqualTo("\"silver\"");
assertThat(inputEntries.get(1).getText().getTextContent()).isEqualTo(">= 1000");
outputEntries = new ArrayList<OutputEntry>(rule.getOutputEntries());
assertThat(outputEntries).hasSize(2);
assertThat(outputEntries.get(0).getText().getTextContent()).isEqualTo("\"notok\"");
assertThat(outputEntries.get(1).getText().getTextContent()).isEqualTo("\"you took too much man, you took too much!\"");
// 4. Rule
rule = rules.get(3);
assertThat(rule.getId()).isEqualTo("rule4");
inputEntries = new ArrayList<InputEntry>(rule.getInputEntries());
assertThat(inputEntries).hasSize(2);
assertThat(inputEntries.get(0).getText().getTextContent()).isEqualTo("\"gold\"");
assertThat(inputEntries.get(1).getText().getTextContent()).isEmpty();
outputEntries = new ArrayList<OutputEntry>(rule.getOutputEntries());
assertThat(outputEntries).hasSize(2);
assertThat(outputEntries.get(0).getText().getTextContent()).isEqualTo("\"ok\"");
assertThat(outputEntries.get(1).getText().getTextContent()).isEqualTo("\"you get anything you want\"");
// Element collections
Collection<ElementCollection> elementCollections = definitions.getElementCollections();
assertThat(elementCollections).isEmpty();
// Business contexts
Collection<BusinessContextElement> businessContextElements = definitions.getBusinessContextElements();
assertThat(businessContextElements).isEmpty();
}
Aggregations