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

(-)a/apisupport.refactoring/src/org/netbeans/modules/apisupport/hints/TemplateHinter.java (+1 lines)
Lines 151-156 Link Here
151
                        if (category != null) {
151
                        if (category != null) {
152
                            params.put("category", category.split(", ?"));
152
                            params.put("category", category.split(", ?"));
153
                        }
153
                        }
154
                        params.put("requireProject", file.getAttribute("requireProject"));
154
                        ModifiersTree nue = ctx.addAnnotation(wc, modifiers, TemplateRegistration.class.getName(), TemplateRegistrations.class.getName(), params);
155
                        ModifiersTree nue = ctx.addAnnotation(wc, modifiers, TemplateRegistration.class.getName(), TemplateRegistrations.class.getName(), params);
155
                        ctx.delete(file);
156
                        ctx.delete(file);
156
                        wc.rewrite(modifiers, GeneratorUtilities.get(wc).importFQNs(nue));
157
                        wc.rewrite(modifiers, GeneratorUtilities.get(wc).importFQNs(nue));
(-)a/css.editor/src/org/netbeans/modules/css/resources/layer.xml (+1 lines)
Lines 175-180 Link Here
175
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/css/resources/style_sheet_16.png"/>
175
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/css/resources/style_sheet_16.png"/>
176
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.css.resources.Bundle"/>
176
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.css.resources.Bundle"/>
177
                <attr name="templateCategory" stringvalue="simple-files"/>
177
                <attr name="templateCategory" stringvalue="simple-files"/>
178
                <attr name="requireProject" boolvalue="false"/>
178
            </file>
179
            </file>
179
        </folder>
180
        </folder>
180
    </folder>
181
    </folder>
(-)a/favorites/src/org/netbeans/modules/favorites/resources/layer.xml (+3 lines)
Lines 62-67 Link Here
62
                <attr name="template" boolvalue="true"/>
62
                <attr name="template" boolvalue="true"/>
63
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
63
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
64
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/templatesFolder.html"/>
64
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/templatesFolder.html"/>
65
                <attr name="requireProject" boolvalue="false"/>
65
            </folder>
66
            </folder>
66
            <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
67
            <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
67
            <file name="file">
68
            <file name="file">
Lines 72-77 Link Here
72
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/newFile.png"/>
73
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/newFile.png"/>
73
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/templatesFile.html"/>
74
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/favorites/resources/templatesFile.html"/>
74
                <attr name="templateCategory" stringvalue="simple-files"/>
75
                <attr name="templateCategory" stringvalue="simple-files"/>
76
                <attr name="requireProject" boolvalue="false"/>
75
            </file>
77
            </file>
76
        </folder>
78
        </folder>
77
        <!-- file with default template for properties -->
79
        <!-- file with default template for properties -->
Lines 81-86 Link Here
81
            <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
83
            <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.favorites.Bundle"/>
82
	    <file name="User.properties" url="userprop.txt">
84
	    <file name="User.properties" url="userprop.txt">
83
                <attr name="template" boolvalue="true"/>
85
                <attr name="template" boolvalue="true"/>
86
                <attr name="requireProject" boolvalue="false"/>
84
            </file>
87
            </file>
85
	</folder>
88
	</folder>
86
    </folder>
89
    </folder>
(-)a/html/src/org/netbeans/modules/html/package-info.java (-2 / +2 lines)
Lines 37-44 Link Here
37
 */
37
 */
38
38
39
@TemplateRegistrations({
39
@TemplateRegistrations({
40
    @TemplateRegistration(folder="Other", position=100, displayName="#Templates/Other/html.html", content="templates/html.html", scriptEngine="freemarker", category="simple-files", description="TemplateHelp.html"),
40
    @TemplateRegistration(folder="Other", position=100, displayName="#Templates/Other/html.html", content="templates/html.html", scriptEngine="freemarker", category="simple-files", description="TemplateHelp.html", requireProject=false),
41
    @TemplateRegistration(folder="Other", position=200, displayName="#Templates/Other/xhtml.xhtml", content="templates/xhtml.xhtml", scriptEngine="freemarker", category="simple-files", description="XhtmlTemplateHelp.html")
41
    @TemplateRegistration(folder="Other", position=200, displayName="#Templates/Other/xhtml.xhtml", content="templates/xhtml.xhtml", scriptEngine="freemarker", category="simple-files", description="XhtmlTemplateHelp.html", requireProject=false)
42
})
42
})
43
package org.netbeans.modules.html;
43
package org.netbeans.modules.html;
44
44
(-)a/javascript2.editor/src/org/netbeans/modules/javascript2/editor/resources/layer.xml (+2 lines)
Lines 415-420 Link Here
415
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javascript2.editor.resources.Bundle"/>
415
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javascript2.editor.resources.Bundle"/>
416
                <attr name="templateCategory" stringvalue="simple-files"/>
416
                <attr name="templateCategory" stringvalue="simple-files"/>
417
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javascript2/editor/resources/javascript.html"/>
417
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javascript2/editor/resources/javascript.html"/>
418
                <attr name="requireProject" boolvalue="false"/>
418
            </file>
419
            </file>
419
            <file name="json.json" url="nbresloc:/org/netbeans/modules/javascript2/editor/resources/jsontemplate.json">
420
            <file name="json.json" url="nbresloc:/org/netbeans/modules/javascript2/editor/resources/jsontemplate.json">
420
                <attr name="position" intvalue="450"/>
421
                <attr name="position" intvalue="450"/>
Lines 423-428 Link Here
423
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javascript2.editor.resources.Bundle"/>
424
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.javascript2.editor.resources.Bundle"/>
424
                <attr name="templateCategory" stringvalue="simple-files"/>
425
                <attr name="templateCategory" stringvalue="simple-files"/>
425
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javascript2/editor/resources/json.html"/>
426
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/javascript2/editor/resources/json.html"/>
427
                <attr name="requireProject" boolvalue="false"/>
426
            </file>
428
            </file>
427
        </folder>
429
        </folder>
428
    </folder>
430
    </folder>
(-)a/openide.loaders/src/org/netbeans/api/templates/TemplateRegistration.java (+4 lines)
Lines 126-129 Link Here
126
     */
126
     */
127
    String[] category() default {};
127
    String[] category() default {};
128
128
129
    /**
130
     * Set to false if the template can be instantiated without a project.
131
     */
132
    boolean requireProject() default true;
129
}
133
}
(-)a/openide.loaders/src/org/netbeans/modules/templates/TemplateProcessor.java (+1 lines)
Lines 146-151 Link Here
146
            }
146
            }
147
            f.stringvalue("templateCategory", sb.toString());
147
            f.stringvalue("templateCategory", sb.toString());
148
        }
148
        }
149
        f.boolvalue("requireProject", t.requireProject());
149
        f.write();
150
        f.write();
150
    }
151
    }
151
152
(-)a/projectapi/src/org/netbeans/api/project/ProjectUtils.java (-6 / +7 lines)
Lines 60-65 Link Here
60
import javax.swing.Icon;
60
import javax.swing.Icon;
61
import javax.swing.event.ChangeListener;
61
import javax.swing.event.ChangeListener;
62
import org.netbeans.api.annotations.common.NonNull;
62
import org.netbeans.api.annotations.common.NonNull;
63
import org.netbeans.api.annotations.common.NullAllowed;
63
import org.netbeans.modules.projectapi.AuxiliaryConfigBasedPreferencesProvider;
64
import org.netbeans.modules.projectapi.AuxiliaryConfigBasedPreferencesProvider;
64
import org.netbeans.modules.projectapi.AuxiliaryConfigImpl;
65
import org.netbeans.modules.projectapi.AuxiliaryConfigImpl;
65
import org.netbeans.spi.project.AuxiliaryConfiguration;
66
import org.netbeans.spi.project.AuxiliaryConfiguration;
Lines 97-103 Link Here
97
     * @return some information about it
98
     * @return some information about it
98
     * @see Project#getLookup
99
     * @see Project#getLookup
99
     */
100
     */
