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

(-)java/project/apichanges.xml (+19 lines)
Lines 70-81 Link Here
70
    <apidefs>
70
    <apidefs>
71
        <apidef name="general">Java Project API</apidef>
71
        <apidef name="general">Java Project API</apidef>
72
        <apidef name="classpath">Classpath Support SPI</apidef>
72
        <apidef name="classpath">Classpath Support SPI</apidef>
73
        <apidef name="ui">UI Support SPI</apidef>
73
        <!-- etc. -->
74
        <!-- etc. -->
74
    </apidefs>
75
    </apidefs>
75
76
76
    <!-- ACTUAL CHANGES BEGIN HERE: -->
77
    <!-- ACTUAL CHANGES BEGIN HERE: -->
77
78
78
    <changes>
79
    <changes>
80
        <change>
81
            <api name="ui"/>
82
            <summary>The functionality of PackageListView was moved into PackageView support SPI.</summary>
83
            <version major="1" minor="3"/>
84
            <date day="10" month="1" year="2005"/>
85
            <author login="tzezula"/>
86
            <compatibility addition="yes"/>
87
            <description>
88
                <p>
89
                The new methods supporting creating of package list were added into PackageView.
90
                PackageView.createListView (SourceGroup) creates an ComboBoxModel containing the
91
                packages from given SourceGroup. PackageView.listRenderer() returns an ListCellRenderer
92
                rendering the packages.
93
                </p>
94
            </description>
95
            <class package="org.netbeans.spi.java.project.support.ui" name="PackageView"/>
96
            <issue number="48618"/>
97
        </change>
79
        <change>
98
        <change>
80
            <api name="classpath"/>
99
            <api name="classpath"/>
81
            <summary>The ProjectClassPathExtender was moved into public SPI package.</summary>
100
            <summary>The ProjectClassPathExtender was moved into public SPI package.</summary>
(-)java/project/src/org/netbeans/modules/java/project/JavaTargetChooserPanelGUI.java (-2 / +3 lines)
Lines 30-35 Link Here
30
import org.netbeans.api.project.Project;
30
import org.netbeans.api.project.Project;
31
import org.netbeans.api.project.ProjectUtils;
31
import org.netbeans.api.project.ProjectUtils;
32
import org.netbeans.api.project.SourceGroup;
32
import org.netbeans.api.project.SourceGroup;
33
import org.netbeans.spi.java.project.support.ui.PackageView;
33
import org.openide.filesystems.FileObject;
34
import org.openide.filesystems.FileObject;
34
import org.openide.filesystems.FileUtil;
35
import org.openide.filesystems.FileUtil;
35
import org.openide.awt.Mnemonics;
36
import org.openide.awt.Mnemonics;
Lines 92-98 Link Here
92
        }
93
        }
93
        
94
        
94
        rootComboBox.setRenderer(new GroupListCellRenderer());
95
        rootComboBox.setRenderer(new GroupListCellRenderer());
95
        packageComboBox.setRenderer(PackageListView.listRenderer());
96
        packageComboBox.setRenderer(PackageView.listRenderer());
96
        rootComboBox.addActionListener( this );
97
        rootComboBox.addActionListener( this );
97
        
98
        
98
        setPreferredSize( PREF_DIM );
99
        setPreferredSize( PREF_DIM );
Lines 390-396 Link Here
390
    // Private methods ---------------------------------------------------------
391
    // Private methods ---------------------------------------------------------
391
        
392
        
392
    private void updatePackages() {
393
    private void updatePackages() {
393
        packageComboBox.setModel(PackageListView.createListView((SourceGroup) rootComboBox.getSelectedItem()));
394
        packageComboBox.setModel(PackageView.createListView((SourceGroup) rootComboBox.getSelectedItem()));
394
    }
395
    }
395
    
396
    
