Search in sources :

Example 6 with Dock

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

the class CloneCanvasNodeCommand method execute.

@Override
public CommandResult<CanvasViolation> execute(AbstractCanvasHandler context) {
    commands = new CompositeCommand.Builder<AbstractCanvasHandler, CanvasViolation>().reverse().build();
    // first add the candidate clone
    commands.addCommand(createAddCanvasChildNodeCommand(getParent(), getCandidate(), getShapeSetId()));
    // process clone children nodes
    if (GraphUtils.hasChildren(getCandidate())) {
        Graph graph = context.getGraphIndex().getGraph();
        List<Edge> clonedEdges = new ArrayList<>();
        childrenTraverseProcessor.get().setRootUUID(getCandidate().getUUID()).traverse(graph, new AbstractChildrenTraverseCallback<Node<View, Edge>, Edge<Child, Node>>() {

            @Override
            public boolean startNodeTraversal(List<Node<View, Edge>> parents, Node<View, Edge> node) {
                commands.addCommand(createCloneCanvasNodeCommand(getCandidate(), node, getShapeSetId()));
                clonedEdges.addAll(node.getOutEdges());
                // just traverse the first level children of the root node
                return false;
            }
        });
        // process children edges -> connectors and dock
        clonedEdges.stream().filter(edge -> edge.getContent() instanceof Dock).forEach(edge -> commands.addCommand(new CanvasDockNodeCommand(edge.getSourceNode(), edge.getTargetNode())));
        clonedEdges.stream().filter(edge -> edge.getContent() instanceof ViewConnector).forEach(edge -> commands.addCommand(new AddCanvasConnectorCommand((Edge) edge, getShapeSetId())));
    }
    // process clone docked nodes on the root
    if (GraphUtils.hasDockedNodes(getCandidate())) {
        List<Edge> edges = getCandidate().getOutEdges();
        edges.stream().filter(edge -> edge.getContent() instanceof Dock).map(edge -> edge.getTargetNode()).forEach(targetNode -> {
            commands.addCommand(new AddCanvasChildNodeCommand(getParent(), targetNode, getShapeSetId()));
            commands.addCommand(new CanvasDockNodeCommand(getCandidate(), targetNode));
        });
    }
    return commands.execute(context);
}
Also used : CanvasViolation(org.kie.workbench.common.stunner.core.client.command.CanvasViolation) ManagedInstance(org.jboss.errai.ioc.client.api.ManagedInstance) Edge(org.kie.workbench.common.stunner.core.graph.Edge) Child(org.kie.workbench.common.stunner.core.graph.content.relationship.Child) AbstractCanvasHandler(org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler) ChildrenTraverseProcessor(org.kie.workbench.common.stunner.core.graph.processing.traverse.content.ChildrenTraverseProcessor) View(org.kie.workbench.common.stunner.core.graph.content.view.View) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) ArrayList(java.util.ArrayList) GraphUtils(org.kie.workbench.common.stunner.core.graph.util.GraphUtils) List(java.util.List) Graph(org.kie.workbench.common.stunner.core.graph.Graph) AbstractChildrenTraverseCallback(org.kie.workbench.common.stunner.core.graph.processing.traverse.content.AbstractChildrenTraverseCallback) Dock(org.kie.workbench.common.stunner.core.graph.content.relationship.Dock) CompositeCommand(org.kie.workbench.common.stunner.core.command.impl.CompositeCommand) CommandResult(org.kie.workbench.common.stunner.core.command.CommandResult) Node(org.kie.workbench.common.stunner.core.graph.Node) CanvasViolation(org.kie.workbench.common.stunner.core.client.command.CanvasViolation) ViewConnector(org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector) Node(org.kie.workbench.common.stunner.core.graph.Node) ArrayList(java.util.ArrayList) View(org.kie.workbench.common.stunner.core.graph.content.view.View) CompositeCommand(org.kie.workbench.common.stunner.core.command.impl.CompositeCommand) Graph(org.kie.workbench.common.stunner.core.graph.Graph) Dock(org.kie.workbench.common.stunner.core.graph.content.relationship.Dock) AbstractCanvasHandler(org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler) Edge(org.kie.workbench.common.stunner.core.graph.Edge)

