/* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.camunda.bpm.model.dmn; import static org.assertj.core.api.Assertions.assertThat; import static org.camunda.bpm.model.dmn.DecisionTableOrientation.CrossTable; import static org.camunda.bpm.model.dmn.DecisionTableOrientation.Rule_as_Column; import static org.camunda.bpm.model.dmn.DecisionTableOrientation.Rule_as_Row; import static org.camunda.bpm.model.dmn.HitPolicy.ANY; import static org.camunda.bpm.model.dmn.HitPolicy.COLLECT; import static org.camunda.bpm.model.dmn.HitPolicy.FIRST; import static org.camunda.bpm.model.dmn.HitPolicy.OUTPUT_ORDER; import static org.camunda.bpm.model.dmn.HitPolicy.PRIORITY; import static org.camunda.bpm.model.dmn.HitPolicy.RULE_ORDER; import static org.camunda.bpm.model.dmn.HitPolicy.UNIQUE; 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.Output; import org.camunda.bpm.model.dmn.util.DmnModelResource; import org.junit.Test; public class ReadWriteTest extends DmnModelTest { public static final String DECISION_TABLE_ORIENTATION_DMN = "org/camunda/bpm/model/dmn/ReadWriteTest.decisionTableOrientation.dmn"; public static final String HIT_POLICY_DMN = "org/camunda/bpm/model/dmn/ReadWriteTest.hitPolicy.dmn"; @Test @DmnModelResource(resource = DECISION_TABLE_ORIENTATION_DMN) public void shouldReadDecisionTableOrientation() { // Default DecisionTable decisionTable = modelInstance.getModelElementById("decisionTable1"); assertThat(decisionTable.getPreferredOrientation()).isEqualTo(Rule_as_Row); // Rule-as-Row decisionTable = modelInstance.getModelElementById("decisionTable2"); assertThat(decisionTable.getPreferredOrientation()).isEqualTo(Rule_as_Row); // Rule-as-Column decisionTable = modelInstance.getModelElementById("decisionTable3"); assertThat(decisionTable.getPreferredOrientation()).isEqualTo(Rule_as_Column); // CrossTable decisionTable = modelInstance.getModelElementById("decisionTable4"); assertThat(decisionTable.getPreferredOrientation()).isEqualTo(CrossTable); } @Test public void shouldWriteDecisionTableOrientation() throws Exception { modelInstance = Dmn.createEmptyModel(); Definitions definitions = generateNamedElement(Definitions.class, "definitions"); definitions.setNamespace(TEST_NAMESPACE); modelInstance.setDocumentElement(definitions); // Default Decision decision = generateNamedElement(Decision.class, "decision1", 1); DecisionTable decisionTable = generateElement(DecisionTable.class, 1); decision.setExpression(decisionTable); Output output = generateElement(Output.class, 1); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // Rule-as-Row decision = generateNamedElement(Decision.class, "decision2", 2); decisionTable = generateElement(DecisionTable.class, 2); decisionTable.setPreferredOrientation(Rule_as_Row); decision.setExpression(decisionTable); output = generateElement(Output.class, 2); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // Rule-as-Column decision = generateNamedElement(Decision.class, "decision3", 3); decisionTable = generateElement(DecisionTable.class, 3); decisionTable.setPreferredOrientation(Rule_as_Column); decision.setExpression(decisionTable); output = generateElement(Output.class, 3); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // CrossTable decision = generateNamedElement(Decision.class, "decision4", 4); decisionTable = generateElement(DecisionTable.class, 4); decisionTable.setPreferredOrientation(CrossTable); decision.setExpression(decisionTable); output = generateElement(Output.class, 4); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); assertModelEqualsFile(DECISION_TABLE_ORIENTATION_DMN); } @Test @DmnModelResource(resource = HIT_POLICY_DMN) public void shouldReadHitPolicy() { // Default DecisionTable decisionTable = modelInstance.getModelElementById("decisionTable1"); assertThat(decisionTable.getHitPolicy()).isEqualTo(UNIQUE); // UNIQUE decisionTable = modelInstance.getModelElementById("decisionTable2"); assertThat(decisionTable.getHitPolicy()).isEqualTo(UNIQUE); // FIRST decisionTable = modelInstance.getModelElementById("decisionTable3"); assertThat(decisionTable.getHitPolicy()).isEqualTo(FIRST); // PRIORITY decisionTable = modelInstance.getModelElementById("decisionTable4"); assertThat(decisionTable.getHitPolicy()).isEqualTo(PRIORITY); // ANY decisionTable = modelInstance.getModelElementById("decisionTable5"); assertThat(decisionTable.getHitPolicy()).isEqualTo(ANY); // COLLECT decisionTable = modelInstance.getModelElementById("decisionTable6"); assertThat(decisionTable.getHitPolicy()).isEqualTo(COLLECT); // RULE ORDER decisionTable = modelInstance.getModelElementById("decisionTable7"); assertThat(decisionTable.getHitPolicy()).isEqualTo(RULE_ORDER); // OUTPUT ORDER decisionTable = modelInstance.getModelElementById("decisionTable8"); assertThat(decisionTable.getHitPolicy()).isEqualTo(OUTPUT_ORDER); } @Test public void shouldWriteHitPolicy() throws Exception { modelInstance = Dmn.createEmptyModel(); Definitions definitions = generateNamedElement(Definitions.class, "definitions"); definitions.setNamespace(TEST_NAMESPACE); modelInstance.setDocumentElement(definitions); // Default Decision decision = generateNamedElement(Decision.class, "decision1", 1); DecisionTable decisionTable = generateElement(DecisionTable.class, 1); decision.setExpression(decisionTable); Output output = generateElement(Output.class, 1); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // UNIQUE decision = generateNamedElement(Decision.class, "decision2", 2); decisionTable = generateElement(DecisionTable.class, 2); decisionTable.setHitPolicy(UNIQUE); decision.setExpression(decisionTable); output = generateElement(Output.class, 2); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // FIRST decision = generateNamedElement(Decision.class, "decision3", 3); decisionTable = generateElement(DecisionTable.class, 3); decisionTable.setHitPolicy(FIRST); decision.setExpression(decisionTable); output = generateElement(Output.class, 3); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // PRIORITY decision = generateNamedElement(Decision.class, "decision4", 4); decisionTable = generateElement(DecisionTable.class, 4); decisionTable.setHitPolicy(PRIORITY); decision.setExpression(decisionTable); output = generateElement(Output.class, 4); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // ANY decision = generateNamedElement(Decision.class, "decision5", 5); decisionTable = generateElement(DecisionTable.class, 5); decisionTable.setHitPolicy(ANY); decision.setExpression(decisionTable); output = generateElement(Output.class, 5); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // COLLECT decision = generateNamedElement(Decision.class, "decision6", 6); decisionTable = generateElement(DecisionTable.class, 6); decisionTable.setHitPolicy(COLLECT); decision.setExpression(decisionTable); output = generateElement(Output.class, 6); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // RULE ORDER decision = generateNamedElement(Decision.class, "decision7", 7); decisionTable = generateElement(DecisionTable.class, 7); decisionTable.setHitPolicy(RULE_ORDER); decision.setExpression(decisionTable); output = generateElement(Output.class, 7); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); // OUTPUT ORDER decision = generateNamedElement(Decision.class, "decision8", 8); decisionTable = generateElement(DecisionTable.class, 8); decisionTable.setHitPolicy(OUTPUT_ORDER); decision.setExpression(decisionTable); output = generateElement(Output.class, 8); decisionTable.getOutputs().add(output); definitions.addChildElement(decision); assertModelEqualsFile(HIT_POLICY_DMN); } }