diff options
Diffstat (limited to 'plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java')
-rw-r--r-- | plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java deleted file mode 100644 index 2cc2fdcb2..000000000 --- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java +++ /dev/null @@ -1,260 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2007 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.wst.common.componentcore.internal.util; - -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.ISafeRunnable; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.SafeRunner; -import org.eclipse.jem.util.RegistryReader; -import org.eclipse.wst.common.componentcore.ModuleCoreNature; -import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin; -import org.eclipse.wst.common.componentcore.internal.resources.ResourceTimestampMappings; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder; -import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; -import org.eclipse.wst.common.project.facet.core.IFacetedProject; -import org.eclipse.wst.common.project.facet.core.IProjectFacet; -import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; - -public class ComponentImplManager { - - private static final String NO_FACETS = "NONE";//$NON-NLS-1$ - - private static final String COMPONENT_IMPL_EXTENSION_POINT = "componentimpl"; //$NON-NLS-1$ - private static final String TAG_COMPONENT_IMPL = "componentimpl"; //$NON-NLS-1$ - private static final String ATT_TYPE = "typeID"; //$NON-NLS-1$ - private static final String ATT_CLASS = "class"; //$NON-NLS-1$ - - private static final ComponentImplManager instance = new ComponentImplManager(); -// private static final Object LOAD_FAILED = new Object(); - - private final Map/* <String, ComponentImplDescriptor> */ descriptors = new Hashtable(); - - private final Map/* <ComponentImplDescriptor, IComponentImplFactory> */ instances = new Hashtable(); - private final ResourceTimestampMappings factoryMap = new ResourceTimestampMappings(); - - /** - * @return Returns the instance. - */ - public static ComponentImplManager instance() { - /* already initialized and registry read by the time the class initializes */ - return instance; - } - - public ComponentImplManager() { - SafeRunner.run(new ISafeRunnable() { - - public void handleException(Throwable exception) { - ModulecorePlugin.logError(0, exception.getMessage(), exception); - } - - public void run() throws Exception { - new ComponentImplRegistryReader().readRegistry(); - } - - }); - } - - - private IComponentImplFactory getComponentImplFactory(String typeID) { - - ComponentImplDescriptor descriptor = (ComponentImplDescriptor) descriptors.get(typeID); - IComponentImplFactory factory = null; - - if (descriptor != null) { - - factory = (IComponentImplFactory) instances.get(descriptor); - - if (factory == null) { - - if ((factory = descriptor.createFactory()) != null) { - instances.put(descriptor, factory); - } else { - descriptors.remove(descriptor); - } - } - } - return factory; - } - - private IComponentImplFactory findFactoryForProject(IProject project){ - try { - IComponentImplFactory factory = null; - - if( !factoryMap.hasChanged(project) ) { - - if( factoryMap.hasCacheError(project)) - return null; - - if( factoryMap.hasCacheData(project)) - return (IComponentImplFactory) factoryMap.getData(project); - } - - IFacetedProject facetedProject = ProjectFacetsManager.create(project); - if (facetedProject == null){ - factory = getComponentImplFactory(NO_FACETS); - factoryMap.mark(project, factory); - return factory; - } - Iterator keys = descriptors.keySet().iterator(); - while (keys.hasNext()) { - String typeID = (String) keys.next(); - if(typeID.equals(NO_FACETS)){ - continue; - } - try { - IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID); - if (projectFacet != null && facetedProject.hasProjectFacet(projectFacet)){ - factory = getComponentImplFactory(typeID); - if(null != factory){ - factoryMap.mark(project, factory); - return factory; - } - } - } catch (Exception e) { - continue; - } - } - - } catch (Exception e) { - ModulecorePlugin.logError(0, "Returning null factory for project: " + project, e); //$NON-NLS-1$ - factoryMap.markError(project); - } - return null; - } - - - - public IVirtualFolder createFolder(IProject aProject, IPath aRuntimePath){ - try { - IComponentImplFactory factory = findFactoryForProject(aProject); - if(null != factory){ - return factory.createFolder(aProject, aRuntimePath); - } - } catch (Exception e) { - // Just return a default folder - } - return new VirtualFolder(aProject, aRuntimePath); - } - - public IVirtualComponent createComponent(IProject project) { - try { - IComponentImplFactory factory = findFactoryForProject(project); - if(null != factory){ - return factory.createComponent(project); - } - } catch (Exception e) { - // Just return a default component - } - if (!ModuleCoreNature.isFlexibleProject(project)){ - return null; - } - return new VirtualComponent(project, new Path("/")); //$NON-NLS-1$ - } - - public IVirtualComponent createArchiveComponent(IProject aProject, String aComponentName) { - try { - IComponentImplFactory factory = findFactoryForProject(aProject); - if(null != factory){ - return factory.createArchiveComponent(aProject, aComponentName, new Path("/")); //$NON-NLS-1$ - } - } catch (Exception e) { - // Just return a default archive component - } - return new VirtualArchiveComponent(aProject, aComponentName, new Path("/")); //$NON-NLS-1$ - } - - private class ComponentImplDescriptor { - - private final IConfigurationElement element; - private final String type; - - public ComponentImplDescriptor(IConfigurationElement configElement) { - element = configElement; - type = element.getAttribute(ATT_TYPE); - } - - /** - * Create and return an {@link IArtifactEditFactory} for the given descriptor or <b>null</b> - * if there are problems instantiating the extension. - * - * @return An {@link IArtifactEditFactory} for the given descriptor or <b>null</b> if there - * are problems instantiating the extension. - */ - public IComponentImplFactory createFactory() { - - final IComponentImplFactory[] factory = new IComponentImplFactory[1]; - - SafeRunner.run(new ISafeRunnable() { - - public void handleException(Throwable exception) { - ModulecorePlugin.logError(0, exception.getMessage(), exception); - } - - public void run() throws Exception { - factory[0] = (IComponentImplFactory) element.createExecutableExtension(ATT_CLASS); - } - - }); - - return factory[0]; - } - - /** - * - * @return The type id of this ArtifactEdit definition - */ - public String getType() { - return type; - } - - } - - private class ComponentImplRegistryReader extends RegistryReader { - - public ComponentImplRegistryReader() { - super(ModulecorePlugin.PLUGIN_ID, COMPONENT_IMPL_EXTENSION_POINT); - } - - /** - * @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement) - */ - public boolean readElement(IConfigurationElement element) { - if (TAG_COMPONENT_IMPL.equals(element.getName())) { - - /* - * Because the only instance of this type is created from a static singleton field, and - * the registry is initialized in the constructor of this type, other threads cannot - * compete with readElement() for access to <i>descriptors</i> - */ - String type = element.getAttribute(ATT_TYPE); - if (type != null) - descriptors.put(element.getAttribute(ATT_TYPE), new ComponentImplDescriptor(element)); - else - ModulecorePlugin.logError(0, "No type attribute is specified for " + //$NON-NLS-1$ - ModulecorePlugin.PLUGIN_ID + "." + COMPONENT_IMPL_EXTENSION_POINT + //$NON-NLS-1$ - " extension in " + element.getDeclaringExtension().getNamespaceIdentifier(), null); //$NON-NLS-1$ - return true; - } - return false; - } - } - -} |