Package org.erlide.ui.internal.folding

Source Code of org.erlide.ui.internal.folding.ErlangFoldingStructureProviderDescriptor

/**
*
*/
package org.erlide.ui.internal.folding;

import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.erlide.ui.editors.erl.folding.IErlangFoldingPreferenceBlock;
import org.erlide.ui.editors.erl.folding.IErlangFoldingStructureProvider;

/**
* @author jakob
*
*/
public final class ErlangFoldingStructureProviderDescriptor {

    /* 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 final String fId;

    /** The name of the extension. */
    private String fName;

    /**
     * The class name of the provided
     * <code>IErlangFoldingStructureProvider</code> .
     */
    private final String fClass;

    /**
     * <code>true</code> if the extension specifies a custom
     * <code>IErlangFoldingPreferenceBlock</code>.
     */
    private boolean fHasPreferences;

    /** The configuration element of this extension. */
    private final IConfigurationElement fElement;

    /**
     * Creates a new descriptor.
     *
     * @param element
     *            the configuration element to read
     */
    public ErlangFoldingStructureProviderDescriptor(final IConfigurationElement element) {
        fElement = element;
        fId = element.getAttribute(ID);
        Assert.isLegal(fId != null);

        fName = element.getAttribute(NAME);
        if (fName == null) {
            fName = fId;
        }

        fClass = element.getAttribute(CLASS);
        Assert.isLegal(fClass != null);

        if (element.getAttribute(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 IErlangFoldingStructureProvider createProvider() throws CoreException {
        final IErlangFoldingStructureProvider prov = (IErlangFoldingStructureProvider) 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 IErlangFoldingPreferenceBlock createPreferences() throws CoreException {
        if (fHasPreferences) {
            final IErlangFoldingPreferenceBlock prefs = (IErlangFoldingPreferenceBlock) fElement
                    .createExecutableExtension(PREFERENCES_CLASS);
            return prefs;
        }
        return new EmptyErlangFoldingPreferenceBlock();
    }

    /**
     * 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;
    }
}
TOP

Related Classes of org.erlide.ui.internal.folding.ErlangFoldingStructureProviderDescriptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.