/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.tableeditor.variables.handler;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate;
import org.eclipse.ui.ISources;
import org.robotframework.ide.eclipse.main.plugin.model.RobotVariable;
import org.robotframework.ide.eclipse.main.plugin.model.RobotVariablesSection;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.EmptyCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.CleanVariableValueCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.SetVariableCommentCommand;
import org.robotframework.ide.eclipse.main.plugin.model.cmd.variables.SetVariableNameCommand;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.EditorCommand;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotEditorCommandsStack;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotFormEditor;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.SelectionLayerAccessor;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.variables.handler.DeleteInVariableTableHandler.E4DeleteInVariableTableHandler;
import org.robotframework.red.commands.DIParameterizedHandler;
import org.robotframework.red.viewers.Selections;
public class DeleteInVariableTableHandler extends DIParameterizedHandler<E4DeleteInVariableTableHandler> {
public DeleteInVariableTableHandler() {
super(E4DeleteInVariableTableHandler.class);
}
public static class E4DeleteInVariableTableHandler {
@Execute
public void delete(final RobotEditorCommandsStack commandsStack,
@Named(ISources.ACTIVE_EDITOR_NAME) final RobotFormEditor editor,
@Named(Selections.SELECTION) final IStructuredSelection selection) {
final SelectionLayerAccessor selectionLayerAccessor = editor.getSelectionLayerAccessor();
final RobotVariablesSection section = getSection(selection);
final Collection<EditorCommand> detailsDeletingCommands = createCommandsForDetailsRemoval(section,
selectionLayerAccessor.getSelectedPositions());
final EditorCommand parentCommand = new EmptyCommand();
for (final EditorCommand command : detailsDeletingCommands) {
command.setParent(parentCommand);
commandsStack.execute(command);
}
}
private RobotVariablesSection getSection(final IStructuredSelection selection) {
final List<RobotVariable> selectedVariables = Selections.getElements(selection, RobotVariable.class);
final RobotVariablesSection section = selectedVariables.get(0).getParent();
return section;
}
private Collection<EditorCommand> createCommandsForDetailsRemoval(final RobotVariablesSection section,
final PositionCoordinate[] positionCoordinates) {
final List<RobotVariable> variables = section.getChildren();
// TODO : decide on behavior of fully selected rows; uncomment if change is needed
// final List<RobotVariable> varsToRemove = new ArrayList<>();
final List<EditorCommand> commands = new ArrayList<>();
for (final PositionCoordinate cellPosition : positionCoordinates) {
final RobotVariable variable = variables.get(cellPosition.rowPosition);
/*
* if (selectionLayer.isRowPositionFullySelected(cellPosition.rowPosition)) {
* varsToRemove.add(variable);
* } else
*/if (cellPosition.columnPosition == 0) {
commands.add(new SetVariableNameCommand(variable, ""));
} else if (cellPosition.columnPosition == 1) {
commands.add(new CleanVariableValueCommand(variable));
} else if (cellPosition.columnPosition == 2) {
commands.add(new SetVariableCommentCommand(variable, ""));
}
}
// if (!varsToRemove.isEmpty()) {
// commands.add(new RemoveVariableCommand(varsToRemove));
// }
return commands;
}
}
}