Search in sources :

Example 1 with DiscreteConnection

use of org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection in project kie-wb-common by kiegroup.

the class BPMNDiagramMarshallerTest method testMagnetDockers.

private void testMagnetDockers(Diagram<Graph, Metadata> diagram) throws Exception {
    Node userTaskNode = (Node) findElementByContentType(diagram, UserTask.class);
    Node businessRuleTaskNode = (Node) findElementByContentType(diagram, BusinessRuleTask.class);
    Node scriptTaskNode = (Node) findElementByContentType(diagram, ScriptTask.class);
    assertNotNull(userTaskNode);
    assertNotNull(businessRuleTaskNode);
    assertNotNull(scriptTaskNode);
    ViewConnector userTaskInEdgeConnector = getInEdgeViewConnector(userTaskNode);
    ViewConnector businessRuleTaskInEdgeConnector = getInEdgeViewConnector(businessRuleTaskNode);
    ViewConnector scriptTaskInEdgeConnector = getInEdgeViewConnector(scriptTaskNode);
    assertNotNull(userTaskInEdgeConnector);
    assertNotNull(businessRuleTaskInEdgeConnector);
    assertNotNull(scriptTaskInEdgeConnector);
    ViewConnector userTaskOutEdgeConnector = getOutEdgeViewConnector(userTaskNode);
    ViewConnector businessRuleTaskOutEdgeConnector = getOutEdgeViewConnector(businessRuleTaskNode);
    ViewConnector scriptTaskOutEdgeConnector = getOutEdgeViewConnector(scriptTaskNode);
    assertNotNull(userTaskOutEdgeConnector);
    assertNotNull(businessRuleTaskOutEdgeConnector);
    assertNotNull(scriptTaskOutEdgeConnector);
    // userTaskInEdgeConnector is from magnet top-middle to left-middle
    assertTrue(userTaskInEdgeConnector.getSourceConnection().isPresent());
    assertTrue(userTaskInEdgeConnector.getTargetConnection().isPresent());
    DiscreteConnection sourceConnection = (DiscreteConnection) userTaskInEdgeConnector.getSourceConnection().get();
    DiscreteConnection targetConnection = (DiscreteConnection) userTaskInEdgeConnector.getTargetConnection().get();
    assertEquals(20d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(0d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(24d, targetConnection.getLocation().getY(), 0.1d);
    // Assert both connections for userTaskInEdgeConnector are set to auto.
    assertTrue(sourceConnection.isAuto());
    assertTrue(targetConnection.isAuto());
    // businessRuleTaskInEdgeConnector is from magnet right-middle to top-left
    assertTrue(businessRuleTaskInEdgeConnector.getSourceConnection().isPresent());
    assertTrue(businessRuleTaskInEdgeConnector.getTargetConnection().isPresent());
    sourceConnection = (DiscreteConnection) businessRuleTaskInEdgeConnector.getSourceConnection().get();
    targetConnection = (DiscreteConnection) businessRuleTaskInEdgeConnector.getTargetConnection().get();
    assertEquals(40d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(20d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getY(), 0.1d);
    // Assert both connections for businessRuleTaskInEdgeConnector are NOT set to auto.
    assertFalse(sourceConnection.isAuto());
    assertFalse(targetConnection.isAuto());
    // scriptTaskInEdgeConnector is from magnet left-bottom to left-bottom
    assertTrue(scriptTaskInEdgeConnector.getSourceConnection().isPresent());
    assertTrue(scriptTaskInEdgeConnector.getTargetConnection().isPresent());
    sourceConnection = (DiscreteConnection) scriptTaskInEdgeConnector.getSourceConnection().get();
    targetConnection = (DiscreteConnection) scriptTaskInEdgeConnector.getTargetConnection().get();
    assertEquals(0d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(40d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(48d, targetConnection.getLocation().getY(), 0.1d);
    // userTaskOutEdgeConnector is from magnet right-middle to left-middle
    assertTrue(userTaskOutEdgeConnector.getSourceConnection().isPresent());
    assertTrue(userTaskOutEdgeConnector.getTargetConnection().isPresent());
    sourceConnection = (DiscreteConnection) userTaskOutEdgeConnector.getSourceConnection().get();
    targetConnection = (DiscreteConnection) userTaskOutEdgeConnector.getTargetConnection().get();
    assertEquals(136d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(24d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(14d, targetConnection.getLocation().getY(), 0.1d);
    // businessRuleTaskOutEdgeConnector is from magnet middle-bottom to middle-bottom
    assertTrue(businessRuleTaskOutEdgeConnector.getSourceConnection().isPresent());
    assertTrue(businessRuleTaskOutEdgeConnector.getTargetConnection().isPresent());
    sourceConnection = (DiscreteConnection) businessRuleTaskOutEdgeConnector.getSourceConnection().get();
    targetConnection = (DiscreteConnection) businessRuleTaskOutEdgeConnector.getTargetConnection().get();
    assertEquals(68d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(48d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(14d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(28d, targetConnection.getLocation().getY(), 0.1d);
    // scriptTaskOutEdgeConnector is from magnet left-top to left-top
    assertTrue(scriptTaskOutEdgeConnector.getSourceConnection().isPresent());
    assertTrue(scriptTaskOutEdgeConnector.getTargetConnection().isPresent());
    sourceConnection = (DiscreteConnection) scriptTaskOutEdgeConnector.getSourceConnection().get();
    targetConnection = (DiscreteConnection) scriptTaskOutEdgeConnector.getTargetConnection().get();
    assertEquals(0d, sourceConnection.getLocation().getX(), 0.1d);
    assertEquals(0d, sourceConnection.getLocation().getY(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getX(), 0.1d);
    assertEquals(0d, targetConnection.getLocation().getY(), 0.1d);
}
Also used : ScriptTask(org.kie.workbench.common.stunner.bpmn.definition.ScriptTask) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection) Node(org.kie.workbench.common.stunner.core.graph.Node) UserTask(org.kie.workbench.common.stunner.bpmn.definition.UserTask) BusinessRuleTask(org.kie.workbench.common.stunner.bpmn.definition.BusinessRuleTask)

Example 2 with DiscreteConnection

use of org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection in project kie-wb-common by kiegroup.

the class DMNMarshallerTest method testConnect.

@Test
public void testConnect() {
    final DMNMarshaller dmnMarshaller = new DMNMarshaller();
    final JSIDMNDiagram diagram = mock(JSIDMNDiagram.class);
    final List<String> dmnDiagramElementIds = mock(List.class);
    final Definitions definitionsStunnerPojo = mock(Definitions.class);
    final List<JSIDMNEdge> dmnEdges = new ArrayList<>();
    final Node<?, ?> node = mock(Node.class);
    final List inEdges = new ArrayList<>();
    final Edge edge = mock(Edge.class);
    final Node sourceNode = mock(Node.class);
    final View sourceView = mock(View.class);
    final ViewConnector viewConnector = mock(ViewConnector.class);
    final DiscreteConnection sourceConnection = mock(DiscreteConnection.class);
    final DiscreteConnection targetConnection = mock(DiscreteConnection.class);
    final View<?> view = mock(View.class);
    inEdges.add(edge);
    when(edge.getSourceNode()).thenReturn(sourceNode);
    when(sourceNode.getContent()).thenReturn(sourceView);
    when(node.getInEdges()).thenReturn(inEdges);
    when(edge.getContent()).thenReturn(viewConnector);
    when(viewConnector.getControlPoints()).thenReturn(new ControlPoint[] {});
    when(sourceConnection.isAuto()).thenReturn(true);
    when(targetConnection.isAuto()).thenReturn(true);
    when(diagram.getName()).thenReturn("dmnEdge");
    when(definitionsStunnerPojo.getDefaultNamespace()).thenReturn("org.edge");
    when(viewConnector.getSourceConnection()).thenReturn(Optional.of(sourceConnection));
    when(viewConnector.getTargetConnection()).thenReturn(Optional.of(targetConnection));
    dmnMarshaller.connect(diagram, dmnDiagramElementIds, definitionsStunnerPojo, dmnEdges, node, view);
    when(viewConnector.getSourceConnection()).thenReturn(Optional.empty());
    when(viewConnector.getTargetConnection()).thenReturn(Optional.empty());
    dmnMarshaller.connect(diagram, dmnDiagramElementIds, definitionsStunnerPojo, dmnEdges, node, view);
    when(viewConnector.getSourceConnection()).thenReturn(Optional.of(sourceConnection));
    when(viewConnector.getTargetConnection()).thenReturn(Optional.empty());
    dmnMarshaller.connect(diagram, dmnDiagramElementIds, definitionsStunnerPojo, dmnEdges, node, view);
    verify(sourceConnection).isAuto();
    verify(targetConnection).isAuto();
}
Also used : ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection) Definitions(org.kie.workbench.common.dmn.api.definition.model.Definitions) JSITDefinitions(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmn12.JSITDefinitions) Node(org.kie.workbench.common.stunner.core.graph.Node) ArrayList(java.util.ArrayList) View(org.kie.workbench.common.stunner.core.graph.content.view.View) JSIDMNDiagram(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNDiagram) ArrayList(java.util.ArrayList) Collections.singletonList(java.util.Collections.singletonList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) JSIDMNEdge(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge) Edge(org.kie.workbench.common.stunner.core.graph.Edge) JSIDMNEdge(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge) Test(org.junit.Test)

Example 3 with DiscreteConnection

use of org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection 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);
}
Also used : Edge(org.kie.workbench.common.stunner.core.graph.Edge) PointUtils.yOfBound(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.yOfBound) PointUtils.xOfBound(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.xOfBound) DoubleConsumer(java.util.function.DoubleConsumer) Bounds(org.kie.dmn.model.api.dmndi.Bounds) Map(java.util.Map) NamedElement(org.kie.workbench.common.dmn.api.definition.model.NamedElement) FactoryManager(org.kie.workbench.common.stunner.core.api.FactoryManager) Diagram(org.kie.workbench.common.stunner.core.diagram.Diagram) HasComponentWidths(org.kie.workbench.common.dmn.api.definition.HasComponentWidths) Height(org.kie.workbench.common.dmn.api.property.dimensions.Height) Point2D(org.kie.workbench.common.stunner.core.graph.content.view.Point2D) BusinessKnowledgeModel(org.kie.workbench.common.dmn.api.definition.model.BusinessKnowledgeModel) Set(java.util.Set) BusinessKnowledgeModelConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.BusinessKnowledgeModelConverter) Child(org.kie.workbench.common.stunner.core.graph.content.relationship.Child) ItemDefinition(org.kie.workbench.common.dmn.api.definition.model.ItemDefinition) PointUtils.heightOfShape(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.heightOfShape) Stream(java.util.stream.Stream) PointUtils(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils) QName(javax.xml.namespace.QName) PointUtils.widthOfShape(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.widthOfShape) DMNMarshaller(org.kie.dmn.api.marshalling.DMNMarshaller) PointUtils.yOfShape(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.yOfShape) DMNDefinitionSet(org.kie.workbench.common.dmn.api.DMNDefinitionSet) DMNStyle(org.kie.dmn.model.api.dmndi.DMNStyle) Point(org.kie.dmn.model.api.dmndi.Point) Connection(org.kie.workbench.common.stunner.core.graph.content.view.Connection) Color(org.kie.dmn.model.api.dmndi.Color) ItemDefinitionPropertyConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.ItemDefinitionPropertyConverter) DiagramMetadataMarshaller(org.kie.workbench.common.stunner.core.definition.service.DiagramMetadataMarshaller) ArrayList(java.util.ArrayList) FontSetPropertyConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.FontSetPropertyConverter) Id(org.kie.workbench.common.dmn.api.property.dmn.Id) PointUtils.upperLeftBound(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.upperLeftBound) BiConsumer(java.util.function.BiConsumer) StreamSupport(java.util.stream.StreamSupport) BindableAdapterUtils(org.kie.workbench.common.stunner.core.definition.adapter.binding.BindableAdapterUtils) IOException(java.io.IOException) InputData(org.kie.workbench.common.dmn.api.definition.model.InputData) InputStreamReader(java.io.InputStreamReader) InputDataConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.InputDataConverter) Association(org.kie.workbench.common.dmn.api.definition.model.Association) DecisionService(org.kie.workbench.common.dmn.api.definition.model.DecisionService) KnowledgeSourceConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.KnowledgeSourceConverter) Graph(org.kie.workbench.common.stunner.core.graph.Graph) MagnetConnection(org.kie.workbench.common.stunner.core.graph.content.view.MagnetConnection) TextAnnotation(org.kie.workbench.common.dmn.api.definition.model.TextAnnotation) Definitions(org.kie.workbench.common.dmn.api.definition.model.Definitions) DecisionConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.DecisionConverter) DefinitionUtils(org.kie.workbench.common.stunner.core.util.DefinitionUtils) DMNDecisionServiceDividerLine(org.kie.dmn.model.api.dmndi.DMNDecisionServiceDividerLine) DMNEdge(org.kie.dmn.model.api.dmndi.DMNEdge) UUID(org.kie.workbench.common.stunner.core.util.UUID) BorderColour(org.kie.workbench.common.dmn.api.property.styling.BorderColour) EdgeImpl(org.kie.workbench.common.stunner.core.graph.impl.EdgeImpl) TextAnnotationConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.TextAnnotationConverter) DMNElement(org.kie.workbench.common.dmn.api.definition.model.DMNElement) Collectors.toMap(java.util.stream.Collectors.toMap) PointUtils.lowerRightBound(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.lowerRightBound) InformationRequirement(org.kie.workbench.common.dmn.api.definition.model.InformationRequirement) DiagramElement(org.kie.dmn.model.v1_2.dmndi.DiagramElement) Collections.emptyList(java.util.Collections.emptyList) DiagramMarshaller(org.kie.workbench.common.stunner.core.definition.service.DiagramMarshaller) Import(org.kie.dmn.model.api.Import) DMNDiagram(org.kie.workbench.common.dmn.api.definition.model.DMNDiagram) Collectors(java.util.stream.Collectors) Metadata(org.kie.workbench.common.stunner.core.diagram.Metadata) Objects(java.util.Objects) DRGElement(org.kie.workbench.common.dmn.api.definition.model.DRGElement) List(java.util.List) DMNShape(org.kie.dmn.model.api.dmndi.DMNShape) ComponentWidths(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.ComponentWidths) BgColour(org.kie.workbench.common.dmn.api.property.styling.BgColour) DMNDI(org.kie.dmn.model.v1_2.dmndi.DMNDI) Entry(java.util.Map.Entry) Optional(java.util.Optional) ApplicationScoped(javax.enterprise.context.ApplicationScoped) Node(org.kie.workbench.common.stunner.core.graph.Node) PointUtils.xOfShape(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.PointUtils.xOfShape) PMMLDocumentMetadata(org.kie.workbench.common.dmn.api.editors.included.PMMLDocumentMetadata) Width(org.kie.workbench.common.dmn.api.property.dimensions.Width) ControlPoint(org.kie.workbench.common.stunner.core.graph.content.view.ControlPoint) RectangleDimensionsSet(org.kie.workbench.common.dmn.api.property.dimensions.RectangleDimensionsSet) DefinitionsConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.DefinitionsConverter) HashMap(java.util.HashMap) View(org.kie.workbench.common.stunner.core.graph.content.view.View) ColorUtils(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.ColorUtils) HashSet(java.util.HashSet) Inject(javax.inject.Inject) ComponentsWidthsExtension(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.ComponentsWidthsExtension) Bound(org.kie.workbench.common.stunner.core.graph.content.Bound) BindableAdapterUtils.getDefinitionId(org.kie.workbench.common.stunner.core.definition.adapter.binding.BindableAdapterUtils.getDefinitionId) KnowledgeRequirement(org.kie.workbench.common.dmn.api.definition.model.KnowledgeRequirement) Description(org.kie.workbench.common.dmn.api.property.dmn.Description) DMNViewDefinition(org.kie.workbench.common.dmn.api.definition.DMNViewDefinition) SimpleEntry(java.util.AbstractMap.SimpleEntry) DecisionServiceDividerLineY(org.kie.workbench.common.dmn.api.property.dmn.DecisionServiceDividerLineY) StylingSet(org.kie.workbench.common.dmn.api.property.styling.StylingSet) XMLEncoderDiagramMetadataMarshaller(org.kie.workbench.common.stunner.core.backend.service.XMLEncoderDiagramMetadataMarshaller) AssociationConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.AssociationConverter) DMNMarshallerImportsHelperStandalone(org.kie.workbench.common.dmn.backend.common.DMNMarshallerImportsHelperStandalone) DecisionServiceConverter(org.kie.workbench.common.dmn.backend.definition.v1_1.DecisionServiceConverter) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) AuthorityRequirement(org.kie.workbench.common.dmn.api.definition.model.AuthorityRequirement) Consumer(java.util.function.Consumer) DMNModelInstrumentedBase(org.kie.workbench.common.dmn.api.definition.model.DMNModelInstrumentedBase) KnowledgeSource(org.kie.workbench.common.dmn.api.definition.model.KnowledgeSource) Decision(org.kie.workbench.common.dmn.api.definition.model.Decision) DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection) InputStream(java.io.InputStream) HashMap(java.util.HashMap) Node(org.kie.workbench.common.stunner.core.graph.Node) ArrayList(java.util.ArrayList) Point2D(org.kie.workbench.common.stunner.core.graph.content.view.Point2D) DMNElement(org.kie.workbench.common.dmn.api.definition.model.DMNElement) ArrayList(java.util.ArrayList) Collections.emptyList(java.util.Collections.emptyList) List(java.util.List) DMNDiagram(org.kie.workbench.common.dmn.api.definition.model.DMNDiagram) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) DMNEdge(org.kie.dmn.model.api.dmndi.DMNEdge) DRGElement(org.kie.workbench.common.dmn.api.definition.model.DRGElement) DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection) DMNViewDefinition(org.kie.workbench.common.dmn.api.definition.DMNViewDefinition) DMNDI(org.kie.dmn.model.v1_2.dmndi.DMNDI) DiagramElement(org.kie.dmn.model.v1_2.dmndi.DiagramElement) Association(org.kie.workbench.common.dmn.api.definition.model.Association) TextAnnotation(org.kie.workbench.common.dmn.api.definition.model.TextAnnotation) QName(javax.xml.namespace.QName) Definitions(org.kie.workbench.common.dmn.api.definition.model.Definitions) ControlPoint(org.kie.workbench.common.stunner.core.graph.content.view.ControlPoint) View(org.kie.workbench.common.stunner.core.graph.content.view.View) HasComponentWidths(org.kie.workbench.common.dmn.api.definition.HasComponentWidths) ComponentWidths(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.ComponentWidths) ComponentsWidthsExtension(org.kie.workbench.common.dmn.backend.definition.v1_1.dd.ComponentsWidthsExtension) Edge(org.kie.workbench.common.stunner.core.graph.Edge) DMNEdge(org.kie.dmn.model.api.dmndi.DMNEdge)

