KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > java > ui > ExtractInterfacePanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.refactoring.java.ui;
20
21 import java.awt.Component JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.List JavaDoc;
25 import javax.swing.JPanel JavaDoc;
26 import javax.swing.UIManager JavaDoc;
27 import javax.swing.event.ChangeListener JavaDoc;
28 import javax.swing.event.DocumentEvent JavaDoc;
29 import javax.swing.event.DocumentListener JavaDoc;
30 import javax.swing.table.AbstractTableModel JavaDoc;
31 import org.netbeans.api.java.source.TreePathHandle;
32 import org.netbeans.modules.refactoring.java.api.ExtractInterfaceRefactoring;
33 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel;
34 import org.openide.util.NbBundle;
35
36 /** UI panel for collecting refactoring parameters.
37  *
38  * @author Martin Matula, Jan Becicka
39  */

40 public class ExtractInterfacePanel extends JPanel JavaDoc implements CustomRefactoringPanel {
41     // helper constants describing columns in the table of members
42
private static final String JavaDoc[] COLUMN_NAMES = {"LBL_Selected", "LBL_ExtractInterface_Member"}; // NOI18N
43
private static final Class JavaDoc[] COLUMN_CLASSES = {Boolean JavaDoc.class, TreePathHandle.class};
44     
45     // refactoring this panel provides parameters for
46
private final ExtractInterfaceRefactoring refactoring;
47     // table model for the table of members
48
private final TableModel JavaDoc tableModel;
49     // data for the members table (first dimension - rows, second dimension - columns)
50
// the columns are: 0 = Selected (true/false), 1 = Member (Java element)
51
private Object JavaDoc[][] members = new Object JavaDoc[0][0];
52     
53     /** Creates new form ExtractInterfacePanel
54      * @param refactoring The refactoring this panel provides parameters for.
55      */

56     public ExtractInterfacePanel(ExtractInterfaceRefactoring refactoring, final ChangeListener JavaDoc parent) {
57         this.refactoring = refactoring;
58         this.tableModel = new TableModel JavaDoc();
59         initComponents();
60         setPreferredSize(new Dimension JavaDoc(420, 380));
61         String JavaDoc defaultName = "NewInterface"; //NOI18N
62
nameText.setText(defaultName);
63         nameText.setSelectionStart(0);
64         nameText.setSelectionEnd(defaultName.length());
65         nameText.getDocument().addDocumentListener(new DocumentListener JavaDoc() {
66             public void changedUpdate(DocumentEvent JavaDoc event) {
67                 parent.stateChanged(null);
68             }
69             public void insertUpdate(DocumentEvent JavaDoc event) {
70                 parent.stateChanged(null);
71             }
72             public void removeUpdate(DocumentEvent JavaDoc event) {
73                 parent.stateChanged(null);
74             }
75         });
76     }
77     
78     public void requestFocus() {
79         super.requestFocus();
80         nameText.requestFocus();
81     }
82     
83
84     /** Initialization of the panel (called by the parent window).
85      */

86     public void initialize() {
87         // *** initialize table
88
// set renderer for the second column ("Member") do display name of the feature
89
membersTable.setDefaultRenderer(COLUMN_CLASSES[1], new UIUtilities.JavaElementTableCellRenderer() {
90             // override the extractText method to add "implements " prefix to the text
91
// in case the value is instance of MultipartId (i.e. it represents an interface
92
// name from implements clause)
93
protected String JavaDoc extractText(Object JavaDoc value) {
94                 String JavaDoc displayValue = super.extractText(value);
95 // if (value instanceof MultipartId) {
96
// displayValue = "implements " + displayValue; // NOI18N
97
// }
98
return displayValue;
99             }
100         });
101         // set background color of the scroll pane to be the same as the background
102
// of the table
103
scrollPane.setBackground(membersTable.getBackground());
104         scrollPane.getViewport().setBackground(membersTable.getBackground());
105         // set default row height
106
membersTable.setRowHeight(18);
107         // set grid color to be consistent with other netbeans tables
108
if (UIManager.getColor("control") != null) { // NOI18N
109
membersTable.setGridColor(UIManager.getColor("control")); // NOI18N
110
}
111         // compute and set the preferred width for the first and the third column
112
UIUtilities.initColumnWidth(membersTable, 0, Boolean.TRUE, 4);
113     }
114     
115     // --- GETTERS FOR REFACTORING PARAMETERS ----------------------------------
116

117     /** Getter used by the refactoring UI to get value
118      * of interface name.
119      * @return Interface name.
120      */

121     public String JavaDoc getIfcName() {
122         return nameText.getText();
123     }
124     
125     /** Getter used by the refactoring UI to get members to be extracted.
126      * @return Members to be extracted.
127      */

128     public TreePathHandle[] getMembers() {
129         List JavaDoc list = new ArrayList JavaDoc();
130         // go through all rows of a table and collect selected members
131
for (int i = 0; i < members.length; i++) {
132             if (members[i][0].equals(Boolean.TRUE)) {
133                 list.add(members[i][1]);
134             }
135         }
136         // return the array of selected members
137
return (TreePathHandle[]) list.toArray(new TreePathHandle[list.size()]);
138     }
139     
140     // --- GENERATED CODE ------------------------------------------------------
141

142     /** This method is called from within the constructor to
143      * initialize the form.
144      * WARNING: Do NOT modify this code. The content of this method is
145      * always regenerated by the Form Editor.
146      */

147     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
148
private void initComponents() {
149
150         namePanel = new javax.swing.JPanel JavaDoc();
151         nameLabel = new javax.swing.JLabel JavaDoc();
152         chooseLabel = new javax.swing.JLabel JavaDoc();
153         nameText = new javax.swing.JTextField JavaDoc();
154         scrollPane = new javax.swing.JScrollPane JavaDoc();
155         membersTable = new javax.swing.JTable JavaDoc();
156
157         setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 11, 11));
158         setLayout(new java.awt.BorderLayout JavaDoc());
159
160         namePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
161         namePanel.setLayout(new java.awt.BorderLayout JavaDoc(12, 0));
162
163         nameLabel.setLabelFor(nameText);
164         org.openide.awt.Mnemonics.setLocalizedText(nameLabel, org.openide.util.NbBundle.getMessage(ExtractInterfacePanel.class, "LBL_ExtractInterface_Name")); // NOI18N
165
namePanel.add(nameLabel, java.awt.BorderLayout.WEST);
166         nameLabel.getAccessibleContext().setAccessibleName(null);
167         nameLabel.getAccessibleContext().setAccessibleDescription(null);
168
169         chooseLabel.setLabelFor(membersTable);
170         org.openide.awt.Mnemonics.setLocalizedText(chooseLabel, org.openide.util.NbBundle.getMessage(ExtractInterfacePanel.class, "LBL_ExtractInterfaceLabel")); // NOI18N
171
chooseLabel.setBorder(javax.swing.BorderFactory.createEmptyBorder(6, 0, 0, 0));
172         namePanel.add(chooseLabel, java.awt.BorderLayout.SOUTH);
173         namePanel.add(nameText, java.awt.BorderLayout.CENTER);
174
175         add(namePanel, java.awt.BorderLayout.NORTH);
176
177         membersTable.setModel(tableModel);
178         membersTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_NEXT_COLUMN);
179         scrollPane.setViewportView(membersTable);
180         membersTable.getAccessibleContext().setAccessibleName(null);
181         membersTable.getAccessibleContext().setAccessibleDescription(null);
182
183         add(scrollPane, java.awt.BorderLayout.CENTER);
184     }// </editor-fold>//GEN-END:initComponents
185

