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

(-)src/main/java/org/codehaus/mevenide/netbeans/FileUtilities.java (-1 / +9 lines)
Lines 51-58 Link Here
51
        return null;
51
        return null;
52
    }
52
    }
53
    
53
    
54
    
55
54
55
    public static URI convertStringToUri(String str) {
56
        if (str != null) {
57
            File fil = new File(str);
58
            fil = FileUtil.normalizeFile(fil);
59
            return fil.toURI();
60
        }
61
        return null;
62
    }
63
56
    private static final Pattern RELATIVE_SLASH_SEPARATED_PATH = 
64
    private static final Pattern RELATIVE_SLASH_SEPARATED_PATH = 
57
            Pattern.compile("[^:/\\\\.][^:/\\\\]*(/[^:/\\\\.][^:/\\\\]*)*"); // NOI18N
65
            Pattern.compile("[^:/\\\\.][^:/\\\\]*(/[^:/\\\\.][^:/\\\\]*)*"); // NOI18N
58
     
66
     
(-)src/main/java/org/codehaus/mevenide/netbeans/execute/AbstractActionGoalProvider.java (+4 lines)
Lines 41-46 Link Here
41
import org.codehaus.mevenide.netbeans.execute.model.io.xpp3.NetbeansBuildActionXpp3Writer;
41
import org.codehaus.mevenide.netbeans.execute.model.io.xpp3.NetbeansBuildActionXpp3Writer;
42
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
42
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
43
import org.netbeans.api.java.project.JavaProjectConstants;
43
import org.netbeans.api.java.project.JavaProjectConstants;
44
import org.netbeans.api.project.PotentialSourceGroup;
44
import org.netbeans.api.project.SourceGroup;
45
import org.netbeans.api.project.SourceGroup;
45
import org.netbeans.api.project.Sources;
46
import org.netbeans.api.project.Sources;
46
import org.netbeans.spi.project.ActionProvider;
47
import org.netbeans.spi.project.ActionProvider;
Lines 87-92 Link Here
87
            Sources srcs = (Sources)project.getLookup().lookup(Sources.class);
88
            Sources srcs = (Sources)project.getLookup().lookup(Sources.class);
88
            SourceGroup[] grp = srcs.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
89
            SourceGroup[] grp = srcs.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
