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;
}
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());
}
}
}
}
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);
}
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;
}
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));
}
}
Aggregations