Index: projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java
===================================================================
RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java,v
retrieving revision 1.31
diff -u -r1.31 OpenProjectList.java
--- projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java 12 Apr 2005 12:27:08 -0000 1.31
+++ projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java 4 May 2005 14:03:23 -0000
@@ -45,6 +45,7 @@
import org.openide.filesystems.URLMapper;
import org.openide.loaders.DataObject;
import org.openide.loaders.DataObjectNotFoundException;
+import org.openide.util.Lookup;
/**
* List of projects open in the GUI.
@@ -398,8 +399,11 @@
private static void notifyOpened(Project p) {
- ProjectOpenedHook hook = (ProjectOpenedHook)p.getLookup().lookup(ProjectOpenedHook.class);
- if (hook != null) {
+ Lookup.Result result = p.getLookup().lookup(new Lookup.Template(ProjectOpenedHook.class));
+
+ for (Iterator i = result.allInstances().iterator(); i.hasNext(); ) {
+ ProjectOpenedHook hook = (ProjectOpenedHook) i.next();
+
try {
ProjectOpenedTrampoline.DEFAULT.projectOpened(hook);
} catch (RuntimeException e) {
@@ -409,8 +413,11 @@
}
private static void notifyClosed(Project p) {
- ProjectOpenedHook hook = (ProjectOpenedHook)p.getLookup().lookup(ProjectOpenedHook.class);
- if (hook != null) {
+ Lookup.Result result = p.getLookup().lookup(new Lookup.Template(ProjectOpenedHook.class));
+
+ for (Iterator i = result.allInstances().iterator(); i.hasNext(); ) {
+ ProjectOpenedHook hook = (ProjectOpenedHook) i.next();
+
try {
ProjectOpenedTrampoline.DEFAULT.projectClosed(hook);
} catch (RuntimeException e) {
Index: projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java
===================================================================
RCS file: /cvs/projects/projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java,v
retrieving revision 1.3
diff -u -r1.3 OpenProjectListTest.java
--- projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java 5 Apr 2005 07:53:58 -0000 1.3
+++ projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java 4 May 2005 14:03:23 -0000
@@ -30,6 +30,7 @@
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.project.ui.actions.TestSupport;
import org.netbeans.spi.project.SubprojectProvider;
+import org.netbeans.spi.project.ui.ProjectOpenedHook;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileStateInvalidException;
import org.openide.filesystems.FileUtil;
@@ -156,6 +157,26 @@
assertFalse ("Project2 is closed.", OpenProjectList.getDefault ().isOpen (project2));
}
+ public void testProjectOpenedClosed() throws Exception {
+ ((TestSupport.TestProject) project1).setLookup(Lookups.fixed(new Object[] {
+ new TestProjectOpenedHookImpl(),
+ new TestProjectOpenedHookImpl(),
+ }));
+
+ TestProjectOpenedHookImpl.opened = 0;
+ TestProjectOpenedHookImpl.closed = 0;
+
+ OpenProjectList.getDefault().open(project1);
+
+ assertEquals("both open hooks were called", 2, TestProjectOpenedHookImpl.opened);
+ assertEquals("no close hook was called", 0, TestProjectOpenedHookImpl.closed);
+
+ OpenProjectList.getDefault().close(new Project[] {project1});
+
+ assertEquals("both open hooks were called", 2, TestProjectOpenedHookImpl.opened);
+ assertEquals("both close hooks were called", 2, TestProjectOpenedHookImpl.closed);
+ }
+
// helper code
private static class MySubprojectProvider implements SubprojectProvider {
@@ -224,4 +245,18 @@
}
}
+ private static class TestProjectOpenedHookImpl extends ProjectOpenedHook {
+
+ public static int opened = 0;
+ public static int closed = 0;
+
+ protected void projectClosed() {
+ closed++;
+ }
+
+ protected void projectOpened() {
+ opened++;
+ }
+
+ }
}
Index: projectuiapi/apichanges.xml
===================================================================
RCS file: /cvs/projects/projectuiapi/apichanges.xml,v
retrieving revision 1.7
diff -u -r1.7 apichanges.xml
--- projectuiapi/apichanges.xml 22 Jan 2005 22:10:50 -0000 1.7
+++ projectuiapi/apichanges.xml 4 May 2005 14:03:23 -0000
@@ -76,6 +76,24 @@
+ The projectOpened
and projectClosed
methods are called on
+ all ProjectOpenedHook
instances in the lookup.
+ projectOpened
and projectClosed
methods are called on
+ all ProjectOpenedHook
instances found in a project's lookup.
+ OpenProjects
class
* An instance should be placed into a project's lookup to register it. + * All instances found in the lookup will be notified on project open and close. *
* @see org.netbeans.api.project.Project#getLookup * @author Jesse Glick