use of org.kie.workbench.common.stunner.core.command.Command in project kie-wb-common by kiegroup.
the class SafeDeleteNodeCommand method initialize.
@Override
@SuppressWarnings("unchecked")
protected SafeDeleteNodeCommand initialize(final GraphCommandExecutionContext context) {
super.initialize(context);
final Graph<?, Node> graph = getGraph(context);
final Node<Definition<?>, Edge> candidate = (Node<Definition<?>, Edge>) getCandidate(context);
new SafeDeleteNodeProcessor(new ChildrenTraverseProcessorImpl(new TreeWalkTraverseProcessorImpl()), graph, candidate).run(new SafeDeleteNodeProcessor.Callback() {
private final Set<String> processedConnectors = new HashSet<String>();
@Override
public void deleteCandidateConnector(final Edge<? extends View<?>, Node> edge) {
// This command will delete candidate's connectors once deleting the candidate node later on,
// as it potentially performs the connectors shortcut operation.
}
@Override
public void deleteConnector(final Edge<? extends View<?>, Node> edge) {
doDeleteConnector(edge);
}
@Override
public void removeChild(final Element<?> parent, final Node<?, Edge> candidate) {
log("RemoveChildCommand [parent=" + parent.getUUID() + ", candidate=" + candidate.getUUID() + "]");
addCommand(new RemoveChildCommand((Node<?, Edge>) parent, candidate));
safeDeleteCallback.ifPresent(c -> c.removeChild(parent, candidate));
}
@Override
public void removeDock(final Node<?, Edge> parent, final Node<?, Edge> candidate) {
log("UnDockNodeCommand [parent=" + parent.getUUID() + ", candidate=" + candidate.getUUID() + "]");
addCommand(new UnDockNodeCommand(parent, candidate));
safeDeleteCallback.ifPresent(c -> c.removeDock(parent, candidate));
}
@Override
public void deleteCandidateNode(final Node<?, Edge> node) {
processCandidateConnectors();
deleteNode(node);
}
@Override
public void deleteNode(final Node<?, Edge> node) {
log("DeregisterNodeCommand [node=" + node.getUUID() + "]");
addCommand(new DeregisterNodeCommand(node));
safeDeleteCallback.ifPresent(c -> c.deleteNode(node));
}
private void processCandidateConnectors() {
if (options.isDeleteCandidateConnectors()) {
if (options.isShortcutCandidateConnectors() && hasSingleIncomingEdge().and(hasSingleOutgoingEdge()).test(candidate)) {
final Edge<? extends ViewConnector<?>, Node> in = getViewConnector().apply(candidate.getInEdges());
final Edge<? extends ViewConnector<?>, Node> out = getViewConnector().apply(candidate.getOutEdges());
shortcut(in, out);
} else {
Stream.concat(candidate.getInEdges().stream(), candidate.getOutEdges().stream()).filter(e -> e.getContent() instanceof ViewConnector).forEach(this::deleteConnector);
}
}
}
private void shortcut(final Edge<? extends ViewConnector<?>, Node> in, final Edge<? extends ViewConnector<?>, Node> out) {
final ViewConnector<?> outContent = out.getContent();
final Node targetNode = out.getTargetNode();
addCommand(new DeleteConnectorCommand(out));
safeDeleteCallback.ifPresent(c -> c.deleteCandidateConnector(out));
addCommand(new SetConnectionTargetNodeCommand(targetNode, in, outContent.getTargetConnection().orElse(null)));
safeDeleteCallback.ifPresent(c -> c.setEdgeTargetNode(targetNode, in));
}
private void doDeleteConnector(final Edge<? extends View<?>, Node> edge) {
if (!processedConnectors.contains(edge.getUUID())) {
log("IN DoDeleteConnector [edge=" + edge.getUUID() + "]");
addCommand(new DeleteConnectorCommand(edge));
safeDeleteCallback.ifPresent(c -> c.deleteConnector(edge));
processedConnectors.add(edge.getUUID());
}
}
});
return this;
}
use of org.kie.workbench.common.stunner.core.command.Command in project kie-wb-common by kiegroup.
the class CommandRegistryListenerTest method testUndoFailed.
@Test
@SuppressWarnings("unchecked")
public void testUndoFailed() {
Object context = mock(Object.class);
Command command = mock(Command.class);
CommandResult result = mock(CommandResult.class);
when(result.getType()).thenReturn(CommandResult.Type.ERROR);
tested.onUndo(context, command, result);
verify(commandRegistry, times(0)).pop();
verify(commandRegistry, times(0)).peek();
verify(commandRegistry, times(0)).register(any(Command.class));
}
use of org.kie.workbench.common.stunner.core.command.Command in project kie-wb-common by kiegroup.
the class CommandRegistryListenerTest method testExecuteSuccess.
@Test
@SuppressWarnings("unchecked")
public void testExecuteSuccess() {
Object context = mock(Object.class);
Command command = mock(Command.class);
CommandResult result = mock(CommandResult.class);
when(result.getType()).thenReturn(CommandResult.Type.INFO);
tested.onExecute(context, command, result);
verify(commandRegistry, times(1)).register(eq(command));
verify(commandRegistry, times(0)).pop();
verify(commandRegistry, times(0)).peek();
}
use of org.kie.workbench.common.stunner.core.command.Command in project kie-wb-common by kiegroup.
the class CommandRegistryListenerTest method testUndoSuccess.
@Test
@SuppressWarnings("unchecked")
public void testUndoSuccess() {
Object context = mock(Object.class);
Command command = mock(Command.class);
CommandResult result = mock(CommandResult.class);
when(result.getType()).thenReturn(CommandResult.Type.INFO);
tested.onUndo(context, command, result);
verify(commandRegistry, times(1)).pop();
verify(commandRegistry, times(0)).peek();
verify(commandRegistry, times(0)).register(any(Command.class));
}
use of org.kie.workbench.common.stunner.core.command.Command in project kie-wb-common by kiegroup.
the class CompositeCommandTest method testExecuteFailedThenUndo.
@Test
@SuppressWarnings("unchecked")
public void testExecuteFailedThenUndo() {
Command c1 = mock(Command.class);
when(c1.allow(eq(commandExecutionContext))).thenReturn(GraphCommandResultBuilder.SUCCESS);
when(c1.execute(eq(commandExecutionContext))).thenReturn(GraphCommandResultBuilder.SUCCESS);
Command c2 = mock(Command.class);
when(c2.allow(eq(commandExecutionContext))).thenReturn(GraphCommandResultBuilder.SUCCESS);
when(c2.execute(eq(commandExecutionContext))).thenReturn(GraphCommandResultBuilder.SUCCESS);
CommandResult<RuleViolation> failed = new CommandResultImpl<>(CommandResult.Type.ERROR, Collections.singletonList(new RuleViolationImpl("failed")));
Command c3 = mock(Command.class);
when(c3.allow(eq(commandExecutionContext))).thenReturn(GraphCommandResultBuilder.SUCCESS);
when(c3.execute(eq(commandExecutionContext))).thenReturn(failed);
CompositeCommand composite = new CompositeCommand.Builder<>().addCommand(c1).addCommand(c2).addCommand(c3).build();
CommandResult result = composite.execute(commandExecutionContext);
assertEquals(CommandResult.Type.ERROR, result.getType());
verify(c1, times(1)).undo(eq(commandExecutionContext));
verify(c2, times(1)).undo(eq(commandExecutionContext));
verify(c3, times(1)).undo(eq(commandExecutionContext));
}
Aggregations