/* * 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.model.cmd.keywords; import static com.google.common.collect.Lists.newArrayList; import java.util.List; import org.rf.ide.core.testdata.model.table.KeywordTable; import org.robotframework.ide.eclipse.main.plugin.model.RobotKeywordDefinition; import org.robotframework.ide.eclipse.main.plugin.model.RobotModelEvents; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFileSection; import org.robotframework.ide.eclipse.main.plugin.tableeditor.EditorCommand; public class DeleteKeywordDefinitionCommand extends EditorCommand { private final List<RobotKeywordDefinition> keywordsToDelete; private final List<Integer> deletedKeywordsIndexes = newArrayList(); public DeleteKeywordDefinitionCommand(final List<RobotKeywordDefinition> keywordsToDelete) { this.keywordsToDelete = keywordsToDelete; } @Override public void execute() throws CommandExecutionException { if (keywordsToDelete.isEmpty()) { return; } deletedKeywordsIndexes.clear(); for (final RobotKeywordDefinition def : keywordsToDelete) { deletedKeywordsIndexes.add(def.getIndex()); } final RobotSuiteFileSection keywordsSection = keywordsToDelete.get(0).getParent(); keywordsSection.getChildren().removeAll(keywordsToDelete); final KeywordTable keywordsTable = (KeywordTable) keywordsSection.getLinkedElement(); for (final RobotKeywordDefinition keywordToDelete : keywordsToDelete) { keywordsTable.removeKeyword(keywordToDelete.getLinkedElement()); } eventBroker.send(RobotModelEvents.ROBOT_KEYWORD_DEFINITION_REMOVED, keywordsSection); } @Override public List<EditorCommand> getUndoCommands() { return newUndoCommands(setupUndoCommandsForDeletedDefinitions()); } private List<EditorCommand> setupUndoCommandsForDeletedDefinitions() { final List<EditorCommand> commands = newArrayList(); if (keywordsToDelete.size() == deletedKeywordsIndexes.size()) { for (int i = 0; i < keywordsToDelete.size(); i++) { final RobotKeywordDefinition def = keywordsToDelete.get(i); commands.add(new InsertKeywordDefinitionsCommand(def.getParent(), deletedKeywordsIndexes.get(i), new RobotKeywordDefinition[] { def })); } } return commands; } }