186     
187     // Variables declaration - do not modify//GEN-BEGIN:variables
188
private javax.swing.JLabel JavaDoc chooseLabel;
189     private javax.swing.JTable JavaDoc membersTable;
190     private javax.swing.JLabel JavaDoc nameLabel;
191     private javax.swing.JPanel JavaDoc namePanel;
192     private javax.swing.JTextField JavaDoc nameText;
193     private javax.swing.JScrollPane JavaDoc scrollPane;
194     // End of variables declaration//GEN-END:variables
195

196     // --- MODELS --------------------------------------------------------------
197

198     /** Model for the members table.
199      */

200     private class TableModel extends AbstractTableModel JavaDoc {
201         TableModel() {
202             initialize();
203         }
204         
205         public int getColumnCount() {
206             return COLUMN_NAMES.length;
207         }
208
209         public String JavaDoc getColumnName(int column) {
210             return UIUtilities.getColumnName(NbBundle.getMessage(ExtractInterfacePanel.class, COLUMN_NAMES[column]));
211         }
212
213         public Class JavaDoc getColumnClass(int columnIndex) {
214             return COLUMN_CLASSES[columnIndex];
215         }
216
217         public int getRowCount() {
218             return members.length;
219         }
220
221         public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
222             return members[rowIndex][columnIndex];
223         }
224
225         public void setValueAt(Object JavaDoc value, int rowIndex, int columnIndex) {
226             members[rowIndex][columnIndex] = value;
227         }
228
229         public boolean isCellEditable(int rowIndex, int columnIndex) {
230             // column 0 is always editable, column 1 is never editable
231
return columnIndex == 0;
232         }
233         
234
235         private void initialize() {
236 // TreePathHandle sourceType = refactoring.getSourceType();
237
// if (sourceType == null) return;
238
//
239
// ArrayList result = new ArrayList();
240
//
241
// for (Iterator it = sourceType.getInterfaceNames().iterator(); it.hasNext();) {
242
// result.add(it.next());
243
// }
244
// // collect fields, methods and inner classes
245
// Feature[] features = (Feature[]) sourceType.getFeatures().toArray(new Feature[0]);
246
// for (int j = 0; j < features.length; j++) {
247
// if (refactoring.acceptFeature(features[j])) {
248
// result.add(features[j]);
249
// }
250
// }
251
// // the members are collected
252
// // now, create a tree map (to sort them) and create the table data
253
// Collections.sort(result, new Comparator() {
254
// public int compare(Object o1, Object o2) {
255
// NamedElement ne1 = (NamedElement) o1, ne2 = (NamedElement) o2;
256
// // elements are sorted primarily by their class name
257
// int result = ne1.getClass().getName().compareTo(ne2.getClass().getName());
258
// if (result == 0) {
259
// // then by their display text
260
// result = UIUtilities.getDisplayText(ne1).compareTo(UIUtilities.getDisplayText(ne2));
261
// }
262
// if (result == 0) {
263
// // then the mofid is compared (to not take two non-identical
264
// // elements as equals)
265
// result = ne1.refMofId().compareTo(ne2.refMofId());
266
// }
267
// return result;
268
// }
269
// });
270
// members = new Object[result.size()][2];
271
// for (int i = 0; i < members.length; i++) {
272
// members[i][0] = Boolean.FALSE;
273
// members[i][1] = result.get(i);
274
// }
275
// // fire event to repaint the table
276
// this.fireTableDataChanged();
277
}
278     }
279
280     public Component JavaDoc getComponent() {
281         return this;
282     }
283 }
284
Popular Tags