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.35 diff -u -r1.35 OpenProjectList.java --- projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java 20 Jul 2005 21:12:05 -0000 1.35 +++ projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java 25 Aug 2005 09:01:02 -0000 @@ -254,6 +254,10 @@ public void setMainProject( Project mainProject ) { synchronized ( this ) { + if (!openProjects.contains(mainProject)) { + throw new IllegalArgumentException("Project " + ProjectUtils.getInformation(mainProject).getDisplayName() + " is not open and cannot be set as main."); + } + this.mainProject = mainProject; saveMainProject( mainProject ); } Index: projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java,v retrieving revision 1.4 diff -u -r1.4 OpenProjectsTrampolineImpl.java --- projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java 15 Dec 2004 10:36:28 -0000 1.4 +++ projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java 25 Aug 2005 09:01:02 -0000 @@ -62,4 +62,12 @@ } } + public Project getMainProject() { + return OpenProjectList.getDefault().getMainProject(); + } + + public void setMainProject(Project project) { + OpenProjectList.getDefault().setMainProject(project); + } + } 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.5 diff -u -r1.5 OpenProjectListTest.java --- projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java 11 Jul 2005 12:18:11 -0000 1.5 +++ projectui/test/unit/src/org/netbeans/modules/project/ui/OpenProjectListTest.java 25 Aug 2005 09:01:02 -0000 @@ -213,6 +213,69 @@ assertFalse("project2 is not in recent projects list", OpenProjectList.getDefault().getRecentProjects().contains(project2)); } + public void testMainProject() throws Exception { + FileObject workDir = FileUtil.toFileObject (getWorkDir ()); + + FileObject p1 = workDir.createFolder("p1"); + FileObject p1TestProject = p1.createFolder("testproject"); + + Project project1 = ProjectManager.getDefault().findProject(p1); + + assertNotNull("project1 is recognized", project1); + + FileObject p2 = workDir.createFolder("p2"); + FileObject p2TestProject = p2.createFolder("testproject"); + + Project project2 = ProjectManager.getDefault().findProject(p2); + + assertNotNull("project2 is recognized", project2); + + FileObject p3 = workDir.createFolder("p3"); + FileObject p3TestProject = p3.createFolder("testproject"); + + Project project3 = ProjectManager.getDefault().findProject(p3); + + assertNotNull("project3 is recognized", project3); + + assertNull("no main project set when OPL is empty", OpenProjectList.getDefault().getMainProject()); + + OpenProjectList.getDefault().open(project1); + + assertNull("open project does not change main project", OpenProjectList.getDefault().getMainProject()); + + OpenProjectList.getDefault().setMainProject(project1); + + assertTrue("main project correctly set", OpenProjectList.getDefault().getMainProject() == project1); + + OpenProjectList.getDefault().open(project2); + + assertTrue("open project does not change main project", OpenProjectList.getDefault().getMainProject() == project1); + + OpenProjectList.getDefault().close(new Project[] {project1}); + + assertNull("no main project set when main project is closed", OpenProjectList.getDefault().getMainProject()); + + boolean exceptionThrown = false; + + try { + OpenProjectList.getDefault().setMainProject(project3); + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + + assertTrue("IAE thrown when trying to set main project that is not opened", exceptionThrown); + + //the same for a previously opened project: + exceptionThrown = false; + + try { + OpenProjectList.getDefault().setMainProject(project1); + } catch (IllegalArgumentException e) { + exceptionThrown = true; + } + + assertTrue("IAE thrown when trying to set main project that is not opened", exceptionThrown); + } // helper code private static class MySubprojectProvider implements SubprojectProvider { Index: projectuiapi/apichanges.xml =================================================================== RCS file: /cvs/projects/projectuiapi/apichanges.xml,v retrieving revision 1.18 diff -u -r1.18 apichanges.xml --- projectuiapi/apichanges.xml 22 Aug 2005 20:47:45 -0000 1.18 +++ projectuiapi/apichanges.xml 25 Aug 2005 09:01:02 -0000 @@ -76,6 +76,20 @@ + + + Ability to get and set main project + + + + + + + Added getMainProject and setMainProject methods to OpenProjects. + + + + Project Delete/Copy/Rename/Move Support Added, Support for Default Project Delete/Copy/Rename/Move Added Index: projectuiapi/nbproject/project.properties =================================================================== RCS file: /cvs/projects/projectuiapi/nbproject/project.properties,v retrieving revision 1.12 diff -u -r1.12 project.properties --- projectuiapi/nbproject/project.properties 22 Aug 2005 20:47:45 -0000 1.12 +++ projectuiapi/nbproject/project.properties 25 Aug 2005 09:01:02 -0000 @@ -9,7 +9,7 @@ # Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun # Microsystems, Inc. All Rights Reserved. -spec.version.base=1.10.0 +spec.version.base=1.11.0 is.autoload=true javadoc.title=Project UI API javadoc.arch=${basedir}/arch.xml Index: projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java =================================================================== RCS file: /cvs/projects/projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java,v retrieving revision 1.5 diff -u -r1.5 OpenProjects.java --- projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java 15 Dec 2004 10:36:29 -0000 1.5 +++ projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java 25 Aug 2005 09:01:02 -0000 @@ -102,6 +102,39 @@ trampoline.closeAPI (projects); } + /**Retrieves the current main project set in the IDE. + * + *
+ *

Warning: the set of usecases that require invoking this method is + * limited. {@link org.netbeans.spi.project.ui.support.MainProjectSensitiveActions} should + * be used in favour of this method if possible. In particular, this method should not + * be used to let user choose if an action should be run over main or current project.

+ *
+ * + * @return the current main project or null if none + * @since 1.11 + */ + public Project getMainProject() { + return trampoline.getMainProject(); + } + + /**Sets the main project. + * + *
+ *

Warning: the set of usecases that require invoking this method is + * very limited and should be generally avoided if possible. In particular, this method + * should not be used to set project created by the New Project Wizard as main.

+ *
+ * + * @param project project to set as main project (must be open), or + * null to set no project as main. + * @throws IllegalArgumentException if the project is not opened. + * @since 1.11 + */ + public void setMainProject(Project project) throws IllegalArgumentException { + trampoline.setMainProject(project); + } + /** * Adds a listener to changes in the set of open projects. * As this class is a singleton and is not subject to garbage collection, Index: projectuiapi/src/org/netbeans/modules/project/uiapi/OpenProjectsTrampoline.java =================================================================== RCS file: /cvs/projects/projectuiapi/src/org/netbeans/modules/project/uiapi/OpenProjectsTrampoline.java,v retrieving revision 1.3 diff -u -r1.3 OpenProjectsTrampoline.java --- projectuiapi/src/org/netbeans/modules/project/uiapi/OpenProjectsTrampoline.java 15 Dec 2004 10:36:29 -0000 1.3 +++ projectuiapi/src/org/netbeans/modules/project/uiapi/OpenProjectsTrampoline.java 25 Aug 2005 09:01:02 -0000 @@ -32,4 +32,8 @@ public void removePropertyChangeListenerAPI( PropertyChangeListener listener ); + public Project getMainProject(); + + public void setMainProject(Project project); + }