Example 7 with Dock

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

the class DrawCanvasCommand method execute.

@Override
@SuppressWarnings("unchecked")
public CommandResult<CanvasViolation> execute(final AbstractCanvasHandler context) {
    final Graph graph = context.getGraphIndex().getGraph();
    final String shapeSetId = getShapeSetId(context);
    final CompositeCommand.Builder<AbstractCanvasHandler, CanvasViolation> commandBuilder = new CompositeCommand.Builder<AbstractCanvasHandler, CanvasViolation>().forward();
    // Aggregate all nodes in the parent-child-dock hierarchy.
    childrenTraverseProcessor.traverse(graph, new AbstractChildrenTraverseCallback<Node<View, Edge>, Edge<Child, Node>>() {

        @Override
        public void startNodeTraversal(final Node<View, Edge> node) {
            super.startNodeTraversal(node);
            if (!isCanvasRoot().test(context, node.getUUID())) {
                addNode(node);
            }
        }

        @Override
        public boolean startNodeTraversal(final List<Node<View, Edge>> parents, final Node<View, Edge> node) {
            super.startNodeTraversal(parents, node);
            final Optional<Edge> dockEdge = node.getInEdges().stream().filter(e -> e.getContent() instanceof Dock).findAny();
            final Node parent = dockEdge.map(Edge::getSourceNode).orElseGet(() -> parents.get(parents.size() - 1));
            if (dockEdge.isPresent()) {
                addDockedNode(parent, node);
            } else if (isCanvasRoot().test(context, parent.getUUID())) {
                addNode(node);
            } else {
                addChildNode(parent, node);
            }
            return true;
        }

        private void addNode(final Node node) {
            commandBuilder.addCommand(new AddCanvasNodeCommand(node, shapeSetId));
        }

        private void addChildNode(final Node<View, Edge> parent, final Node<View, Edge> node) {
            commandBuilder.addCommand(new AddCanvasChildNodeCommand(parent, node, shapeSetId));
        }

        private void addDockedNode(final Node<View, Edge> parent, final Node<View, Edge> node) {
            commandBuilder.addCommand(new AddCanvasDockedNodeCommand(parent, node, shapeSetId));
        }
    });
    // Aggregate all connectors.
    viewTraverseProcessor.traverse(graph, new AbstractContentTraverseCallback<View<?>, Node<View, Edge>, Edge<View<?>, Node>>() {

        @Override
        public void startEdgeTraversal(final Edge<View<?>, Node> edge) {
            super.startEdgeTraversal(edge);
            commandBuilder.addCommand(new AddCanvasConnectorCommand(edge, shapeSetId));
        }
    });
    return commandBuilder.build().execute(context);
}
Also used : CanvasViolation(org.kie.workbench.common.stunner.core.client.command.CanvasViolation) Optional(java.util.Optional) Node(org.kie.workbench.common.stunner.core.graph.Node) View(org.kie.workbench.common.stunner.core.graph.content.view.View) CompositeCommand(org.kie.workbench.common.stunner.core.command.impl.CompositeCommand) Graph(org.kie.workbench.common.stunner.core.graph.Graph) Dock(org.kie.workbench.common.stunner.core.graph.content.relationship.Dock) AbstractCanvasHandler(org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler) Edge(org.kie.workbench.common.stunner.core.graph.Edge)

Example 8 with Dock

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

the class SetCanvasChildNodeCommandTest method testSkipExecutionAsDockIsPresent.