89
            for (int i = 0; i < grp.length; i++) {
90
            for (int i = 0; i < grp.length; i++) {
91
                if (grp[i] instanceof PotentialSourceGroup) {
92
                    continue;
93
                }
90
                relPath = FileUtil.getRelativePath(grp[i].getRootFolder(), fos[0]);
94
                relPath = FileUtil.getRelativePath(grp[i].getRootFolder(), fos[0]);
91
                if (relPath != null) {
95
                if (relPath != null) {
92
                    group = grp[i].getName();
96
                    group = grp[i].getName();
(-)src/main/java/org/codehaus/mevenide/netbeans/nodes/SourcesNodeFactory.java (-3 / +11 lines)
Lines 21-29 Link Here
21
import java.util.List;
21
import java.util.List;
22
import javax.swing.event.ChangeEvent;
22
import javax.swing.event.ChangeEvent;
23
import javax.swing.event.ChangeListener;
23
import javax.swing.event.ChangeListener;
24
import org.codehaus.mevenide.netbeans.MavenSourcesImpl;
25
import org.codehaus.mevenide.netbeans.NbMavenProject;
24
import org.codehaus.mevenide.netbeans.NbMavenProject;
26
import org.netbeans.api.java.project.JavaProjectConstants;
25
import org.netbeans.api.java.project.JavaProjectConstants;
26
import org.netbeans.api.project.PotentialSourceGroup;
27
import org.netbeans.api.project.Project;
27
import org.netbeans.api.project.Project;
28
import org.netbeans.api.project.ProjectUtils;
28
import org.netbeans.api.project.ProjectUtils;
29
import org.netbeans.api.project.SourceGroup;
29
import org.netbeans.api.project.SourceGroup;
Lines 31-36 Link Here
31
import org.netbeans.spi.java.project.support.ui.PackageView;
31
import org.netbeans.spi.java.project.support.ui.PackageView;
32
import org.netbeans.spi.project.ui.support.NodeFactory;
32
import org.netbeans.spi.project.ui.support.NodeFactory;
33
import org.netbeans.spi.project.ui.support.NodeList;
33
import org.netbeans.spi.project.ui.support.NodeList;
34
import org.openide.nodes.AbstractNode;
35
import org.openide.nodes.Children;
34
import org.openide.nodes.Node;
36
import org.openide.nodes.Node;
35
37
36
/**
38
/**
Lines 59-70 Link Here
59
            Sources srcs = ProjectUtils.getSources(project);
61
            Sources srcs = ProjectUtils.getSources(project);
60
            SourceGroup[] javagroup = srcs.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
62
            SourceGroup[] javagroup = srcs.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
61
            for (int i = 0; i < javagroup.length; i++) {
63
            for (int i = 0; i < javagroup.length; i++) {
62
                    list.add(javagroup[i]);
64
                list.add(javagroup[i]);
63
                }
65
            }
64
            return list;
66
            return list;
65
        }
67
        }
66
        
68
        
67
        public Node node(SourceGroup group) {
69
        public Node node(SourceGroup group) {
70
            if (group instanceof PotentialSourceGroup) {
71
                Node nd = new AbstractNode(Children.LEAF);
72
                nd.setName(group.getName());
73
                nd.setDisplayName(group.getDisplayName());
74
                return nd;
75
            }
68
            return PackageView.createPackageView(group);
76
            return PackageView.createPackageView(group);
69
        }
77
        }
70
        
78
        
(-)src/main/java/org/codehaus/mevenide/netbeans/MavenSourcesImpl.java (-9 / +142 lines)
Lines 36-41 Link Here
36
import org.netbeans.api.project.ProjectInformation;
36
import org.netbeans.api.project.ProjectInformation;
37
import org.netbeans.api.project.ProjectManager;
37
import org.netbeans.api.project.ProjectManager;
38
import org.netbeans.api.project.SourceGroup;
38
import org.netbeans.api.project.SourceGroup;
39
import org.netbeans.api.project.PotentialSourceGroup;
39
import org.netbeans.api.project.Sources;
40
import org.netbeans.api.project.Sources;
40
import org.netbeans.api.queries.SharabilityQuery;
41
import org.netbeans.api.queries.SharabilityQuery;
41
import org.netbeans.api.queries.VisibilityQuery;
42
import org.netbeans.api.queries.VisibilityQuery;
Lines 83-88 Link Here
83
                if (NbMavenProject.PROP_PROJECT.equals(event.getPropertyName())) {
84
                if (NbMavenProject.PROP_PROJECT.equals(event.getPropertyName())) {
84
                    checkChanges(true);
85
                    checkChanges(true);
85
                }
86
                }
87
                if (NbMavenProject.PROP_RESOURCE.equals(event.getPropertyName())) {
88
                    checkChanges(true);
89
                }
86
            }
90
            }
87
        });
91
        });
88
    }
92
    }
Lines 92-102 Link Here
92
        synchronized (lock) {
96
        synchronized (lock) {
93
            MavenProject mp = project.getOriginalMavenProject();
97
            MavenProject mp = project.getOriginalMavenProject();
94
            if (mp != null) {
98
            if (mp != null) {
95
                FileObject folder = FileUtilities.convertStringToFileObject(mp.getBuild().getSourceDirectory());
99
//                FileObject folder = FileUtilities.convertStringToFileObject(mp.getBuild().getSourceDirectory());
96
                changed = changed | checkJavaGroupCache(folder, NAME_SOURCE, NbBundle.getMessage(MavenSourcesImpl.class, "SG_Sources"));
100
                URI folderUri = FileUtilities.convertStringToUri(mp.getBuild().getSourceDirectory());
97
                folder = FileUtilities.convertStringToFileObject(mp.getBuild().getTestSourceDirectory());
101
                changed = changed | checkJavaGroupCache(folderUri, NAME_SOURCE, NbBundle.getMessage(MavenSourcesImpl.class, "SG_Sources"));
98
                changed = changed | checkJavaGroupCache(folder, NAME_TESTSOURCE, NbBundle.getMessage(MavenSourcesImpl.class, "SG_Test_Sources"));
102
                folderUri = FileUtilities.convertStringToUri(mp.getBuild().getTestSourceDirectory());
103
                changed = changed | checkJavaGroupCache(folderUri, NAME_TESTSOURCE, NbBundle.getMessage(MavenSourcesImpl.class, "SG_Test_Sources"));
99
                URI[] uris = project.getGeneratedSourceRoots();
104
                URI[] uris = project.getGeneratedSourceRoots();
105
                FileObject folder;
100
                if (uris.length > 0) {
106
                if (uris.length > 0) {
101
                    try {
107
                    try {
102
                        folder = URLMapper.findFileObject(uris[0].toURL());
108
                        folder = URLMapper.findFileObject(uris[0].toURL());
Lines 221-230 Link Here
221
    /**
227
    /**
222
     * consult the SourceGroup cache, return true if anything changed..
228
     * consult the SourceGroup cache, return true if anything changed..
223
     */
229
     */
224
    private boolean checkJavaGroupCache(FileObject root, String name, String displayName) {
230
    private boolean checkJavaGroupCache(URI root, String name, String displayName) {
231
        FileObject fo = FileUtilities.convertURItoFileObject(root);
225
        SourceGroup group = javaGroup.get(name);
232
        SourceGroup group = javaGroup.get(name);
226
        if (root == null && group != null) {
233
        if (root == null && group != null) {
227
            javaGroup.remove(name);
234
            javaGroup.remove(name);
235
            ProjectURLWatcher watch = project.getLookup().lookup(ProjectURLWatcher.class);
236
            URI uri;
237
            if (group instanceof PotentialSourceGroup) {
238
                uri = ((PotentialSourceGroup)group).getPotencialRootFolder();
239
            } else {
240
                uri = FileUtil.toFile(group.getRootFolder()).toURI();
241
            }
242
            watch.removeWatchedPath(uri);
228
            return true;
243
            return true;
229
        }
244
        }
230
        if (root == null) {
245
        if (root == null) {
Lines 232-246 Link Here
232
        }
247
        }
233
        boolean changed = false;
248
        boolean changed = false;
234
        if (group == null) {
249
        if (group == null) {
235
            group = GenericSources.group(project, root, name, displayName, null, null);
250
            if (fo != null) {
251
                group = GenericSources.group(project, fo, name, displayName, null, null);
252
            } else {
253
                group = new PotGroup(project, root, name, displayName);
254
            }
236
            javaGroup.put(name, group);
255
            javaGroup.put(name, group);
237
            changed = true;
256
            changed = true;
257
            ProjectURLWatcher watch = project.getLookup().lookup(ProjectURLWatcher.class);
258
            watch.addWatchedPath(root);
238
        } else {
259
        } else {
239
            if (!group.getRootFolder().equals(root)) {
260
            boolean pot = group instanceof PotGroup;
240
                group = GenericSources.group(project, root, name, displayName, null, null);
261
            ProjectURLWatcher watch = project.getLookup().lookup(ProjectURLWatcher.class);
262
            URI uri;
263
            if (group instanceof PotentialSourceGroup) {
264
                uri = ((PotentialSourceGroup)group).getPotencialRootFolder();
265
            } else {
266
                uri = FileUtil.toFile(group.getRootFolder()).toURI();
267
            }
268
            watch.removeWatchedPath(uri);
269
            if ((fo != null && fo.isValid()) && (pot || !group.getRootFolder().equals(fo))) {
270
                group = GenericSources.group(project, fo, name, displayName, null, null);
241
                javaGroup.put(name, group);
271
                javaGroup.put(name, group);
242
                changed = true;
272
                changed = true;
243
            }
273
            }
274
            if ((fo == null || !fo.isValid())&& (!pot || !((PotGroup)group).getPotencialRootFolder().equals(root))) {
275
                group = new PotGroup(project, root, name, displayName);
276
                javaGroup.put(name, group);
277
                changed = true;
278
            }
279
            if (group instanceof PotentialSourceGroup) {
280
                uri = ((PotentialSourceGroup)group).getPotencialRootFolder();
281
            } else {
282
                uri = FileUtil.toFile(group.getRootFolder()).toURI();
283
            }
284
            watch.addWatchedPath(uri);
285
            
244
        }
286
        }
245
        return changed;
287
        return changed;
246
    }
288
    }
Lines 328-334 Link Here
328
                // Not on disk, include it.
370
                // Not on disk, include it.
329
                return true;
371
                return true;
330
            }
372
            }
331
332
        }
373
        }
