use of org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase in project drools by kiegroup.
the class DiagramElementExtensionConverter method unmarshal.
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
DMNModelInstrumentedBase obj = createModelObject();
assignAttributes(reader, obj);
if (extensionRegisters.size() == 0) {
while (reader.hasMoreChildren()) {
reader.moveDown();
String nodeName = reader.getNodeName();
// skipping nodeName
reader.moveUp();
}
} else {
// do as default behavior, but in case cannot unmarshall an extension element child, just skip it.
while (reader.hasMoreChildren()) {
reader.moveDown();
String nodeName = reader.getNodeName();
try {
Object object = readItem(reader, context, null);
if (object instanceof DMNModelInstrumentedBase) {
((KieDMNModelInstrumentedBase) object).setParent(obj);
((KieDMNModelInstrumentedBase) obj).addChildren((KieDMNModelInstrumentedBase) object);
}
assignChildElement(obj, nodeName, object);
} catch (CannotResolveClassException e) {
// do nothing; I tried to convert the extension element child with the converters, but no converter is registered for this child.
LOG.debug("Tried to convert the extension element child {}, but no converter is registered for this child.", nodeName);
}
reader.moveUp();
}
}
return obj;
}
use of org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase in project drools by kiegroup.
the class DMNModelInstrumentedBaseConverter method writeAttributes.
@Override
protected void writeAttributes(HierarchicalStreamWriter writer, Object parent) {
KieDMNModelInstrumentedBase mib = (KieDMNModelInstrumentedBase) parent;
CustomStaxWriter staxWriter = ((CustomStaxWriter) writer.underlyingWriter());
for (Entry<String, String> kv : mib.getNsContext().entrySet()) {
try {
if (KieDMNModelInstrumentedBase.URI_DMN.equals(kv.getValue())) {
// skip as that is the default namespace xmlns<:prefix>=DMN is handled by the stax driver.
} else {
staxWriter.writeNamespace(kv.getKey(), kv.getValue());
}
} catch (Exception e) {
LOG.warn("The XML driver writer failed to manage writing namespace, namespaces prefixes could be wrong in the resulting file.", e);
}
}
for (Entry<QName, String> kv : mib.getAdditionalAttributes().entrySet()) {
staxWriter.addAttribute(kv.getKey().getPrefix() + ":" + kv.getKey().getLocalPart(), kv.getValue());
}
if (parent instanceof TDefinitions) {
TDefinitions tDefinitions = (TDefinitions) parent;
String dmndiPrefix = tDefinitions.getPrefixForNamespaceURI(KieDMNModelInstrumentedBase.URI_DMNDI).orElse("dmndi");
String diPrefix = tDefinitions.getPrefixForNamespaceURI(KieDMNModelInstrumentedBase.URI_DI).orElse("di");
String dcPrefix = tDefinitions.getPrefixForNamespaceURI(KieDMNModelInstrumentedBase.URI_DC).orElse("dc");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNDI", dmndiPrefix), "DMNDI");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNDiagram", dmndiPrefix), "DMNDiagram");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNStyle", dmndiPrefix), "style");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNStyle", dmndiPrefix), "DMNStyle");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNShape", dmndiPrefix), "DMNShape");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNEdge", dmndiPrefix), "DMNEdge");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNDecisionServiceDividerLine", dmndiPrefix), "DMNDecisionServiceDividerLine");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "DMNLabel", dmndiPrefix), "DMNLabel");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, DMNLabelConverter.TEXT, dmndiPrefix), DMNLabelConverter.TEXT);
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "Size", dmndiPrefix), "Size");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "FillColor", dmndiPrefix), "FillColor");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "StrokeColor", dmndiPrefix), "StrokeColor");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DMNDI, "FontColor", dmndiPrefix), "FontColor");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DI, "waypoint", diPrefix), "waypoint");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DI, "extension", diPrefix), "extension");
staxWriter.getQNameMap().registerMapping(new QName(KieDMNModelInstrumentedBase.URI_DC, "Bounds", dcPrefix), "Bounds");
}
}
use of org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase in project drools by kiegroup.
the class DMNModelInstrumentedBaseConverter method assignAttributes.
@Override
protected void assignAttributes(HierarchicalStreamReader reader, Object parent) {
KieDMNModelInstrumentedBase mib = (KieDMNModelInstrumentedBase) parent;
CustomStaxReader customStaxReader = (CustomStaxReader) reader.underlyingReader();
Map<String, String> currentNSCtx = customStaxReader.getNsContext();
mib.getNsContext().putAll(currentNSCtx);
mib.setLocation(customStaxReader.getLocation());
mib.setAdditionalAttributes(customStaxReader.getAdditionalAttributes());
}
use of org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase in project kie-wb-common by kiegroup.
the class DMNMarshallerStandalone method marshall.
@Override
@SuppressWarnings("unchecked")
public String marshall(final Diagram<Graph, Metadata> diagram) {
final Graph<?, Node<View, ?>> g = diagram.getGraph();
final Map<String, org.kie.dmn.model.api.DRGElement> nodes = new HashMap<>();
final Map<String, org.kie.dmn.model.api.TextAnnotation> textAnnotations = new HashMap<>();
final Node<View<DMNDiagram>, ?> dmnDiagramRoot = (Node<View<DMNDiagram>, ?>) findDMNDiagramRoot(g);
final Definitions definitionsStunnerPojo = ((DMNDiagram) DefinitionUtils.getElementDefinition(dmnDiagramRoot)).getDefinitions();
cleanImportedItemDefinitions(definitionsStunnerPojo);
final org.kie.dmn.model.api.Definitions definitions = DefinitionsConverter.dmnFromWB(definitionsStunnerPojo);
if (definitions.getExtensionElements() == null) {
if (definitions instanceof org.kie.dmn.model.v1_1.KieDMNModelInstrumentedBase) {
definitions.setExtensionElements(new org.kie.dmn.model.v1_1.TDMNElement.TExtensionElements());
} else if (definitions instanceof org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase) {
definitions.setExtensionElements(new org.kie.dmn.model.v1_2.TDMNElement.TExtensionElements());
} else {
definitions.setExtensionElements(new org.kie.dmn.model.v1_2.TDMNElement.TExtensionElements());
}
}
if (definitions.getDMNDI() == null) {
definitions.setDMNDI(new DMNDI());
}
final org.kie.dmn.model.api.dmndi.DMNDiagram dmnDDDMNDiagram = new org.kie.dmn.model.v1_2.dmndi.DMNDiagram();
definitions.getDMNDI().getDMNDiagram().add(dmnDDDMNDiagram);
final List<DMNEdge> dmnEdges = new ArrayList<>();
// Convert relative positioning to absolute
for (Node<?, ?> node : g.nodes()) {
PointUtils.convertToAbsoluteBounds(node);
}
// Setup callback for marshalling ComponentWidths
if (dmnDDDMNDiagram.getExtension() == null) {
dmnDDDMNDiagram.setExtension(new DiagramElement.Extension());
}
final ComponentsWidthsExtension componentsWidthsExtension = new ComponentsWidthsExtension();
dmnDDDMNDiagram.getExtension().getAny().add(componentsWidthsExtension);
final Consumer<ComponentWidths> componentWidthsConsumer = cw -> componentsWidthsExtension.getComponentsWidths().add(cw);
// Iterate Graph processing nodes..
for (Node<?, ?> node : g.nodes()) {
if (node.getContent() instanceof View<?>) {
final View<?> view = (View<?>) node.getContent();
if (view.getDefinition() instanceof DRGElement) {
final DRGElement drgElement = (org.kie.workbench.common.dmn.api.definition.model.DRGElement) view.getDefinition();
if (!drgElement.isAllowOnlyVisualChange()) {
nodes.put(drgElement.getId().getValue(), stunnerToDMN(node, componentWidthsConsumer));
}
dmnDDDMNDiagram.getDMNDiagramElement().add(stunnerToDDExt(definitionsStunnerPojo, (View<? extends DMNElement>) view));
} else if (view.getDefinition() instanceof TextAnnotation) {
final TextAnnotation textAnnotation = (TextAnnotation) view.getDefinition();
textAnnotations.put(textAnnotation.getId().getValue(), textAnnotationConverter.dmnFromNode((Node<View<TextAnnotation>, ?>) node, componentWidthsConsumer));
dmnDDDMNDiagram.getDMNDiagramElement().add(stunnerToDDExt(definitionsStunnerPojo, (View<? extends DMNElement>) view));
final List<org.kie.dmn.model.api.Association> associations = AssociationConverter.dmnFromWB((Node<View<TextAnnotation>, ?>) node);
definitions.getArtifact().addAll(associations);
}
// DMNDI Edge management.
final List<Edge<?, ?>> inEdges = (List<Edge<?, ?>>) node.getInEdges();
for (Edge<?, ?> e : inEdges) {
if (e.getContent() instanceof ViewConnector) {
final ViewConnector connectionContent = (ViewConnector) e.getContent();
DiscreteConnection sourceConnection = (DiscreteConnection) connectionContent.getSourceConnection().orElse(null);
DiscreteConnection targetConnection = (DiscreteConnection) connectionContent.getTargetConnection().orElse(null);
if (sourceConnection != null && targetConnection != null) {
Point2D sourcePoint = sourceConnection.getLocation();
Point2D targetPoint = targetConnection.getLocation();
final Node<?, ?> sourceNode = e.getSourceNode();
final View<?> sourceView = (View<?>) sourceNode.getContent();
double xSource = xOfBound(upperLeftBound(sourceView));
double ySource = yOfBound(upperLeftBound(sourceView));
double xTarget = xOfBound(upperLeftBound(view));
double yTarget = yOfBound(upperLeftBound(view));
if (sourcePoint == null) {
// If the "connection source/target location is null" assume it's the centre of the shape.
if (sourceView.getDefinition() instanceof DMNViewDefinition) {
DMNViewDefinition dmnViewDefinition = (DMNViewDefinition) sourceView.getDefinition();
xSource += dmnViewDefinition.getDimensionsSet().getWidth().getValue() / 2;
ySource += dmnViewDefinition.getDimensionsSet().getHeight().getValue() / 2;
}
sourcePoint = Point2D.create(xSource, ySource);
} else {
// If it is non-null it is relative to the source/target shape location.
sourcePoint = Point2D.create(xSource + sourcePoint.getX(), ySource + sourcePoint.getY());
}
if (targetPoint == null) {
// If the "connection source/target location is null" assume it's the centre of the shape.
if (view.getDefinition() instanceof DMNViewDefinition) {
DMNViewDefinition dmnViewDefinition = (DMNViewDefinition) view.getDefinition();
xTarget += dmnViewDefinition.getDimensionsSet().getWidth().getValue() / 2;
yTarget += dmnViewDefinition.getDimensionsSet().getHeight().getValue() / 2;
}
targetPoint = Point2D.create(xTarget, yTarget);
} else {
// If it is non-null it is relative to the source/target shape location.
targetPoint = Point2D.create(xTarget + targetPoint.getX(), yTarget + targetPoint.getY());
}
final DMNEdge dmnEdge = new org.kie.dmn.model.v1_2.dmndi.DMNEdge();
// DMNDI edge elementRef is uuid of Stunner edge,
// with the only exception when edge contains as content a DMN Association (Association is an edge)
String uuid = e.getUUID();
if (e.getContent() instanceof View<?>) {
final View<?> edgeView = (View<?>) e.getContent();
if (edgeView.getDefinition() instanceof Association) {
uuid = ((Association) edgeView.getDefinition()).getId().getValue();
}
}
String autoConnectionId = "";
if (sourceConnection.isAuto()) {
autoConnectionId += AUTO_SOURCE_CONNECTION;
}
if (targetConnection.isAuto()) {
autoConnectionId += AUTO_TARGET_CONNECTION;
}
dmnEdge.setId("dmnedge-" + uuid + autoConnectionId);
dmnEdge.setDmnElementRef(new QName(uuid));
dmnEdge.getWaypoint().add(PointUtils.point2dToDMNDIPoint(sourcePoint));
for (ControlPoint cp : connectionContent.getControlPoints()) {
dmnEdge.getWaypoint().add(PointUtils.point2dToDMNDIPoint(cp.getLocation()));
}
dmnEdge.getWaypoint().add(PointUtils.point2dToDMNDIPoint(targetPoint));
dmnEdges.add(dmnEdge);
}
}
}
}
}
nodes.values().forEach(n -> {
n.setParent(definitions);
definitions.getDrgElement().add(n);
});
textAnnotations.values().forEach(definitions.getArtifact()::add);
// add DMNEdge last.
dmnDDDMNDiagram.getDMNDiagramElement().addAll(dmnEdges);
return marshaller.marshal(definitions);
}
use of org.kie.dmn.model.v1_2.KieDMNModelInstrumentedBase in project drools by kiegroup.
the class DecisionServiceConverter method parseElements.
@Override
protected void parseElements(HierarchicalStreamReader reader, UnmarshallingContext context, Object parent) {
while (reader.hasMoreChildren()) {
reader.moveDown();
Object object = null;
String nodeName = reader.getNodeName();
if (nodeName.equals(INPUT_DATA)) {
// Patch because the tag name inputData is used in both decision services and as a DRG Element
DMNElementReference ref = new TDMNElementReference();
ref.setHref(reader.getAttribute("href"));
object = ref;
} else {
// Default behaviour
object = readItem(reader, context, null);
}
if (object instanceof DMNModelInstrumentedBase) {
((KieDMNModelInstrumentedBase) object).setParent((KieDMNModelInstrumentedBase) parent);
((KieDMNModelInstrumentedBase) parent).addChildren((KieDMNModelInstrumentedBase) object);
}
reader.moveUp();
assignChildElement(parent, nodeName, object);
}
}
Aggregations