@Test
@SuppressWarnings("unchecked")
public void testSkipExecutionAsDockIsPresent() {
    final Edge dockEdge = mock(Edge.class);
    when(dockEdge.getContent()).thenReturn(new Dock());
    graph1Instance.intermNode.getInEdges().add(dockEdge);
    final CommandResult<CanvasViolation> result = tested.execute(canvasHandler);
    assertNotEquals(CommandResult.Type.ERROR, result.getType());
    verify(canvasHandler, never()).addChild(eq(graph1Instance.startNode), eq(graph1Instance.intermNode));
    verify(canvasHandler, never()).applyElementMutation(eq(graph1Instance.intermNode), any(MutationContext.class));
    verify(canvasHandler, never()).applyElementMutation(eq(graph1Instance.startNode), any(MutationContext.class));
    verify(canvasHandler, never()).dock(any(Node.class), any(Node.class));
    verify(connectorShapeView1, never()).moveToTop();
    verify(connectorShapeView1, never()).moveToBottom();
    verify(connectorShapeView1, never()).moveUp();
    verify(connectorShapeView1, never()).moveDown();
    verify(connectorShapeView2, never()).moveToTop();
    verify(connectorShapeView2, never()).moveToBottom();
    verify(connectorShapeView2, never()).moveUp();
    verify(connectorShapeView2, never()).moveDown();
}
Also used : CanvasViolation(org.kie.workbench.common.stunner.core.client.command.CanvasViolation) Dock(org.kie.workbench.common.stunner.core.graph.content.relationship.Dock) Node(org.kie.workbench.common.stunner.core.graph.Node) Edge(org.kie.workbench.common.stunner.core.graph.Edge) MutationContext(org.kie.workbench.common.stunner.core.client.shape.MutationContext) Test(org.junit.Test)

Example 9 with Dock

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

the class DockNodeCommand method execute.

@Override
@SuppressWarnings("unchecked")
public CommandResult<RuleViolation> execute(final GraphCommandExecutionContext context) {
    final CommandResult<RuleViolation> results = allow(context);
    if (!results.getType().equals(CommandResult.Type.ERROR)) {
        final Node<?, Edge> parent = getParent(context);
        final Node<?, Edge> candidate = getCandidate(context);
        final String uuid = UUID.uuid();
        final Edge<Dock, Node> edge = new EdgeImpl<>(uuid);
        edge.setContent(new Dock());
        edge.setSourceNode(parent);
        edge.setTargetNode(candidate);
        parent.getOutEdges().add(edge);
        candidate.getInEdges().add(edge);
        getMutableIndex(context).addEdge(edge);
    }
    return results;
}
Also used : Dock(org.kie.workbench.common.stunner.core.graph.content.relationship.Dock) Node(org.kie.workbench.common.stunner.core.graph.Node) EdgeImpl(org.kie.workbench.common.stunner.core.graph.impl.EdgeImpl) RuleViolation(org.kie.workbench.common.stunner.core.rule.RuleViolation) Edge(org.kie.workbench.common.stunner.core.graph.Edge)

Aggregations

Dock (org.kie.workbench.common.stunner.core.graph.content.relationship.Dock)9 Edge (org.kie.workbench.common.stunner.core.graph.Edge)8 Node (org.kie.workbench.common.stunner.core.graph.Node)8 Graph (org.kie.workbench.common.stunner.core.graph.Graph)5 View (org.kie.workbench.common.stunner.core.graph.content.view.View)5 Test (org.junit.Test)4 CanvasViolation (org.kie.workbench.common.stunner.core.client.command.CanvasViolation)3 RuleViolation (org.kie.workbench.common.stunner.core.rule.RuleViolation)3 Optional (java.util.Optional)2 AbstractCanvasHandler (org.kie.workbench.common.stunner.core.client.canvas.AbstractCanvasHandler)2 CompositeCommand (org.kie.workbench.common.stunner.core.command.impl.CompositeCommand)2 Metadata (org.kie.workbench.common.stunner.core.diagram.Metadata)2 Bounds (org.kie.workbench.common.stunner.core.graph.content.Bounds)2 Child (org.kie.workbench.common.stunner.core.graph.content.relationship.Child)2 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 LinkedHashSet (java.util.LinkedHashSet)1 List (java.util.List)1 Set (java.util.Set)1 Stack (java.util.Stack)1