333
        
374
        
334
        public void addPropertyChangeListener(PropertyChangeListener l) {
375
        public void addPropertyChangeListener(PropertyChangeListener l) {
Lines 340-343 Link Here
340
        }
381
        }
341
        
382
        
342
    }
383
    }
384
    
385
    public final class PotGroup implements PotentialSourceGroup {
386
        
387
        private final URI rootFolder;
388
        private final String name;
389
        private final String displayName;
390
        private final Icon icon = null;
391
        private final Icon openedIcon = null;
392
        private NbMavenProject project;
393
        private boolean fired = false;
394
        
395
        PotGroup(NbMavenProject p, URI rootFold, String nm, String displayNm/*,
396
                Icon icn, Icon opened*/) {
397
            project = p;
398
            rootFolder = rootFold;
399
            name = nm;
400
            displayName = displayNm != null ? displayNm : NbBundle.getMessage(MavenSourcesImpl.class, "SG_Root_not_defined");
401
//            icon = icn;
402
//            openedIcon = opened;
343
        }
403
        }
404
        
405
        public FileObject getRootFolder() {
406
            File fil = new File(rootFolder);
407
            if (!fil.exists()) {
408
                fil.mkdirs();
409
                if (!fired) {
410
                    fired = true;
411
                    Thread.dumpStack();
412
                    RequestProcessor.getDefault().post(new Runnable() {
413
                         public void run() {
414
                            MavenSourcesImpl.this.checkChanges(true);
415
                        }
416
                    });
417
                }
418
            }
419
            return FileUtil.toFileObject(fil);
420
        }