Example 4 with DiscreteConnection

use of org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection in project kie-wb-common by kiegroup.

the class DMNMarshaller method connect.

protected void connect(final JSIDMNDiagram diagram, final List<String> dmnDiagramElementIds, final Definitions definitionsStunnerPojo, final List<JSIDMNEdge> dmnEdges, final Node<?, ?> node, final View<?> view) {
    // 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) {
                final Node<?, ?> sourceNode = e.getSourceNode();
                final View<?> sourceView = (View<?>) sourceNode.getContent();
                Point2D sourcePoint = sourceConnection.getLocation();
                double xSource = xOfBound(upperLeftBound(sourceView));
                double ySource = yOfBound(upperLeftBound(sourceView));
                if (Objects.isNull(sourcePoint)) {
                    // 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());
                }
                Point2D targetPoint = targetConnection.getLocation();
                double xTarget = xOfBound(upperLeftBound(view));
                double yTarget = yOfBound(upperLeftBound(view));
                if (Objects.isNull(targetPoint)) {
                    // 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 JSIDMNEdge dmnEdge = new JSIDMNEdge();
                // DMNDI edge elementRef is uuid of Stunner edge,
                // with the only exception when edge contains as content a DMN Association (Association is an edge)
                final String uuid = getRawId(getUUID(e));
                final String edgeId = getEdgeId(diagram, dmnDiagramElementIds, uuid, sourceConnection.isAuto(), targetConnection.isAuto());
                dmnEdge.setId(edgeId);
                final String namespaceURI = definitionsStunnerPojo.getDefaultNamespace();
                dmnEdge.setDmnElementRef(new QName(namespaceURI, uuid, XMLConstants.DEFAULT_NS_PREFIX));
                dmnEdge.addWaypoint(PointUtils.point2dToDMNDIPoint(sourcePoint));
                for (ControlPoint cp : connectionContent.getControlPoints()) {
                    dmnEdge.addWaypoint(PointUtils.point2dToDMNDIPoint(cp.getLocation()));
                }
                dmnEdge.addWaypoint(PointUtils.point2dToDMNDIPoint(targetPoint));
                dmnEdges.add(dmnEdge);
            }
        }
    }
}
Also used : ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection) DMNViewDefinition(org.kie.workbench.common.dmn.api.definition.DMNViewDefinition) QName(javax.xml.namespace.QName) ControlPoint(org.kie.workbench.common.stunner.core.graph.content.view.ControlPoint) View(org.kie.workbench.common.stunner.core.graph.content.view.View) Point2D(org.kie.workbench.common.stunner.core.graph.content.view.Point2D) List(java.util.List) ArrayList(java.util.ArrayList) JSIDMNEdge(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge) Edge(org.kie.workbench.common.stunner.core.graph.Edge) JSIDMNEdge(org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge)

