blob: ce7cce0a5f2fffdb945b1f34d6cf4bcc2c188c4f [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.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();
}
}