/******************************************************************************* * Copyright (c) 2004, 2006 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 - Initial API and implementation *******************************************************************************/ package org.nuxeo.runtime.services.adapter.extension; /** * Instances of this class represent adapter factories that have been * contributed via the adapters extension point. The concrete factory is not * loaded until the factory's plugin is loaded, AND until the factory is * requested to supply an adapter. */ class AdapterFactoryProxy { // implements AdapterFactory, IAdapterFactoryExt { // // private IConfigurationElement element; // /** // * Store Id of the declaring extension. We might need it in case // * the owner goes away (in this case element becomes invalid). // */ // private String ownerId; // /** // * The real factory. Null until the factory is loaded. // */ // private AdapterFactory factory; // private boolean factoryLoaded = false; // // /** // * Creates a new factory proxy based on the given configuration element. // * Returns the new proxy, or null if the element could not be created. // */ // public static AdapterFactoryProxy createProxy(IConfigurationElement element) { // AdapterFactoryProxy result = new AdapterFactoryProxy(); // result.element = element; // result.ownerId = element.getDeclaringExtension().getUniqueIdentifier(); // if ("factory".equals(element.getName())) //$NON-NLS-1$ // return result; // result.logError(); // return null; // } // // String getAdaptableType() { // //cannot return null because it can cause startup failure // String result = element.getAttribute("adaptableType"); //$NON-NLS-1$ // if (result != null) // return result; // logError(); // return ""; //$NON-NLS-1$ // } // // public Object getAdapter(Object adaptableObject, Class adapterType) { // if (!factoryLoaded) // loadFactory(false); // return factory == null ? null : factory.getAdapter(adaptableObject, adapterType); // } // // public Class[] getAdapterList() { // if (!factoryLoaded) // loadFactory(false); // return factory == null ? null : factory.getAdapterList(); // } // // public String[] getAdapterNames() { // IConfigurationElement[] children = element.getChildren(); // ArrayList adapters = new ArrayList(children.length); // for (int i = 0; i < children.length; i++) { // //ignore unknown children for forward compatibility // if ("adapter".equals(children[i].getName())) { //$NON-NLS-1$ // String type = children[i].getAttribute("type"); //$NON-NLS-1$ // if (type != null) // adapters.add(type); // } // } // if (adapters.isEmpty()) // logError(); // return (String[]) adapters.toArray(new String[adapters.size()]); // } // // IExtension getExtension() { // return element.getDeclaringExtension(); // } // // String getOwnerId() { // return ownerId; // } // // /** // * Loads the real adapter factory, but only if its associated plug-in is // * already loaded. Returns the real factory if it was successfully loaded. // * @param force if <code>true</code> the plugin providing the // * factory will be loaded if necessary, otherwise no plugin activations // * will occur. // */ // public AdapterFactory loadFactory(boolean force) { // synchronized (this) { // if (factory != null || factoryLoaded) // return factory; // String bundleId = element.getContributor().getName(); // if (!force && Platform.getBundle(bundleId).getState() != Bundle.ACTIVE) // return null; // //set to true to prevent repeated attempts to load a broken factory // factoryLoaded = true; // } // try { // factory = (AdapterFactory) element.createExecutableExtension("class"); //$NON-NLS-1$ // } catch (CoreException e) { // InternalPlatform.getDefault().log(e.getStatus()); // } // return factory; // } // // /** // * The factory extension was malformed. Log an appropriate exception // */ // private void logError() { // String msg = NLS.bind(Messages.adapters_badAdapterFactory, element.getContributor().getName()); // InternalPlatform.getDefault().log(new Status(IStatus.ERROR, Platform.PI_RUNTIME, 1, msg, null)); // } }