KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > servers > ServerEnvTable


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

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 JavaDoc;
16 import java.awt.Color JavaDoc;
17 import java.awt.Insets JavaDoc;
18 import java.awt.event.ActionEvent JavaDoc;
19 import java.awt.event.ActionListener JavaDoc;
20 import java.io.File JavaDoc;
21
22 import javax.swing.JComponent JavaDoc;
23 import javax.swing.JFileChooser JavaDoc;
24 import javax.swing.JTable JavaDoc;
25 import javax.swing.UIManager JavaDoc;
26 import javax.swing.border.Border JavaDoc;
27 import javax.swing.border.EmptyBorder JavaDoc;
28 import javax.swing.table.TableCellEditor JavaDoc;
29 import javax.swing.table.TableCellRenderer JavaDoc;
30
31 public class ServerEnvTable extends XObjectTable {
32   private TableCellRenderer m_renderer;
33   private TableCellEditor JavaDoc m_editor;
34   private JFileChooser JavaDoc m_chsr;
35   private File JavaDoc m_lastDir;
36
37   protected static Border JavaDoc noFocusBorder = new EmptyBorder JavaDoc(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 JavaDoc 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 JavaDoc m_rendererDelegate;
65
66     public ValueRenderer() {
67       super();
68       m_rendererDelegate = createCellEditor();
69     }
70
71     protected TableCellEditor JavaDoc createCellEditor() {
72       return new ValueEditor(true);
73     }
74
75     public java.awt.Component JavaDoc getTableCellRendererComponent(
76       JTable JavaDoc table,
77       Object JavaDoc value,
78       boolean isSelected,
79       boolean hasFocus,
80       int row,
81       int col)
82     {
83       JComponent JavaDoc c = (JComponent JavaDoc)
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 JavaDoc text) {
96       super(text);
97       setMargin(new Insets JavaDoc(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 JavaDoc getChooser() {
110     if(m_chsr == null) {
111       m_chsr = new JFileChooser JavaDoc();
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 JavaDoc () {
138         public void actionPerformed(ActionEvent JavaDoc 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 JavaDoc(0,0,0,0));
147       
148       m_chsrButton = new ChooserButton("...");
149       m_chsrButton.addActionListener(new ActionListener JavaDoc() {
150         public void actionPerformed(ActionEvent JavaDoc ae) {
151           JFileChooser JavaDoc 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 JavaDoc 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 JavaDoc getTableCellEditorComponent(
172       JTable JavaDoc table,
173       Object JavaDoc value,
174       boolean isSelected,
175       int row,
176       int col)
177     {
178       Color JavaDoc fg = isSelected ? table.getSelectionForeground() : table.getForeground();
179       Color JavaDoc 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 JavaDoc)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 JavaDoc());
224     add(textfield);
225     add(button, BorderLayout.EAST);
226     setBorder(null);
227   }
228 }
229
Popular Tags