diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/pde/AbstractSimpleClassExtensionRegistryReader.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/pde/AbstractSimpleClassExtensionRegistryReader.java | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/pde/AbstractSimpleClassExtensionRegistryReader.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/pde/AbstractSimpleClassExtensionRegistryReader.java deleted file mode 100644 index 288d1d2e0..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/pde/AbstractSimpleClassExtensionRegistryReader.java +++ /dev/null @@ -1,265 +0,0 @@ -package org.eclipse.jst.jsf.common.internal.pde; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IExtensionPoint; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.jst.jsf.common.JSFCommonPlugin; - -/** - * @author cbateman - * @param <T> - * - */ -public abstract class AbstractSimpleClassExtensionRegistryReader<T> extends - AbstractRegistryReader<T> -{ - /** - * Indicates no sorting of extension. - */ - protected final static Comparator NO_SORT = null; - - private final String _attributeName; - private final String _configElementName; - private final Comparator<SortableExecutableExtension<T>> _comparator; - - private boolean _logWarnings = false; - - /** - * @param extPtNamespace - * @param extPtId - * @param configElementName - * @param attributeName - * @param listComparator - * May be null if no sorting of the extensions list is required. - */ - protected AbstractSimpleClassExtensionRegistryReader( - final String extPtNamespace, final String extPtId, - final String configElementName, final String attributeName, - final Comparator<SortableExecutableExtension<T>> listComparator) - { - super(extPtNamespace, extPtId); - _configElementName = configElementName; - _attributeName = attributeName; - _comparator = listComparator; - } - - @Override - protected final void initialize() - { - final List<SortableExecutableExtension<T>> result = new ArrayList<SortableExecutableExtension<T>>(); - final IExtensionPoint extensionPoint = Platform.getExtensionRegistry() - .getExtensionPoint(getExtPtNamespace(), getExtPtId()); - if (extensionPoint == null) - { - return; - } - IExtension[] extensions = extensionPoint.getExtensions(); - for (int i = 0; i < extensions.length; i++) - { - IExtension ext = extensions[i]; - IConfigurationElement[] tagConverter = ext - .getConfigurationElements(); - - for (int j = 0; j < tagConverter.length; j++) - { - final IConfigurationElement element = tagConverter[j]; - - if (element.getName().equals(_configElementName)) - { - element.getAttribute(_attributeName); - try - { - final T obj = (T) element - .createExecutableExtension(_attributeName); - result.add(new SortableExecutableExtension<T>( - _comparator, element.getContributor().getName(), - obj)); - } catch (ClassCastException ce) - { - handleLoadFailure(new CoreException(new Status( - IStatus.ERROR, JSFCommonPlugin.PLUGIN_ID, - "Extension class is not the expected type", ce))); //$NON-NLS-1$ - } catch (CoreException e) - { - handleLoadFailure(e); - } - } - } - } - - if (result.size() > 0) - { - if (_comparator != NO_SORT) - { - Collections.sort(result, _comparator); - } - } else if (_logWarnings) - { - JSFCommonPlugin.log(IStatus.WARNING, String.format( - "No extensions found for: %s.%s", //$NON-NLS-1$ - getExtPtNamespace(), getExtPtId())); - } - final List<T> finalExtensions = new ArrayList<T>(); - for (final SortableExecutableExtension<T> sortable : result) - { - finalExtensions.add(sortable.getExtensionObject()); - } - internalSetExtensions(finalExtensions); - } - - /** - * Called by initialize when an error occurs trying to load a class from an - * extension point. Sub-class should implement to handle the failure, - * typically to log it using their bundle id. - * - * @param ce - */ - protected abstract void handleLoadFailure(final CoreException ce); - - /** - * @param doLogWarnings - */ - protected void logWarnings(final boolean doLogWarnings) { - _logWarnings = doLogWarnings; - } - - /** - * A comparator that sorts canonically by extension namespace and id, but - * can make exceptions for certain prefices. - * - * @param <T> - * - */ - protected abstract static class CanonicalComparatorWithPrefixExceptions<T> - implements Comparator<SortableExecutableExtension<T>> - { - - public int compare(SortableExecutableExtension<T> o1, - SortableExecutableExtension<T> o2) - { - int result = prefixSort(o1, o2); - - // if the prefix sort doesn't distinguish a sort order, then - // compare it canonically - if (result == 0) - { - result = o1.getContributorId().compareTo(o2.getContributorId()); - } - - return result; - } - - /** - * @param o1 - * @param o2 - * @return -1 if o1 should sort before o2 based on prefix. 1 if o2 - * should sort before o1 or 0 if there is sort preference based - * on prefix. - */ - protected abstract int prefixSort(SortableExecutableExtension<T> o1, - SortableExecutableExtension<T> o2); - } - - /** - * Ensures that contributions from "org.eclipse.jst" plugins are sorted last - * - * @param <T> - */ - public static class CompareOrgEclipseJstContributorsLastComparator<T> extends CanonicalComparatorWithPrefixExceptions<T> { - @Override - protected int prefixSort( - SortableExecutableExtension<T> o1, - SortableExecutableExtension<T> o2) - { - // if o1 is contributed by open source, sort it - // after - if (o1.getContributorId().startsWith("org.eclipse.jst")) //$NON-NLS-1$ - { - return 1; - } - // if o2 is contributed by open source, sort o1 first - else if (o2.getContributorId().startsWith("org.eclipse.jst")) //$NON-NLS-1$ - { - return -1; - } - // otherwise, we don't care - return 0; - } - - } - /** - * Used to sort extensions before locking down the list. - * - * @param <T> - */ - protected final static class SortableExecutableExtension<T> implements - Comparable<SortableExecutableExtension> - { - private final Comparator _comparator; - private final String _contributorId; - private final T _extensionObject; - - private SortableExecutableExtension(final Comparator comparator, - final String contributorId, final T extensionObject) - { - if (comparator == null) - { - _comparator = new Comparator<T>() - { - public int compare(T o1, T o2) - { - // always return equal. - return 0; - } - }; - } else - { - _comparator = comparator; - } - _contributorId = contributorId; - _extensionObject = extensionObject; - } - - public int compareTo(SortableExecutableExtension o) - { - return _comparator.compare(this, o); - } - - @Override - public boolean equals(Object obj) - { - return _comparator.compare(this, obj) == 0; - } - - @Override - public int hashCode() - { - return _contributorId.hashCode() ^ _extensionObject.hashCode(); - } - - /** - * @return the id of the bundle that contributed this extension - */ - public String getContributorId() - { - return _contributorId; - } - - /** - * @return the extension object - */ - public T getExtensionObject() - { - return _extensionObject; - } - } -} |