/*******************************************************************************
 * Copyright (c) 2008, 2012 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.bpel.ui.actions;

import org.eclipse.bpel.model.BPELFactory;
import org.eclipse.bpel.model.PartnerLink;
import org.eclipse.bpel.model.PartnerLinks;
import org.eclipse.bpel.ui.actions.editpart.AbstractAction;
import org.eclipse.bpel.ui.commands.CompoundCommand;
import org.eclipse.bpel.ui.commands.InsertInContainerCommand;
import org.eclipse.bpel.ui.commands.SetNameAndDirectEditCommand;
import org.eclipse.bpel.ui.commands.SetSelectionCommand;
import org.eclipse.bpel.ui.util.ModelHelper;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.gef.EditPart;
import org.eclipse.jface.resource.ImageDescriptor;

/**
 * A class for actions that create scope "declarations", i.e. variables, partnerlinks,
 * messageExchanges and correlationSets.
 * 
 * @author bbrodt
 * @see https://issues.jboss.org/browse/JBIDE-7953
 *
 */
public abstract class AbstractDeclarationAction extends AbstractAction {

	protected EObject parent;
	protected EObject child;
	
	public AbstractDeclarationAction(EditPart anEditPart) {
		super(anEditPart);
	}

	@Override
	public boolean onButtonPressed() {
		parent = getParent();
		child = getChild();
		if (parent==null || child==null)
			return false;

		InsertInContainerCommand insertCmd = new InsertInContainerCommand(parent, child, null);
		CompoundCommand command = new CompoundCommand(insertCmd.getLabel());
		command.add( insertCmd ); 
		command.add( new SetSelectionCommand ( parent, true ) );
		command.add( new SetSelectionCommand ( child, false ) );
		command.add(new SetNameAndDirectEditCommand(child, viewer));
		ModelHelper.getBPELEditor(modelObject).getCommandStack().execute(command);
		return true;
	}

	@Override
	public String getToolTip() {
		return getChild().eClass().getName();
	}

	public abstract EObject getParent();
	public abstract EObject getChild();
}
