1 4 package com.tc.servers; 5 6 import org.dijon.Button; 7 import org.dijon.Container; 8 import org.dijon.TextField; 9 10 import com.tc.admin.common.XCellEditor; 11 import com.tc.admin.common.XObjectTable; 12 import com.tc.admin.common.XTableCellRenderer; 13 import com.tc.admin.common.XTextField; 14 15 import java.awt.BorderLayout ; 16 import java.awt.Color ; 17 import java.awt.Insets ; 18 import java.awt.event.ActionEvent ; 19 import java.awt.event.ActionListener ; 20 import java.io.File ; 21 22 import javax.swing.JComponent ; 23 import javax.swing.JFileChooser ; 24 import javax.swing.JTable ; 25 import javax.swing.UIManager ; 26 import javax.swing.border.Border ; 27 import javax.swing.border.EmptyBorder ; 28 import javax.swing.table.TableCellEditor ; 29 import javax.swing.table.TableCellRenderer ; 30 31 public class ServerEnvTable extends XObjectTable { 32 private TableCellRenderer m_renderer; 33 private TableCellEditor m_editor; 34 private JFileChooser m_chsr; 35 private File m_lastDir; 36 37 protected static Border noFocusBorder = new EmptyBorder (1,1,1,1); 38 39 public ServerEnvTable() { 40 super(); 41 } 42 43 public TableCellRenderer getCellRenderer(int row, int col) { 44 if(col == 1) { 45 if(m_renderer == null) { 46 m_renderer = new ValueRenderer(); 47 } 48 return m_renderer; 49 } 50 return super.getCellRenderer(row, col); 51 } 52 53 public TableCellEditor getCellEditor(int row, int col) { 54 if(col == 1) { 55 if(m_editor == null) { 56 m_editor = new ValueEditor(); 57 } 58 return m_editor; 59 } 60 return super.getCellEditor(row, col); 61 } 62 63 class ValueRenderer extends XTableCellRenderer { 64 protected TableCellEditor m_rendererDelegate; 65 66 public ValueRenderer() { 67 super(); 68 m_rendererDelegate = createCellEditor(); 69 } 70 71 protected TableCellEditor createCellEditor() { 72 return new ValueEditor(true); 73 } 74 75 public java.awt.Component getTableCellRendererComponent( 76 JTable table, 77 Object value, 78 boolean isSelected, 79 boolean hasFocus, 80 int row, 81 int col) 82 { 83 JComponent c = (JComponent ) 84 m_rendererDelegate.getTableCellEditorComponent(table, value, isSelected, row, col); 85 86 c.setBorder(hasFocus ? UIManager.getBorder("Table.focusCellHighlightBorder") : null); 87 88 return c; 89 } 90 } 91 92 class ChooserButton extends Button { 93 int m_row, m_col; 94 95 ChooserButton(String text) { 96 super(text); 97 setMargin(new Insets (0,2,0,2)); 98 } 99 100 void setCell(int row, int col) { 101 m_row = row; 102 m_col = col; 103 } 104 105 int getRow() {return m_row;} 106 int getCol() {return m_col;} 107 } 108 109 private JFileChooser getChooser() { 110 if(m_chsr == null) { 111 m_chsr = new JFileChooser (); 112 m_chsr.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 113 } 114 115 if(m_lastDir != null) { 116 m_chsr.setCurrentDirectory(m_lastDir); 117 } 118 119 return m_chsr; 120 } 121 122 class ValueEditor extends XCellEditor { 123 ChooserButton m_chsrButton; 124 XTextField m_valueField; 125 boolean m_isRenderer; 126 127 ValueEditor() { 128 this(false); 129 } 130 131 ValueEditor(boolean isRenderer) { 132 super(new XTextField()); 133 134 m_isRenderer = isRenderer; 135 136 m_valueField = (XTextField)m_editorComponent; 137 m_valueField.addActionListener(new ActionListener () { 138 public void actionPerformed(ActionEvent ae) { 139 int row = m_chsrButton.getRow(); 140 int col = m_chsrButton.getCol(); 141 142 getServerPropertyAt(row).setValue(m_valueField.getText()); 143 getServerEnvTableModel().fireTableCellUpdated(row, col); 144 } 145 }); 146 m_valueField.setMargin(new Insets (0,0,0,0)); 147 148 m_chsrButton = new ChooserButton("..."); 149 m_chsrButton.addActionListener(new ActionListener () { 150 public void actionPerformed(ActionEvent ae) { 151 JFileChooser chsr = getChooser(); 152 153 if(chsr.showOpenDialog(ServerEnvTable.this) == JFileChooser.APPROVE_OPTION) { 154 int row = m_chsrButton.getRow(); 155 int col = m_chsrButton.getCol(); 156 String path = chsr.getSelectedFile().getAbsolutePath(); 157 158 removeEditor(); 159 getServerEnvTableModel().setValueAt(path, row, col); 160 } else { 161 removeEditor(); 162 } 163 m_lastDir = chsr.getCurrentDirectory(); 164 } 165 }); 166 167 m_editorComponent = new PropertyValuePanel(m_valueField, m_chsrButton); 168 m_clicksToStart = 1; 169 } 170 171 public java.awt.Component getTableCellEditorComponent( 172 JTable table, 173 Object value, 174 boolean isSelected, 175 int row, 176 int col) 177 { 178 Color fg = isSelected ? table.getSelectionForeground() : table.getForeground(); 179 Color bg = isSelected ? table.getSelectionBackground() : table.getBackground(); 180 181 ServerProperty prop = getServerPropertyAt(row); 182 183 m_chsrButton.setCell(row, col); 184 m_chsrButton.setForeground(table.getForeground()); 185 m_chsrButton.setBackground(table.getBackground()); 186 m_chsrButton.setFont(table.getFont()); 187 188 m_valueField.setText(prop.getValue()); 189 if(!m_isRenderer) { 190 m_valueField.setForeground(UIManager.getColor("TextField.foreground")); 191 m_valueField.setBackground(UIManager.getColor("TextField.background")); 192 } 193 else { 194 m_valueField.setForeground(fg); 195 m_valueField.setBackground(bg); 196 } 197 m_valueField.setFont(table.getFont()); 198 199 if(!m_isRenderer) { 200 m_valueField.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder")); 201 } 202 else { 203 m_valueField.setBorder(noFocusBorder); 204 m_chsrButton.setVisible(false); 205 } 206 207 return (java.awt.Component )m_editorComponent; 208 } 209 } 210 211 public ServerEnvTableModel getServerEnvTableModel() { 212 return (ServerEnvTableModel)getModel(); 213 } 214 215 public ServerProperty getServerPropertyAt(int row) { 216 return getServerEnvTableModel().getServerPropertyAt(row); 217 } 218 } 219 220 class PropertyValuePanel extends Container { 221 PropertyValuePanel(TextField textfield, Button button) { 222 super(); 223 setLayout(new BorderLayout ()); 224 add(textfield); 225 add(button, BorderLayout.EAST); 226 setBorder(null); 227 } 228 } 229 | Popular Tags |