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 57025
Collapse All | Expand All

(-)projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java (-4 / +11 lines)
Lines 45-50 Link Here
45
import org.openide.filesystems.URLMapper;
45
import org.openide.filesystems.URLMapper;
46
import org.openide.loaders.DataObject;
46
import org.openide.loaders.DataObject;
47
import org.openide.loaders.DataObjectNotFoundException;
47
import org.openide.loaders.DataObjectNotFoundException;
48
import org.openide.util.Lookup;
48
49
49
/**
50
/**
50
 * List of projects open in the GUI.
51
 * List of projects open in the GUI.
Lines 398-405 Link Here
398
    
399
    
399
    
400
    
400
    private static void notifyOpened(Project p) {
401
    private static void notifyOpened(Project p) {
401
        ProjectOpenedHook hook = (ProjectOpenedHook)p.getLookup().lookup(ProjectOpenedHook.class);
402
        Lookup.Result result = p.getLookup().lookup(new Lookup.Template(ProjectOpenedHook.class));
402
        if (hook != null) {
403
        
404
        for (Iterator i = result.allInstances().iterator(); i.hasNext(); ) {
405
            ProjectOpenedHook hook = (ProjectOpenedHook) i.next();
406
            
403
            try {
407
            try {
404
                ProjectOpenedTrampoline.DEFAULT.projectOpened(hook);
408
                ProjectOpenedTrampoline.DEFAULT.projectOpened(hook);
405
            } catch (RuntimeException e) {
409
            } catch (RuntimeException e) {
Lines 409-416 Link Here
409
    }
413
    }
410
    
414
    
411
    private static void notifyClosed(Project p) {
415
    private static void notifyClosed(Project p) {
412
        ProjectOpenedHook hook = (ProjectOpenedHook)p.getLookup().lookup(ProjectOpenedHook.class);
416
        Lookup.Result result = p.getLookup().lookup(new Lookup.Template(ProjectOpenedHook.class));
413
        if (hook != null) {
417
        
418
        for (Iterator i = result.allInstances().iterator(); i.hasNext(); ) {
419
            ProjectOpenedHook hook = (ProjectOpenedHook) i.next();
420
            
414
            try {
421
            try {
415
                ProjectOpenedTrampoline.DEFAULT.projectClosed(hook);
422
                ProjectOpenedTrampoline.DEFAULT.projectClosed(hook);
416
            } catch (RuntimeException e) {
423
            } catch (RuntimeException e) {
(-)projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java (+35 lines)
Lines 30-35 Link Here
30
import org.netbeans.junit.NbTestCase;
30
import org.netbeans.junit.NbTestCase;
31
import org.netbeans.modules.project.ui.actions.TestSupport;
31
import org.netbeans.modules.project.ui.actions.TestSupport;
32
import org.netbeans.spi.project.SubprojectProvider;
32
import org.netbeans.spi.project.SubprojectProvider;
33
import org.netbeans.spi.project.ui.ProjectOpenedHook;
33
import org.openide.filesystems.FileObject;
34
import org.openide.filesystems.FileObject;
34
import org.openide.filesystems.FileStateInvalidException;
35
import org.openide.filesystems.FileStateInvalidException;
35
import org.openide.filesystems.FileUtil;
36
import org.openide.filesystems.FileUtil;
Lines 156-161 Link Here
156
        assertFalse ("Project2 is closed.", OpenProjectList.getDefault ().isOpen (project2));
157
        assertFalse ("Project2 is closed.", OpenProjectList.getDefault ().isOpen (project2));
157
    }
158
    }
158
    
159
    
160
    public void testProjectOpenedClosed() throws Exception {
161
        ((TestSupport.TestProject) project1).setLookup(Lookups.fixed(new Object[] {
162
            new TestProjectOpenedHookImpl(),
163
            new TestProjectOpenedHookImpl(),
164
        }));
165
        
166
        TestProjectOpenedHookImpl.opened = 0;
167
        TestProjectOpenedHookImpl.closed = 0;
168
        
169
        OpenProjectList.getDefault().open(project1);
170
        
171
        assertEquals("both open hooks were called", 2, TestProjectOpenedHookImpl.opened);
172
        assertEquals("no close hook was called", 0, TestProjectOpenedHookImpl.closed);
173
        
174
        OpenProjectList.getDefault().close(new Project[] {project1});
175
        
176
        assertEquals("both open hooks were called", 2, TestProjectOpenedHookImpl.opened);
177
        assertEquals("both close hooks were called", 2, TestProjectOpenedHookImpl.closed);
178
    }
179
    
159
    // helper code
180
    // helper code
160
181
161
    private static class MySubprojectProvider implements SubprojectProvider {
182
    private static class MySubprojectProvider implements SubprojectProvider {
Lines 224-227 Link Here
224
        }
245
        }
225
    }
246
    }
226
    
247
    
248
    private static class TestProjectOpenedHookImpl extends ProjectOpenedHook {
249
        
250
        public static int opened = 0;
251
        public static int closed = 0;
252
        
253
        protected void projectClosed() {
254
            closed++;
255
        }
256
        
257
        protected void projectOpened() {
258
            opened++;
259
        }
260
        
261
    }
227
}
262
}
(-)projectuiapi/apichanges.xml (+18 lines)
Lines 76-81 Link Here
76
76
77
    <changes>
77
    <changes>
78
        
78
        
79
        <change id="ProjectOpenedHook.fire-to-all">
80
            <api name="general"/>
81
            <summary>The <code>projectOpened</code> and <code>projectClosed</code> methods are called on
82
                     all <code>ProjectOpenedHook</code> instances in the lookup.
83
            </summary>
84
            <version major="1" minor="3"/>
85
            <date day="04" month="05" year="2005"/>
86
            <author login="jlahoda"/>
87
            <compatibility semantic="incompatible" source="compatible"/>
88
            <description>
89
                <p>
90
                    The <code>projectOpened</code> and <code>projectClosed</code> methods are called on
91
                    all <code>ProjectOpenedHook</code> instances found in a project's lookup.
92
                </p>
93
            </description>
94
            <issue number="57025" />
95
        </change>
96
        
79
        <change id="OpenProjects.open-close">
97
        <change id="OpenProjects.open-close">
80
            <api name="general"/>
98
            <api name="general"/>
81
            <summary>Added open and close methods into <code>OpenProjects</code> class</summary>
99
            <summary>Added open and close methods into <code>OpenProjects</code> class</summary>
(-)projectuiapi/src/org/netbeans/spi/project/ui/ProjectOpenedHook.java (+1 lines)
Lines 36-41 Link Here
36
 * </p>
36
 * </p>
37
 * <p>
37
 * <p>
38
 * An instance should be placed into a project's lookup to register it.
38
 * An instance should be placed into a project's lookup to register it.
39
 * All instances found in the lookup will be notified on project open and close.
39
 * </p>
40
 * </p>
40
 * @see org.netbeans.api.project.Project#getLookup
41
 * @see org.netbeans.api.project.Project#getLookup
41
 * @author Jesse Glick
42
 * @author Jesse Glick

Return to bug 57025