X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java new file mode 100644 index 0000000..7377f61 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/folding/JavaFoldingStructureProviderDescriptor.java @@ -0,0 +1,117 @@ +/******************************************************************************* + * 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 org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; + +import org.eclipse.jface.text.Assert; + +import net.sourceforge.phpdt.ui.text.folding.IJavaFoldingPreferenceBlock; +import net.sourceforge.phpdt.ui.text.folding.IJavaFoldingStructureProvider; + +/** + * Describes a contribution to the folding provider extension point. + * + * @since 3.0 + */ +public final class JavaFoldingStructureProviderDescriptor { + + /* extension point attribute names */ + + private static final String PREFERENCES_CLASS= "preferencesClass"; //$NON-NLS-1$ + private static final String CLASS= "class"; //$NON-NLS-1$ + private static final String NAME= "name"; //$NON-NLS-1$ + private static final String ID= "id"; //$NON-NLS-1$ + + /** The identifier of the extension. */ + private String fId; + /** The name of the extension. */ + private String fName; + /** The class name of the provided IJavaFoldingStructureProvider. */ + private String fClass; + /** + * true if the extension specifies a custom + * IJavaFoldingPreferenceBlock. + */ + private boolean fHasPreferences; + /** The configuration element of this extension. */ + private IConfigurationElement fElement; + + /** + * Creates a new descriptor. + * + * @param element the configuration element to read + */ + JavaFoldingStructureProviderDescriptor(IConfigurationElement element) { + fElement= element; + fId= element.getAttributeAsIs(ID); + Assert.isLegal(fId != null); + + fName= element.getAttribute(NAME); + if (fName == null) + fName= fId; + + fClass= element.getAttributeAsIs(CLASS); + Assert.isLegal(fClass != null); + + if (element.getAttributeAsIs(PREFERENCES_CLASS) == null) + fHasPreferences= false; + else + fHasPreferences= true; + } + + /** + * Creates a folding provider as described in the extension's xml. + * + * @return a new instance of the folding provider described by this + * descriptor + * @throws CoreException if creation fails + */ + public IJavaFoldingStructureProvider createProvider() throws CoreException { + IJavaFoldingStructureProvider prov= (IJavaFoldingStructureProvider) fElement.createExecutableExtension(CLASS); + return prov; + } + + /** + * Creates a preferences object as described in the extension's xml. + * + * @return a new instance of the reference provider described by this + * descriptor + * @throws CoreException if creation fails + */ + public IJavaFoldingPreferenceBlock createPreferences() throws CoreException { + if (fHasPreferences) { + IJavaFoldingPreferenceBlock prefs= (IJavaFoldingPreferenceBlock) fElement.createExecutableExtension(PREFERENCES_CLASS); + return prefs; + } else { + return new EmptyJavaFoldingPreferenceBlock(); + } + } + + /** + * Returns the identifier of the described extension. + * + * @return Returns the id + */ + public String getId() { + return fId; + } + + /** + * Returns the name of the described extension. + * + * @return Returns the name + */ + public String getName() { + return fName; + } +}