Skip to main content
summaryrefslogtreecommitdiffstats
blob: 357458b0d76d2e58bae4a05258c1a9cbf379111f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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;
        }
    }
}

Back to the top