package org.eclipse.pde.emfforms.editor.actions;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.pde.emfforms.editor.EmfMasterDetailBlock;
import org.eclipse.pde.emfforms.internal.Activator;
import org.eclipse.pde.emfforms.internal.editor.IEmfFormsImages;

public abstract class AbstractAddAction extends Action {

	protected EmfMasterDetailBlock masterDetail;

	public AbstractAddAction(EmfMasterDetailBlock masterDetail) {
		super();
		this.masterDetail = masterDetail;
		setText("Add");
		setToolTipText("Add a element to current model");
	}

	@Override
	public void run() {

		Object createdObject = createNewObject(masterDetail);

		// select the created method
		masterDetail.getTreeViewer().refresh();
		masterDetail.getTreeViewer().setSelection(new StructuredSelection(createdObject), true);
		masterDetail.getTreeViewer().getTree().setFocus();

	}

	/**
	 * Create and return the new object to add to the masterDetail. The new object will be selected in the tree.
	 * 
	 * @param masterDetail where the new object will be add
	 * @return the created object
	 */
	protected abstract Object createNewObject(EmfMasterDetailBlock masterDetail);

	@Override
	public ImageDescriptor getImageDescriptor() {
		return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource(IEmfFormsImages.ADD_TOOLBAR_BUTTON)); //$NON-NLS-1$
	}

}
