KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > gui > SchemaPropertyCellRenderer


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/gui/SchemaPropertyCellRenderer.java#7 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 2002-2007 Julian Hyde and others
7 // Copyright (C) 2006-2007 CINCOM SYSTEMS, INC.
8 // All Rights Reserved.
9 // You must accept the terms of that agreement to use this software.
10 */

11 package mondrian.gui;
12
13 import javax.swing.*;
14 import java.awt.*;
15 import javax.swing.border.*;
16 import javax.swing.table.TableCellRenderer JavaDoc;
17
18 /**
19  *
20  * @author sean
21  * @version $Id: //open/mondrian/src/main/mondrian/gui/SchemaPropertyCellRenderer.java#7 $
22  */

23 public class SchemaPropertyCellRenderer extends javax.swing.table.DefaultTableCellRenderer JavaDoc {
24     JLabel stringRenderer;
25     JCheckBox booleanRenderer;
26     JLabel integerRenderer;
27     JTable tableRenderer;
28     JComboBox listRenderer;
29
30     JComboBox relationList; // Join, Table
31
JTable relationTable;
32     JPanel relationRenderer,rlPanel;;
33     JScrollPane jScrollPaneT;
34     /* all objects of this class will use this color value to render attribute column
35      * this value is initialized by SchemaExplorer to the scrollpane background color value.
36      */

37     static public Color attributeBackground ;
38
39     /** Creates a new instance of SchemaPropertyCellRenderer */
40     public SchemaPropertyCellRenderer() {
41
42         super.setBackground(attributeBackground);
43
44         stringRenderer = new JLabel();
45         stringRenderer.setFont(Font.decode("Dialog"));
46
47         booleanRenderer = new JCheckBox();
48         booleanRenderer.setBackground(Color.white);
49         integerRenderer = new JLabel();
50         integerRenderer.setHorizontalAlignment(JTextField.RIGHT);
51         integerRenderer.setFont(Font.decode("Courier"));
52
53
54         listRenderer = new JComboBox(MondrianGuiDef.Measure._aggregator_values);
55         listRenderer.setMaximumSize(stringRenderer.getMaximumSize());
56         listRenderer.setFont(Font.decode("Dialog"));
57         listRenderer.setBackground(Color.white);
58         //listRenderer.setModel(new ComboBoxModel());
59
listRenderer.setBorder(new EmptyBorder(0, 0, 0, 0)); //super.noFocusBorder);
60
listRenderer.setRenderer(new ListRenderer(listRenderer.getRenderer()));
61
62         /*
63         relationListRenderer = new JComboBox( new String[] {"Join", "Table"} );
64         relationListRenderer.setMaximumSize(stringRenderer.getMaximumSize());
65         relationListRenderer.setFont(Font.decode("Dialog"));
66         relationListRenderer.setBackground(Color.white);
67          */

68         relationRenderer = new JPanel();
69
70         rlPanel = new JPanel();
71         relationList = new JComboBox( new String JavaDoc[] {"Join", "Table"} );
72         relationList.setMaximumSize(new Dimension(55,22));
73         relationList.setPreferredSize(new Dimension(55,22));
74         relationList.setMinimumSize(new Dimension(55,22));
75         relationList.setFont(Font.decode("Dialog"));
76         relationList.setBackground(Color.white);
77
78         relationTable = new JTable();
79         relationTable.setBackground(new java.awt.Color JavaDoc(255, 204, 204));
80         relationTable.setTableHeader(null); // to remove table headers 'Property', 'Value''
81

82         jScrollPaneT = new JScrollPane();
83         jScrollPaneT.setViewportBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color JavaDoc(255, 0, 255), 2));
84         //jScrollPaneT.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
85
jScrollPaneT.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
86         jScrollPaneT.setViewportView(relationTable);
87
88         relationRenderer.setLayout(new BorderLayout());
89         rlPanel.add(relationList);
90         relationRenderer.add(rlPanel,java.awt.BorderLayout.WEST);
91         relationRenderer.add(jScrollPaneT,java.awt.BorderLayout.CENTER);
92
93
94         relationRenderer.setBackground(Color.white);
95
96         //relationRenderer.add(jScrollPaneT,java.awt.BorderLayout.CENTER);
97

98         //JPanel relPanel = new JPanel(); // default flowlayout
99
//relPanel.add(relationList);
100
//relPanel.add(jScrollPaneT);
101
//relationRenderer.add(relationTable);
102
//relationRenderer.add(relPanel,java.awt.BorderLayout.CENTER);
103
//relationRenderer.add(jScrollPaneT);
104

