KickJava   Java API By Example, From Geeks To Geeks.

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


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.Set JavaDoc;
24 import javax.swing.JPanel JavaDoc;
25 import javax.swing.table.AbstractTableModel JavaDoc;
26 import org.netbeans.api.java.source.TreePathHandle;
27 import org.netbeans.modules.refactoring.java.api.PushDownRefactoring;
28 import org.netbeans.modules.refactoring.spi.ui.CustomRefactoringPanel;
29 import org.openide.util.NbBundle;
30
31
32 /**
33  *
34  * @author Pavel Flaska
35  */

36 public class PushDownPanel extends JPanel JavaDoc implements CustomRefactoringPanel {
37     
38     // helper constants describing columns in the table of members
39
private static final String JavaDoc[] COLUMN_NAMES = {"LBL_PullUp_Selected", "LBL_PullUp_Member", "LBL_PushDown_KeepAbstract"}; // NOI18N
40
private static final Class JavaDoc[] COLUMN_CLASSES = {Boolean JavaDoc.class, TreePathHandle.class, Boolean JavaDoc.class};
41     
42     // refactoring this panel provides parameters for
43
private final PushDownRefactoring refactoring;
44     // table model for the table of members
45
private final TableModel JavaDoc tableModel;
46     // pre-selected members (comes from the refactoring action - the elements
47
// that should be pre-selected in the table of members)
48
private Set JavaDoc selectedMembers;
49     // target type to move the members to
50
private TreePathHandle originalType;
51     // data for the members table (first dimension - rows, second dimension - columns)
52
// the columns are: 0 = Selected (true/false), 1 = Member (Java element), 2 = Make Abstract (true/false)
53
private Object JavaDoc[][] members = new Object JavaDoc[0][0];
54     
55     /** Creates new form PushDownPanel
56      * @param refactoring The refactoring this panel provides parameters for.
57      * @param selectedMembers Members that should be pre-selected in the panel
58      * (determined by which nodes the action was invoked on - e.g. if it was
59      * invoked on a method, the method will be pre-selected to be pulled up)
60      */

61     public PushDownPanel(PushDownRefactoring refactoring, Set JavaDoc selectedMembers) {
62         this.refactoring = refactoring;
63         this.tableModel = new TableModel JavaDoc();
64         this.selectedMembers = selectedMembers;
65         initComponents();
66         setPreferredSize(new Dimension JavaDoc(420, 380));
67     }
68     
69     public void initialize() {
70         // *** initialize table
71
// List l = new ArrayList();
72
// l.addAll(refactoring.getSourceType().getFeatures());
73
// l.addAll(refactoring.getSourceType().getInterfaceNames());
74
// Object[][] allMembers = new Object[l.size()][3];
75
// int i = 0;
76
// for (Iterator it = l.iterator(); it.hasNext(); ) {
77
// Object o = it.next();
78
// if (o instanceof JavaClass || o instanceof Method || o instanceof Field || o instanceof MultipartId) {
79
// allMembers[i][0] = selectedMembers.contains(o) ? Boolean.TRUE : Boolean.FALSE;
80
// allMembers[i][1] = o;
81
// allMembers[i][2] = o instanceof Method ? Boolean.FALSE : null;
82
// i++;
83
// }
84
// }
85
// members = new Object[i][3];
86
// if (i > 0)
87
// System.arraycopy(allMembers, 0, members, 0, i);
88
//
89
// // set renderer for the second column ("Member") do display name of the feature
90
// membersTable.setDefaultRenderer(COLUMN_CLASSES[1], new UIUtilities.JavaElementTableCellRenderer() {
91
// // override the extractText method to add "implements " prefix to the text
92
// // in case the value is instance of MultipartId (i.e. it represents an interface
93
// // name from implements clause)
94
// protected String extractText(Object value) {
95
// String displayValue = super.extractText(value);
96
// if (value instanceof MultipartId) {
97
// displayValue = "implements " + displayValue; // NOI18N
98
// }
99
// return displayValue;
100
// }
101
// });
102
// // send renderer for the third column ("Make Abstract") to make the checkbox:
103
// // 1. hidden for elements that are not methods
104
// // 2. be disabled for static methods
105
// // 3. be disabled and checked for methods if the target type is an interface
106
// membersTable.getColumnModel().getColumn(2).setCellRenderer(new UIUtilities.BooleanTableCellRenderer() {
107
// public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
108
// // make the checkbox checked (even if "Make Abstract" is not set)
109
// // for non-static methods if the target type is an interface
110
// Object object = table.getModel().getValueAt(row, 1);
111
// if (object instanceof Method) {
112
// if (refactoring.getSourceType().isInterface() && !Modifier.isStatic(((Method) object).getModifiers())) {
113
// value = Boolean.TRUE;
114
// }
115
// }
116
// // the super method automatically makes sure the checkbox is not visible if the
117
// // "Make Abstract" value is null (which holds for non-methods)
118
// // and that the checkbox is disabled if the cell is not editable (which holds for
119
// // static methods all the time and for all methods in case the target type is an interface
120
// // - see the table model)
121
// return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
122
// }
123
// });
124
// // set background color of the scroll pane to be the same as the background
125
// // of the table
126
// membersScrollPane.setBackground(membersTable.getBackground());
127
// membersScrollPane.getViewport().setBackground(membersTable.getBackground());
128
// // set default row height
129
// membersTable.setRowHeight(18);
130
// // set grid color to be consistent with other netbeans tables
131
// if (UIManager.getColor("control") != null) { // NOI18N
132
// membersTable.setGridColor(UIManager.getColor("control")); // NOI18N
133
// }
134
// // compute and set the preferred width for the first and the third column
135
// UIUtilities.initColumnWidth(membersTable, 0, Boolean.TRUE, 4);
136
// UIUtilities.initColumnWidth(membersTable, 2, Boolean.TRUE, 4);
137
}
138     
139     public PushDownRefactoring.MemberInfo[] getMembers() {
140 // List list = new ArrayList();
141
// // go through all rows of a table and collect selected members
142
// for (int i = 0; i < members.length; i++) {
143
// // if the current row is selected, create MemberInfo for it and
144
// // add it to the list of selected members
145
// if (members[i][0].equals(Boolean.TRUE)) {
146
// Object element = members[i][1];
147
// Object member;
148
// if (element instanceof Field) {
149
// member = new PushDownRefactoring.MemberInfo((Field) element);
150
// } else if (element instanceof JavaClass) {
151
// member = new PushDownRefactoring.MemberInfo((JavaClass) element);
152
// } else if (element instanceof MultipartId) {
153
// member = new PushDownRefactoring.MemberInfo((MultipartId) element);
154
// } else {
155
// // for methods the makeAbstract is always set to true if the
156
// // target type is an interface
157
// member = new PushDownRefactoring.MemberInfo((Method) element, ((Boolean) members[i][2]).booleanValue());
158
// }
159
// list.add(member);
160
// }
161
// }
162
// // return the array of selected members
163
// return (PushDownRefactoring.MemberInfo[]) list.toArray(new PushDownRefactoring.MemberInfo[list.size()]);
164
return new PushDownRefactoring.MemberInfo[0];
165     }
166     
167     /** This method is called from within the constructor to
168      * initialize the form.
169      * WARNING: Do NOT modify this code. The content of this method is
170      * always regenerated by the Form Editor.
171      */

172     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
173
private void initComponents() {
174         membersScrollPane = new javax.swing.JScrollPane JavaDoc();
175         membersTable = new javax.swing.JTable JavaDoc();
176         chooseLabel = new javax.swing.JLabel JavaDoc();
177
178         setLayout(new java.awt.BorderLayout JavaDoc());
179
180         setName(org.openide.util.NbBundle.getMessage(PushDownPanel.class, "LBL_PushDown_Header", new Object JavaDoc[] {UIUtilities.getDisplayText(refactoring.getSourceType())}) /* NOI18N */);
181         membersScrollPane.setToolTipText("");
182         membersTable.setModel(tableModel);
183         membersScrollPane.setViewportView(membersTable);
184         membersTable.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(PushDownPanel.class, "ACSD_MembersToPushDown"));
185         membersTable.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(PushDownPanel.class, "ACSD_MembersToPushDownDescription"));
186
187         add(membersScrollPane, java.awt.BorderLayout.CENTER);
188
189         chooseLabel.setLabelFor(membersTable);
190         org.openide.awt.Mnemonics.setLocalizedText(chooseLabel, org.openide.util.NbBundle.getMessage(PushDownPanel.class, "LBL_PushDownLabel"));
191         add(chooseLabel, java.awt.BorderLayout.NORTH);
192
193     }
194     // </editor-fold>//GEN-END:initComponents
195
//GEN-FIRST:event_jComboBox1ActionPerformed
196
//GEN-LAST:event_jComboBox1ActionPerformed
197
// Variables declaration - do not modify//GEN-BEGIN:variables
198
private javax.swing.JLabel JavaDoc chooseLabel;
199     private javax.swing.JScrollPane JavaDoc membersScrollPane;
200     private javax.swing.JTable JavaDoc membersTable;
201     // End of variables declaration//GEN-END:variables
202
private class TableModel extends AbstractTableModel JavaDoc {
203         
204         public int getColumnCount() {
205             return COLUMN_NAMES.length;
206         }
207
208         public String JavaDoc getColumnName(int column) {
209             return UIUtilities.getColumnName(NbBundle.getMessage(PushDownPanel.class, COLUMN_NAMES[column]));
210         }
211
212         public Class JavaDoc getColumnClass(int columnIndex) {
213             return COLUMN_CLASSES[columnIndex];
214         }
215
216         public int getRowCount() {
217             return members.length;
218         }
219
220         public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
221             return members[rowIndex][columnIndex];
222         }
223
224         public void setValueAt(Object JavaDoc value, int rowIndex, int columnIndex) {
225             members[rowIndex][columnIndex] = value;
226         }
227
228         public boolean isCellEditable(int rowIndex, int columnIndex) {
229             if (columnIndex == 2) {
230                 // column 2 is editable only in case of non-static methods
231
// if the target type is not an interface
232
if (members[rowIndex][2] == null) {
233                     return false;
234                 }
235                 Object JavaDoc element = members[rowIndex][1];
236                 //TODO:
237
// return !refactoring.getSourceType().isInterface() && !Modifier.isStatic(((Method) element).getModifiers());
238
return false;
239             } else {
240                 // column 0 is always editable, column 1 is never editable
241
return columnIndex == 0;
242             }
243         }
244     }
245
246     public Component JavaDoc getComponent() {
247         return this;
248     }
249 }
250
Popular Tags