| package org.eclipse.jst.jsf.common.internal.resource; |
| |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.concurrent.CopyOnWriteArrayList; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jst.jsf.common.internal.locator.AbstractLocator; |
| import org.eclipse.jst.jsf.common.internal.locator.ILocatorChangeListener; |
| |
| /** |
| * An abstract implementation of the JarLocator. |
| * |
| * @author cbateman |
| * |
| */ |
| public abstract class AbstractJarLocator extends |
| AbstractLocator<Collection<? extends ClasspathJarFile>, IProject, String> |
| implements IJarLocator |
| { |
| /** |
| * @param id |
| * @param displayName |
| */ |
| public AbstractJarLocator(final String id, final String displayName) |
| { |
| super(id, displayName, Collections.EMPTY_LIST, |
| new CopyOnWriteArrayList<ILocatorChangeListener>()); |
| } |
| |
| private final CopyOnWriteArrayList<JarChangeListener> _listeners = new CopyOnWriteArrayList<JarChangeListener>(); |
| |
| public final Collection<? extends ClasspathJarFile> getJars(final IProject project) |
| { |
| return locate(project); |
| } |
| |
| @Override |
| protected abstract Collection<? extends ClasspathJarFile> doLocate(IProject context); |
| |
| public void addListener(final JarChangeListener listener) |
| { |
| _listeners.addIfAbsent(listener); |
| } |
| |
| public void removeListener(final JarChangeListener listener) |
| { |
| _listeners.remove(listener); |
| } |
| |
| /** |
| * @param event |
| */ |
| protected void fireChangeEvent(final JarChangeEvent event) |
| { |
| for (final JarChangeListener listener : _listeners) |
| { |
| listener.changed(event); |
| } |
| } |
| |
| public void dispose() |
| { |
| _listeners.clear(); |
| } |
| |
| } |