Example 5 with DiscreteConnection

use of org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection in project kie-wb-common by kiegroup.

the class StunnerLogger method log.

public static void log(final String type, final Connection connection) {
    String discrete = "";
    if (connection instanceof DiscreteConnection) {
        final DiscreteConnection discreteConnection = (DiscreteConnection) connection;
        discrete += "[index=" + discreteConnection.getMagnetIndex() + ", auto=" + discreteConnection.isAuto() + "]";
    }
    log("  Connection [" + type + "] at [" + connection.getLocation() + "] " + discrete);
}
Also used : DiscreteConnection(org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection)

Aggregations

DiscreteConnection (org.kie.workbench.common.stunner.core.graph.content.view.DiscreteConnection)10 ViewConnector (org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector)5 Node (org.kie.workbench.common.stunner.core.graph.Node)4 ArrayList (java.util.ArrayList)3 List (java.util.List)3 Edge (org.kie.workbench.common.stunner.core.graph.Edge)3 Point2D (org.kie.workbench.common.stunner.core.graph.content.view.Point2D)3 View (org.kie.workbench.common.stunner.core.graph.content.view.View)3 WiresMagnet (com.ait.lienzo.client.core.shape.wires.WiresMagnet)2 QName (javax.xml.namespace.QName)2 DMNViewDefinition (org.kie.workbench.common.dmn.api.definition.DMNViewDefinition)2 Definitions (org.kie.workbench.common.dmn.api.definition.model.Definitions)2 JSIDMNEdge (org.kie.workbench.common.dmn.webapp.kogito.marshaller.js.model.dmndi12.JSIDMNEdge)2 ControlPoint (org.kie.workbench.common.stunner.core.graph.content.view.ControlPoint)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 SimpleEntry (java.util.AbstractMap.SimpleEntry)1 Arrays.asList (java.util.Arrays.asList)1 Collections.emptyList (java.util.Collections.emptyList)1