package org.marketcetera.photon.commons.ui.workbench; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.core.runtime.IExecutableExtensionFactory; import org.marketcetera.util.misc.ClassVersion; import org.ops4j.peaberry.eclipse.GuiceExtensionFactory; /* $License$ */ /** * Works around a bug in GuiceExtensionFactory. It caches the configuration * element to pass to the factory-instantiated object as required by the * {@link IExecutableExtensionFactory} contract. * <p> * See <a * href="http://code.google.com/p/peaberry/issues/detail?id=37">http://code * .google.com/p/peaberry/issues/detail?id=37</a> * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: WorkaroundGuiceExtensionFactory.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: WorkaroundGuiceExtensionFactory.java 16154 2012-07-14 16:34:05Z colin $") public final class WorkaroundGuiceExtensionFactory implements IExecutableExtension, IExecutableExtensionFactory { private final GuiceExtensionFactory mGuiceFactory; private IConfigurationElement mConfigElement; /** * Constructor. */ public WorkaroundGuiceExtensionFactory() { mGuiceFactory = new GuiceExtensionFactory(); } @Override public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { mConfigElement = config; mGuiceFactory.setInitializationData(config, propertyName, data); } @Override public Object create() throws CoreException { Object object = mGuiceFactory.create(); if (object instanceof IExecutableExtension) { ((IExecutableExtension) object).setInitializationData( mConfigElement, null, null); } return object; } }