/*******************************************************************************
 * Copyright (c) 2005, 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.bpelactions;

import org.eclipse.bpel.ui.commands.ReplaceInContainerCommand;
import org.eclipse.bpel.ui.factories.AbstractUIObjectFactory;
import org.eclipse.bpel.ui.factories.BPELUIObjectFactory;
import org.eclipse.bpel.ui.factories.UIObjectFactoryProvider;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreationFactory;
import org.eclipse.jface.resource.ImageDescriptor;


public abstract class AbstractBPELAction {

    public abstract EClass getModelType();

    public abstract String getLabel();

    public abstract String getDescription();
    
    /**
     * Returns true if the given object is an instance
     * of this action.
     */
    public boolean isInstanceOf(Object target) {
        return ((EObject)target).eClass() == getModelType();
    }
    
    public AdapterFactory getAdapterFactory() {
        return null;
    }

    /**
     * The implemention of this method is optional. It should
     * be implemented if the new object instances need to be
     * initialized with specific values.
     */
    public CreationFactory getCreationFactory() {
        return null;
    }

	/**
	 * Return a small image representing the type of model object this factory creates
	 */
	public ImageDescriptor getSmallImageDescriptor() {
	    return BPELUIObjectFactory.getSmallImageDescriptor(getModelType());
	}

	/**
	 * Return a large image representing the type of model object this factory creates
	 */
	public ImageDescriptor getLargeImageDescriptor() {
	    return BPELUIObjectFactory.getLargeImageDescriptor(getModelType());
	}

    public AbstractUIObjectFactory getUIObjectFactory() {
        return UIObjectFactoryProvider.getInstance().getFactoryFor(getModelType());
    }
    
    public Command getChangeActionTypeCommand(Object parent, Object currentModel, Object newModel) {
        return new ReplaceInContainerCommand(parent, currentModel, newModel);
    }
}