105         tableRenderer = new JTable();
106     }
107
108     public JCheckBox getBooleanRenderer() {
109         return booleanRenderer;
110     }
111
112     public Component getTableCellRendererComponent(JTable table, Object JavaDoc value, boolean isSelected, boolean hasFocus, int row, int column) {
113
114         if (column == 1) {
115
116             /*if ((((PropertyTableModel) table.getModel()).target.getClass() == MondrianGuiDef.Measure.class) && (row==1)) {
117                 listRenderer.setSelectedItem((String)value);
118                 return listRenderer;
119             } else */

120             stringRenderer.setOpaque(false);
121             stringRenderer.setToolTipText(null);
122             stringRenderer.setBackground(Color.white);
123
124             if (value instanceof String JavaDoc) {
125                 stringRenderer.setText((String JavaDoc)value);
126                 return stringRenderer;
127             } else if (value instanceof Boolean JavaDoc) {
128                 booleanRenderer.setSelected((Boolean JavaDoc) value);
129                 return booleanRenderer;
130             } else if (value instanceof Integer JavaDoc) {
131                 integerRenderer.setText(value.toString());
132                 return integerRenderer;
133             } else if (value == null) {
134                 return null;
135             } else if (value.getClass() == MondrianGuiDef.Join.class) {
136
137                 stringRenderer.setText(generateJoinStr(value));
138
139                 stringRenderer.setToolTipText("Select the Join/Table object from Schema tree to edit.");
140                 stringRenderer.setOpaque(true);
141                 stringRenderer.setBackground(Color.LIGHT_GRAY); //new java.awt.Color(184, 207, 229)
142
return stringRenderer;
143
144                 /* 2: Displaying Join in nested pink boxes
145                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
146                 relationTable.setDefaultRenderer(Object.class, spcr);
147                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_JOIN);
148                 relationTable.setModel(ptm);
149                 relationTable.getColumnModel().getColumn(0).setMaxWidth(100);
150                 relationTable.getColumnModel().getColumn(0).setMinWidth(100);
151                 setTableRendererHeight(relationTable, relationRenderer); //setTableRendererHeight();
152                 return relationRenderer;
153                  */

154                 /* 1: original version of displaying Join type values
155                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
156                 tableRenderer.setDefaultRenderer(Object.class, spcr);
157                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_JOIN);
158                 tableRenderer.setModel(ptm);
159                 return tableRenderer;
160                  **/

161             } else if (value.getClass() == MondrianGuiDef.OrdinalExpression.class) {
162                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
163                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
164                 //===PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_SQL);
165
PropertyTableModel ptm = new PropertyTableModel(((MondrianGuiDef.OrdinalExpression)value).expressions[0],SchemaExplorer.DEF_SQL);
166                 tableRenderer.setModel(ptm);
167                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
168                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
169                 return tableRenderer;
170             } else if (value.getClass() == MondrianGuiDef.Formula.class) {
171                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
172                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
173                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_FORMULA);
174                 tableRenderer.setModel(ptm);
175                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
176                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
177                 return tableRenderer;
178             } else if (value.getClass() == MondrianGuiDef.CalculatedMemberProperty.class) {
179                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
180                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
181                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_CALCULATED_MEMBER_PROPERTY);
182                 tableRenderer.setModel(ptm);
183                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
184                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
185                 return tableRenderer;
186             } else if (value.getClass() == MondrianGuiDef.Relation.class) {
187                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
188                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
189                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_RELATION);
190                 tableRenderer.setModel(ptm);
191                 return tableRenderer;
192             } else if (value.getClass() == MondrianGuiDef.Table.class) {
193                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
194                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
195                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_TABLE);
196                 tableRenderer.setModel(ptm);
197                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
198                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
199                 return tableRenderer;
200             } else if (value.getClass() == MondrianGuiDef.AggFactCount.class) {
201                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
202                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
203                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_AGG_FACT_COUNT);
204                 tableRenderer.setModel(ptm);
205                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
206                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
207                 return tableRenderer;
208             } else if (value.getClass() == MondrianGuiDef.Closure.class) {
209
210
211
212                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
213                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
214                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_CLOSURE);
215                 tableRenderer.setModel(ptm);
216                 tableRenderer.getColumnModel().getColumn(0).setMaxWidth(100);
217                 tableRenderer.getColumnModel().getColumn(0).setMinWidth(100);
218                 setTableRendererHeight(tableRenderer, null);
219                 return tableRenderer;
220             } else if (value.getClass() == MondrianGuiDef.Property.class) {
221                 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
222                 tableRenderer.setDefaultRenderer(Object JavaDoc.class, spcr);
223                 PropertyTableModel ptm = new PropertyTableModel(value,SchemaExplorer.DEF_PROPERTY);
224                 tableRenderer.setModel(ptm);
225                 return tableRenderer;
226             } else {
227                 return null;
228             }
229
230         }
231         else {
232             if (value instanceof String JavaDoc) {
233                 // use data from workbenchInfo.properties as tooltip when available
234
PropertyTableModel tableModel = (PropertyTableModel) table.getModel();
235                 String JavaDoc className = (tableModel.target.getClass()).getName();
236                 int pos = className.lastIndexOf("$");
237                 String JavaDoc tooltip = null;
238                 if (pos > 0) {
239                     String JavaDoc tipName = (className.substring(pos + 1)) + "," +
240                         tableModel.getRowName(row);
241                     tooltip = Workbench.getTooltip(tipName);
242                 }
243                 stringRenderer.setToolTipText(tooltip);
244                 stringRenderer.setText((String JavaDoc)value);
245                 stringRenderer.setOpaque(true);
246                 stringRenderer.setBackground(new java.awt.Color JavaDoc(221, 221, 221));
247                 if (isSelected && hasFocus) {
248                     table.editCellAt(row, 1);
249                 }
250                 return stringRenderer;
251             }
252         }
253         return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
254
255     }
256
257     private String JavaDoc generateJoinStr(Object JavaDoc value) {
258         MondrianGuiDef.Join currentJoin = (MondrianGuiDef.Join)value;
259         String JavaDoc joinStr = "<html>" + generateLeftRightStr(currentJoin.left) + " <b>JOIN</b> " + generateLeftRightStr(currentJoin.right) +"</html>";
260         //===String joinStr = "<html>" + " <b>JOIN</b> (<blockquote>" + generateLeftRightStr(currentJoin.left) + "<br>" + generateLeftRightStr(currentJoin.right) + "<br>)</blockquote>" +"</html>";
261
return joinStr;
262     }
263
264     private String JavaDoc generateLeftRightStr(Object JavaDoc value) {
265         MondrianGuiDef.Relation currentObj = (MondrianGuiDef.Relation) value;
266         if (currentObj instanceof MondrianGuiDef.Table)
267             return (((MondrianGuiDef.Table) currentObj).alias == null || ((MondrianGuiDef.Table) currentObj).alias.equals("")?((MondrianGuiDef.Table) currentObj).name:((MondrianGuiDef.Table) currentObj).alias);
268         MondrianGuiDef.Join currentJoin = (MondrianGuiDef.Join)currentObj;
269         String JavaDoc joinStr = "(" + generateLeftRightStr(currentJoin.left) + " <b>JOIN</b> " + generateLeftRightStr(currentJoin.right) +")";
270         //===String joinStr = " <b>JOIN</b> (<blockquote>" + generateLeftRightStr(currentJoin.left) + "<br>" + generateLeftRightStr(currentJoin.right) + "<br>)</blockquote>" ;
271
return joinStr;
272     }
273
274     void setTableRendererHeight(JTable relationTable, JPanel relationRenderer) {
275         int tableH = 0;
276         int tableW = 0;
277         Object JavaDoc value = null;
278         for (int i = 0; i < relationTable.getRowCount(); i++) {
279
280             TableCellRenderer JavaDoc renderer = relationTable.getCellRenderer(i, 1);
281             Component comp = renderer.getTableCellRendererComponent(relationTable, relationTable.getValueAt(i, 1), false, false, i, 1);
282             try {
283                 int height=0;
284                 int width=0;
285                 if (comp != null) {
286                     height = comp.getMaximumSize().height;
287                     width = comp.getMaximumSize().width;
288                     relationTable.setRowHeight(i, height);
289                 }
290
291                 value = relationTable.getValueAt(i, 1);
292                 if ( value instanceof MondrianGuiDef.Relation) {
293                     tableH += comp.getPreferredSize().height;
294                     tableW = Math.max(tableW, comp.getPreferredSize().width +stringRenderer.getMaximumSize().width);
295                 } else if (value == null) {
296                     tableH += stringRenderer.getMaximumSize().height;
297                     tableW = Math.max(tableW, stringRenderer.getMaximumSize().width * 2);
298                 } else {
299                     tableH += height;
300                     tableW = Math.max(tableW, width * 2);
301
302                 }
303
304             } catch (Exception JavaDoc ea) {
305
306             }
307         }
308         //===relationTable.setPreferredSize(new Dimension(200,200)); //table height changes
309
//===relationTable.setPreferredScrollableViewportSize(new Dimension(200,200)); //scrollpane adjusts to new table height, it also changes scrollpanes' preferred size values'
310
relationTable.setPreferredSize(new Dimension(tableW,tableH)); //table height changes
311
relationTable.setPreferredScrollableViewportSize(relationTable.getPreferredSize()); //scrollpane adjusts to new table height, it also changes scrollpanes' preferred size values'
312
//relationTable.revalidate(); // not required.
313

314         // lets set the parent panel now
315
//jPanel1.setSize(jScrollPane1.getPreferredSize()); no, does not change green panel size
316
if (relationRenderer != null) {
317             relationRenderer.setPreferredSize(jScrollPaneT.getPreferredSize()); //good, it changes panel size
318
relationRenderer.setMaximumSize(jScrollPaneT.getPreferredSize()); //good, it changes panel size
319
}
320
321     }
322
323  /*
324     private void setTableRendererHeight2() {
325         for (int i = 0; i < relationTable.getRowCount(); i++) {
326             TableCellRenderer renderer = relationTable.getCellRenderer(i, 1);
327             Component comp = renderer.getTableCellRendererComponent(relationTable, relationTable.getValueAt(i, 1), false, false, i, 1);
328             try {
329                 int height = comp.getMaximumSize().height;
330                 relationTable.setRowHeight(i, height);
331             } catch (Exception ea) {
332
333             }
334
335         }
336     }
337   */

338 }
339
340 // End SchemaPropertyCellRenderer.java
341
Popular Tags