1 11 package mondrian.gui; 12 13 import javax.swing.*; 14 import java.awt.*; 15 import javax.swing.border.*; 16 import javax.swing.table.TableCellRenderer ; 17 18 23 public class SchemaPropertyCellRenderer extends javax.swing.table.DefaultTableCellRenderer { 24 JLabel stringRenderer; 25 JCheckBox booleanRenderer; 26 JLabel integerRenderer; 27 JTable tableRenderer; 28 JComboBox listRenderer; 29 30 JComboBox relationList; JTable relationTable; 32 JPanel relationRenderer,rlPanel;; 33 JScrollPane jScrollPaneT; 34 37 static public Color attributeBackground ; 38 39 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.setBorder(new EmptyBorder(0, 0, 0, 0)); listRenderer.setRenderer(new ListRenderer(listRenderer.getRenderer())); 61 62 68 relationRenderer = new JPanel(); 69 70 rlPanel = new JPanel(); 71 relationList = new JComboBox( new String [] {"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 (255, 204, 204)); 80 relationTable.setTableHeader(null); 82 jScrollPaneT = new JScrollPane(); 83 jScrollPaneT.setViewportBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color (255, 0, 255), 2)); 84 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 98 105 tableRenderer = new JTable(); 106 } 107 108 public JCheckBox getBooleanRenderer() { 109 return booleanRenderer; 110 } 111 112 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 113 114 if (column == 1) { 115 116 120 stringRenderer.setOpaque(false); 121 stringRenderer.setToolTipText(null); 122 stringRenderer.setBackground(Color.white); 123 124 if (value instanceof String ) { 125 stringRenderer.setText((String )value); 126 return stringRenderer; 127 } else if (value instanceof Boolean ) { 128 booleanRenderer.setSelected((Boolean ) value); 129 return booleanRenderer; 130 } else if (value instanceof Integer ) { 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); return stringRenderer; 143 144 154 161 } else if (value.getClass() == MondrianGuiDef.OrdinalExpression.class) { 162 SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer(); 163 tableRenderer.setDefaultRenderer(Object .class, spcr); 164 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 .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 .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 .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 .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 .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 .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 .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 ) { 233 PropertyTableModel tableModel = (PropertyTableModel) table.getModel(); 235 String className = (tableModel.target.getClass()).getName(); 236 int pos = className.lastIndexOf("$"); 237 String tooltip = null; 238 if (pos > 0) { 239 String tipName = (className.substring(pos + 1)) + "," + 240 tableModel.getRowName(row); 241 tooltip = Workbench.getTooltip(tipName); 242 } 243 stringRenderer.setToolTipText(tooltip); 244 stringRenderer.setText((String )value); 245 stringRenderer.setOpaque(true); 246 stringRenderer.setBackground(new java.awt.Color (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 generateJoinStr(Object value) { 258 MondrianGuiDef.Join currentJoin = (MondrianGuiDef.Join)value; 259 String joinStr = "<html>" + generateLeftRightStr(currentJoin.left) + " <b>JOIN</b> " + generateLeftRightStr(currentJoin.right) +"</html>"; 260 return joinStr; 262 } 263 264 private String generateLeftRightStr(Object 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 joinStr = "(" + generateLeftRightStr(currentJoin.left) + " <b>JOIN</b> " + generateLeftRightStr(currentJoin.right) +")"; 270 return joinStr; 272 } 273 274 void setTableRendererHeight(JTable relationTable, JPanel relationRenderer) { 275 int tableH = 0; 276 int tableW = 0; 277 Object value = null; 278 for (int i = 0; i < relationTable.getRowCount(); i++) { 279 280 TableCellRenderer 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 ea) { 305 306 } 307 } 308 relationTable.setPreferredSize(new Dimension(tableW,tableH)); relationTable.setPreferredScrollableViewportSize(relationTable.getPreferredSize()); 314 if (relationRenderer != null) { 317 relationRenderer.setPreferredSize(jScrollPaneT.getPreferredSize()); relationRenderer.setMaximumSize(jScrollPaneT.getPreferredSize()); } 320 321 } 322 323 338 } 339 340 | Popular Tags |