+++ /dev/null
-/*******************************************************************************
- * 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 net.sourceforge.phpdt.internal.ui.text.folding;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.sourceforge.phpdt.ui.PreferenceConstants;
-import net.sourceforge.phpdt.ui.text.folding.IJavaFoldingStructureProvider;
-import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * @since 3.0
- */
-public class JavaFoldingStructureProviderRegistry {
-
- private static final String EXTENSION_POINT = "foldingStructureProviders"; //$NON-NLS-1$
-
- /** The map of descriptors, indexed by their identifiers. */
- private Map fDescriptors;
-
- /**
- * Creates a new instance.
- */
- public JavaFoldingStructureProviderRegistry() {
- }
-
- /**
- * Returns an array of <code>IJavaFoldingProviderDescriptor</code>
- * describing all extension to the <code>foldingProviders</code> extension
- * point.
- *
- * @return the list of extensions to the
- * <code>quickDiffReferenceProvider</code> extension point.
- */
- public JavaFoldingStructureProviderDescriptor[] getFoldingProviderDescriptors() {
- synchronized (this) {
- ensureRegistered();
- return (JavaFoldingStructureProviderDescriptor[]) fDescriptors
- .values()
- .toArray(
- new JavaFoldingStructureProviderDescriptor[fDescriptors
- .size()]);
- }
- }
-
- /**
- * Returns the folding provider with identifier <code>id</code> or
- * <code>null</code> if no such provider is registered.
- *
- * @param id
- * the identifier for which a provider is wanted
- * @return the corresponding provider, or <code>null</code> if none can be
- * found
- */
- public JavaFoldingStructureProviderDescriptor getFoldingProviderDescriptor(
- String id) {
- synchronized (this) {
- ensureRegistered();
- return (JavaFoldingStructureProviderDescriptor) fDescriptors
- .get(id);
- }
- }
-
- /**
- * Instantiates and returns the provider that is currently configured in the
- * preferences.
- *
- * @return the current provider according to the preferences
- */
- public IJavaFoldingStructureProvider getCurrentFoldingProvider() {
- String id = PHPeclipsePlugin.getDefault().getPreferenceStore()
- .getString(PreferenceConstants.EDITOR_FOLDING_PROVIDER);
- JavaFoldingStructureProviderDescriptor desc = getFoldingProviderDescriptor(id);
- if (desc != null) {
- try {
- return desc.createProvider();
- } catch (CoreException e) {
- PHPeclipsePlugin.log(e);
- }
- }
- return null;
- }
-
- /**
- * Ensures that the extensions are read and stored in
- * <code>fDescriptors</code>.
- */
- private void ensureRegistered() {
- if (fDescriptors == null)
- reloadExtensions();
- }
-
- /**
- * Reads all extensions.
- * <p>
- * This method can be called more than once in order to reload from a
- * changed extension registry.
- * </p>
- */
- public void reloadExtensions() {
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- Map map = new HashMap();
-
- IConfigurationElement[] elements = registry
- .getConfigurationElementsFor(PHPeclipsePlugin.getPluginId(),
- EXTENSION_POINT);
- for (int i = 0; i < elements.length; i++) {
- JavaFoldingStructureProviderDescriptor desc = new JavaFoldingStructureProviderDescriptor(
- elements[i]);
- map.put(desc.getId(), desc);
- }
-
- synchronized (this) {
- fDescriptors = Collections.unmodifiableMap(map);
- }
- }
-
-}