Index: java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanel.java =================================================================== RCS file: /cvs/java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanel.java,v --- java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanel.java 23 Sep 2006 00:37:44 -0000 1.30 +++ java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanel.java 30 May 2007 06:54:22 -0000 @@ -188,6 +188,7 @@ if ( gui != null ) { // Try to preselect a folder + //TODO preselection ought to work on non-existing SGs as well. FileObject preselectedFolder = Templates.getTargetFolder( wizard ); // Init values gui.initValues( Templates.getTemplate( wizard ), preselectedFolder ); @@ -372,6 +373,9 @@ private static boolean existFileName(FileObject targetFolder, String relFileName) { boolean result = false; File fileForTargetFolder = FileUtil.toFile(targetFolder); + if (fileForTargetFolder == null) { + return false; + } if (fileForTargetFolder.exists()) { result = new File (fileForTargetFolder, relFileName).exists(); } else { Index: java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanelGUI.java =================================================================== RCS file: /cvs/java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanelGUI.java,v --- java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanelGUI.java 2 Mar 2007 03:34:45 -0000 1.32 +++ java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanelGUI.java 30 May 2007 06:54:22 -0000 @@ -36,6 +36,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentListener; +import org.netbeans.api.project.PotentialSourceGroup; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; @@ -43,6 +44,7 @@ import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.awt.Mnemonics; +import org.openide.filesystems.URLMapper; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.util.NbBundle; @@ -190,7 +192,13 @@ } public FileObject getRootFolder() { - return ((SourceGroup) rootComboBox.getSelectedItem()).getRootFolder(); + SourceGroup sg = (SourceGroup) rootComboBox.getSelectedItem(); + if (sg instanceof PotentialSourceGroup) { + File file = new File(((PotentialSourceGroup)sg).getPotencialRootFolder()); + file.mkdirs(); + return FileUtil.toFileObject(file); + } + return sg.getRootFolder(); } public String getPackageFileName() { @@ -477,7 +485,6 @@ private void updateText() { SourceGroup g = (SourceGroup) rootComboBox.getSelectedItem(); - FileObject rootFolder = g.getRootFolder(); String packageName = getPackageFileName(); String documentName = documentNameTextField.getText().trim(); if ( type == NewJavaFileWizardIterator.TYPE_PACKAGE ) { @@ -486,7 +493,14 @@ else if ( documentName.length() > 0 ) { documentName = documentName + expectedExtension; } - String createdFileName = FileUtil.getFileDisplayName( rootFolder ) + + String start = ""; + if (g instanceof PotentialSourceGroup) { + start = ((PotentialSourceGroup)g).getPotencialRootFolder().getPath(); + } else { + FileObject rootFolder = g.getRootFolder(); + start = FileUtil.getFileDisplayName( rootFolder ); + } + String createdFileName = start + ( packageName.startsWith("/") || packageName.startsWith( File.separator ) ? "" : "/" ) + // NOI18N packageName + ( packageName.endsWith("/") || packageName.endsWith( File.separator ) || packageName.length() == 0 ? "" : "/" ) + // NOI18N @@ -497,6 +511,10 @@ private SourceGroup getPreselectedGroup(FileObject folder) { for(int i = 0; folder != null && i < groups.length; i++) { + if (groups[i] instanceof PotentialSourceGroup) { + // not a parent for sure. + continue; + } FileObject root = groups[i].getRootFolder(); if (root.equals(folder) || FileUtil.isParentOf(root, folder)) { return groups[i]; Index: java/project/src/org/netbeans/spi/java/project/support/ui/PackageView.java =================================================================== RCS file: /cvs/java/project/src/org/netbeans/spi/java/project/support/ui/PackageView.java,v --- java/project/src/org/netbeans/spi/java/project/support/ui/PackageView.java 22 Mar 2007 20:50:11 -0000 1.22 +++ java/project/src/org/netbeans/spi/java/project/support/ui/PackageView.java 30 May 2007 06:54:23 -0000 @@ -41,6 +41,7 @@ import javax.swing.plaf.UIResource; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandleFactory; +import org.netbeans.api.project.PotentialSourceGroup; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.queries.VisibilityQuery; import org.netbeans.modules.java.project.PackageDisplayUtils; @@ -50,6 +51,7 @@ import org.openide.nodes.AbstractNode; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; +import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.util.WeakListeners; @@ -117,7 +119,9 @@ public static ComboBoxModel createListView(SourceGroup group) { SortedSet data = new TreeSet(); - findNonExcludedPackages(null, data, group.getRootFolder(), group, false); + if (! (group instanceof PotentialSourceGroup)) { + findNonExcludedPackages(null, data, group.getRootFolder(), group, false); + } return new DefaultComboBoxModel(data.toArray(new PackageItem[data.size()])); } @@ -257,6 +261,10 @@ }); } } + } + + public HelpCtx getHelpCtx() { + return new HelpCtx(PackageView.class); } private static Node getOriginalNode(SourceGroup group) { Index: java/source/src/org/netbeans/modules/java/source/tasklist/ErrorAnnotator.java =================================================================== RCS file: /cvs/java/source/src/org/netbeans/modules/java/source/tasklist/ErrorAnnotator.java,v --- java/source/src/org/netbeans/modules/java/source/tasklist/ErrorAnnotator.java 24 Apr 2007 05:29:50 -0000 1.3 +++ java/source/src/org/netbeans/modules/java/source/tasklist/ErrorAnnotator.java 30 May 2007 06:54:25 -0000 @@ -30,6 +30,7 @@ import javax.swing.Action; import org.netbeans.api.fileinfo.NonRecursiveFolder; import org.netbeans.api.project.FileOwnerQuery; +import org.netbeans.api.project.PotentialSourceGroup; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; @@ -90,6 +91,9 @@ if (p != null) { for (SourceGroup sg : ProjectUtils.getSources(p).getSourceGroups("java"/*JavaProjectConstants.SOURCES_TYPE_JAVA*/)) { + if (sg instanceof PotentialSourceGroup) { + continue; + } FileObject sgRoot = sg.getRootFolder(); if ((FileUtil.isParentOf(f, sgRoot) || f == sgRoot) && TaskCache.getDefault().isInError(sgRoot, true)) { Index: projects/projectapi/src/org/netbeans/api/project/PotentialSourceGroup.java =================================================================== RCS file: projects/projectapi/src/org/netbeans/api/project/PotentialSourceGroup.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ projects/projectapi/src/org/netbeans/api/project/PotentialSourceGroup.java 30 May 2007 06:54:26 -0000 @@ -0,0 +1,31 @@ +/* + * The contents of this file are subject to the terms of the Common Development + * and Distribution License (the License). You may not use this file except in + * compliance with the License. + * + * You can obtain a copy of the License at http://www.netbeans.org/cddl.html + * or http://www.netbeans.org/cddl.txt. + * + * When distributing Covered Code, include this CDDL Header Notice in each file + * and include the License file at http://www.netbeans.org/cddl.txt. + * If applicable, add the following below the CDDL Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * The Original Software is NetBeans. The Initial Developer of the Original + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun + * Microsystems, Inc. All Rights Reserved. + */ +package org.netbeans.api.project; + +import java.net.URI; + +/** + * + * @author mkleint + */ +public interface PotentialSourceGroup extends SourceGroup { + + URI getPotencialRootFolder(); + +}