This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 103106
Collapse All | Expand All

(-)projects/projectuiapi/apichanges.xml (+15 lines)
Lines 81-86 Link Here
81
    <!-- ACTUAL CHANGES BEGIN HERE: -->
81
    <!-- ACTUAL CHANGES BEGIN HERE: -->
82
82
83
    <changes>
83
    <changes>
84
        <change id="project-open-hook-merger">
85
            <api name="general"/>
86
            <summary>Add <code>LookupMerger</code>implementation for <code>ProjectOpenedHook</code></summary>
87
            <version major="1" minor="24"/>
88
            <date day="4" month="5" year="2007"/>
89
            <author login="mkleint"/>
90
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
91
            <description>
92
               New method <code>UILookupMergerSupport.createProjectOpenHookMerger(ProjectOpenedHook)</code> creates an instance of 
93
               <code>LookupMerger</code> that ensures that from the <code>ProjectOpenedHook</code> instances in project's lookup, the 
94
               project's own is always called first.
95
            </description>
96
            <class package="org.netbeans.spi.project.ui.support" name="UILookupMergerSupport"/>
97
            <issue number="103106"/>
98
        </change>
84
        <change id="project-license-property">
99
        <change id="project-license-property">
85
            <api name="general"/>
100
            <api name="general"/>
86
            <summary>Adding template attribute <code>project.license</code></summary>
101
            <summary>Adding template attribute <code>project.license</code></summary>
(-)projects/projectuiapi/nbproject/project.properties (-1 / +1 lines)
Lines 17-23 Link Here
17
17
18
javac.compilerargs=-Xlint -Xlint:-serial
18
javac.compilerargs=-Xlint -Xlint:-serial
19
javac.source=1.5
19
javac.source=1.5
20
spec.version.base=1.23.0
20
spec.version.base=1.24.0
21
is.autoload=true
21
is.autoload=true
22
javadoc.arch=${basedir}/arch.xml
22
javadoc.arch=${basedir}/arch.xml
23
javadoc.apichanges=${basedir}/apichanges.xml
23
javadoc.apichanges=${basedir}/apichanges.xml
(-)projects/projectuiapi/src/org/netbeans/spi/project/ui/support/UILookupMergerSupport.java (+69 lines)
Lines 23-30 Link Here
23
import java.util.Arrays;
23
import java.util.Arrays;
24
import java.util.LinkedHashSet;
24
import java.util.LinkedHashSet;
25
import java.util.Set;
25
import java.util.Set;
26
import org.netbeans.modules.project.uiapi.ProjectOpenedTrampoline;
26
import org.netbeans.spi.project.LookupMerger;
27
import org.netbeans.spi.project.LookupMerger;
27
import org.netbeans.spi.project.ui.PrivilegedTemplates;
28
import org.netbeans.spi.project.ui.PrivilegedTemplates;
29
import org.netbeans.spi.project.ui.ProjectOpenedHook;
28
import org.netbeans.spi.project.ui.RecommendedTemplates;
30
import org.netbeans.spi.project.ui.RecommendedTemplates;
29
import org.openide.util.Lookup;
31
import org.openide.util.Lookup;
30
32
Lines 59-64 Link Here
59
        return new PrivilegedMerger();
61
        return new PrivilegedMerger();
60
    }
62
    }
61
    
63
    
64
    /**
65
     * Create a {@link org.netbeans.spi.project.LookupMerger} instance 
66
     * for {@link org.netbeans.spi.project.ui.ProjectOpenedHook}. The merger makes sure all registered
67
     * <code>ProjectOpenedHook</code> instances are called and that the default instance is called first.
68
     * @param defaultInstance - the default {@link org.netbeans.spi.project.ui.ProjectOpenedHook} instance or null if
69
     * a default privileged instance is not required.
70
     * @return instance to include in project lookup
71
     * @since org.netbeans.modules.projectuiapi 1.24
72
     */
73
    public static LookupMerger createProjectOpenHookMerger(ProjectOpenedHook defaultInstance) {
74
        return new OpenMerger(defaultInstance);
75
    }
76
    
62
    private static class PrivilegedMerger implements LookupMerger<PrivilegedTemplates> {
77
    private static class PrivilegedMerger implements LookupMerger<PrivilegedTemplates> {
63
        public Class<PrivilegedTemplates> getMergeableClass() {
78
        public Class<PrivilegedTemplates> getMergeableClass() {
64
            return PrivilegedTemplates.class;
79
            return PrivilegedTemplates.class;
Lines 80-85 Link Here
80
        }
95
        }
81
    }
96
    }
82
    
97
    
98
    private static class OpenMerger implements LookupMerger<ProjectOpenedHook> {
99
        private ProjectOpenedHook defaultInstance;
100
101
        OpenMerger(ProjectOpenedHook def) {
102
            defaultInstance = def;
103
        }
104
        public Class<ProjectOpenedHook> getMergeableClass() {
105
            return ProjectOpenedHook.class;
106
        }
107
108
        public ProjectOpenedHook merge(Lookup lookup) {
109
            return new OpenHookImpl(defaultInstance, lookup);
110
        }
111
        
112
    }
113
    
83
    private static class PrivilegedTemplatesImpl implements PrivilegedTemplates {
114
    private static class PrivilegedTemplatesImpl implements PrivilegedTemplates {
84
        
115
        
85
        private Lookup lkp;
116
        private Lookup lkp;
Lines 111-116 Link Here
111
                templates.addAll(Arrays.asList(pt.getRecommendedTypes()));
142
                templates.addAll(Arrays.asList(pt.getRecommendedTypes()));
112
            }
143
            }
113
            return templates.toArray(new String[templates.size()]);
144
            return templates.toArray(new String[templates.size()]);
145
        }
146
        
147
    }
148
    
149
    private static class OpenHookImpl extends ProjectOpenedHook {
150
151
        private ProjectOpenedHook defaultInstance;
152
        private Lookup lkp;        
153
        
154
        OpenHookImpl(ProjectOpenedHook def, Lookup lkp) {
155
            defaultInstance = def;
156
            this.lkp = lkp; 
157
            //shall we listen on ProjectOpenedHook instance changes in lookup and 
158
            // call close on the disappearing ones?
159
        }
160
        
161
        protected void projectOpened() {
162
            if (defaultInstance != null) {
163
                ProjectOpenedTrampoline.DEFAULT.projectOpened(defaultInstance);
164
            }
165
            for (ProjectOpenedHook poh : lkp.lookupAll(ProjectOpenedHook.class)) {
166
                // just to make sure..
167
                if (poh != defaultInstance) {
168
                    ProjectOpenedTrampoline.DEFAULT.projectOpened(poh);
169
                }
170
            }
171
        }
172
173
        protected void projectClosed() {
174
            if (defaultInstance != null) {
175
                ProjectOpenedTrampoline.DEFAULT.projectClosed(defaultInstance);
176
            }
177
            for (ProjectOpenedHook poh : lkp.lookupAll(ProjectOpenedHook.class)) {
178
                // just to make sure..
179
                if (poh != defaultInstance) {
180
                    ProjectOpenedTrampoline.DEFAULT.projectClosed(poh);
181
                }
182
            }
114
        }
183
        }
115
        
184
        
116
    }
185
    }

Return to bug 103106