/******************************************************************************* | |
* Copyright (c) 2000, 2003 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Common Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/cpl-v10.html | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.update.internal.core; | |
import java.util.*; | |
import org.eclipse.core.runtime.*; | |
import org.eclipse.update.core.*; | |
/** | |
* Manages FeatureFactory extension point | |
*/ | |
public final class FeatureTypeFactory { | |
private static FeatureTypeFactory inst; | |
private Map factories; | |
private static final String SIMPLE_EXTENSION_ID = "featureTypes"; //$NON-NLS-1$ | |
/* | |
* hide constructor | |
*/ | |
private FeatureTypeFactory() { | |
} | |
/* | |
* Singleton pattern | |
*/ | |
public static FeatureTypeFactory getInstance() { | |
if (inst == null) | |
inst = new FeatureTypeFactory(); | |
return inst; | |
} | |
/* | |
* return the factory for the associated type | |
*/ | |
public IFeatureFactory getFactory(String type) throws CoreException { | |
// | |
Object instance = getFactories().get(type); | |
if (instance == null) { | |
instance = createFactoryFor(type); | |
getFactories().put(type, instance); | |
} | |
return (IFeatureFactory) instance; | |
} | |
/* | |
* creates a factory for the associated type and cache it | |
*/ | |
private IFeatureFactory createFactoryFor(String type) throws CoreException { | |
IFeatureFactory result = null; | |
String pluginID = | |
UpdateCore.getPlugin().getBundle().getSymbolicName(); | |
IExtensionRegistry registry = Platform.getExtensionRegistry(); | |
IConfigurationElement[] elements = | |
registry.getConfigurationElementsFor(pluginID, SIMPLE_EXTENSION_ID, type); | |
if (elements == null || elements.length == 0) { | |
throw Utilities.newCoreException( | |
Policy.bind("FeatureTypeFactory.UnableToFindFeatureFactory", type), //$NON-NLS-1$ | |
null); | |
} | |
IConfigurationElement element = elements[0]; | |
result = (IFeatureFactory) element.createExecutableExtension("class"); //$NON-NLS-1$ | |
return result; | |
} | |
/* | |
* | |
*/ | |
private Map getFactories() { | |
if (factories == null) | |
factories = new HashMap(); | |
return factories; | |
} | |
} |