use of org.kie.dmn.model.api.Definitions in project drools by kiegroup.
the class DMNRuntimeTest method testCycleDetectionDeadlyDiamond.
@Test
public void testCycleDetectionDeadlyDiamond() {
final Definitions defs = buildSimplifiedDefinitions("ns", "a", "b", "c", "d");
final DecisionNodeImpl a = buildSimplifiedDecisionNode(defs, "a");
final DecisionNodeImpl b = buildSimplifiedDecisionNode(defs, "b");
final DecisionNodeImpl c = buildSimplifiedDecisionNode(defs, "c");
final DecisionNodeImpl d = buildSimplifiedDecisionNode(defs, "d");
a.addDependency("b", b);
a.addDependency("c", c);
b.addDependency("d", d);
c.addDependency("d", d);
final DMNModelImpl model = new DMNModelImpl(defs);
model.setDefinitions(defs);
model.addDecision(a);
model.addDecision(b);
model.addDecision(c);
model.addDecision(d);
final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(this.getClass());
final DMNResult result = runtime.evaluateAll(model, DMNFactory.newContext());
assertFalse(result.hasErrors());
}
use of org.kie.dmn.model.api.Definitions in project drools by kiegroup.
the class DMNRuntimeTest method testDROOLS2147_message.
@Test
public void testDROOLS2147_message() {
// DROOLS-2147 truncate message length
final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("Ex_4_3simplified.dmn", this.getClass());
final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_5c5a9c72-627e-4666-ae85-31356fed3658", "Ex_4_3simplified");
assertThat(dmnModel, notNullValue());
assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false));
final DMNContext context = DMNFactory.newContext();
final StringBuilder sb = new StringBuilder("abcdefghijklmnopqrstuvwxyz");
for (int i = 0; i < 100; i++) {
sb.append("abcdefghijklmnopqrstuvwxyz");
}
context.set("number", sb.toString());
final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context);
System.out.println(dmnResult);
assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(true));
assertThat(dmnResult.getMessages().stream().filter(m -> m.getMessageType() == DMNMessageType.ERROR_EVAL_NODE).anyMatch(m -> m.getMessage().contains("... [string clipped after 50 chars, total length is")), is(true));
}
use of org.kie.dmn.model.api.Definitions in project drools by kiegroup.
the class DMNRuntimeTest method testAssignNullToAllowedValues.
@Test
public void testAssignNullToAllowedValues() {
// DROOLS-3132 DMN assign null to ItemDefinition with allowedValues
final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("assignNullToAllowedValues.dmn", this.getClass());
final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_700a46e0-01ed-4361-9034-4afdb2537ea4", "Drawing 1");
assertThat(dmnModel, notNullValue());
assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false));
final DMNContext context = DMNFactory.newContext();
context.set("an input letter", null);
final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context);
LOG.debug("{}", dmnResult);
DMNRuntimeUtil.formatMessages(dmnResult.getMessages());
assertThat(dmnResult.hasErrors(), is(true));
assertThat(dmnResult.getMessages().stream().anyMatch(m -> m.getSourceId().equals("_24e8b31b-9505-4f52-93af-6dd9ef39c72a")), is(true));
assertThat(dmnResult.getMessages().stream().anyMatch(m -> m.getSourceId().equals("_09945fda-2b89-4148-8758-0bcb91a66e4a")), is(true));
}
use of org.kie.dmn.model.api.Definitions in project drools by kiegroup.
the class XStreamMarshaller method newXStream.
private XStream newXStream() {
XStream xStream = XStreamUtils.createNonTrustingXStream(staxDriver, Definitions.class.getClassLoader(), DMNXStream::from);
xStream.addPermission(new TypeHierarchyPermission(QName.class));
xStream.addPermission(new TypeHierarchyPermission(KieDMNModelInstrumentedBase.class));
xStream.alias("artifact", TArtifact.class);
xStream.alias("definitions", TDefinitions.class);
xStream.alias("inputData", TInputData.class);
xStream.alias("decision", TDecision.class);
xStream.alias("variable", TInformationItem.class);
xStream.alias("informationRequirement", TInformationRequirement.class);
xStream.alias("requiredInput", TDMNElementReference.class);
xStream.alias("literalExpression", TLiteralExpression.class);
xStream.alias("DMNElement", TDMNElement.class);
xStream.alias("allowedValues", TUnaryTests.class);
xStream.alias("artifact", TArtifact.class);
xStream.alias("association", TAssociation.class);
xStream.alias("authorityRequirement", TAuthorityRequirement.class);
xStream.alias("binding", TBinding.class);
xStream.alias("businessContextElement", TBusinessContextElement.class);
xStream.alias("businessKnowledgeModel", TBusinessKnowledgeModel.class);
xStream.alias("column", TInformationItem.class);
xStream.alias("context", TContext.class);
xStream.alias("contextEntry", TContextEntry.class);
xStream.alias("decision", TDecision.class);
xStream.alias("decisionMade", TDMNElementReference.class);
xStream.alias("decisionMaker", TDMNElementReference.class);
xStream.alias("decisionOwned", TDMNElementReference.class);
xStream.alias("decisionOwner", TDMNElementReference.class);
xStream.alias("decisionService", TDecisionService.class);
xStream.alias("decisionTable", TDecisionTable.class);
xStream.alias("defaultOutputEntry", TLiteralExpression.class);
xStream.alias("definitions", TDefinitions.class);
xStream.alias("drgElement", TDMNElementReference.class);
xStream.alias("elementCollection", TElementCollection.class);
xStream.alias("encapsulatedDecision", TDMNElementReference.class);
xStream.alias("encapsulatedLogic", TFunctionDefinition.class);
xStream.alias("expression", TExpression.class);
xStream.alias("formalParameter", TInformationItem.class);
xStream.alias("functionItem", TFunctionItem.class);
xStream.alias("functionDefinition", TFunctionDefinition.class);
xStream.alias("group", TGroup.class);
xStream.alias("impactedPerformanceIndicator", TDMNElementReference.class);
xStream.alias("impactingDecision", TDMNElementReference.class);
xStream.alias("import", TImport.class);
xStream.alias("import", TImport.class);
// TODO where?
xStream.alias("importedElement", String.class);
xStream.alias("importedValues", TImportedValues.class);
xStream.alias("informationItem", TInformationItem.class);
xStream.alias("informationRequirement", TInformationRequirement.class);
xStream.alias("input", TInputClause.class);
xStream.alias("inputData", TInputData.class);
xStream.alias("inputDecision", TDMNElementReference.class);
xStream.alias("inputEntry", TUnaryTests.class);
xStream.alias("inputExpression", TLiteralExpression.class);
xStream.alias("inputValues", TUnaryTests.class);
xStream.alias("invocation", TInvocation.class);
xStream.alias("itemComponent", TItemDefinition.class);
xStream.alias("itemDefinition", TItemDefinition.class);
xStream.alias("knowledgeRequirement", TKnowledgeRequirement.class);
xStream.alias("knowledgeSource", TKnowledgeSource.class);
xStream.alias("literalExpression", TLiteralExpression.class);
xStream.alias("namedElement", TNamedElement.class);
xStream.alias("organizationUnit", TOrganizationUnit.class);
xStream.alias("output", TOutputClause.class);
xStream.alias("outputDecision", TDMNElementReference.class);
xStream.alias("outputEntry", TLiteralExpression.class);
xStream.alias("outputValues", TUnaryTests.class);
xStream.alias("owner", TDMNElementReference.class);
xStream.alias("parameter", TInformationItem.class);
xStream.alias("parameters", TInformationItem.class);
xStream.alias("performanceIndicator", TPerformanceIndicator.class);
xStream.alias("relation", TRelation.class);
xStream.alias("requiredAuthority", TDMNElementReference.class);
xStream.alias("requiredDecision", TDMNElementReference.class);
xStream.alias("requiredInput", TDMNElementReference.class);
xStream.alias("requiredKnowledge", TDMNElementReference.class);
xStream.alias("rule", TDecisionRule.class);
xStream.alias("sourceRef", TDMNElementReference.class);
xStream.alias("supportedObjective", TDMNElementReference.class);
xStream.alias("targetRef", TDMNElementReference.class);
xStream.alias("textAnnotation", TTextAnnotation.class);
// TODO where?
xStream.alias("type", String.class);
xStream.alias("typeRef", QName.class);
xStream.alias("usingProcess", TDMNElementReference.class);
xStream.alias("usingTask", TDMNElementReference.class);
xStream.alias("variable", TInformationItem.class);
xStream.alias("row", org.kie.dmn.model.v1_3.TList.class);
xStream.alias("list", org.kie.dmn.model.v1_3.TList.class);
xStream.alias("extensionElements", TDMNElement.TExtensionElements.class);
// Manually imported TEXT = String
xStream.alias(LiteralExpressionConverter.TEXT, String.class);
// unnecessary 'text' key repetition: xStream.alias( TextAnnotationConverter.TEXT, String.class );
// unnecessary 'text' key repetition: xStream.alias( UnaryTestsConverter.TEXT, String.class );
xStream.alias(DecisionConverter.QUESTION, String.class);
xStream.alias(DecisionConverter.ALLOWED_ANSWERS, String.class);
xStream.alias(DMNElementConverter.DESCRIPTION, String.class);
// unnecessary 'text' key repetition: xStream.alias("text", xsd:string.class );
// unnecessary 'text' key repetition: xStream.alias("text", xsd:string.class );
// unnecessary 'text' key repetition: xStream.alias("text", xsd:string.class );
// xStream.alias("question", xsd:string.class );
// xStream.alias("allowedAnswers", xsd:string.class );
// xStream.alias("description", xsd:string.class );
// DMN v1.2:
// Note, to comply with NS for XStream need also to adjust entries inside DMNModelInstrumentedBaseConverter
xStream.alias("annotation", TRuleAnnotationClause.class);
xStream.alias("annotationEntry", TRuleAnnotation.class);
xStream.registerConverter(new RuleAnnotationClauseConverter(xStream));
xStream.registerConverter(new RuleAnnotationConverter(xStream));
xStream.alias("DMNDI", DMNDI.class);
xStream.registerConverter(new DMNDIConverter(xStream));
xStream.alias("DMNDiagram", DMNDiagram.class);
xStream.registerConverter(new DMNDiagramConverter(xStream));
xStream.alias("DMNStyle", DMNStyle.class);
xStream.registerConverter(new DMNStyleConverter(xStream));
xStream.alias("Size", Dimension.class);
xStream.registerConverter(new DimensionConverter(xStream));
xStream.alias("DMNShape", DMNShape.class);
xStream.registerConverter(new DMNShapeConverter(xStream));
xStream.alias("FillColor", Color.class);
xStream.alias("StrokeColor", Color.class);
xStream.alias("FontColor", Color.class);
xStream.registerConverter(new ColorConverter(xStream));
xStream.alias("Bounds", Bounds.class);
xStream.registerConverter(new BoundsConverter(xStream));
xStream.alias("DMNLabel", DMNLabel.class);
xStream.registerConverter(new DMNLabelConverter(xStream));
xStream.alias("DMNEdge", DMNEdge.class);
xStream.registerConverter(new DMNEdgeConverter(xStream));
xStream.alias("DMNDecisionServiceDividerLine", DMNDecisionServiceDividerLine.class);
xStream.registerConverter(new DMNDecisionServiceDividerLineConverter(xStream));
xStream.alias("waypoint", Point.class);
xStream.registerConverter(new PointConverter(xStream));
xStream.alias("extension", DiagramElement.Extension.class);
xStream.alias(DMNLabelConverter.TEXT, String.class);
xStream.registerConverter(new AssociationConverter(xStream));
xStream.registerConverter(new AuthorityRequirementConverter(xStream));
xStream.registerConverter(new BindingConverter(xStream));
xStream.registerConverter(new BusinessKnowledgeModelConverter(xStream));
xStream.registerConverter(new ContextConverter(xStream));
xStream.registerConverter(new ContextEntryConverter(xStream));
xStream.registerConverter(new DecisionConverter(xStream));
xStream.registerConverter(new DecisionRuleConverter(xStream));
xStream.registerConverter(new DecisionServiceConverter(xStream));
xStream.registerConverter(new DecisionTableConverter(xStream));
xStream.registerConverter(new DefinitionsConverter(xStream));
xStream.registerConverter(new DMNElementReferenceConverter(xStream));
xStream.registerConverter(new GroupConverter(xStream));
xStream.registerConverter(new FunctionDefinitionConverter(xStream));
xStream.registerConverter(new ImportConverter(xStream));
xStream.registerConverter(new ImportedValuesConverter(xStream));
xStream.registerConverter(new InformationItemConverter(xStream));
xStream.registerConverter(new InformationRequirementConverter(xStream));
xStream.registerConverter(new InputClauseConverter(xStream));
xStream.registerConverter(new InputDataConverter(xStream));
xStream.registerConverter(new InvocationConverter(xStream));
xStream.registerConverter(new ItemDefinitionConverter(xStream));
xStream.registerConverter(new KnowledgeRequirementConverter(xStream));
xStream.registerConverter(new KnowledgeSourceConverter(xStream));
xStream.registerConverter(new LiteralExpressionConverter(xStream));
xStream.registerConverter(new OrganizationUnitConverter(xStream));
xStream.registerConverter(new OutputClauseConverter(xStream));
xStream.registerConverter(new PerformanceIndicatorConverter(xStream));
xStream.registerConverter(new RelationConverter(xStream));
xStream.registerConverter(new TextAnnotationConverter(xStream));
xStream.registerConverter(new UnaryTestsConverter(xStream));
xStream.registerConverter(new FunctionItemConverter(xStream));
xStream.registerConverter(new QNameConverter());
xStream.registerConverter(new DMNListConverter(xStream));
xStream.registerConverter(new ElementCollectionConverter(xStream));
xStream.registerConverter(new ExtensionElementsConverter(xStream, extensionRegisters));
xStream.registerConverter(new DiagramElementExtensionConverter(xStream, extensionRegisters));
for (DMNExtensionRegister extensionRegister : extensionRegisters) {
extensionRegister.registerExtensionConverters(xStream);
}
xStream.ignoreUnknownElements();
return xStream;
}
use of org.kie.dmn.model.api.Definitions in project drools by kiegroup.
the class DefinitionsConverter method writeChildren.
@Override
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
super.writeChildren(writer, context, parent);
Definitions def = (Definitions) parent;
for (Import i : def.getImport()) {
writeChildrenNode(writer, context, i, IMPORT);
}
for (ItemDefinition id : def.getItemDefinition()) {
writeChildrenNode(writer, context, id, ITEM_DEFINITION);
}
for (DRGElement e : def.getDrgElement()) {
String nodeName = DRG_ELEMENT;
if (e instanceof BusinessKnowledgeModel) {
nodeName = "businessKnowledgeModel";
} else if (e instanceof Decision) {
nodeName = "decision";
} else if (e instanceof InputData) {
nodeName = "inputData";
} else if (e instanceof KnowledgeSource) {
nodeName = "knowledgeSource";
} else if (e instanceof DecisionService) {
nodeName = "decisionService";
}
writeChildrenNode(writer, context, e, nodeName);
}
for (Artifact a : def.getArtifact()) {
String nodeName = ARTIFACT;
if (a instanceof Association) {
nodeName = "association";
} else if (a instanceof TextAnnotation) {
nodeName = "textAnnotation";
} else if (a instanceof Group) {
nodeName = "group";
}
writeChildrenNode(writer, context, a, nodeName);
}
for (ElementCollection ec : def.getElementCollection()) {
writeChildrenNode(writer, context, ec, ELEMENT_COLLECTION);
}
for (BusinessContextElement bce : def.getBusinessContextElement()) {
String nodeName = BUSINESS_CONTEXT_ELEMENT;
if (bce instanceof OrganizationUnit) {
nodeName = "organizationUnit";
} else if (bce instanceof PerformanceIndicator) {
nodeName = "performanceIndicator";
}
writeChildrenNode(writer, context, bce, nodeName);
}
if (def.getDMNDI() != null) {
writeChildrenNode(writer, context, def.getDMNDI(), "DMNDI");
}
}
Aggregations