package org.eclipse.jst.pagedesigner.editors; import java.util.ArrayList; import java.util.Collections; 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.Platform; import org.eclipse.jface.util.TransferDropTargetListener; import org.eclipse.jst.pagedesigner.IJMTConstants; import org.eclipse.jst.pagedesigner.PDPlugin; class OutlineTargetListenerReader { private final static String CLASS = "class"; //$NON-NLS-1$ private static List<TransferDropTargetListener> _listeners; public static synchronized List<TransferDropTargetListener> getListeners() { if (_listeners == null) { _listeners = readListeners(); } return Collections.unmodifiableList(_listeners); } private static List<TransferDropTargetListener> readListeners() { List<TransferDropTargetListener> listeners = new ArrayList<TransferDropTargetListener>(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry() .getExtensionPoint(PDPlugin.getPluginId(), IJMTConstants.EXTENSION_POINT_PAGEDESIGNER); IExtension[] extensions = extensionPoint.getExtensions(); for (int i=0; i<extensions.length; i++) { IExtension ext = extensions[i]; IConfigurationElement[] pageDesignerElements = ext.getConfigurationElements(); for (int j=0; j<pageDesignerElements.length; j++) { final IConfigurationElement pageDesignerElement = pageDesignerElements[j]; if (pageDesignerElement.getName().equals(IJMTConstants.OUTLINE_TARGET_LISTENER)) { pageDesignerElement.getAttribute(CLASS); Object object; try { object = pageDesignerElement.createExecutableExtension(CLASS); if (object instanceof TransferDropTargetListener) { listeners.add((TransferDropTargetListener)object); } } catch (CoreException e) { PDPlugin.log("Problem loading transfer drop target listener for " + //$NON-NLS-1$ pageDesignerElement, e); } } } } return listeners; } private OutlineTargetListenerReader() { throw new IllegalStateException("Should not be instantiated!"); //$NON-NLS-1$ } }