| package org.eclipse.jst.jsf.facelet.core.internal.registry; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager; |
| import org.eclipse.jst.jsf.core.JSFVersion; |
| import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry; |
| import org.eclipse.jst.jsf.designtime.internal.view.model.TagRegistryFactory; |
| import org.eclipse.jst.jsf.facelet.core.internal.FaceletCoreTraceOptions; |
| |
| /** |
| * A per-resource singleton manager for TLDTagRegistry's. |
| * |
| * @author cbateman |
| * |
| */ |
| public final class FaceletRegistryManager extends |
| ResourceSingletonObjectManager<FaceletTagRegistry, IProject> |
| { |
| // STATIC |
| private static FaceletRegistryManager INSTANCE; |
| |
| /** |
| * @return the singleton instance |
| */ |
| private static FaceletRegistryManager getGlobalManager(final IWorkspace workspace) |
| { |
| if (FaceletCoreTraceOptions.TRACE_REGISTRYMANAGER) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletRegistryManager: Initializing FaceletRegistryManager singleton"); //$NON-NLS-1$ |
| } |
| |
| synchronized(FaceletRegistryManager.class) |
| { |
| if (INSTANCE == null) |
| { |
| INSTANCE = new FaceletRegistryManager(workspace); |
| } |
| |
| return INSTANCE; |
| } |
| } |
| |
| private FaceletRegistryManager(final IWorkspace workspace) |
| { |
| super(workspace); |
| } |
| |
| @Override |
| protected FaceletTagRegistry createNewInstance(final IProject project) |
| { |
| if (FaceletCoreTraceOptions.TRACE_REGISTRYMANAGER) |
| { |
| FaceletCoreTraceOptions.log("FaceletRegistryManager: creating new instance for " //$NON-NLS-1$ |
| + project.toString()); |
| } |
| |
| return new FaceletTagRegistry(project); |
| } |
| |
| @Override |
| protected void runAfterGetInstance(final IProject resource) |
| { |
| if (FaceletCoreTraceOptions.TRACE_REGISTRYMANAGER) |
| { |
| FaceletCoreTraceOptions.log("FaceletRegistryManager: Acquired instance for " //$NON-NLS-1$ |
| + resource.toString()); |
| } |
| } |
| |
| @Override |
| protected void runBeforeGetInstance(final IProject resource) |
| { |
| if (FaceletCoreTraceOptions.TRACE_REGISTRYMANAGER) |
| { |
| FaceletCoreTraceOptions.log("FaceletRegistryManager: Getting registry for " //$NON-NLS-1$ |
| + resource.toString()); |
| } |
| } |
| |
| /** |
| * Adapter used to allow creation by extension point. |
| * |
| * @author cbateman |
| * |
| */ |
| public static class MyRegistryFactory extends TagRegistryFactory |
| { |
| @Override |
| public ITagRegistry createTagRegistry(IProject project) throws TagRegistryFactoryException |
| { |
| try |
| { |
| return getGlobalManager(project.getWorkspace()).getInstance(project); |
| } |
| catch (ManagedObjectException e) |
| { |
| throw new TagRegistryFactoryException(e); |
| } |
| } |
| |
| @Override |
| public boolean isInstance(IProject project) |
| { |
| return getGlobalManager(project.getWorkspace()).isInstance(project); |
| } |
| |
| public String getDisplayName() |
| { |
| return Messages.FaceletRegistryManager_REGISTRY_FACTORY_DISPLAYNAME; |
| } |
| |
| @Override |
| public boolean projectIsValid(IProject project) { |
| if (project == null) |
| { |
| return false; |
| } |
| |
| final JSFVersion jsfVersion = JSFVersion.valueOfProject(project); |
| if (jsfVersion != null && jsfVersion.compareTo(JSFVersion.V2_0) >= 0) |
| { |
| return true; |
| } |
| |
| return false; |
| } |
| } |
| } |