KickJava   Java API By Example, From Geeks To Geeks.

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


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 com.tc.admin.common.XObjectTableModel;
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.Root;
16 import com.terracottatech.config.Roots;
17
18 import java.awt.Frame JavaDoc;
19 import java.awt.event.ActionEvent JavaDoc;
20 import java.awt.event.ActionListener JavaDoc;
21
22 import javax.swing.event.ListSelectionEvent JavaDoc;
23 import javax.swing.event.ListSelectionListener JavaDoc;
24 import javax.swing.event.TableModelEvent JavaDoc;
25 import javax.swing.event.TableModelListener JavaDoc;
26
27 public class RootsPanel extends ConfigurationEditorPanel
28   implements TableModelListener JavaDoc
29 {
30   private IProject m_project;
31   private DsoApplication m_dsoApp;
32   private Roots m_roots;
33   private XTable m_rootTable;
34   private RootsModel m_rootsModel;
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_rootsListener;
40   private FieldChooser m_fieldChooser;
41   
42   public RootsPanel() {
43     super();
44   }
45   
46   public void load(ContainerResource containerRes) {
47     super.load(containerRes);
48
49     m_rootTable = (XTable)findComponent("RootTable");
50     m_rootTable.setModel(m_rootsModel = new RootsModel());
51     m_rootsListener = new ListSelectionListener JavaDoc() {
52       public void valueChanged(ListSelectionEvent JavaDoc lse) {
53         if(!lse.getValueIsAdjusting()) {
54           int[] sel = m_rootTable.getSelectedRows();
55           m_removeButton.setEnabled(sel != null && sel.length > 0);
56         }
57       }
58     };
59     
60     m_addButton = (Button)findComponent("AddRootButton");
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(RootsPanel.this.getAncestorOfClass(Frame JavaDoc.class));
67         chsr.setVisible(true);
68       }
69     };
70
71     m_removeButton = (Button)findComponent("RemoveRootButton");
72     m_removeListener = new ActionListener JavaDoc() {
73       public void actionPerformed(ActionEvent JavaDoc ae) {
74         int[] selection = m_rootTable.getSelectedRows();
75         int row;
76         
77         for(int i = selection.length-1; i >= 0; i--) {
78           row = selection[i];
79           
80           ensureRoots().removeRoot(row);
81           m_rootsModel.remove(row);
82           m_rootsModel.fireTableRowsDeleted(row, row);
83         }
84       }
85     };
86   }
87   
88   private FieldChooser getFieldChooser() {
89     if(m_fieldChooser == null) {
90       m_fieldChooser = new FieldChooser((Frame JavaDoc)getAncestorOfClass(Frame JavaDoc.class));
91       m_fieldChooser.setListener(new FieldChooserListener());
92     }
93     
94     return m_fieldChooser;
95   }
96
97   class FieldChooserListener implements ActionListener JavaDoc {
98     public void actionPerformed(ActionEvent JavaDoc ae) {
99       String JavaDoc[] fields = m_fieldChooser.getFieldNames();
100       String JavaDoc field;
101       
102       for(int i = 0; i < fields.length; i++) {
103         field = fields[i];
104         
105         if(field != null &&
106            (field = field.trim()) != null &&
107             field.length() > 0 &&
108            !isRoot(field))
109         {
110           internalAddRoot(fields[i]);
111         }
112       }
113     }
114   }
115   
116   public boolean hasAnySet() {
117     return m_roots != null &&
118            m_roots.sizeOfRootArray() > 0;
119   }
120   
121   private Roots ensureRoots() {
122     if(m_roots == null) {
123       ensureXmlObject();
124     }
125     return m_roots;
126   }
127
128   public void ensureXmlObject() {
129     super.ensureXmlObject();
130     
131     if(m_roots == null) {
132       removeListeners();
133       m_roots = m_dsoApp.addNewRoots();
134       updateChildren();
135       addListeners();
136     }
137   }
138   
139   private void syncModel() {
140     if(!hasAnySet() && m_dsoApp.getRoots() != null){
141       m_dsoApp.unsetRoots();
142       m_roots = null;
143       fireXmlObjectStructureChanged(m_dsoApp);
144     }
145     
146     setDirty();
147   }
148
149   private void addListeners() {
150     m_rootsModel.addTableModelListener(this);
151     m_rootTable.getSelectionModel().addListSelectionListener(m_rootsListener);
152     m_addButton.addActionListener(m_addListener);
153     m_removeButton.addActionListener(m_removeListener);
154   }
155   
156   private void removeListeners() {
157     m_rootsModel.removeTableModelListener(this);
158     m_rootTable.getSelectionModel().removeListSelectionListener(m_rootsListener);
159     m_addButton.removeActionListener(m_addListener);
160     m_removeButton.removeActionListener(m_removeListener);
161   }
162   
163   public void updateChildren() {
164     m_rootsModel.set((m_roots != null) ? m_roots.getRootArray() : null);
165   }
166
167   public void updateModel() {
168     removeListeners();
169     updateChildren();
170     addListeners();
171   }
172   
173   public void setup(IProject project, DsoApplication dsoApp) {
174     setEnabled(true);
175     removeListeners();
176     
177     m_project = project;
178     m_dsoApp = dsoApp;
179     m_roots = m_dsoApp != null ? m_dsoApp.getRoots() : null;
180     
181     updateChildren();
182     addListeners();
183   }
184   
185   public void tearDown() {
186     removeListeners();
187     
188     m_project = null;
189     m_dsoApp = null;
190     m_roots = null;
191
192     m_rootsModel.clear();
193
194     setEnabled(false);
195   }
196   
197   private void internalAddRoot(String JavaDoc fieldName) {
198     Root root = ensureRoots().addNewRoot();
199
200     root.setFieldName(fieldName);
201     m_rootsModel.add(root);
202
203     int row = m_rootsModel.getRowCount()-1;
204     m_rootsModel.fireTableRowsInserted(row, row);
205     m_rootTable.setRowSelectionInterval(row, row);
206   }
207
208   private static final String JavaDoc[] COLUMNS = {"FieldName", "RootName"};
209   private static final String JavaDoc[] HEADERS = {"Field", "Name"};
210   
211   class RootsModel extends XObjectTableModel {
212     RootsModel() {
213       super(Root.class, COLUMNS, HEADERS);
214     }
215     
216     int getFieldRow(String JavaDoc fieldName) {
217       Root root;
218       int count = getRowCount();
219       
220       for(int i = 0; i < count; i++) {
221         root = (Root)getObjectAt(i);
222         if(root.getFieldName().equals(fieldName)) {
223           return i;
224         }
225       }
226
227       return -1;
228     }
229   }
230   
231   public boolean isRoot(String JavaDoc fieldName) {
232     Roots roots = ensureRoots();
233     int count = roots.sizeOfRootArray();
234     
235     for(int i = 0; i < count; i++) {
236       if(fieldName.equals(roots.getRootArray(i).getFieldName())) {
237         return true;
238       }
239     }
240     
241     return false;
242   }
243   
244   public void tableChanged(TableModelEvent JavaDoc e) {
245     syncModel();
246   }
247 }
248
Popular Tags