blob: 7195e2af9c7d64f6dc8b5bd37b55bb2be70e5563 [file] [log] [blame]
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.IResourceLifecycleListener;
import org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager;
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
ResourceSingletonObjectManager<TaglibResourceTracker, IResource>
{
private ILibraryChangeHandler _handler;
private final WebappConfiguration _webAppConfiguration;
// private final IResourceChangeListener _newFileListener;
public TaglibResourceManager(final IProject project,
final ILibraryChangeHandler handler,
final WorkspaceMediator wsMediator,
final WebappConfiguration webAppConfiguration)
{
super(project.getWorkspace());
_handler = handler;
_webAppConfiguration = webAppConfiguration;
// TODO: fold into LifecycleListener
// _newFileListener = new IResourceChangeListener()
// {
// public void resourceChanged(final IResourceChangeEvent event)
// {
// // if the event is post change && has the same parent
// // project
// if (event.getType() == IResourceChangeEvent.POST_CHANGE
// && event.getDelta().findMember(project.getFullPath()) != null)
// {
// wsMediator.runInWorkspaceJob(new HandleFileAddJob(event), "Context param update"); //$NON-NLS-1$
// }
// }
// };
// getWorkspace().addResourceChangeListener(_newFileListener);
}
public List<IFile> getFiles()
{
return _webAppConfiguration.getFiles();
}
public void initFiles()
{
_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 TaglibResourceTracker createNewInstance(final IResource resource)
{
if (resource.getType() == IResource.FILE)
{
return new TaglibFileTracker((IFile) resource, this, _handler);
}
throw new IllegalArgumentException();
}
public void addListener(final IResourceLifecycleListener listener)
{
super.addLifecycleEventListener(listener);
}
public void removeListener(final IResourceLifecycleListener listener)
{
super.removeLifecycleEventListener(listener);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager
* #dispose()
*/
@Override
public void dispose()
{
_webAppConfiguration.dispose();
// getWorkspace().removeResourceChangeListener(_newFileListener);
super.dispose();
}
}