### Question:
MoveColumnsCommand extends AbstractCanvasGraphCommand implements VetoExecutionCommand,
                                                                              VetoUndoCommand { @Override protected Command<GraphCommandExecutionContext, RuleViolation> newGraphCommand(final AbstractCanvasHandler context) { return new AbstractGraphCommand() { @Override protected CommandResult<RuleViolation> check(final GraphCommandExecutionContext context) { return isColumnInValidSection() ? GraphCommandResultBuilder.SUCCESS : GraphCommandResultBuilder.failed(); } private boolean isColumnInValidSection() { final RelationSection section = RelationUIModelMapperHelper.getSection(relation, index); return section == RelationSection.INFORMATION_ITEM; } @Override public CommandResult<RuleViolation> execute(final GraphCommandExecutionContext context) { return moveInformationItems(index); } @Override public CommandResult<RuleViolation> undo(final GraphCommandExecutionContext context) { return moveInformationItems(oldIndex); } private CommandResult<RuleViolation> moveInformationItems(final int index) { final RelationSection section = RelationUIModelMapperHelper.getSection(relation, index); if (section == RelationSection.INFORMATION_ITEM) { final int oldIndex = uiModel.getColumns().indexOf(columns.get(0)); final int relativeIndex = RelationUIModelMapperHelper.getInformationItemIndex(relation, index); final int relativeOldIndex = RelationUIModelMapperHelper.getInformationItemIndex(relation, oldIndex); final java.util.List<Integer> informationItemIndexesToMove = columns .stream() .map(c -> uiModel.getColumns().indexOf(c)) .map(i -> RelationUIModelMapperHelper.getInformationItemIndex(relation, i)) .collect(Collectors.toList()); moveInformationItems(relativeIndex, relativeOldIndex, relation.getColumn(), informationItemIndexesToMove); CommandUtils.moveComponentWidths(Relation.STATIC_COLUMNS + relativeIndex, Relation.STATIC_COLUMNS + relativeOldIndex, relation.getComponentWidths(), Collections.singletonList(oldIndex)); updateRowsData(relativeIndex, relativeOldIndex, relation.getRow(), informationItemIndexesToMove); return GraphCommandResultBuilder.SUCCESS; } else { return GraphCommandResultBuilder.failed(); } } private <T> void moveInformationItems(final int relativeIndex, final int relativeOldIndex, final java.util.List<T> informationItems, final java.util.List<Integer> informationItemIndexesToMove) { final java.util.List<T> informationItemsToMove = informationItemIndexesToMove .stream() .map(informationItems::get) .collect(Collectors.toList()); informationItems.removeAll(informationItemsToMove); if (relativeIndex < relativeOldIndex) { informationItems.addAll(relativeIndex, informationItemsToMove); } else if (relativeIndex > relativeOldIndex) { informationItems.addAll(relativeIndex - informationItemsToMove.size() + 1, informationItemsToMove); } } private void updateRowsData(final int relativeIndex, final int relativeOldIndex, final java.util.List<List> rows, final java.util.List<Integer> informationItemIndexesToMove) { rows.forEach(row -> moveInformationItems(relativeIndex, relativeOldIndex, row.getExpression(), informationItemIndexesToMove)); } }; } MoveColumnsCommand(final Relation relation,
                              final DMNGridData uiModel,
                              final int index,
                              final java.util.List<GridColumn<?>> columns,
                              final org.uberfire.mvp.Command canvasOperation); void updateParentInformation();  }### Answer:
@Test public void testGraphCommandAllow() { setupCommand(0, uiModel.getColumns().get(0)); final Command<GraphCommandExecutionContext, RuleViolation> c = command.newGraphCommand(handler); assertEquals(CommandResult.Type.ERROR, c.allow(gce).getType()); }
@Test public void testGraphCommandExecuteMoveLeft() { setupCommand(1, uiModel.getColumns().get(2)); assertEquals(GraphCommandResultBuilder.SUCCESS, command.newGraphCommand(handler).execute(gce)); assertRelationDefinition(1, 0); }
@Test public void testGraphCommandExecuteMoveRight() { setupCommand(2, uiModel.getColumns().get(1)); assertEquals(GraphCommandResultBuilder.SUCCESS, command.newGraphCommand(handler).execute(gce)); assertRelationDefinition(1, 0); }