Search in sources :

Example 1 with List

use of org.kie.dmn.model.v1_1.List in project drools by kiegroup.

the class ItemDefinitionDependenciesSorter method sort.

/**
 * Return a new list of ItemDefinition sorted by dependencies (required dependencies comes first)
 */
public List<ItemDefinition> sort(List<ItemDefinition> ins) {
    // In a graph A -> B -> {C, D}
    // showing that A requires B, and B requires C,D
    // then a depth-first visit would satisfy required ordering, for example a valid depth first visit is also a valid sort here: C, D, B, A.
    Collection<ItemDefinition> visited = new ArrayList<>(ins.size());
    List<ItemDefinition> dfv = new ArrayList<>(ins.size());
    for (ItemDefinition node : ins) {
        if (!visited.contains(node)) {
            dfVisit(node, ins, visited, dfv);
        }
    }
    return dfv;
}
Also used : ItemDefinition(org.kie.dmn.model.v1_1.ItemDefinition) ArrayList(java.util.ArrayList)

Example 2 with List

use of org.kie.dmn.model.v1_1.List in project drools by kiegroup.

the class ItemDefinitionDependenciesSorter method displayDependencies.

public static void displayDependencies(List<ItemDefinition> ins, String namespaceURI) {
    for (ItemDefinition in : ins) {
        System.out.println(in.getName());
        List<ItemDefinition> others = new ArrayList<>(ins);
        others.remove(in);
        for (ItemDefinition other : others) {
            QName otherQName = new QName(namespaceURI, other.getName());
            if (directFind(in, otherQName)) {
                System.out.println(" direct depends on: " + other.getName());
            } else if (recurseFind(in, otherQName)) {
                System.out.println(" indir. depends on: " + other.getName());
            }
        }
    }
}
Also used : QName(javax.xml.namespace.QName) ItemDefinition(org.kie.dmn.model.v1_1.ItemDefinition) ArrayList(java.util.ArrayList)

Example 3 with List

use of org.kie.dmn.model.v1_1.List in project drools by kiegroup.

the class ItemDefinitionDependenciesSorter method dfVisit.

/**
 * Performs a depth first visit, but keeping a separate reference of visited/visiting nodes, _also_ to avoid potential issues of circularities.
 */
private void dfVisit(ItemDefinition node, List<ItemDefinition> allNodes, Collection<ItemDefinition> visited, List<ItemDefinition> dfv) {
    visited.add(node);
    List<ItemDefinition> neighbours = allNodes.stream().filter(// filter out `node`
    n -> !n.getName().equals(node.getName())).filter(// I pick from allNodes, those referenced by this `node`. Only neighbours of `node`, because N is referenced by NODE.
    n -> recurseFind(node, new QName(modelNamespace, n.getName()))).collect(Collectors.toList());
    for (ItemDefinition n : neighbours) {
        if (!visited.contains(n)) {
            dfVisit(n, allNodes, visited, dfv);
        }
    }
    dfv.add(node);
}
Also used : List(java.util.List) Collection(java.util.Collection) QName(javax.xml.namespace.QName) ItemDefinition(org.kie.dmn.model.v1_1.ItemDefinition) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) QName(javax.xml.namespace.QName) ItemDefinition(org.kie.dmn.model.v1_1.ItemDefinition)

Example 4 with List

use of org.kie.dmn.model.v1_1.List in project drools by kiegroup.

the class DMNModelImpl method readExternal.

@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    this.serializedAs = (SerializationFormat) in.readObject();
    this.resource = (Resource) in.readObject();
    String xml = (String) in.readObject();
    if (!(in instanceof DroolsObjectInputStream)) {
        throw new UnsupportedOperationException();
    // TODO assume some defaults
    }
    DroolsObjectInputStream is = (DroolsObjectInputStream) in;
    DMNCompilerImpl compiler = (DMNCompilerImpl) is.getCustomExtensions().get(DMNAssemblerService.DMN_COMPILER_CACHE_KEY);
    List<DMNExtensionRegister> dmnRegisteredExtensions = compiler.getRegisteredExtensions();
    Definitions definitions = DMNMarshallerFactory.newMarshallerWithExtensions(dmnRegisteredExtensions).unmarshal(xml);
    this.definitions = definitions;
    DMNModelImpl compiledModel = (DMNModelImpl) compiler.compile(definitions);
    this.inputs = compiledModel.inputs;
    this.decisions = compiledModel.decisions;
    this.bkms = compiledModel.bkms;
    this.itemDefs = compiledModel.itemDefs;
    this.messages = compiledModel.messages;
    this.types = compiledModel.types;
    this.runtimeTypeCheck = compiledModel.runtimeTypeCheck;
}
Also used : DroolsObjectInputStream(org.drools.core.common.DroolsObjectInputStream) DMNCompilerImpl(org.kie.dmn.core.compiler.DMNCompilerImpl) Definitions(org.kie.dmn.model.v1_1.Definitions) DMNExtensionRegister(org.kie.dmn.api.marshalling.v1_1.DMNExtensionRegister)

Example 5 with List

use of org.kie.dmn.model.v1_1.List in project drools by kiegroup.

the class DMNListConverter method writeChildren.

@Override
protected void writeChildren(HierarchicalStreamWriter writer, MarshallingContext context, Object parent) {
    super.writeChildren(writer, context, parent);
    List list = (List) parent;
    for (Expression e : list.getExpression()) {
        writeChildrenNode(writer, context, e, MarshallingUtils.defineExpressionNodeName(e));
    }
}
Also used : Expression(org.kie.dmn.model.v1_1.Expression) List(org.kie.dmn.model.v1_1.List)

Aggregations

Test (org.junit.Test)54 List (org.kie.workbench.common.dmn.api.definition.v1_1.List)26 ItemDefinition (org.kie.dmn.model.v1_1.ItemDefinition)21 QName (javax.xml.namespace.QName)17 ArrayList (java.util.ArrayList)15 List (java.util.List)14 DMNMessage (org.kie.dmn.api.core.DMNMessage)14 Import (org.kie.dmn.model.v1_1.Import)13 LiteralExpression (org.kie.workbench.common.dmn.api.definition.v1_1.LiteralExpression)13 CoreMatchers.is (org.hamcrest.CoreMatchers.is)11 DMNMessageType (org.kie.dmn.api.core.DMNMessageType)11 DMNGridRow (org.kie.workbench.common.dmn.client.widgets.grid.model.DMNGridRow)11 GraphCommandExecutionContext (org.kie.workbench.common.stunner.core.graph.command.GraphCommandExecutionContext)10 RuleViolation (org.kie.workbench.common.stunner.core.rule.RuleViolation)10 Definitions (org.kie.dmn.model.v1_1.Definitions)9 IOException (java.io.IOException)8 Collectors (java.util.stream.Collectors)8 AbstractCanvasHandler (org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler)8 CanvasViolation (org.kie.workbench.common.stunner.core.client.command.CanvasViolation)8 Reader (java.io.Reader)7