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