396
    private File getFolder() {
397
    private File getFolder() {
(-)java/project/src/org/netbeans/modules/java/project/PackageListView.java (-137 lines)
Removed Link Here
1
/*
2
 *                 Sun Public License Notice
3
 *
4
 * The contents of this file are subject to the Sun Public License
5
 * Version 1.0 (the "License"). You may not use this file except in
6
 * compliance with the License. A copy of the License is available at
7
 * http://www.sun.com/
8
 *
9
 * The Original Code is NetBeans. The Initial Developer of the Original
10
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
11
 * Microsystems, Inc. All Rights Reserved.
12
 */
13
14
package org.netbeans.modules.java.project;
15
16
import java.awt.Component;
17
import java.util.Enumeration;
18
import java.util.SortedSet;
19
import java.util.TreeSet;
20
import javax.swing.ComboBoxModel;
21
import javax.swing.DefaultComboBoxModel;
22
import javax.swing.DefaultListCellRenderer;
23
import javax.swing.DefaultListModel;
24
import javax.swing.Icon;
25
import javax.swing.ImageIcon;
26
import javax.swing.JList;
27
import javax.swing.ListCellRenderer;
28
import org.netbeans.api.project.SourceGroup;
29
import org.openide.filesystems.FileObject;
30
import org.openide.filesystems.FileUtil;
31
32
// XXX needs unit test
33
34
/**
35
 * Factory for list-oriented views of packages.
36
 * Future candidates for inclusion in {@link org.netbeans.spi.java.project.support.ui.PackageView}.
37
 * @author Jesse Glick
38
 * @see "#48618"
39
 */
40
public final class PackageListView {
41
    
42
    private PackageListView() {}
43
    
44
    /**
45
     * Create a list or combo box model suitable for {@link javax.swing.JList} from a source group
46
     * showing all Java packages in the source group.
47
     * To display it you will also need {@link #listRenderer}.
48
     * <p>No particular guarantees are made as to the nature of the model objects themselves,
49
     * except that {@link Object#toString} will give the fully-qualified package name
50
     * (or <code>""</code> for the default package), regardless of what the renderer
51
     * actually displays.</p>
52
     * @param group a Java-like source group
53
     * @return a model of its packages
54
     */
55
    public static ComboBoxModel createListView(SourceGroup group) {
56
        DefaultListModel model = new DefaultListModel();
57
        SortedSet/*<PackageItem>*/ items = new TreeSet();
58
        FileObject root = group.getRootFolder();
59
        if (PackageDisplayUtils.isSignificant(root)) {
60
            items.add(new PackageItem(group, root));
61
        }
62
        Enumeration/*<FileObject>*/ files = root.getChildren(true);
63
        while (files.hasMoreElements()) {
64
            FileObject f = (FileObject) files.nextElement();
65
            if (f.isFolder() && PackageDisplayUtils.isSignificant(f)) {
66
                items.add(new PackageItem(group, f));
67
            }
68
        }
69
        return new DefaultComboBoxModel(items.toArray(new PackageItem[items.size()]));
70
    }
71
    
72
    /**
73
     * Create a renderer suited to rendering models created using {@link #createListView}.
74
     * The exact nature of the display is not specified.
75
     * Instances of String can also be rendered.
76
     * @return a suitable package renderer
77
     */
78
    public static ListCellRenderer listRenderer() {
79
        return new PackageListCellRenderer();
80
    }
81
    
82
    /**
83
     * Model item representing one package.
84
     */
85
    private static final class PackageItem implements Comparable {
86
        
87
        private final FileObject pkg;
88
        private final String pkgname;
89
        
90
        public PackageItem(SourceGroup group, FileObject pkg) {
91
            this.pkg = pkg;
92
            String path = FileUtil.getRelativePath(group.getRootFolder(), pkg);
93
            assert path != null : "No " + pkg + " in " + group;
94
            pkgname = path.replace('/', '.');
95
        }
96
        
97
        public String toString() {
98
            return pkgname;
99
        }
100
        
101
        public String getLabel() {
102
            return PackageDisplayUtils.getDisplayLabel(pkg, pkgname);
103
        }
104
        
105
        public Icon getIcon() {
106
            return new ImageIcon(PackageDisplayUtils.getIcon(pkg, pkgname));
107
        }
108
109
        public int compareTo(Object obj) {
110
            return pkgname.compareTo(((PackageItem) obj).pkgname);
111
        }
112
        
113
    }
114
    
115
    /**
116
     * The renderer which just displays {@link PackageItem#getLabel} and {@link PackageItem#getIcon}.
117
     */
118
    private static final class PackageListCellRenderer extends DefaultListCellRenderer {
119
        
120
        public PackageListCellRenderer() {}
121
122
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
123
            if (value instanceof PackageItem) {
124
                PackageItem pkgitem = (PackageItem) value;
125
                super.getListCellRendererComponent(list, pkgitem.getLabel(), index, isSelected, cellHasFocus);
126
                setIcon(pkgitem.getIcon());
127
            } else {
128
                // #49954: render a specially inserted package somehow.
129
                String pkgitem = (String) value;
130
                super.getListCellRendererComponent(list, pkgitem, index, isSelected, cellHasFocus);
131
            }
132
            return this;
133
        }
134
        
135
    }
136
    
137
}
(-)java/project/src/org/netbeans/spi/java/project/support/ui/PackageView.java (+112 lines)
Lines 13-22 Link Here
13
13
14
package org.netbeans.spi.java.project.support.ui;
14
package org.netbeans.spi.java.project.support.ui;
15
15
16
import java.awt.Component;
16
import java.beans.PropertyChangeEvent;
17
import java.beans.PropertyChangeEvent;
17
import java.beans.PropertyChangeListener;
18
import java.beans.PropertyChangeListener;
19
import java.util.Enumeration;
20
import java.util.SortedSet;
21
import java.util.TreeSet;
22
import javax.swing.ComboBoxModel;
23
import javax.swing.DefaultComboBoxModel;
24
import javax.swing.DefaultListCellRenderer;
25
import javax.swing.DefaultListModel;
26
import javax.swing.Icon;
27
import javax.swing.ImageIcon;
28
import javax.swing.JList;
29
import javax.swing.ListCellRenderer;
18
import org.netbeans.api.project.SourceGroup;
30
import org.netbeans.api.project.SourceGroup;
31
import org.netbeans.modules.java.project.PackageDisplayUtils;
19
import org.netbeans.modules.java.project.PackageViewSettings;
32
import org.netbeans.modules.java.project.PackageViewSettings;
33
import org.openide.filesystems.FileObject;
34
import org.openide.filesystems.FileUtil;
20
import org.openide.nodes.FilterNode;
35
import org.openide.nodes.FilterNode;
21
import org.openide.nodes.Node;
36
import org.openide.nodes.Node;
22
import org.openide.util.WeakListeners;
37
import org.openide.util.WeakListeners;
Lines 71-76 Link Here
71
    }
