Index: projects/projectuiapi/apichanges.xml =================================================================== RCS file: /cvs/projects/projectuiapi/apichanges.xml,v retrieving revision 1.31 diff -u -r1.31 apichanges.xml --- projects/projectuiapi/apichanges.xml 12 Apr 2007 15:45:00 -0000 1.31 +++ projects/projectuiapi/apichanges.xml 3 May 2007 12:04:18 -0000 @@ -81,6 +81,21 @@ + + + Add LookupMergerimplementation for ProjectOpenedHook + + + + + + New method UILookupMergerSupport.createProjectOpenHookMerger(ProjectOpenedHook) creates an instance of + LookupMerger that ensures that from the ProjectOpenedHook instances in project's lookup, the + project's own is always called first. + + + + Adding template attribute project.license Index: projects/projectuiapi/nbproject/project.properties =================================================================== RCS file: /cvs/projects/projectuiapi/nbproject/project.properties,v retrieving revision 1.31 diff -u -r1.31 project.properties --- projects/projectuiapi/nbproject/project.properties 26 Mar 2007 20:55:50 -0000 1.31 +++ projects/projectuiapi/nbproject/project.properties 3 May 2007 12:04:18 -0000 @@ -17,7 +17,7 @@ javac.compilerargs=-Xlint -Xlint:-serial javac.source=1.5 -spec.version.base=1.23.0 +spec.version.base=1.24.0 is.autoload=true javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml Index: projects/projectuiapi/src/org/netbeans/spi/project/ui/support/UILookupMergerSupport.java =================================================================== RCS file: /cvs/projects/projectuiapi/src/org/netbeans/spi/project/ui/support/UILookupMergerSupport.java,v retrieving revision 1.2 diff -u -r1.2 UILookupMergerSupport.java --- projects/projectuiapi/src/org/netbeans/spi/project/ui/support/UILookupMergerSupport.java 5 Oct 2006 18:22:56 -0000 1.2 +++ projects/projectuiapi/src/org/netbeans/spi/project/ui/support/UILookupMergerSupport.java 3 May 2007 12:04:18 -0000 @@ -23,8 +23,10 @@ import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; +import org.netbeans.modules.project.uiapi.ProjectOpenedTrampoline; import org.netbeans.spi.project.LookupMerger; import org.netbeans.spi.project.ui.PrivilegedTemplates; +import org.netbeans.spi.project.ui.ProjectOpenedHook; import org.netbeans.spi.project.ui.RecommendedTemplates; import org.openide.util.Lookup; @@ -59,6 +61,19 @@ return new PrivilegedMerger(); } + /** + * Create a {@link org.netbeans.spi.project.LookupMerger} instance + * for {@link org.netbeans.spi.project.ui.ProjectOpenedHook}. The merger makes sure all registered + * ProjectOpenedHook instances are called and that the default instance is called first. + * @param defaultInstance - the default {@link org.netbeans.spi.project.ui.ProjectOpenedHook} instance or null if + * a default privileged instance is not required. + * @return instance to include in project lookup + * @since org.netbeans.modules.projectuiapi 1.24 + */ + public static LookupMerger createProjectOpenHookMerger(ProjectOpenedHook defaultInstance) { + return new OpenMerger(defaultInstance); + } + private static class PrivilegedMerger implements LookupMerger { public Class getMergeableClass() { return PrivilegedTemplates.class; @@ -80,6 +95,22 @@ } } + private static class OpenMerger implements LookupMerger { + private ProjectOpenedHook defaultInstance; + + OpenMerger(ProjectOpenedHook def) { + defaultInstance = def; + } + public Class getMergeableClass() { + return ProjectOpenedHook.class; + } + + public ProjectOpenedHook merge(Lookup lookup) { + return new OpenHookImpl(defaultInstance, lookup); + } + + } + private static class PrivilegedTemplatesImpl implements PrivilegedTemplates { private Lookup lkp; @@ -111,6 +142,44 @@ templates.addAll(Arrays.asList(pt.getRecommendedTypes())); } return templates.toArray(new String[templates.size()]); + } + + } + + private static class OpenHookImpl extends ProjectOpenedHook { + + private ProjectOpenedHook defaultInstance; + private Lookup lkp; + + OpenHookImpl(ProjectOpenedHook def, Lookup lkp) { + defaultInstance = def; + this.lkp = lkp; + //shall we listen on ProjectOpenedHook instance changes in lookup and + // call close on the disappearing ones? + } + + protected void projectOpened() { + if (defaultInstance != null) { + ProjectOpenedTrampoline.DEFAULT.projectOpened(defaultInstance); + } + for (ProjectOpenedHook poh : lkp.lookupAll(ProjectOpenedHook.class)) { + // just to make sure.. + if (poh != defaultInstance) { + ProjectOpenedTrampoline.DEFAULT.projectOpened(poh); + } + } + } + + protected void projectClosed() { + if (defaultInstance != null) { + ProjectOpenedTrampoline.DEFAULT.projectClosed(defaultInstance); + } + for (ProjectOpenedHook poh : lkp.lookupAll(ProjectOpenedHook.class)) { + // just to make sure.. + if (poh != defaultInstance) { + ProjectOpenedTrampoline.DEFAULT.projectClosed(poh); + } + } } }