use of org.kie.workbench.common.stunner.core.util.Counter in project kie-wb-common by kiegroup.
the class AbstractEdgeBuilder method buildControlPoints.
private void buildControlPoints(BuilderContext context, T edge, GraphCommandFactory commandFactory) {
if (dockers.size() > 2) {
Counter indexCounter = new Counter(0);
ControlPoint[] controlPoints = dockers.subList(1, dockers.size() - 1).stream().sequential().map(docker -> (docker.length == 2 ? new Point2D(docker[0], docker[1]) : null)).filter(Objects::nonNull).map(point -> new ControlPointImpl(point, indexCounter.increment())).toArray(ControlPoint[]::new);
CommandResult<RuleViolation> addControlPointsResult = context.execute(commandFactory.addControlPoint(edge, controlPoints));
if (hasErrors(addControlPointsResult)) {
throw new RuntimeException("Error building BPMN graph. Command 'AddControlPointCommand' execution failed." + addControlPointsResult);
}
}
}
use of org.kie.workbench.common.stunner.core.util.Counter in project kie-wb-common by kiegroup.
the class PasteSelectionSessionCommand method processConnectors.
private CommandResult<CanvasViolation> processConnectors(Counter processedNodesCountdown) {
if (processedNodesCountdown.equalsToValue(0)) {
final CompositeCommand.Builder<AbstractCanvasHandler, CanvasViolation> commandBuilder = createCommandBuilder();
commandBuilder.addCommands(clipboardControl.getElements().stream().filter(element -> element instanceof Edge).filter(Objects::nonNull).map(edge -> (Edge) edge).filter(edge -> Objects.nonNull(edge.getSourceNode()) && Objects.nonNull(clonedElements.get(edge.getSourceNode().getUUID())) && Objects.nonNull(edge.getTargetNode()) && Objects.nonNull(clonedElements.get(edge.getTargetNode().getUUID()))).map(edge -> canvasCommandFactory.cloneConnector(edge, clonedElements.get(edge.getSourceNode().getUUID()), clonedElements.get(edge.getTargetNode().getUUID()), getCanvasHandler().getDiagram().getMetadata().getShapeSetId(), cloneEdgeCallback(edge))).collect(Collectors.toList()));
return sessionCommandManager.execute(getCanvasHandler(), commandBuilder.build());
}
return new CanvasCommandResultBuilder().build();
}
use of org.kie.workbench.common.stunner.core.util.Counter in project kie-wb-common by kiegroup.
the class PasteSelectionSessionCommand method execute.
@Override
public <V> void execute(final Callback<V> callback) {
checkNotNull("callback", callback);
if (clipboardControl.hasElements()) {
final CompositeCommand.Builder<AbstractCanvasHandler, CanvasViolation> nodesCommandBuilder = createCommandBuilder();
Counter processedNodesCountdown = new Counter((int) clipboardControl.getElements().stream().filter(element -> element instanceof Node).count());
// first processing nodes
nodesCommandBuilder.addCommands(clipboardControl.getElements().stream().filter(element -> element instanceof Node).filter(Objects::nonNull).map(node -> (Node<View<?>, Edge>) node).map(node -> {
String newParentUUID = getNewParentUUID(node);
return canvasCommandFactory.cloneNode(node, newParentUUID, calculateNewLocation(node, newParentUUID), cloneNodeCallback(node, processedNodesCountdown));
}).collect(Collectors.toList()));
if (Objects.equals(nodesCommandBuilder.size(), 0)) {
return;
}
// Execute the command for cloning nodes
CommandResult<CanvasViolation> finalResult;
if (wasNodesDeletedFromGraph()) {
// in case of a cut command the source elements were deleted from graph, so first undo the command to take node back into canvas
clipboardControl.getRollbackCommands().forEach(command -> command.undo(getCanvasHandler()));
finalResult = executeCommands(nodesCommandBuilder, processedNodesCountdown);
// after the clone execution than delete source elements again
clipboardControl.getRollbackCommands().forEach(command -> command.execute(getCanvasHandler()));
} else {
// if elements are still on the graph, in case copy command, just execute the clone commands
finalResult = executeCommands(nodesCommandBuilder, processedNodesCountdown);
}
if (CommandUtils.isError(finalResult)) {
LOGGER.severe("Error pasting selection." + getCanvasViolations(finalResult));
return;
}
fireSelectedElementEvent();
callback.onSuccess();
clear();
// copy the cloned node to the clipboard to allow pasting several times
copySelectionSessionCommand.execute();
}
}
Aggregations