86
    }
72
    
87
    
73
    /**
88
    /**
89
     * Create a list or combo box model suitable for {@link javax.swing.JList} from a source group
90
     * showing all Java packages in the source group.
91
     * To display it you will also need {@link #listRenderer}.
92
     * <p>No particular guarantees are made as to the nature of the model objects themselves,
93
     * except that {@link Object#toString} will give the fully-qualified package name
94
     * (or <code>""</code> for the default package), regardless of what the renderer
95
     * actually displays.</p>
96
     * @param group a Java-like source group
97
     * @return a model of its packages
98
     * @since org.netbeans.modules.java.project/1 1.3 
99
     */
100
    public static ComboBoxModel createListView(SourceGroup group) {
101
        DefaultListModel model = new DefaultListModel();
102
        SortedSet/*<PackageItem>*/ items = new TreeSet();
103
        FileObject root = group.getRootFolder();
104
        if (PackageDisplayUtils.isSignificant(root)) {
105
            items.add(new PackageItem(group, root));
106
        }
107
        Enumeration/*<FileObject>*/ files = root.getChildren(true);
108
        while (files.hasMoreElements()) {
109
            FileObject f = (FileObject) files.nextElement();
110
            if (f.isFolder() && PackageDisplayUtils.isSignificant(f)) {
111
                items.add(new PackageItem(group, f));
112
            }
113
        }
114
        return new DefaultComboBoxModel(items.toArray(new PackageItem[items.size()]));
115
    }
116
    
117
    /**
118
     * Create a renderer suited to rendering models created using {@link #createListView}.
119
     * The exact nature of the display is not specified.
120
     * Instances of String can also be rendered.
121
     * @return a suitable package renderer
122
     * @since org.netbeans.modules.java.project/1 1.3 
123
     */
124
    public static ListCellRenderer listRenderer() {
125
        return new PackageListCellRenderer();
126
    }
127
    
128
    /**
74
     * FilterNode which listens on the PackageViewSettings and changes the view to 
129
     * FilterNode which listens on the PackageViewSettings and changes the view to 
75
     * the package view or tree view
130
     * the package view or tree view
76
     *
131
     *
Lines 106-109 Link Here
106
            }
161
            }
107
        }        
162
        }        
108
    }
163
    }
164
    
165
    /**
166
     * Model item representing one package.
167
     */
