package com.camunda.consulting.dmnModel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.camunda.bpm.dmn.engine.DmnDecision;
import org.camunda.bpm.dmn.engine.DmnDecisionTableResult;
import org.camunda.bpm.dmn.engine.DmnEngine;
import org.camunda.bpm.dmn.engine.DmnEngineConfiguration;
import org.camunda.bpm.engine.variable.VariableMap;
import org.camunda.bpm.engine.variable.Variables;
import org.camunda.bpm.model.dmn.Dmn;
import org.camunda.bpm.model.dmn.DmnModelInstance;
import org.camunda.bpm.model.dmn.HitPolicy;
import org.camunda.bpm.model.dmn.instance.Decision;
import org.camunda.bpm.model.dmn.instance.DecisionTable;
import org.camunda.bpm.model.dmn.instance.Definitions;
import org.camunda.bpm.model.dmn.instance.Input;
import org.camunda.bpm.model.dmn.instance.InputEntry;
import org.camunda.bpm.model.dmn.instance.InputExpression;
import org.camunda.bpm.model.dmn.instance.Output;
import org.camunda.bpm.model.dmn.instance.OutputEntry;
import org.camunda.bpm.model.dmn.instance.Rule;
import org.camunda.bpm.model.dmn.instance.Text;
public class DmnModelCreator {
public static void main(String[] args) {
DmnModelInstance modelInstance = Dmn.createEmptyModel();
Definitions definitions = modelInstance.newInstance(Definitions.class);
definitions.setNamespace("http://camunda.org/schema/1.0/dmn");
definitions.setName("definitions");
definitions.setId("definitions");
modelInstance.setDefinitions(definitions);
Decision decision = modelInstance.newInstance(Decision.class);
decision.setId("testGenerated");
decision.setName("generationtest");
definitions.addChildElement(decision);
DecisionTable decisionTable = modelInstance.newInstance(DecisionTable.class);
decisionTable.setId("decisionTable");
decisionTable.setHitPolicy(HitPolicy.UNIQUE);
decision.addChildElement(decisionTable);
Input jahreszeitInput = modelInstance.newInstance(Input.class);
jahreszeitInput.setId("Input_1");
jahreszeitInput.setLabel("Season");
InputExpression inputExpression = modelInstance.newInstance(InputExpression.class);
inputExpression.setId("InputExpression_1");
inputExpression.setTypeRef("string");
Text text = modelInstance.newInstance(Text.class);
text.setTextContent("season");
inputExpression.setText(text);
jahreszeitInput.addChildElement(inputExpression);
decisionTable.addChildElement(jahreszeitInput);
Input anzahlGaesteInput = modelInstance.newInstance(Input.class);
anzahlGaesteInput.setId("Input_2");
anzahlGaesteInput.setLabel("Number of guests");
InputExpression inputExpression2 = modelInstance.newInstance(InputExpression.class);
inputExpression2.setId("InputExpression_2");
inputExpression2.setTypeRef("integer");
Text text3 = modelInstance.newInstance(Text.class);
text3.setTextContent("guestCount");
inputExpression2.setText(text3);
anzahlGaesteInput.addChildElement(inputExpression2);
decisionTable.addChildElement(anzahlGaesteInput);
Output output = modelInstance.newInstance(Output.class);
output.setId("Output_1");
output.setLabel("Dish");
output.setName("dish");
output.setTypeRef("string");
decisionTable.addChildElement(output);
Rule rule = modelInstance.newInstance(Rule.class);
rule.setId("Rule_1");
Text text1 = modelInstance.newInstance(Text.class);
text1.setTextContent("\"Summer\"");
InputEntry inputEntry = modelInstance.newInstance(InputEntry.class);
inputEntry.setId("input_3");
inputEntry.addChildElement(text1);
rule.addChildElement(inputEntry);
Text text4 = modelInstance.newInstance(Text.class);
text4.setTextContent("<4");
InputEntry inputEntry2 = modelInstance.newInstance(InputEntry.class);
inputEntry2.setId("input_4");
inputEntry2.addChildElement(text4);
rule.addChildElement(inputEntry2);
OutputEntry outputEntry = modelInstance.newInstance(OutputEntry.class);
outputEntry.setId("output_2");
Text text2 = modelInstance.newInstance(Text.class);
text2.setTextContent("\"Strawberries\"");
outputEntry.addChildElement(text2);
rule.addChildElement(outputEntry);
decisionTable.addChildElement(rule);
Rule rule2 = modelInstance.newInstance(Rule.class);
Text text5 = modelInstance.newInstance(Text.class);
text5.setTextContent("\"Summer\"");
InputEntry inputEntry1 = modelInstance.newInstance(InputEntry.class);
inputEntry1.setId("input_1");
inputEntry1.addChildElement(text5);
rule2.addChildElement(inputEntry1);
Text text41 = modelInstance.newInstance(Text.class);
text41.setTextContent(">=4");
InputEntry inputEntry21 = modelInstance.newInstance(InputEntry.class);
inputEntry21.setId("input_2");
inputEntry21.addChildElement(text41);
rule2.addChildElement(inputEntry21);
OutputEntry outputEntry1 = modelInstance.newInstance(OutputEntry.class);
outputEntry1.setId("output_1");
Text text21 = modelInstance.newInstance(Text.class);
text21.setTextContent("\"Icecream\"");
outputEntry1.addChildElement(text21);
rule2.addChildElement(outputEntry1);
decisionTable.addChildElement(rule2);
Dmn.validateModel(modelInstance);
System.out.println(Dmn.convertToString(modelInstance));
DmnEngine dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine();
DmnDecision decision2 = dmnEngine.parseDecision("testGenerated", modelInstance);
VariableMap variables = Variables
.createVariables()
.putValue("season", "Summer")
.putValue("guestCount", 9);
DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision2, variables);
System.out.println(result.toString());
Collection inputs = modelInstance.getModelElementsByType(Input.class);
for (Input input2 : inputs) {
System.out.println("" + input2.getRawTextContent());
}
System.out.println();
Collection inputEntries = modelInstance.getModelElementsByType(InputEntry.class);
for (InputEntry inputEntry3 : inputEntries) {
System.out.println("" + inputEntry3.getRawTextContent());
}
}
}