421
        
422
        public URI getPotencialRootFolder() {
423
            return rootFolder;
424
        }
425
        
426
        public String getName() {
427
            return name;
428
        }
429
        
430
        public String getDisplayName() {
431
            return displayName;
432
        }
433
        
434
        public Icon getIcon(boolean opened) {
435
            return opened ? icon : openedIcon;
436
        }
437
        
438
        public boolean contains(FileObject file)  {
439
             File fil = new File(rootFolder);
440
             if (!fil.exists()) {
441
                 return false;
442
             }
443
             FileObject root = FileUtil.toFileObject(fil);
444
             if (file != root && !FileUtil.isParentOf(root, file)) {
445
                throw new IllegalArgumentException();
446
            }
447
            if (project != null) {
448
                if (file.isFolder() && file != project.getProjectDirectory() && ProjectManager.getDefault().isProject(file)) {
449
                    // #67450: avoid actually loading the nested project.
450
                    return false;
451
                }
452
                if (FileOwnerQuery.getOwner(file) != project) {
453
                    return false;
454
                }
455
            }
456
            File f = FileUtil.toFile(file);
457
            if (f != null) {
458
                // MIXED, UNKNOWN, and SHARABLE -> include it
459
                return SharabilityQuery.getSharability(f) != SharabilityQuery.NOT_SHARABLE;
460
            } else {
461
                // Not on disk, include it.
462
                return true;
463
            }
464
        }
465
        
466
        public void addPropertyChangeListener(PropertyChangeListener l) {
467
            // XXX should react to ProjectInformation changes
468
        }
469
        
470
        public void removePropertyChangeListener(PropertyChangeListener l) {
471
            // XXX
472
        }
473
    }
474
    
475
    
476
}
(-)pom.xml (-1 / +1 lines)
Lines 117-123 Link Here
117
        <dependency>
117
        <dependency>
118
            <groupId>org.netbeans.api</groupId>
118
            <groupId>org.netbeans.api</groupId>
119
            <artifactId>org-netbeans-modules-projectapi</artifactId>
119
            <artifactId>org-netbeans-modules-projectapi</artifactId>
120
            <version>${netbeans.release}</version>
120
            <version>RELEASE60-M10-SNAPSHOT</version>
121
        </dependency>
121
        </dependency>
122
        <dependency>
122
        <dependency>
123
            <groupId>org.netbeans.api</groupId>
123
            <groupId>org.netbeans.api</groupId>

Return to bug 102711