168
    private static final class PackageItem implements Comparable {
169
        
170
        private final FileObject pkg;
171
        private final String pkgname;
172
        
173
        public PackageItem(SourceGroup group, FileObject pkg) {
174
            this.pkg = pkg;
175
            String path = FileUtil.getRelativePath(group.getRootFolder(), pkg);
176
            assert path != null : "No " + pkg + " in " + group;
177
            pkgname = path.replace('/', '.');
178
        }
179
        
180
        public String toString() {
181
            return pkgname;
182
        }
183
        
184
        public String getLabel() {
185
            return PackageDisplayUtils.getDisplayLabel(pkg, pkgname);
186
        }
187
        
188
        public Icon getIcon() {
189
            return new ImageIcon(PackageDisplayUtils.getIcon(pkg, pkgname));
190
        }
191
192
        public int compareTo(Object obj) {
193
            return pkgname.compareTo(((PackageItem) obj).pkgname);
194
        }
195
        
196
    }
197
    
198
    /**
199
     * The renderer which just displays {@link PackageItem#getLabel} and {@link PackageItem#getIcon}.
200
     */
201
    private static final class PackageListCellRenderer extends DefaultListCellRenderer {
202
        
203
        public PackageListCellRenderer() {}
204
205
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
206
            if (value instanceof PackageItem) {
207
                PackageItem pkgitem = (PackageItem) value;
208
                super.getListCellRendererComponent(list, pkgitem.getLabel(), index, isSelected, cellHasFocus);
209
                setIcon(pkgitem.getIcon());
210
            } else {
211
                // #49954: render a specially inserted package somehow.
212
                String pkgitem = (String) value;
213
                super.getListCellRendererComponent(list, pkgitem, index, isSelected, cellHasFocus);
214
            }
215
            return this;
216
        }
217
        
218
    }
219
    
220
    
109
}
221
}
(-)refactoring/src/org/netbeans/modules/refactoring/ui/MoveClassPanel.java (-2 / +3 lines)
Lines 39-44 Link Here
39
import org.netbeans.api.project.ui.OpenProjects;
39
import org.netbeans.api.project.ui.OpenProjects;
40
import org.netbeans.modules.refactoring.api.ui.CustomRefactoringPanel;
40
import org.netbeans.modules.refactoring.api.ui.CustomRefactoringPanel;
41
import org.netbeans.modules.refactoring.api.ui.ParametersPanel;
41
import org.netbeans.modules.refactoring.api.ui.ParametersPanel;
42
import org.netbeans.spi.java.project.support.ui.PackageView;
42
import org.openide.filesystems.FileObject;
43
import org.openide.filesystems.FileObject;
43
import org.openide.filesystems.FileUtil;
44
import org.openide.filesystems.FileUtil;
44
import org.openide.loaders.DataObject;
45
import org.openide.loaders.DataObject;
Lines 70-76 Link Here
70
        labelHeadLine.setText(headline);
71
        labelHeadLine.setText(headline);
71
        
72
        
72
        rootComboBox.setRenderer(GROUP_CELL_RENDERER);
73
        rootComboBox.setRenderer(GROUP_CELL_RENDERER);
73
        packageComboBox.setRenderer(PackageListView.listRenderer());
74
        packageComboBox.setRenderer(PackageView.listRenderer());
74
        projectsComboBox.setRenderer( PROJECT_CELL_RENDERER );
75
        projectsComboBox.setRenderer( PROJECT_CELL_RENDERER );
75
                
76
                
76
        rootComboBox.addActionListener( this );
77
        rootComboBox.addActionListener( this );
Lines 289-295 Link Here
289
        
290
        
290
    private void updatePackages() {
291
    private void updatePackages() {
291
        SourceGroup g = (SourceGroup) rootComboBox.getSelectedItem();
292
        SourceGroup g = (SourceGroup) rootComboBox.getSelectedItem();
292
        packageComboBox.setModel(PackageListView.createListView(g));
293
        packageComboBox.setModel(PackageView.createListView(g));
293
    }
294
    }
294
    
295
    
