/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.handlers.delete;
import java.util.List;
import javax.persistence.EntityManager;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jubula.client.core.businessprocess.CalcTypes;
import org.eclipse.jubula.client.core.businessprocess.IWritableComponentNameCache;
import org.eclipse.jubula.client.core.events.DataEventDispatcher;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.DataState;
import org.eclipse.jubula.client.core.events.DataEventDispatcher.UpdateState;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.model.IPersistentObject;
import org.eclipse.jubula.client.core.persistence.EditSupport;
import org.eclipse.jubula.client.ui.rcp.controllers.IEditorOperation;
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author BREDEX GmbH
* @created 28.02.2006
*/
public class DeleteTreeItemHandlerTCEditor
extends AbstractDeleteTreeItemHandler {
/**
* <code>log</code> logger for class
*/
private static Logger log = LoggerFactory.getLogger(
DeleteTreeItemHandlerTCEditor.class);
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
public Object executeImpl(ExecutionEvent event) {
IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
if (activePart instanceof AbstractJBEditor) {
final AbstractJBEditor tce = (AbstractJBEditor)activePart;
tce.getEditorHelper().doEditorOperation(new IEditorOperation() {
public void run(IPersistentObject workingPo) {
IStructuredSelection structuredSelection = getSelection();
if (confirmDelete(structuredSelection)) {
deleteNodesFromEditor(
structuredSelection.toList(), tce);
}
}
});
}
return null;
}
/**
* @param nodes
* the nodes to delete
* @param editor
* the editor to perform the deletion for
*/
public static void deleteNodesFromEditor(List<? extends INodePO> nodes,
AbstractJBEditor editor) {
editor.getEditorHelper().getClipboard().clearContents();
EditSupport supp = editor.getEditorHelper().getEditSupport();
IWritableComponentNameCache localCache = supp.getCache();
for (INodePO node : nodes) {
deleteNode(node, editor.getEntityManager());
}
editor.getEditorHelper().setDirty(true);
CalcTypes calc = new CalcTypes(localCache,
(INodePO) supp.getWorkVersion());
calc.calculateTypes();
localCache.storeLocalProblems(calc);
}
/**
* Deletes children of a node then the node itself
* @param node the node
* @param sess the session
*/
private static void deleteNode(INodePO node, EntityManager sess) {
node.getParentNode().removeNode(node);
if (node.getId() != null) {
sess.remove(node);
}
DataEventDispatcher.getInstance().fireDataChangedListener(node,
DataState.Deleted, UpdateState.onlyInEditor);
}
}