/******************************************************************************
 * Copyright (c) 2005, 2006 IBM Corporation and others.
 * 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:
 *    IBM Corporation - initial API and implementation 
 ****************************************************************************/

package org.eclipse.gmf.examples.runtime.diagram.logic.internal.actions;

import java.util.Iterator;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.workspace.AbstractEMFOperation;
import org.eclipse.gef.Request;
import org.eclipse.gmf.examples.runtime.diagram.logic.internal.LogicDiagramDebugOptions;
import org.eclipse.gmf.examples.runtime.diagram.logic.internal.LogicDiagramPlugin;
import org.eclipse.gmf.examples.runtime.diagram.logic.internal.LogicDiagramStatusCodes;
import org.eclipse.gmf.runtime.common.core.util.Log;
import org.eclipse.gmf.runtime.common.core.util.StringStatics;
import org.eclipse.gmf.runtime.common.core.util.Trace;
import org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
import org.eclipse.ui.IWorkbenchPage;

/**
 * This action exists to demonstrate specifically the functionality of notation
 *  semantic procedures when changes happen to the logic semantic elements. More
 *  specifically, we would like for the notation view to be destroyed whenever
 *  a LED semantic element is destroyed.
 *  
 */
public class DeleteSemanticAction
	extends DiagramAction
	implements LogicActionIds {

	public DeleteSemanticAction(IWorkbenchPage workbenchPage) {
		super(workbenchPage);
	}

	public void init() {
		super.init();
		setText("Delete Semantic Element"); //$NON-NLS-1$
	}

	protected Request createTargetRequest() {
		return new Request("deleteSemanticElement"); //$NON-NLS-1$
	}
	
	protected void doRun(IProgressMonitor progressMonitor) {
		super.doRun(progressMonitor);
		
        AbstractEMFOperation operation = new AbstractEMFOperation(
			getDiagramEditPart().getEditingDomain(), getLabel()) {

			protected IStatus doExecute(IProgressMonitor monitor,
					IAdaptable info)
				throws ExecutionException {

				for (Iterator i = getStructuredSelection().iterator(); i
					.hasNext();) {
					IGraphicalEditPart ep = (IGraphicalEditPart) i.next();
					DestroyElementCommand.destroy(ep.getPrimaryView().getElement());

				}
				return new Status(IStatus.OK, LogicDiagramPlugin.getPluginId(),
						LogicDiagramStatusCodes.OK, StringStatics.BLANK, null);
			};
		};

		try {
			getActionManager().getOperationHistory().execute(operation,
				new NullProgressMonitor(), null);
		} catch (ExecutionException e) {
			Trace.catching(LogicDiagramPlugin.getInstance(),
				LogicDiagramDebugOptions.EXCEPTIONS_CATCHING, getClass(),
				"doRun", e); //$NON-NLS-1$
			Log.error(LogicDiagramPlugin.getInstance(),
				LogicDiagramStatusCodes.IGNORED_EXCEPTION_WARNING, e
					.getLocalizedMessage(), e);
		}
		
	}

	protected boolean isSelectionListener() {
		return true;
	}
	
	protected boolean calculateEnabled() {
		return true;
	}
}