295
    void setCombosEnabled(boolean enabled) {
296
    void setCombosEnabled(boolean enabled) {
(-)refactoring/src/org/netbeans/modules/refactoring/ui/PackageListView.java (-129 lines)
Removed Link Here
1
/*
2
 *                 Sun Public License Notice
3
 *
4
 * The contents of this file are subject to the Sun Public License
5
 * Version 1.0 (the "License"). You may not use this file except in
6
 * compliance with the License. A copy of the License is available at
7
 * http://www.sun.com/
8
 *
9
 * The Original Code is NetBeans. The Initial Developer of the Original
10
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
11
 * Microsystems, Inc. All Rights Reserved.
12
 */
13
14
package org.netbeans.modules.refactoring.ui;
15
16
import java.awt.Component;
17
import java.util.Enumeration;
18
import java.util.SortedSet;
19
import java.util.TreeSet;
20
import javax.swing.ComboBoxModel;
21
import javax.swing.DefaultComboBoxModel;
22
import javax.swing.DefaultListCellRenderer;
23
import javax.swing.DefaultListModel;
24
import javax.swing.Icon;
25
import javax.swing.ImageIcon;
26
import javax.swing.JList;
27
import javax.swing.ListCellRenderer;
28
import org.netbeans.api.project.SourceGroup;
29
import org.openide.filesystems.FileObject;
30
import org.openide.filesystems.FileUtil;
31
32
// XXX COPIED FROM java/project; cf. #48618
33
34
/**
35
 * Factory for list-oriented views of packages.
36
 * Future candidates for inclusion in {@link org.netbeans.spi.java.project.support.ui.PackageView}.
37
 * @author Jesse Glick
38
 */
39
public final class PackageListView {
40
    
41
    private PackageListView() {}
42
    
43
    /**
44
     * Create a list or combo box model suitable for {@link javax.swing.JList} from a source group
45
     * showing all Java packages in the source group.
46
     * To display it you will also need {@link #listRenderer}.
47
     * <p>No particular guarantees are made as to the nature of the model objects themselves,
48
     * except that {@link Object#toString} will give the fully-qualified package name
49
     * (or <code>""</code> for the default package), regardless of what the renderer
50
     * actually displays.</p>
51
     * @param group a Java-like source group
52
     * @return a model of its packages
53
     */
54
    public static ComboBoxModel createListView(SourceGroup group) {
55
        DefaultListModel model = new DefaultListModel();
56
        SortedSet/*<PackageItem>*/ items = new TreeSet();
57
        FileObject root = group.getRootFolder();
58
        if (PackageDisplayUtils.isSignificant(root)) {
59
            items.add(new PackageItem(group, root));
60
        }
61
        Enumeration/*<FileObject>*/ files = root.getChildren(true);
62
        while (files.hasMoreElements()) {
63
            FileObject f = (FileObject) files.nextElement();
64
            if (f.isFolder() && PackageDisplayUtils.isSignificant(f)) {
65
                items.add(new PackageItem(group, f));
66
            }
67
        }
68
        return new DefaultComboBoxModel(items.toArray(new PackageItem[items.size()]));
69
    }
70
    
71
    /**
72
     * Create a renderer suited to rendering models created using {@link #createListView}.
73
     * The exact nature of the display is not specified.
74
     * @return a suitable package renderer
75
     */
76
    public static ListCellRenderer listRenderer() {
77
        return new PackageListCellRenderer();
78
    }
79
    
80
    /**
81
     * Model item representing one package.
82
     */
83
    private static final class PackageItem implements Comparable {
84
        
85
        private final FileObject pkg;
86
        private final String pkgname;
87
        
88
        public PackageItem(SourceGroup group, FileObject pkg) {
89
            this.pkg = pkg;
90
            String path = FileUtil.getRelativePath(group.getRootFolder(), pkg);
91
            assert path != null : "No " + pkg + " in " + group;
92
            pkgname = path.replace('/', '.');
93
        }
94
        
95
        public String toString() {
96
            return pkgname;
97
        }
98
        
99
        public String getLabel() {
100
            return PackageDisplayUtils.getDisplayLabel(pkg, pkgname);
101
        }
102
        
103
        public Icon getIcon() {
104
            return new ImageIcon(PackageDisplayUtils.getIcon(pkg, pkgname));
105
        }
106
107
        public int compareTo(Object obj) {
108
            return pkgname.compareTo(((PackageItem) obj).pkgname);
109
        }
110
        
111
    }
112
    
113
    /**
114
     * The renderer which just displays {@link PackageItem#getLabel} and {@link PackageItem#getIcon}.
115
     */
116
    private static final class PackageListCellRenderer extends DefaultListCellRenderer {
117
        
118
        public PackageListCellRenderer() {}
119
120
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
121
            PackageItem pkgitem = (PackageItem) value;
122
            super.getListCellRendererComponent(list, pkgitem.getLabel(), index, isSelected, cellHasFocus);
123
            setIcon(pkgitem.getIcon());
124
            return this;
125
        }
126
        
127
    }
128
    
129
}

Return to bug 53244