100
    public static ProjectInformation getInformation(Project p) {
101
    public static ProjectInformation getInformation(@NonNull Project p) {
101
        Lookup l = p.getLookup();
102
        Lookup l = p.getLookup();
102
        ProjectInformation pi = l.lookup(ProjectInformation.class);
103
        ProjectInformation pi = l.lookup(ProjectInformation.class);
103
        return new AnnotateIconProxyProjectInformation(pi != null ? pi : new BasicInformation(p));
104
        return new AnnotateIconProxyProjectInformation(pi != null ? pi : new BasicInformation(p));
Lines 112-118 Link Here
112
     * @return a list of sources for it
113
     * @return a list of sources for it
113
     * @see Project#getLookup
114
     * @see Project#getLookup
114
     */
115
     */
115
    public static Sources getSources(Project p) {
116
    public static Sources getSources(@NonNull Project p) {
116
        Lookup l = p.getLookup();
117
        Lookup l = p.getLookup();
117
        Sources s = l.lookup(Sources.class);
118
        Sources s = l.lookup(Sources.class);
118
        if (s != null) {
119
        if (s != null) {
Lines 181-187 Link Here
181
     * @return {@link Preferences} for the given project
182
     * @return {@link Preferences} for the given project
182
     * @since 1.16
183
     * @since 1.16
183
     */
184
     */
184
    public static Preferences getPreferences(Project project, Class clazz, boolean shared) {
185
    public static Preferences getPreferences(@NonNull Project project, @NonNull Class clazz, boolean shared) {
185
        Parameters.notNull("project", project);
186
        Parameters.notNull("project", project);
186
        Parameters.notNull("clazz", clazz);
187
        Parameters.notNull("clazz", clazz);
187
        
188
        
Lines 195-201 Link Here
195
     * @param master the original master project (for use with candidate param)
196
     * @param master the original master project (for use with candidate param)
196
     * @param candidate a candidate added subproject for master, or null
197
     * @param candidate a candidate added subproject for master, or null
197
     */
198
     */
198
    private static boolean visit(Map<Project,Boolean> encountered, Project curr, Project master, Project candidate) {
199
    private static boolean visit(@NonNull Map<Project,Boolean> encountered, @NonNull Project curr, Project master, @NullAllowed Project candidate) {
199
        if (encountered.containsKey(curr)) {
200
        if (encountered.containsKey(curr)) {
200
            if (encountered.get(curr)) {
201
            if (encountered.get(curr)) {
201
                return false;
202
                return false;
Lines 376-382 Link Here
376
     * @return an auxiliary configuration handle
377
     * @return an auxiliary configuration handle
377
     * @since org.netbeans.modules.projectapi/1 1.17
378
     * @since org.netbeans.modules.projectapi/1 1.17
378
     */
379
     */
379
    public static AuxiliaryConfiguration getAuxiliaryConfiguration(Project project) {
380
    public static AuxiliaryConfiguration getAuxiliaryConfiguration(@NonNull Project project) {
380
        Parameters.notNull("project", project);
381
        Parameters.notNull("project", project);
381
        return new AuxiliaryConfigImpl(project);
382
        return new AuxiliaryConfigImpl(project);
382
    }
383
    }
Lines 395-401 Link Here
395
     * @throws IOException if no such directory could be created
396
     * @throws IOException if no such directory could be created
396
     * @since org.netbeans.modules.projectapi/1 1.26
397
     * @since org.netbeans.modules.projectapi/1 1.26
397
     */
398
     */
398
    public static FileObject getCacheDirectory(Project project, Class<?> owner) throws IOException {
399
    public static FileObject getCacheDirectory(@NonNull Project project, @NonNull Class<?> owner) throws IOException {
399
        FileObject d;
400
        FileObject d;
400
        CacheDirectoryProvider cdp = project.getLookup().lookup(CacheDirectoryProvider.class);
401
        CacheDirectoryProvider cdp = project.getLookup().lookup(CacheDirectoryProvider.class);
401
        if (cdp != null) {
402
        if (cdp != null) {
(-)a/projectapi/src/org/netbeans/modules/projectapi/AuxiliaryConfigBasedPreferencesProvider.java (-1 / +2 lines)
Lines 61-66 Link Here
61
import java.util.prefs.AbstractPreferences;
61
import java.util.prefs.AbstractPreferences;
62
import java.util.prefs.BackingStoreException;
62
import java.util.prefs.BackingStoreException;
63
import java.util.prefs.Preferences;
63
import java.util.prefs.Preferences;
64
import org.netbeans.api.annotations.common.NonNull;
64
import org.netbeans.api.project.Project;
65
import org.netbeans.api.project.Project;
65
import org.netbeans.api.project.ProjectManager;
66
import org.netbeans.api.project.ProjectManager;
66
import org.netbeans.api.project.ProjectUtils;
67
import org.netbeans.api.project.ProjectUtils;
Lines 323-329 Link Here
323
        modified = true;
324
        modified = true;
324
    }
325
    }
325
    
326
    
326
    public static String findCNBForClass(Class<?> cls) {
327
    public static String findCNBForClass(@NonNull Class<?> cls) {
327
        String absolutePath;
328
        String absolutePath;
328
        ModuleInfo owner = Modules.getDefault().ownerOf(cls);
329
        ModuleInfo owner = Modules.getDefault().ownerOf(cls);
329
        if (owner != null) {
330
        if (owner != null) {
(-)a/projectui/src/org/netbeans/modules/project/ui/NewFileWizard.java (-4 / +19 lines)
Lines 47-54 Link Here
47
import java.beans.PropertyChangeListener;
47
import java.beans.PropertyChangeListener;
48
import java.text.MessageFormat;
48
import java.text.MessageFormat;
49
import javax.swing.JComponent;
49
import javax.swing.JComponent;
50
import org.netbeans.api.annotations.common.CheckForNull;
51
import org.netbeans.api.annotations.common.NullAllowed;
50
import org.netbeans.api.project.Project;
52
import org.netbeans.api.project.Project;
51
import org.netbeans.api.project.ProjectUtils;
53
import org.netbeans.api.project.ProjectUtils;
54
import org.netbeans.api.project.SourceGroup;
52
import org.netbeans.api.project.Sources;
55
import org.netbeans.api.project.Sources;
53
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
56
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
54
import org.netbeans.spi.project.ui.templates.support.Templates;
57
import org.netbeans.spi.project.ui.templates.support.Templates;
Lines 62-79 Link Here
62
65
63
public final class NewFileWizard extends TemplateWizard {
66
public final class NewFileWizard extends TemplateWizard {
64
67
68
    @NullAllowed
65
    private Project currP;
69
    private Project currP;
66
    private MessageFormat format;
70
    private MessageFormat format;
67
    // private String[] recommendedTypes;
71
    // private String[] recommendedTypes;
72
73
    @CheckForNull
68
    private Project getCurrentProject() {
74
    private Project getCurrentProject() {
69
        return currP;
75
        return currP;
70
    }
76
    }
71
77
72
    private void setCurrentProject(Project p) {
78
    private void setCurrentProject(@NullAllowed Project p) {
73
        this.currP = p;
79
        this.currP = p;
74
    }
80
    }
75
81
76
    public NewFileWizard(Project project /*, String recommendedTypes[] */) {
82
    public NewFileWizard(@NullAllowed Project project /*, String recommendedTypes[] */) {
77
        setCurrentProject(project);
83
        setCurrentProject(project);
78
        putProperty(ProjectChooserFactory.WIZARD_KEY_PROJECT, getCurrentProject());
84
        putProperty(ProjectChooserFactory.WIZARD_KEY_PROJECT, getCurrentProject());
79
        format = new MessageFormat(NbBundle.getBundle(NewFileWizard.class).getString("LBL_NewFileWizard_MessageFormat"));
85
        format = new MessageFormat(NbBundle.getBundle(NewFileWizard.class).getString("LBL_NewFileWizard_MessageFormat"));
Lines 151-158 Link Here
151
157
152
    @Override
158
    @Override
153
    protected WizardDescriptor.Panel<WizardDescriptor> createTargetChooser() {
159
    protected WizardDescriptor.Panel<WizardDescriptor> createTargetChooser() {
154
        Sources c = ProjectUtils.getSources(getCurrentProject());
160
        Project project = getCurrentProject();
155
        return Templates.buildSimpleTargetChooser(getCurrentProject(), c.getSourceGroups(Sources.TYPE_GENERIC)).create();
161
        SourceGroup[] sourceGroups;
162
        if (project != null) {
163
            Sources c = ProjectUtils.getSources(project);
164
            sourceGroups = c.getSourceGroups(Sources.TYPE_GENERIC);
165
        }
166
        else {
167
            sourceGroups = new SourceGroup[0];
168
        }
169
170
        return Templates.buildSimpleTargetChooser(project, sourceGroups).create();
156
    }
171
    }
157
}
172
}
158
 
173
 
(-)a/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java (-6 / +21 lines)
Lines 951-957 Link Here
951
            LOAD.exit();
951
            LOAD.exit();
952
        }
952
        }
953
    }
953
    }
954
        
954
955
    @NonNull
955
    public Project[] getOpenProjects() {
956
    public Project[] getOpenProjects() {
956
        return ProjectManager.mutex().readAccess(new Mutex.Action<Project[]>() {
957
        return ProjectManager.mutex().readAccess(new Mutex.Action<Project[]>() {
957
            public @Override Project[] run() {
958
            public @Override Project[] run() {
Lines 1082-1088 Link Here
1082
1083
1083
               
1084
               
1084
    // Used from NewFile action        
1085
    // Used from NewFile action        
1085
    public List<DataObject> getTemplatesLRU( Project project,  PrivilegedTemplates priv ) {
1086
    public List<DataObject> getTemplatesLRU( @NullAllowed Project project,  PrivilegedTemplates priv ) {
1086
        List<FileObject> pLRU = getTemplateNamesLRU( project,  priv );
1087
        List<FileObject> pLRU = getTemplateNamesLRU( project,  priv );
1087
        List<DataObject> templates = new ArrayList<DataObject>();
1088
        List<DataObject> templates = new ArrayList<DataObject>();
1088
        for( Iterator<FileObject> it = pLRU.iterator(); it.hasNext(); ) {
1089
        for( Iterator<FileObject> it = pLRU.iterator(); it.hasNext(); ) {
Lines 1259-1265 Link Here
1259
            this.icon = icon;
1260
            this.icon = icon;
1260
        }
1261
        }
1261
    }
1262
    }
1262
    public static List<TemplateItem> prepareTemplates(Project project, Lookup lookup) {
1263
    public static List<TemplateItem> prepareTemplates(@NullAllowed Project project, Lookup lookup) {
1263
        // check the action context for recommmended/privileged templates..
1264
        // check the action context for recommmended/privileged templates..
1264
        PrivilegedTemplates privs = lookup.lookup(PrivilegedTemplates.class);
1265
        PrivilegedTemplates privs = lookup.lookup(PrivilegedTemplates.class);
1265
        final List<TemplateItem> items = new ArrayList<TemplateItem>();
1266
        final List<TemplateItem> items = new ArrayList<TemplateItem>();
Lines 1348-1360 Link Here
1348
            OpenProjectListSettings.getInstance().setMainProjectURL( mainRoot );
1349
            OpenProjectListSettings.getInstance().setMainProjectURL( mainRoot );
1349
    }
1350
    }
1350
        
1351
        
1351
    private ArrayList<FileObject> getTemplateNamesLRU( final Project project, PrivilegedTemplates priv ) {
1352
    private ArrayList<FileObject> getTemplateNamesLRU( @NullAllowed final Project project, PrivilegedTemplates priv ) {
1352
        // First take recently used templates and try to find those which
1353
        // First take recently used templates and try to find those which
1353
        // are supported by the project.
1354
        // are supported by the project.
1354
        
1355
        
1355
        final ArrayList<FileObject> result = new ArrayList<FileObject>(NUM_TEMPLATES);
1356
        final ArrayList<FileObject> result = new ArrayList<FileObject>(NUM_TEMPLATES);
1356
        
1357
        
1357
        PrivilegedTemplates pt = priv != null ? priv : project.getLookup().lookup( PrivilegedTemplates.class );
1358
        PrivilegedTemplates pt = priv != null ? priv : project != null ? project.getLookup().lookup( PrivilegedTemplates.class ) : null;
1358
        String ptNames[] = pt == null ? null : pt.getPrivilegedTemplates();        
1359
        String ptNames[] = pt == null ? null : pt.getPrivilegedTemplates();        
1359
        final ArrayList<String> privilegedTemplates = new ArrayList<String>( Arrays.asList( pt == null ? new String[0]: ptNames ) );
1360
        final ArrayList<String> privilegedTemplates = new ArrayList<String>( Arrays.asList( pt == null ? new String[0]: ptNames ) );
1360
        
1361
        
Lines 1373-1379 Link Here
1373
                    if ( fo == null ) {
1374
                    if ( fo == null ) {
1374
                        it.remove(); // Does not exists remove
1375
                        it.remove(); // Does not exists remove
1375
                    }
1376
                    }
1376
                    else if ( isRecommended( rtNames, fo ) ) {
1377
                    else if ( isRecommended( project, rtNames, fo ) ) {
1377
                        result.add( fo );
1378
                        result.add( fo );
1378
                        privilegedTemplates.remove( templateName ); // Not to have it twice
1379
                        privilegedTemplates.remove( templateName ); // Not to have it twice
1379
                    }
1380
                    }
Lines 1420-1425 Link Here
1420
        }
1421
        }
1421
    }
1422
    }
1422
1423
1424
    static boolean isRecommended(@NullAllowed Project project, @NonNull String[] recommendedTypes, @NonNull FileObject primaryFile) {
1425
        if (project != null) {
1426
            return isRecommended(recommendedTypes, primaryFile);
1427
        }
1428
1429
        if (primaryFile.isFolder()) {
1430
            // folders of templates do not require a project for display
1431
            return true;
1432
        }
1433
1434
        Object requireProject = primaryFile.getAttribute("requireProject");
1435
        return requireProject != null && !Boolean.parseBoolean(requireProject.toString());
1436
    }
1437
1423
    /**
1438
    /**
1424
     * Returns list of recommended template types for project. Do not call in
1439
     * Returns list of recommended template types for project. Do not call in
1425
     * loop because it may scan project files to resolve its type which is time
1440
     * loop because it may scan project files to resolve its type which is time
(-)a/projectui/src/org/netbeans/modules/project/ui/ProjectChooserFactoryImpl.java (-1 / +3 lines)
Lines 46-51 Link Here
46
46
47
import java.io.File;
47
import java.io.File;
48
import javax.swing.JFileChooser;
48
import javax.swing.JFileChooser;
49
import org.netbeans.api.annotations.common.NonNull;
50
import org.netbeans.api.annotations.common.NullAllowed;
49
import org.netbeans.api.project.Project;
51
import org.netbeans.api.project.Project;
50
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
52
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
51
import org.netbeans.api.project.SourceGroup;
53
import org.netbeans.api.project.SourceGroup;
Lines 65-71 Link Here
65
        return ProjectChooserAccessory.createProjectChooser( false );
67
        return ProjectChooserAccessory.createProjectChooser( false );
66
    }
68
    }
67
69
68
    public @Override WizardDescriptor.Panel<WizardDescriptor> createSimpleTargetChooser(Project project, SourceGroup[] folders,
70
    public @Override WizardDescriptor.Panel<WizardDescriptor> createSimpleTargetChooser(@NullAllowed Project project, @NonNull SourceGroup[] folders,
69
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean freeFileExtension) {
71
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean freeFileExtension) {
70
        return new SimpleTargetChooserPanel(project, folders, bottomPanel, false, freeFileExtension);
72
        return new SimpleTargetChooserPanel(project, folders, bottomPanel, false, freeFileExtension);
71
    }
73
    }
(-)a/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanel.java (-30 / +51 lines)
Lines 45-54 Link Here
45
package org.netbeans.modules.project.ui;
45
package org.netbeans.modules.project.ui;
46
46
47
import java.awt.Component;
47
import java.awt.Component;
48
import java.io.File;
48
import java.io.IOException;
49
import java.io.IOException;
49
import javax.swing.JPanel;
50
import javax.swing.event.ChangeEvent;
50
import javax.swing.event.ChangeEvent;
51
import javax.swing.event.ChangeListener;
51
import javax.swing.event.ChangeListener;
52
import org.netbeans.api.annotations.common.NonNull;
53
import org.netbeans.api.annotations.common.NullAllowed;
52
import org.netbeans.api.project.Project;
54
import org.netbeans.api.project.Project;
53
import org.netbeans.api.project.SourceGroup;
55
import org.netbeans.api.project.SourceGroup;
54
import static org.netbeans.modules.project.ui.Bundle.*;
56
import static org.netbeans.modules.project.ui.Bundle.*;
Lines 69-75 Link Here
69
    private final ChangeSupport changeSupport = new ChangeSupport(this);
71
    private final ChangeSupport changeSupport = new ChangeSupport(this);
70
    private SimpleTargetChooserPanelGUI gui;
72
    private SimpleTargetChooserPanelGUI gui;
71
73
74
    @NullAllowed
72
    private Project project;
75
    private Project project;
76
    @NonNull
73
    private SourceGroup[] folders;
77
    private SourceGroup[] folders;
74
    private WizardDescriptor.Panel<WizardDescriptor> bottomPanel;
78
    private WizardDescriptor.Panel<WizardDescriptor> bottomPanel;
75
    private WizardDescriptor wizard;
79
    private WizardDescriptor wizard;
Lines 77-83 Link Here
77
    private boolean freeFileExtension;
81
    private boolean freeFileExtension;
78
    
82
    
79
    @SuppressWarnings("LeakingThisInConstructor")
83
    @SuppressWarnings("LeakingThisInConstructor")
80
    SimpleTargetChooserPanel(Project project, SourceGroup[] folders,
84
    SimpleTargetChooserPanel(@NullAllowed Project project, @NonNull SourceGroup[] folders,
81
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean isFolder, boolean freeFileExtension) {
85
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean isFolder, boolean freeFileExtension) {
82
        this.folders = folders;
86
        this.folders = folders;
83
        this.project = project;
87
        this.project = project;
Lines 91-110 Link Here
91
    }
95
    }
92
96
93
    public @Override Component getComponent() {
97
    public @Override Component getComponent() {
94
        if (noFolders()) {
95
            return new JPanel();
96
        }
97
        if (gui == null) {
98
        if (gui == null) {
98
            gui = new SimpleTargetChooserPanelGUI(project, folders, bottomPanel == null ? null : bottomPanel.getComponent(), isFolder, freeFileExtension);
99
            gui = new SimpleTargetChooserPanelGUI(project, folders, bottomPanel == null ? null : bottomPanel.getComponent(), isFolder, freeFileExtension);
99
            gui.addChangeListener(this);
100
            gui.addChangeListener(this);
100
        }
101
        }
102
101
        return gui;
103
        return gui;
102
    }
104
    }
103
105
104
    private boolean noFolders() { // #202410
105
        return folders != null && folders.length == 0;
106
    }
107
108
    public @Override HelpCtx getHelp() {
106
    public @Override HelpCtx getHelp() {
109
        if ( bottomPanel != null ) {
107
        if ( bottomPanel != null ) {
110
            HelpCtx bottomHelp = bottomPanel.getHelp();
108
            HelpCtx bottomHelp = bottomPanel.getHelp();
Lines 119-131 Link Here
119
    }
117
    }
120
118
121
    public @Override boolean isValid() {
119
    public @Override boolean isValid() {
122
        if (noFolders()) {
120
        boolean ok = ( gui != null && gui.getTargetName() != null &&
123
            return false;
121
               ( bottomPanel == null || bottomPanel.isValid() ) );
124
        }
125
122
126
        boolean ok = ( gui != null && gui.getTargetName() != null && gui.getTargetGroup() != null &&
127
               ( bottomPanel == null || bottomPanel.isValid() ) );
128
        
129
        if (!ok) {
123
        if (!ok) {
130
            return false;
124
            return false;
131
        }
125
        }
Lines 133-140 Link Here
133
        // check if the file name can be created
127
        // check if the file name can be created
134
        FileObject template = Templates.getTemplate( wizard );
128
        FileObject template = Templates.getTemplate( wizard );
135
129
136
        String errorMessage = ProjectUtilities.canUseFileName(gui.getTargetGroup().getRootFolder(),
130
        FileObject rootFolder;
137
                gui.getTargetFolder(), gui.getTargetName(), template.getExt(), isFolder, freeFileExtension);
131
        String targetFolder;
132
        if (gui.getTargetGroup() != null) {
133
            rootFolder = gui.getTargetGroup().getRootFolder();
134
            targetFolder = gui.getTargetFolder();
135
        }
136
        else if (gui.getTargetFolder() != null) {
137
            rootFolder = FileUtil.toFileObject(new File(gui.getTargetFolder()));
138
            targetFolder = "";
139
        }
140
        else {
141
            rootFolder = null;
142
            targetFolder = null;
143
        }
144
145
        String errorMessage = ProjectUtilities.canUseFileName(rootFolder,
146
                targetFolder, gui.getTargetName(), template.getExt(), isFolder, freeFileExtension);
138
        wizard.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, errorMessage);
147
        wizard.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, errorMessage);
139
148
140
        return errorMessage == null;
149
        return errorMessage == null;
Lines 149-164 Link Here
149
    }
158
    }
150
159
151
    @Messages({
160
    @Messages({
152
        "SimpleTargetChooserPanelGUI_no_source_folders=No source folders in project; perhaps it has been deleted?",
153
        "LBL_TemplatesPanel_Name=Choose File Type"
161
        "LBL_TemplatesPanel_Name=Choose File Type"
154
    })
162
    })
155
    @Override public void readSettings(WizardDescriptor settings) {
163
    @Override public void readSettings(WizardDescriptor settings) {
156
        wizard = settings;
164
        wizard = settings;
157
                
158
        if (noFolders()) {
159
            wizard.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, SimpleTargetChooserPanelGUI_no_source_folders());
160
            return;
161
        }
162
165
163
        if ( gui == null ) {
166
        if ( gui == null ) {
164
            getComponent();
167
            getComponent();
Lines 167-174 Link Here
167
        // Try to preselect a folder            
170
        // Try to preselect a folder            
168
        FileObject preselectedTarget = Templates.getTargetFolder( wizard );
171
        FileObject preselectedTarget = Templates.getTargetFolder( wizard );
169
        if (preselectedTarget == null) {
172
        if (preselectedTarget == null) {
170
            preselectedTarget = project.getProjectDirectory();
173
            if (project != null) {
174
                preselectedTarget = project.getProjectDirectory();
175
            }
176
            else {
177
                String home = System.getProperty("user.home");
178
                if (home != null && new File(home).isDirectory()) {
179
                    preselectedTarget = FileUtil.toFileObject(new File(home));
180
                }
181
            }
171
        }
182
        }
183
172
        // Try to preserve the already entered target name
184
        // Try to preserve the already entered target name
173
        String targetName = isFolder ? null : Templates.getTargetName( wizard );
185
        String targetName = isFolder ? null : Templates.getTargetName( wizard );
174
        // Init values
186
        // Init values
Lines 189-198 Link Here
189
    }
201
    }
190
    
202
    
191
    public @Override void storeSettings(WizardDescriptor settings) {
203
    public @Override void storeSettings(WizardDescriptor settings) {
192
        if (noFolders()) {
193
            return;
194
        }
195
196
        if (WizardDescriptor.PREVIOUS_OPTION.equals(settings.getValue())) {
204
        if (WizardDescriptor.PREVIOUS_OPTION.equals(settings.getValue())) {
197
            return;
205
            return;
198
        }
206
        }
Lines 219-226 Link Here
219
    }
227
    }
220
    
228
    
221
    private FileObject getTargetFolderFromGUI () {
229
    private FileObject getTargetFolderFromGUI () {
222
        FileObject rootFolder = gui.getTargetGroup().getRootFolder();
230
        FileObject rootFolder;
223
        String folderName = gui.getTargetFolder();
231
        String folderName;
232
        if (gui.getTargetGroup() != null) {
233
            rootFolder = gui.getTargetGroup().getRootFolder();
234
            folderName = gui.getTargetFolder();
235
        }
236
        else if (gui.getTargetFolder() != null) {
237
            rootFolder = FileUtil.toFileObject(new File(gui.getTargetFolder()));
238
            folderName = "";
239
        }
240
        else {
241
            rootFolder = null;
242
            folderName = null;
243
        }
244
224
        String newObject = gui.getTargetName ();
245
        String newObject = gui.getTargetName ();
225
        
246
        
226
        if (newObject.indexOf ('/') > 0) { // NOI18N
247
        if (newObject.indexOf ('/') > 0) { // NOI18N
(-)a/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.form (-1 / +1 lines)
Lines 1-4 Link Here
1
<?xml version="1.1" encoding="UTF-8" ?>
1
<?xml version="1.0" encoding="UTF-8" ?>
2
2
3
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
3
<Form version="1.2" maxVersion="1.2" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
4
  <AccessibilityProperties>
4
  <AccessibilityProperties>
(-)a/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.java (-48 / +79 lines)
Lines 56-65 Link Here
56
import javax.swing.event.ChangeListener;
56
import javax.swing.event.ChangeListener;
57
import javax.swing.event.DocumentEvent;
57
import javax.swing.event.DocumentEvent;
58
import javax.swing.event.DocumentListener;
58
import javax.swing.event.DocumentListener;
59
import org.netbeans.api.annotations.common.CheckForNull;
60
import org.netbeans.api.annotations.common.NonNull;
61
import org.netbeans.api.annotations.common.NullAllowed;
59
import org.netbeans.api.project.Project;
62
import org.netbeans.api.project.Project;
60
import org.netbeans.api.project.ProjectUtils;
63
import org.netbeans.api.project.ProjectUtils;
61
import org.netbeans.api.project.SourceGroup;
64
import org.netbeans.api.project.SourceGroup;
62
import org.netbeans.api.project.Sources;
63
import org.openide.awt.Mnemonics;
65
import org.openide.awt.Mnemonics;
64
import org.openide.filesystems.FileObject;
66
import org.openide.filesystems.FileObject;
65
import org.openide.filesystems.FileUtil;
67
import org.openide.filesystems.FileUtil;
Lines 67-72 Link Here
67
import org.openide.loaders.DataObjectNotFoundException;
69
import org.openide.loaders.DataObjectNotFoundException;
68
import org.openide.util.ChangeSupport;
70
import org.openide.util.ChangeSupport;
69
import static org.netbeans.modules.project.ui.Bundle.*;
71
import static org.netbeans.modules.project.ui.Bundle.*;
72
import org.openide.filesystems.FileChooserBuilder;
70
import org.openide.util.NbBundle.Messages;
73
import org.openide.util.NbBundle.Messages;
71
74
72
/**
75
/**
Lines 79-95 Link Here
79
    private static final Dimension PREF_DIM = new Dimension(500, 340);
82
    private static final Dimension PREF_DIM = new Dimension(500, 340);
80
    
83
    
81
    private final ListCellRenderer CELL_RENDERER = new GroupCellRenderer();
84
    private final ListCellRenderer CELL_RENDERER = new GroupCellRenderer();
82
        
85
86
    @NullAllowed
83
    private Project project;
87
    private Project project;
88
    @NonNull
84
    private String expectedExtension;
89
    private String expectedExtension;
85
    private final ChangeSupport changeSupport = new ChangeSupport(this);
90
    private final ChangeSupport changeSupport = new ChangeSupport(this);
86
    private SourceGroup[] folders;
91
    private final SourceGroup[] folders;
87
    private boolean isFolder;
92
    private boolean isFolder;
88
    private boolean freeFileExtension;
93
    private boolean freeFileExtension;
89
    
94
    
90
    @SuppressWarnings("LeakingThisInConstructor")
95
    @SuppressWarnings("LeakingThisInConstructor")
91
    @Messages("LBL_SimpleTargetChooserPanel_Name=Name and Location")
96
    @Messages("LBL_SimpleTargetChooserPanel_Name=Name and Location")
92
    public SimpleTargetChooserPanelGUI( Project project, SourceGroup[] folders, Component bottomPanel, boolean isFolder, boolean freeFileExtension) {
97
    public SimpleTargetChooserPanelGUI( @NullAllowed Project project, @NonNull SourceGroup[] folders, Component bottomPanel, boolean isFolder, boolean freeFileExtension) {
93
        this.project = project;
98
        this.project = project;
94
        this.folders = folders.clone();
99
        this.folders = folders.clone();
95
        this.isFolder = isFolder;
100
        this.isFolder = isFolder;
Lines 121-137 Link Here
121
        "LBL_TargetChooser_FileName_Label=File &Name:",
126
        "LBL_TargetChooser_FileName_Label=File &Name:",
122
        "LBL_TargetChooser_Folder_Label=Fo&lder:",
127
        "LBL_TargetChooser_Folder_Label=Fo&lder:",
123
        "LBL_TargetChooser_CreatedFile_Label=&Created File:",
128
        "LBL_TargetChooser_CreatedFile_Label=&Created File:",
124
        "# sample folder name", "LBL_folder_name=folder"
129
        "# sample folder name", "LBL_folder_name=folder",
130
        "LBL_TargetChooser_NoProject=None"
125
    })
131
    })
126
    final void initValues(FileObject template, FileObject preselectedFolder, String documentName) {
132
    final void initValues(FileObject template, @NullAllowed FileObject preselectedFolder, String documentName) {
127
        assert project != null;
133
        if (project != null) {
128
        
134
            projectTextField.setText(ProjectUtils.getInformation(project).getDisplayName());
129
        projectTextField.setText(ProjectUtils.getInformation(project).getDisplayName());
135
        } else {
130
        
136
            projectTextField.setText(LBL_TargetChooser_NoProject());
131
        Sources sources = ProjectUtils.getSources( project );
132
133
        if (folders == null) {
134
            folders = sources.getSourceGroups( Sources.TYPE_GENERIC );
135
        }
137
        }
136
138
137
        if ( folders.length < 2 ) {
139
        if ( folders.length < 2 ) {
Lines 158-163 Link Here
158
            }
160
            }
159
            folderTextField.setText(getRelativeNativeName(rootFolder, preselectedFolder));
161
            folderTextField.setText(getRelativeNativeName(rootFolder, preselectedFolder));
160
        }
162
        }
163
        else if (project == null && preselectedFolder != null) {
164
            folderTextField.setText(preselectedFolder.getPath().replace('/', File.separatorChar));
165
        }
161
166
162
        String ext = template == null ? "" : template.getExt(); // NOI18N
167
        String ext = template == null ? "" : template.getExt(); // NOI18N
163
        expectedExtension = ext.length() == 0 ? "" : "." + ext; // NOI18N
168
        expectedExtension = ext.length() == 0 ? "" : "." + ext; // NOI18N
Lines 206-220 Link Here
206
    public SourceGroup getTargetGroup() {
211
    public SourceGroup getTargetGroup() {
207
        return (SourceGroup)locationComboBox.getSelectedItem();
212
        return (SourceGroup)locationComboBox.getSelectedItem();
208
    }
213
    }
209
        
214
215
    @CheckForNull
210
    public String getTargetFolder() {
216
    public String getTargetFolder() {
211
        
212
        String folderName = folderTextField.getText().trim();
217
        String folderName = folderTextField.getText().trim();
213
        
218
        if ( folderName.isEmpty() ) {
214
        if ( folderName.length() == 0 ) {
219
            if (project == null) {
220
                String home = System.getProperty("user.home");
221
                if (home != null && new File(home).isDirectory()) {
222
                    return home;
223
                }
224
            }
225
215
            return null;
226
            return null;
216
        }
227
        }
217
        else {           
228
        else {
229
            if (project == null && !new File(folderName).isAbsolute()) {
230
                String home = System.getProperty("user.home");
231
                if (home != null && new File(home).isDirectory()) {
232
                    folderName = FileUtil.getFileDisplayName(FileUtil.toFileObject(new File(home))) + File.separatorChar + folderName;
233
                }
234
            }
235
218
            return folderName.replace( File.separatorChar, '/' ); // NOI18N
236
            return folderName.replace( File.separatorChar, '/' ); // NOI18N
219
        }
237
        }
220
    }
238
    }
Lines 392-397 Link Here
392
    private javax.swing.JSeparator targetSeparator;
410
    private javax.swing.JSeparator targetSeparator;
393
    // End of variables declaration//GEN-END:variables
411
    // End of variables declaration//GEN-END:variables
394
412
413
    @CheckForNull
395
    private SourceGroup getPreselectedGroup( SourceGroup[] groups, FileObject folder ) {        
414
    private SourceGroup getPreselectedGroup( SourceGroup[] groups, FileObject folder ) {        
396
        for( int i = 0; folder != null && i < groups.length; i++ ) {
415
        for( int i = 0; folder != null && i < groups.length; i++ ) {
397
            if( FileUtil.isParentOf( groups[i].getRootFolder(), folder )
416
            if( FileUtil.isParentOf( groups[i].getRootFolder(), folder )
Lines 418-440 Link Here
418
        
437
        
419
        return path == null ? "" : path.replace( '/', File.separatorChar ); // NOI18N
438
        return path == null ? "" : path.replace( '/', File.separatorChar ); // NOI18N
420
    }
439
    }
421
    
440
422
    private void updateCreatedFolder() {
441
    private void updateCreatedFolder() {
423
        
424
        SourceGroup sg = (SourceGroup)locationComboBox.getSelectedItem();
442
        SourceGroup sg = (SourceGroup)locationComboBox.getSelectedItem();
425
        if (sg == null) {
443
        FileObject root = sg != null ? sg.getRootFolder() : null;
426
            return;
444
        String documentName = documentNameTextField.getText().trim();
445
        String folderName = getTargetFolder();
446
        if (folderName == null) {
447
            folderName = "";
427
        }
448
        }
428
        FileObject root = sg.getRootFolder();
449
429
        if (root == null) {
450
        String createdFileName = (root != null ? FileUtil.getFileDisplayName( root ) : "") +
430
            return;
451
            ( root == null || folderName.startsWith("/") || folderName.startsWith( File.separator ) ? "" : "/" ) + // NOI18N
431
        }
432
            
433
        String folderName = folderTextField.getText().trim();
434
        String documentName = documentNameTextField.getText().trim();
435
        
436
        String createdFileName = FileUtil.getFileDisplayName( root ) + 
437
            ( folderName.startsWith("/") || folderName.startsWith( File.separator ) ? "" : "/" ) + // NOI18N
438
            folderName + 
452
            folderName + 
439
            ( folderName.endsWith("/") || folderName.endsWith( File.separator ) || folderName.length() == 0 ? "" : "/" ) + // NOI18N
453
            ( folderName.endsWith("/") || folderName.endsWith( File.separator ) || folderName.length() == 0 ? "" : "/" ) + // NOI18N
440
            documentName + (!freeFileExtension || documentName.indexOf('.') == -1 ? expectedExtension : "");
454
            documentName + (!freeFileExtension || documentName.indexOf('.') == -1 ? expectedExtension : "");
Lines 449-470 Link Here
449
    
463
    
450
    public @Override void actionPerformed(ActionEvent e) {
464
    public @Override void actionPerformed(ActionEvent e) {
451
        if ( browseButton == e.getSource() ) {
465
        if ( browseButton == e.getSource() ) {
452
            FileObject fo=null;
466
            if (project != null) {
453
            // Show the browse dialog             
467
                FileObject fo;
454
            
468
                // Show the browse dialog
455
            SourceGroup group = (SourceGroup)locationComboBox.getSelectedItem();
469
456
            if (group == null) { // #161478
470
                SourceGroup group = (SourceGroup)locationComboBox.getSelectedItem();
457
                return;
471
                if (group == null) { // #161478
472
                    return;
473
                }
474
475
                fo = BrowseFolders.showDialog( new SourceGroup[] { group },
476
                                               project,
477
                                               folderTextField.getText().replace( File.separatorChar, '/' ) ); // NOI18N
478
479
                if ( fo != null && fo.isFolder() ) {
480
                    String relPath = FileUtil.getRelativePath( group.getRootFolder(), fo );
481
                    folderTextField.setText( relPath.replace( '/', File.separatorChar ) ); // NOI18N
482
                }
458
            }
483
            }
459
            
484
            else {
460
            fo = BrowseFolders.showDialog( new SourceGroup[] { group }, 
485
                String previousTargetFolder = getTargetFolder();
461
                                           project, 
486
                File targetFolder =
462
                                           folderTextField.getText().replace( File.separatorChar, '/' ) ); // NOI18N
487
                    new FileChooserBuilder(SimpleTargetChooserPanel.class)
463
                        
488
                        .setDirectoriesOnly(true)
464
            if ( fo != null && fo.isFolder() ) {
489
                        .setDefaultWorkingDirectory(new File(previousTargetFolder != null ? previousTargetFolder : "."))
465
                String relPath = FileUtil.getRelativePath( group.getRootFolder(), fo );
490
                        .forceUseOfDefaultWorkingDirectory(previousTargetFolder != null)
466
                folderTextField.setText( relPath.replace( '/', File.separatorChar ) ); // NOI18N
491
                        .showSaveDialog();
467
            }                        
492
493
                FileObject fo = targetFolder != null ? FileUtil.toFileObject(targetFolder) : null;
494
495
                if ( fo != null && fo.isFolder() ) {
496
                    folderTextField.setText( fo.getPath().replace( '/', File.separatorChar ) ); // NOI18N
497
                }
498
            }
468
        }
499
        }
469
        else if ( locationComboBox == e.getSource() )  {
500
        else if ( locationComboBox == e.getSource() )  {
470
            updateCreatedFolder();
501
            updateCreatedFolder();
(-)a/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanel.java (-1 / +3 lines)
Lines 49-54 Link Here
49
import java.awt.event.ActionListener;
49
import java.awt.event.ActionListener;
50
import javax.swing.event.ChangeEvent;
50
import javax.swing.event.ChangeEvent;
51
import javax.swing.event.ChangeListener;
51
import javax.swing.event.ChangeListener;
52
import org.netbeans.api.annotations.common.NullAllowed;
52
import org.netbeans.api.project.Project;
53
import org.netbeans.api.project.Project;
53
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
54
import org.netbeans.modules.project.uiapi.ProjectChooserFactory;
54
import org.netbeans.spi.project.ui.templates.support.Templates;
55
import org.netbeans.spi.project.ui.templates.support.Templates;
Lines 73-83 Link Here
73
    private final ChangeSupport changeSupport = new ChangeSupport(this);
74
    private final ChangeSupport changeSupport = new ChangeSupport(this);
74
    private TemplateChooserPanelGUI gui;
75
    private TemplateChooserPanelGUI gui;
75
76
77
    @NullAllowed
76
    private Project project;
78
    private Project project;
77
    // private String[] recommendedTypes;
79
    // private String[] recommendedTypes;
78
    private WizardDescriptor wizard;
80
    private WizardDescriptor wizard;
79
81
80
    TemplateChooserPanel( Project p /*, String recommendedTypes[] */ ) {
82
    TemplateChooserPanel( @NullAllowed Project p /*, String recommendedTypes[] */ ) {
81
        this.project = p;
83
        this.project = p;
82
        /* this.recommendedTypes = recommendedTypes; */
84
        /* this.recommendedTypes = recommendedTypes; */
83
    }
85
    }
(-)a/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java (-7 / +11 lines)
Lines 56-62 Link Here
56
import javax.swing.DefaultComboBoxModel;
56
import javax.swing.DefaultComboBoxModel;
57
import javax.swing.ListCellRenderer;
57
import javax.swing.ListCellRenderer;
58
import javax.swing.event.ChangeListener;
58
import javax.swing.event.ChangeListener;
59
import org.netbeans.api.annotations.common.CheckForNull;
59
import org.netbeans.api.annotations.common.NonNull;
60
import org.netbeans.api.annotations.common.NonNull;
61
import org.netbeans.api.annotations.common.NullAllowed;
60
import org.netbeans.api.project.Project;
62
import org.netbeans.api.project.Project;
61
import static org.netbeans.modules.project.ui.Bundle.*;
63
import static org.netbeans.modules.project.ui.Bundle.*;
62
import org.netbeans.modules.project.ui.spi.TemplateCategorySorter;
64
import org.netbeans.modules.project.ui.spi.TemplateCategorySorter;
Lines 91-96 Link Here
91
93
92
    //GUI Builder
94
    //GUI Builder
93
    private TemplatesPanelGUI.Builder builder;
95
    private TemplatesPanelGUI.Builder builder;
96
    @NullAllowed
94
    private Project project;
97
    private Project project;
95
    private @NonNull String[] projectRecommendedTypes;
98
    private @NonNull String[] projectRecommendedTypes;
96
    private String category;
99
    private String category;
Lines 110-117 Link Here
110
        projectsComboBox.setRenderer (projectCellRenderer);
113
        projectsComboBox.setRenderer (projectCellRenderer);
111
     }
114
     }
112
    
115
    
113
    public void readValues (Project p, String category, String template) {
116
    public void readValues (@NullAllowed Project p, String category, String template) {
114
        assert p != null : "Project can not be null";   //NOI18N
115
        boolean wf;
117
        boolean wf;
116
        synchronized (this) {
118
        synchronized (this) {
117
            this.project = p;
119
            this.project = p;
Lines 135-150 Link Here
135
137
136
    /** Called from readSettings, to initialize the GUI with proper components
138
    /** Called from readSettings, to initialize the GUI with proper components
137
     */
139
     */
138
    private void initValues( Project p ) {
140
    private void initValues( @NullAllowed Project p ) {
139
        // Populate the combo box with list of projects
141
        // Populate the combo box with list of projects
140
        Project openProjects[] = OpenProjectList.getDefault().getOpenProjects();
142
        Project openProjects[] = OpenProjectList.getDefault().getOpenProjects();
141
        Arrays.sort(openProjects, OpenProjectList.projectByDisplayName());
143
        Arrays.sort(openProjects, OpenProjectList.projectByDisplayName());
142
        DefaultComboBoxModel projectsModel = new DefaultComboBoxModel( openProjects );
144
        DefaultComboBoxModel projectsModel = new DefaultComboBoxModel( openProjects );
143
        projectsComboBox.setModel( projectsModel );
145
        projectsComboBox.setModel( projectsModel );
146
        projectsComboBox.setEnabled(openProjects.length > 0);
144
        this.selectProject (p);
147
        this.selectProject (p);
145
    }
148
    }
146
149
147
    private void selectProject (Project p) {
150
    private void selectProject (@NullAllowed Project p) {
148
        if (p != null) {
151
        if (p != null) {
149
            DefaultComboBoxModel projectsModel = (DefaultComboBoxModel) projectsComboBox.getModel ();
152
            DefaultComboBoxModel projectsModel = (DefaultComboBoxModel) projectsComboBox.getModel ();
150
            if ( projectsModel.getIndexOf( p ) == -1 ) {
153
            if ( projectsModel.getIndexOf( p ) == -1 ) {
Lines 171-176 Link Here
171
        this.defaultActionListener = al;
174
        this.defaultActionListener = al;
172
    }
175
    }
173
176
177
    @CheckForNull
174
    public Project getProject() {
178
    public Project getProject() {
175
        boolean wf;
179
        boolean wf;
176
        synchronized (this) {
180
        synchronized (this) {
Lines 371-377 Link Here
371
        
375
        
372
        @Override protected boolean createKeys(List<DataObject> keys) {
376
        @Override protected boolean createKeys(List<DataObject> keys) {
373
            for (DataObject dobj : root.getChildren()) {
377
            for (DataObject dobj : root.getChildren()) {
374
                if (isTemplate(dobj) && OpenProjectList.isRecommended(projectRecommendedTypes, dobj.getPrimaryFile())) {
378
                if (isTemplate(dobj) && OpenProjectList.isRecommended(project, projectRecommendedTypes, dobj.getPrimaryFile())) {
375
                    if (dobj instanceof DataShadow) {
379
                    if (dobj instanceof DataShadow) {
376
                        dobj = ((DataShadow) dobj).getOriginal();
380
                        dobj = ((DataShadow) dobj).getOriginal();
377
                    }
381
                    }
Lines 436-449 Link Here
436
        }
440
        }
437
        
441
        
438
        DataFolder f = (DataFolder) folder;
442
        DataFolder f = (DataFolder) folder;
439
        if (!OpenProjectList.isRecommended(projectRecommendedTypes, f.getPrimaryFile())) {
443
        if (!OpenProjectList.isRecommended(p, projectRecommendedTypes, f.getPrimaryFile())) {
440
            // Eg. Licenses folder.
444
            // Eg. Licenses folder.
441
            //see #102508
445
            //see #102508
442
            return false;
446
            return false;
443
        }
447
        }
444
        DataObject[] ch = f.getChildren ();
448
        DataObject[] ch = f.getChildren ();
445
        for (int i = 0; i < ch.length; i++) {
449
        for (int i = 0; i < ch.length; i++) {
446
            if (isTemplate (ch[i]) && OpenProjectList.isRecommended(projectRecommendedTypes, ch[i].getPrimaryFile ())) {
450
            if (isTemplate (ch[i]) && OpenProjectList.isRecommended(p, projectRecommendedTypes, ch[i].getPrimaryFile ())) {
447
                // XXX: how to filter link to Package template in each java types folder?
451
                // XXX: how to filter link to Package template in each java types folder?
448
                if (!(ch[i] instanceof DataShadow)) {
452
                if (!(ch[i] instanceof DataShadow)) {
449
                    return true;
453
                    return true;
(-)a/projectui/src/org/netbeans/modules/project/ui/actions/ActionsUtil.java (+2 lines)
Lines 53-58 Link Here
53
import java.util.Set;
53
import java.util.Set;
54
import java.util.logging.Level;
54
import java.util.logging.Level;
55
import java.util.logging.Logger;
55
import java.util.logging.Logger;
56
import org.netbeans.api.annotations.common.NonNull;
56
import org.netbeans.api.project.FileOwnerQuery;
57
import org.netbeans.api.project.FileOwnerQuery;
57
import org.netbeans.api.project.Project;
58
import org.netbeans.api.project.Project;
58
import org.netbeans.spi.project.ActionProvider;
59
import org.netbeans.spi.project.ActionProvider;
Lines 76-81 Link Here
76
     * have the command supported it will return array including the project. If there
77
     * have the command supported it will return array including the project. If there
77
     * is one project with the command disabled it will return empty array.
78
     * is one project with the command disabled it will return empty array.
78
     */
79
     */
80
    @NonNull
79
    public static Project[] getProjectsFromLookup( Lookup lookup, String command ) {    
81
    public static Project[] getProjectsFromLookup( Lookup lookup, String command ) {    
80
        // First find out whether there is a project directly in the Lookup
82
        // First find out whether there is a project directly in the Lookup
81
        Set<Project> result = new LinkedHashSet<Project>(); // XXX or use OpenProjectList.projectByDisplayName?
83
        Set<Project> result = new LinkedHashSet<Project>(); // XXX or use OpenProjectList.projectByDisplayName?
(-)a/projectui/src/org/netbeans/modules/project/ui/actions/NewFile.java (-58 / +9 lines)
Lines 47-53 Link Here
47
import java.awt.EventQueue;
47
import java.awt.EventQueue;
48
import java.awt.event.ActionEvent;
48
import java.awt.event.ActionEvent;
49
import java.awt.event.ActionListener;
49
import java.awt.event.ActionListener;
50
import java.beans.BeanInfo;
51
import java.beans.PropertyChangeEvent;
50
import java.beans.PropertyChangeEvent;
52
import java.beans.PropertyChangeListener;
51
import java.beans.PropertyChangeListener;
53
import java.io.IOException;
52
import java.io.IOException;
Lines 58-68 Link Here
58
import java.util.logging.Logger;
57
import java.util.logging.Logger;
59
import javax.swing.Action;
58
import javax.swing.Action;
60
import javax.swing.Icon;
59
import javax.swing.Icon;
61
import javax.swing.ImageIcon;
62
import javax.swing.JComponent;
60
import javax.swing.JComponent;
63
import javax.swing.JMenu;
61
import javax.swing.JMenu;
64
import javax.swing.JMenuItem;
62
import javax.swing.JMenuItem;
65
import javax.swing.JPopupMenu.Separator;
63
import javax.swing.JPopupMenu.Separator;
64
import org.netbeans.api.annotations.common.CheckForNull;
65
import org.netbeans.api.annotations.common.NullAllowed;
66
import org.netbeans.api.project.Project;
66
import org.netbeans.api.project.Project;
67
import org.netbeans.modules.project.ui.NewFileWizard;
67
import org.netbeans.modules.project.ui.NewFileWizard;
68
import org.netbeans.modules.project.ui.NoProjectNew;
68
import org.netbeans.modules.project.ui.NoProjectNew;
Lines 78-84 Link Here
78
import org.openide.loaders.DataFolder;
78
import org.openide.loaders.DataFolder;
79
import org.openide.loaders.DataObject;
79
import org.openide.loaders.DataObject;
80
import org.openide.loaders.DataObjectNotFoundException;
80
import org.openide.loaders.DataObjectNotFoundException;
81
import org.openide.nodes.Node;
82
import org.openide.util.Lookup;
81
import org.openide.util.Lookup;
83
import org.openide.util.Mutex;
82
import org.openide.util.Mutex;
84
import org.openide.util.NbBundle.Messages;
83
import org.openide.util.NbBundle.Messages;
Lines 91-97 Link Here
91
@Messages({
90
@Messages({
92
    "LBL_NewFileAction_Name=&New File...",
91
    "LBL_NewFileAction_Name=&New File...",
93
    "LBL_NewFileAction_PopupName=New",
92
    "LBL_NewFileAction_PopupName=New",
94
    "#{0} Name of the template", "LBL_NewFileAction_Template_PopupName={0}..."
93
    "# {0} - Name of the template", "LBL_NewFileAction_Template_PopupName={0}..."
95
})
94
})
96
public class NewFile extends ProjectAction implements PropertyChangeListener, Popup {
95
public class NewFile extends ProjectAction implements PropertyChangeListener, Popup {
97
96
Lines 120-126 Link Here
120
        Mutex.EVENT.readAccess(new Runnable() {
119
        Mutex.EVENT.readAccess(new Runnable() {
121
            @Override
120
            @Override
122
            public void run() {
121
            public void run() {
123
                setEnabled(OpenProjectList.getDefault().getOpenProjects().length > 0);
122
                setEnabled(true);
124
                setDisplayName(LBL_NewFileAction_Name());
123
                setDisplayName(LBL_NewFileAction_Name());
125
            }
124
            }
126
        });
125
        });
Lines 148-164 Link Here
148
            context = getLookup();
147
            context = getLookup();
149
        }
148
        }
150
149
151
        if ( !inProject ) {
152
            // Context outside of projects
153
            NoProjectNew.showDialog( template, preselectedFolder( context ) );
154
            return;
155
        }
156
        
157
        if (OpenProjectList.getDefault().getOpenProjects().length == 0) {
158
            // Can sometimes happen when pressing Ctrl-N, it seems.
159
            return;
160
        }
161
162
        final NewFileWizard wd = new NewFileWizard( preselectedProject( context ) /* , null */ );
150
        final NewFileWizard wd = new NewFileWizard( preselectedProject( context ) /* , null */ );
163
        
151
        
164
        DataFolder preselectedFolder = preselectedFolder( context );
152
        DataFolder preselectedFolder = preselectedFolder( context );
Lines 228-244 Link Here
228
216
229
    protected void fillSubMenu() {
217
    protected void fillSubMenu() {
230
        Project projects[] = ActionsUtil.getProjectsFromLookup( getLookup(), null );
218
        Project projects[] = ActionsUtil.getProjectsFromLookup( getLookup(), null );
231
        if ( projects != null && projects.length > 0 ) {
219
        fillSubMenu(subMenu, projects.length > 0 ? projects[0] : null);
232
            fillSubMenu(subMenu, projects[0]);
233
        }
234
        else {
235
            // When no project is seleceted only file and folder can be created
236
            fillNonProjectSubMenu(subMenu);
237
        }
238
    }
220
    }
239
221
240
    // Private methods ---------------------------------------------------------
222
    // Private methods ---------------------------------------------------------
241
223
224
    @CheckForNull
242
    private Project preselectedProject( Lookup context ) {
225
    private Project preselectedProject( Lookup context ) {
243
        Project preselectedProject = null;
226
        Project preselectedProject = null;
244
227
Lines 259-268 Link Here
259
            }
242
            }
260
        }
243
        }
261
244
262
        if ( preselectedProject == null ) {
263
            assert false : "Action should be disabled"; // NOI18N
264
        }
265
266
        return preselectedProject;
245
        return preselectedProject;
267
    }
246
    }
268
247
Lines 298-304 Link Here
298
        "LBL_NewFileAction_File_PopupName=Other...",
277
        "LBL_NewFileAction_File_PopupName=Other...",
299
        "NewFile.please_wait=Please wait..."
278
        "NewFile.please_wait=Please wait..."
300
    })
279
    })
301
    private void fillSubMenu(final JMenu menuItem, final Project project) {
280
    private void fillSubMenu(final JMenu menuItem, @NullAllowed final Project project) {
302
        menuItem.removeAll();
281
        menuItem.removeAll();
303
        JMenuItem wait = new JMenuItem(NewFile_please_wait());
282
        JMenuItem wait = new JMenuItem(NewFile_please_wait());
304
        wait.setEnabled(false);
283
        wait.setEnabled(false);
Lines 316-321 Link Here
316
                                    i.icon);
295
                                    i.icon);
317
                            item.addActionListener(menuListener);
296
                            item.addActionListener(menuListener);
318
                            item.putClientProperty(TEMPLATE_PROPERTY, i.template);
297
                            item.putClientProperty(TEMPLATE_PROPERTY, i.template);
298
                            item.putClientProperty(IN_PROJECT_PROPERTY, project != null);
319
                            menuItem.add(item);
299
                            menuItem.add(item);
320
                        }
300
                        }
321
                        if (!items.isEmpty()) {
301
                        if (!items.isEmpty()) {
Lines 324-329 Link Here
324
                        JMenuItem fileItem = new JMenuItem(LBL_NewFileAction_File_PopupName(), (Icon) getValue(Action.SMALL_ICON));
304
                        JMenuItem fileItem = new JMenuItem(LBL_NewFileAction_File_PopupName(), (Icon) getValue(Action.SMALL_ICON));
325
                        fileItem.addActionListener(menuListener);
305
                        fileItem.addActionListener(menuListener);
326
                        fileItem.putClientProperty(TEMPLATE_PROPERTY, null);
306
                        fileItem.putClientProperty(TEMPLATE_PROPERTY, null);
307
                        fileItem.putClientProperty(IN_PROJECT_PROPERTY, project != null);
327
                        menuItem.add(fileItem);
308
                        menuItem.add(fileItem);
328
                        // #205616 - need to refresh please wait node
309
                        // #205616 - need to refresh please wait node
329
                        menuItem.getPopupMenu().pack();
310
                        menuItem.getPopupMenu().pack();
Lines 333-368 Link Here
333
        });
314
        });
334
    }
315
    }
335
316
336
    private void fillNonProjectSubMenu(JMenu menuItem) {
337
        menuItem.removeAll();
338
339
        ActionListener menuListener = new PopupListener();
340
341
        DataFolder preselectedFolder = preselectedFolder( getLookup() );
342
343
        boolean canWrite;
344
        if ( preselectedFolder == null ) {
345
            canWrite = false;
346
        }
347
        else {
348
            FileObject pf = preselectedFolder.getPrimaryFile();
349
            canWrite = pf != null && pf.canWrite();
350
        }
351
352
        DataObject templates[] = NoProjectNew.getTemplates();
353
        for( int i = 0; i < templates.length; i++ ) {
354
            Node n = templates[i].getNodeDelegate();
355
            JMenuItem item = new JMenuItem(
356
                    LBL_NewFileAction_Template_PopupName(n.getDisplayName()),
357
                                      new ImageIcon( n.getIcon( BeanInfo.ICON_COLOR_16x16 ) ) );
358
            item.addActionListener( menuListener );
359
            item.putClientProperty( TEMPLATE_PROPERTY, templates[i] );
360
            item.putClientProperty( IN_PROJECT_PROPERTY, Boolean.FALSE );
361
            item.setEnabled( canWrite );
362
            menuItem.add( item );
363
        }
364
    }
365
366
    private class PopupListener implements ActionListener {
317
    private class PopupListener implements ActionListener {
367
318
368
        @Override
319
        @Override
(-)a/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectChooserFactory.java (-4 / +6 lines)
Lines 46-57 Link Here
46
46
47
import java.io.File;
47
import java.io.File;
48
import javax.swing.JFileChooser;
48
import javax.swing.JFileChooser;
49
import org.netbeans.api.annotations.common.NonNull;
50
import org.netbeans.api.annotations.common.NullAllowed;
49
import org.netbeans.api.project.Project;
51
import org.netbeans.api.project.Project;
50
import org.netbeans.api.project.SourceGroup;
52
import org.netbeans.api.project.SourceGroup;
51
import org.openide.WizardDescriptor;
53
import org.openide.WizardDescriptor;
52
54
53
/**
55
/**
54
 * Factory to be implemented bu the ui implementation
56
 * Factory to be implemented by the UI implementation.
55
 * @author Petr Hrebejk
57
 * @author Petr Hrebejk
56
 */
58
 */
57
public interface ProjectChooserFactory {
59
public interface ProjectChooserFactory {
Lines 69-76 Link Here
69
    public void setProjectsFolder (File file);
71
    public void setProjectsFolder (File file);
70
72
71
    public JFileChooser createProjectChooser(); 
73
    public JFileChooser createProjectChooser(); 
72
    
74
73
    public WizardDescriptor.Panel<WizardDescriptor> createSimpleTargetChooser(Project project, SourceGroup[] folders,
75
    public WizardDescriptor.Panel<WizardDescriptor> createSimpleTargetChooser(@NullAllowed Project project, @NonNull SourceGroup[] folders,
74
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean freeFileExtension);
76
            WizardDescriptor.Panel<WizardDescriptor> bottomPanel, boolean freeFileExtension);
75
            
77
76
}
78
}
(-)a/projectuiapi/src/org/netbeans/spi/project/ui/templates/support/Templates.java (-6 / +8 lines)
Lines 45-50 Link Here
45
package org.netbeans.spi.project.ui.templates.support;
45
package org.netbeans.spi.project.ui.templates.support;
46
46
47
import java.io.IOException;
47
import java.io.IOException;
48
import org.netbeans.api.annotations.common.NonNull;
49
import org.netbeans.api.annotations.common.NullAllowed;
48
import org.netbeans.api.project.FileOwnerQuery;
50
import org.netbeans.api.project.FileOwnerQuery;
49
import org.netbeans.api.project.Project;
51
import org.netbeans.api.project.Project;
50
import org.netbeans.api.project.SourceGroup;
52
import org.netbeans.api.project.SourceGroup;
Lines 58-64 Link Here
58
import org.openide.loaders.DataFolder;
60
import org.openide.loaders.DataFolder;
59
import org.openide.loaders.DataObject;
61
import org.openide.loaders.DataObject;
60
import org.openide.loaders.TemplateWizard;
62
import org.openide.loaders.TemplateWizard;
61
import org.openide.util.Parameters;
62
63
63
/**
64
/**
64
 * Default implementations of template UI. 
65
 * Default implementations of template UI. 
Lines 263-275 Link Here
263
     * The user is prompted to choose a location for the new file and a name.
264
     * The user is prompted to choose a location for the new file and a name.
264
     * Instantiation is handled by {@link DataObject#createFromTemplate}.
265
     * Instantiation is handled by {@link DataObject#createFromTemplate}.
265
     * @param project The project to work on.
266
     * @param project The project to work on.
266
     * @param folders a nonempty list of possible roots to create the new file in
267
     * @param folders a nonempty list of possible roots to create the new file in,
268
     * or an empty list if {@code project} is null
267
     * @return a builder which can be used to customize and then create the target chooser
269
     * @return a builder which can be used to customize and then create the target chooser
268
     * @since org.netbeans.modules.projectuiapi/1 1.45
270
     * @since org.netbeans.modules.projectuiapi/1 1.45
269
     */
271
     */
270
    public static SimpleTargetChooserBuilder buildSimpleTargetChooser(Project project, SourceGroup[] folders) {
272
    public static SimpleTargetChooserBuilder buildSimpleTargetChooser(@NullAllowed Project project, @NonNull SourceGroup[] folders) {
271
        Parameters.notNull("project", project);
272
        Parameters.notNull("folders", folders);
273
        return new SimpleTargetChooserBuilder(project, folders);
273
        return new SimpleTargetChooserBuilder(project, folders);
274
    }
274
    }
275
275
Lines 279-289 Link Here
279
     * @since org.netbeans.modules.projectuiapi/1 1.45
279
     * @since org.netbeans.modules.projectuiapi/1 1.45
280
     */
280
     */
281
    public static final class SimpleTargetChooserBuilder {
281
    public static final class SimpleTargetChooserBuilder {
282
        @NullAllowed
282
        final Project project;
283
        final Project project;
284
        @NonNull
283
        final SourceGroup[] folders;
285
        final SourceGroup[] folders;
284
        WizardDescriptor.Panel<WizardDescriptor> bottomPanel;
286
        WizardDescriptor.Panel<WizardDescriptor> bottomPanel;
285
        boolean freeFileExtension;
287
        boolean freeFileExtension;
286
        SimpleTargetChooserBuilder(Project project, SourceGroup[] folders) {
288
        SimpleTargetChooserBuilder(@NullAllowed Project project, @NonNull SourceGroup[] folders) {
287
            this.project = project;
289
            this.project = project;
288
            this.folders = folders;
290
            this.folders = folders;
289
        }
291
        }
(-)a/properties/src/org/netbeans/modules/properties/Layer.xml (+1 lines)
Lines 56-61 Link Here
56
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/properties/TemplateHelp.html"/>
56
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/properties/TemplateHelp.html"/>
57
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/properties/propertiesObject.png"/>
57
                <attr name="SystemFileSystem.icon" urlvalue="nbresloc:/org/netbeans/modules/properties/propertiesObject.png"/>
58
                <attr name="templateCategory" stringvalue="simple-files"/>
58
                <attr name="templateCategory" stringvalue="simple-files"/>
59
                <attr name="requireProject" boolvalue="false"/>
59
            </file>            
60
            </file>            
60
        </folder>
61
        </folder>
61
    </folder>
62
    </folder>
(-)a/xml/src/org/netbeans/modules/xml/resources/mf-layer.xml (+4 lines)
Lines 66-71 Link Here
66
                <attr name="templateWizardIterator" methodvalue="org.netbeans.modules.xml.wizard.impl.XMLWizardIterator.singleton"/>
66
                <attr name="templateWizardIterator" methodvalue="org.netbeans.modules.xml.wizard.impl.XMLWizardIterator.singleton"/>
67
                <attr name="templateCategory" stringvalue="XML"/>
67
                <attr name="templateCategory" stringvalue="XML"/>
68
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
68
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
69
                <attr name="requireProject" boolvalue="false"/>
69
            </file>
70
            </file>
70
            
71
            
71
            <file name="emptyDTD.dtd" url="templates/emptyDTD.dtd.template">
72
            <file name="emptyDTD.dtd" url="templates/emptyDTD.dtd.template">
Lines 77-82 Link Here
77
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.xml.wizard.impl.DTDWizardIterator"/>
78
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.xml.wizard.impl.DTDWizardIterator"/>
78
                <attr name="templateCategory" stringvalue="XML"/>
79
                <attr name="templateCategory" stringvalue="XML"/>
79
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
80
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
81
                <attr name="requireProject" boolvalue="false"/>
80
            </file>
82
            </file>
81
                        
83
                        
82
            <file name="XmlSchema.xsd" url="templates/emptyXmlSchema.xsd.template">
84
            <file name="XmlSchema.xsd" url="templates/emptyXmlSchema.xsd.template">
Lines 87-92 Link Here
87
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xml/resources/emptySchema.html"/>
89
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xml/resources/emptySchema.html"/>
88
                <attr name="templateCategory" stringvalue="XML"/>
90
                <attr name="templateCategory" stringvalue="XML"/>
89
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
91
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
92
                <attr name="requireProject" boolvalue="false"/>
90
            </file>
93
            </file>
91
                        
94
                        
92
            <file name="xml_entity.ent" url="templates/xml_entity.ent.template">
95
            <file name="xml_entity.ent" url="templates/xml_entity.ent.template">
Lines 97-102 Link Here
97
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xml/resources/xml_entity.html"/>
100
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xml/resources/xml_entity.html"/>
98
                <attr name="templateCategory" stringvalue="oasis-XML-catalogs"/>
101
                <attr name="templateCategory" stringvalue="oasis-XML-catalogs"/>
99
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
102
                <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
103
                <attr name="requireProject" boolvalue="false"/>
100
            </file>
104
            </file>
101
105
102
        </folder> <!-- XML -->
106
        </folder> <!-- XML -->
(-)a/xsl/src/org/netbeans/modules/xsl/resources/mf-layer.xml (+1 lines)
Lines 59-64 Link Here
59
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xsl/resources/templates/stylesheet.html"/>
59
                <attr name="templateWizardURL" urlvalue="nbresloc:/org/netbeans/modules/xsl/resources/templates/stylesheet.html"/>
60
                <attr name="templateCategory" stringvalue="XML"/>
60
                <attr name="templateCategory" stringvalue="XML"/>
61
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.xsl.wizard.XSLWizardIterator"/>
61
                <attr name="templateWizardIterator" newvalue="org.netbeans.modules.xsl.wizard.XSLWizardIterator"/>
62
                <attr name="requireProject" boolvalue="false"/>
62
            </file>
63
            </file>
63
        </folder> <!-- XML -->
64
        </folder> <!-- XML -->
64
    </folder> <!-- Templates -->
65
    </folder> <!-- Templates -->

Return to bug 186943