/******************************************************************************* * Copyright (c) 2008 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.smooks.graphical.actions; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.command.CompoundCommand; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.FeatureMapUtil; import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.graphical.editors.TaskTypeManager; import org.jboss.tools.smooks.graphical.editors.process.IProcessProvider; import org.jboss.tools.smooks.graphical.editors.process.ProcessType; import org.jboss.tools.smooks.graphical.editors.process.TaskType; import org.jboss.tools.smooks.model.smooks.SmooksPackage; import org.jboss.tools.smooks.model.smooks.SmooksResourceListType; /** * @author Dart * */ public class DeleteTaskNodeAction extends AbstractProcessGraphAction { private IProcessProvider processProvider; public DeleteTaskNodeAction(IProcessProvider processProvider, ISmooksModelProvider modelProvider, IEditorPart editor) { super(Messages.DeleteTaskNodeAction_Action_Delete, modelProvider, editor); this.processProvider = processProvider; } @Override protected void init() { super.init(); ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages(); setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE)); } @Override public void update() { List<TaskType> taskList = this.getCurrentSelectedTask(); if (!taskList.isEmpty() && taskList.size() == 1) { TaskType task = taskList.get(0); if (TaskTypeManager.TASK_ID_INPUT.equals(task.getId())) { this.setEnabled(false); return; } } this.setEnabled((taskList != null && !taskList.isEmpty() && taskList.size() == 1)); } @Override public void run() { super.run(); if (getProvider() != null) { if (processProvider != null) { ProcessType process = processProvider.getProcess(); if (process != null) { List<TaskType> currentTasks = getCurrentSelectedTask(); TaskType currentTask = currentTasks.get(0); List<TaskType> allTask = new ArrayList<TaskType>(); SmooksUIUtils.fillAllTask(currentTask, allTask); List<Object> associatedElements = new ArrayList<Object>(); SmooksResourceListType listType = SmooksUIUtils.getSmooks11ResourceListType(provider .getSmooksModel()); if (listType != null) { for (Iterator<?> iterator = allTask.iterator(); iterator.hasNext();) { TaskType taskType = (TaskType) iterator.next(); List<Object> elements = TaskTypeManager.getAssociatedResourceDeletes(taskType, listType); if (elements != null && !elements.isEmpty()) { associatedElements.addAll(elements); } } } Command remove = null; if (associatedElements.isEmpty()) { Object parent = currentTask.getParent(); if (parent instanceof Process) { ((ProcessType) parent).removeTask(currentTask); } if (parent instanceof TaskType) { ((TaskType) parent).removeTask(currentTask); } } else { associatedElements = getDeletedObjects(associatedElements); CompoundCommand ccommand = new CompoundCommand(); // Command removeTaskCommand = // RemoveCommand.create(p.getEditingDomain(), // currentTask.eContainer(), // GraphPackage.Literals.TASK_TYPE__TASK, currentTask); // if (removeTaskCommand.canExecute()) { // ccommand.append(removeTaskCommand); // } remove = RemoveCommand.create(this.provider.getEditingDomain(), listType, SmooksPackage.Literals.SMOOKS_RESOURCE_LIST_TYPE__ABSTRACT_RESOURCE_CONFIG_GROUP, associatedElements); if (remove.canExecute()) { ccommand.append(remove); Object parent = currentTask.getParent(); if (parent instanceof Process) { ((ProcessType) parent).removeTask(currentTask); } if (parent instanceof TaskType) { ((TaskType) parent).removeTask(currentTask); } } provider.getEditingDomain().getCommandStack().execute(ccommand); } } } } } private List<Object> getDeletedObjects(List<Object> deletingObjects) { List<Object> objs = new ArrayList<Object>(); for (Iterator<?> iterator = deletingObjects.iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); EStructuralFeature feature = SmooksUIUtils.getFeature(object); if (feature != null) { object = FeatureMapUtil.createEntry(feature, object); } objs.add(object); } return objs; } }