KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > editors > TransientFieldsPanel


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 org.terracotta.dso.editors;
5
6 import org.eclipse.core.resources.IProject;
7
8 import org.dijon.Button;
9 import org.dijon.ContainerResource;
10
11 import org.terracotta.dso.TcPlugin;
12 import com.tc.admin.common.XTable;
13 import org.terracotta.dso.editors.chooser.FieldChooser;
14 import com.terracottatech.config.DsoApplication;
15 import com.terracottatech.config.TransientFields;
16
17 import java.awt.Frame JavaDoc;
18 import java.awt.event.ActionEvent JavaDoc;
19 import java.awt.event.ActionListener JavaDoc;
20
21 import javax.swing.event.ListSelectionEvent JavaDoc;
22 import javax.swing.event.ListSelectionListener JavaDoc;
23 import javax.swing.event.TableModelEvent JavaDoc;
24 import javax.swing.event.TableModelListener JavaDoc;
25 import javax.swing.table.DefaultTableModel JavaDoc;
26
27 public class TransientFieldsPanel extends ConfigurationEditorPanel
28   implements TableModelListener JavaDoc
29 {
30   private IProject m_project;
31   private DsoApplication m_dsoApp;
32   private TransientFields m_transientFields;
33   private XTable m_transientTable;
34   private TransientTableModel m_transientTableModel;
35   private Button m_addButton;
36   private ActionListener JavaDoc m_addListener;
37   private Button m_removeButton;
38   private ActionListener JavaDoc m_removeListener;
39   private ListSelectionListener JavaDoc m_transientsListener;
40   private FieldChooser m_fieldChooser;
41   
42   public TransientFieldsPanel() {
43     super();
44   }
45   
46   public void load(ContainerResource containerRes) {
47     super.load(containerRes);
48
49     m_transientTable = (XTable)findComponent("TransientFieldTable");
50     m_transientTable.setModel(m_transientTableModel = new TransientTableModel());
51     m_transientsListener = new ListSelectionListener JavaDoc() {
52       public void valueChanged(ListSelectionEvent JavaDoc lse) {
53         if(!lse.getValueIsAdjusting()) {
54           int[] sel = m_transientTable.getSelectedRows();
55           m_removeButton.setEnabled(sel != null && sel.length > 0);
56         }
57       }
58     };
59     
60     m_addButton = (Button)findComponent("AddTransientButton");
61     m_addListener = new ActionListener JavaDoc() {
62       public void actionPerformed(ActionEvent JavaDoc ae) {
63         FieldChooser chsr = getFieldChooser();
64         
65         chsr.setup(m_project);
66         chsr.center(TransientFieldsPanel.this.getAncestorOfClass(java.awt.Frame JavaDoc.class));
67         chsr.setVisible(true);
68       }
69     };
70
71     m_removeButton = (Button)findComponent("RemoveTransientButton");
72     m_removeListener = new ActionListener JavaDoc() {
73       public void actionPerformed(ActionEvent JavaDoc ae) {
74         int[] selection = m_transientTable.getSelectedRows();
75         
76         for(int i = selection.length-1; i >= 0; i--) {
77           ensureTransientFields().removeFieldName(selection[i]);
78           m_transientTableModel.removeRow(selection[i]);
79         }
80       }
81     };
82   }
83
84   private FieldChooser getFieldChooser() {
85     if(m_fieldChooser == null) {
86       m_fieldChooser = new FieldChooser((Frame JavaDoc)getAncestorOfClass(Frame JavaDoc.class));
87       m_fieldChooser.setListener(new FieldChooserListener());
88     }
89     
90     return m_fieldChooser;
91   }
92
93   class FieldChooserListener implements ActionListener JavaDoc {
94     public void actionPerformed(ActionEvent JavaDoc ae) {
95       String JavaDoc[] fields = m_fieldChooser.getFieldNames();
96       String JavaDoc field;
97       
98       for(int i = 0; i < fields.length; i++) {
99         field = fields[i];
100         
101         if(field != null &&
102            (field = field.trim()) != null &&
103             field.length() > 0 &&
104            !isTransient(fields[i]))
105         {
106           internalAddTransient(fields[i]);
107         }
108       }
109     }
110   }
111   
112   public boolean hasAnySet() {
113     return m_transientFields != null &&
114            m_transientFields.sizeOfFieldNameArray() > 0;
115   }
116   
117   private TransientFields ensureTransientFields() {
118     if(m_transientFields == null) {
119       ensureXmlObject();
120     }
121     return m_transientFields;
122   }
123   
124   public void ensureXmlObject() {
125     super.ensureXmlObject();
126
127     if(m_transientFields == null) {
128       removeListeners();
129       m_transientFields = m_dsoApp.addNewTransientFields();
130       updateChildren();
131       addListeners();
132     }
133   }
134   
135   private void syncModel() {
136     if(!hasAnySet() && m_dsoApp.getTransientFields() != null){
137       m_dsoApp.unsetTransientFields();
138       m_transientFields = null;
139       fireXmlObjectStructureChanged(m_dsoApp);
140     }
141
142     setDirty();
143   }
144   
145   private void addListeners() {
146     m_transientTableModel.addTableModelListener(this);
147     m_transientTable.getSelectionModel().addListSelectionListener(m_transientsListener);
148     m_addButton.addActionListener(m_addListener);
149     m_removeButton.addActionListener(m_removeListener);
150   }
151   
152   private void removeListeners() {
153     m_transientTableModel.removeTableModelListener(this);
154     m_transientTable.getSelectionModel().removeListSelectionListener(m_transientsListener);
155     m_addButton.removeActionListener(m_addListener);
156     m_removeButton.removeActionListener(m_removeListener);
157   }
158   
159   public void updateChildren() {
160     m_transientTableModel.clear();
161
162     if(m_transientFields != null) {
163       String JavaDoc[] transients = m_transientFields.getFieldNameArray();
164   
165       for(int i = 0; i < transients.length; i++) {
166         m_transientTableModel.addField(transients[i]);
167       }
168     } else {
169       m_transientTableModel.fireTableDataChanged();
170     }
171   }
172
173   public void updateModel() {
174     removeListeners();
175     updateChildren();
176     addListeners();
177   }
178   
179   public void setup(IProject project, DsoApplication dsoApp) {
180     setEnabled(true);
181     removeListeners();
182
183     m_project = project;
184     m_dsoApp = dsoApp;
185     m_transientFields = m_dsoApp != null ?
186                         m_dsoApp.getTransientFields() :
187                         null;
188
189     updateChildren();
190     addListeners();
191   }
192   
193   public void tearDown() {
194     removeListeners();
195     
196     m_dsoApp = null;
197     m_transientFields = null;
198
199     m_transientTableModel.clear();
200     
201     setEnabled(false);
202   }
203   
204   class TransientTableModel extends DefaultTableModel JavaDoc {
205     TransientTableModel() {
206       super();
207       setColumnIdentifiers(new String JavaDoc[]{"Transient fields"});
208     }
209     
210     void clear() {
211       setRowCount(0);
212     }
213     
214     void setTransientFields(TransientFields fields) {
215       clear();
216       
217       if(fields != null) {
218         int count = fields.sizeOfFieldNameArray();
219         
220         for(int i = 0; i < count; i++) {
221           addField(fields.getFieldNameArray(i));
222         }
223       }
224     }
225       
226     void addField(String JavaDoc fieldName) {
227       addRow(new Object JavaDoc[] {fieldName});
228     }
229     
230     int indexOf(String JavaDoc fieldName) {
231       int count = getRowCount();
232       
233       for(int i = 0; i < count; i++) {
234         if(((String JavaDoc)getValueAt(i, 0)).equals(fieldName)) {
235           return i;
236         }
237       }
238       
239       return -1;
240     }
241     
242     public void setValueAt(Object JavaDoc value, int row, int col) {
243       m_transientFields.setFieldNameArray(row, (String JavaDoc)value);
244       super.setValueAt(value, row, col);
245     }
246   }
247   
248   public void tableChanged(TableModelEvent JavaDoc tme) {
249     syncModel();
250   }
251   
252   private void internalAddTransient(String JavaDoc fieldName) {
253     ensureTransientFields().addFieldName(fieldName);
254     m_transientTableModel.addField(fieldName);
255     
256     int row = m_transientTableModel.getRowCount()-1;
257     m_transientTable.setRowSelectionInterval(row, row);
258   }
259
260   public boolean isTransient(String JavaDoc fieldName) {
261     return TcPlugin.getDefault().getConfigurationHelper(m_project).isTransient(fieldName);
262   }
263 }
264
Popular Tags