package groovy.jface.factory;

import groovy.swt.factory.SwtFactory;
import groovy.swt.factory.WidgetFactory;

import java.util.Map;

import org.codehaus.groovy.GroovyException;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IContributionManager;

/**
 * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
 * @version $Revision$
 */
public class ContributionManagerFactory extends WidgetFactory implements SwtFactory {

    public ContributionManagerFactory(Class beanClass) {
        super(beanClass);
    }

    /*
     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
     *      java.lang.Object)
     */
    public Object newInstance(Map properties, Object parent) throws GroovyException {

        Object bean = createWidget(parent);

        setBeanProperties(bean, properties);

        if (parent instanceof IContributionManager) {
            IContributionManager contributionManager = (IContributionManager) parent;

            if (bean instanceof IAction) {
                contributionManager.add((IAction) bean);
            }

            if (bean instanceof IContributionItem) {
                contributionManager.add((IContributionItem) bean);
            }
        }
        return bean;
    }
}