package org.eclipse.jst.jsf.facelet.core.internal.registry.taglib; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.jst.jsf.common.internal.resource.ResourceManager; import org.eclipse.jst.jsf.common.internal.resource.ResourceTracker; import org.eclipse.jst.jsf.common.internal.resource.WorkspaceMediator; import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin; import org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.WebappConfiguration.WebappListener; class TaglibResourceManager extends ResourceManager<IFile> { private ILibraryChangeHandler _handler; private final WebappConfiguration _webAppConfiguration; public TaglibResourceManager(final IProject project, final ILibraryChangeHandler handler, final WorkspaceMediator wsMediator, final WebappConfiguration webAppConfiguration) { super(project.getWorkspace()); _handler = handler; _webAppConfiguration = webAppConfiguration; } @Override public List<IFile> getResources() { return _webAppConfiguration.getFiles(); } @Override public void initResources() { _webAppConfiguration.start(); _webAppConfiguration.addListener(new WebappListener() { @Override public void webappChanged(final WebappChangeEvent event) { for (final IFile file : event.getRemoved()) { TaglibFileTracker tracker; // only fire removals on files that we are already managing: you can't remove // a file that is not there. if (isInstance(file)) { tracker = (TaglibFileTracker) unmanageResource(file); _handler.removed(tracker.getUri(), file); } } for (final IFile file : event.getAdded()) { _handler.added(file); } } }); List<IFile> files = _webAppConfiguration.getFiles(); for (final IFile file : files) { // add files to ensure we get add events for ones that don't exist. try { getInstance(file); } catch (ManagedObjectException e) { FaceletCorePlugin.log("While starting the taglib resource manager", e); //$NON-NLS-1$ } } } @Override protected ResourceTracker createNewInstance(final IResource resource) { if (resource.getType() == IResource.FILE) { return new TaglibFileTracker((IFile) resource, this, _handler); } throw new IllegalArgumentException(); } /* * (non-Javadoc) * * @see * org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager * #dispose() */ @Override public void dispose() { _webAppConfiguration.dispose(); super.dispose(); } }