source: trunk/gli/src/org/greenstone/gatherer/cdm/LevelManager.java@ 12468

Last change on this file since 12468 was 12413, checked in by shaoqun, 18 years ago

added code to use customized radio icons to make them noticable on windows

  • Property svn:keywords set to Author Date Id Revision
File size: 10.3 KB
Line 
1package org.greenstone.gatherer.cdm;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.util.*;
6import javax.swing.*;
7import javax.swing.event.*;
8import org.greenstone.gatherer.Configuration;
9import org.greenstone.gatherer.DebugStream;
10import org.greenstone.gatherer.Dictionary;
11import org.greenstone.gatherer.Gatherer;
12import org.greenstone.gatherer.util.JarTools;
13import org.w3c.dom.*;
14public class LevelManager
15 extends DOMProxyListModel
16 implements BuildTypeManager.BuildTypeListener {
17
18 /** A reference to ourselves so our inner methods have access. */
19 private DOMProxyListModel levels_model = null;
20
21 private Level default_level = null;
22 private String build_type = null;
23 private Control controls = null;
24
25 public LevelManager(Element levels, String current_build_type) {
26 super(levels, CollectionConfiguration.LEVEL_ELEMENT, new Level());
27 DebugStream.println("LevelManager: " + getSize() + " levels parsed.");
28
29 levels_model = this;
30 build_type = current_build_type;
31 if (build_type.equals(BuildTypeManager.BUILD_TYPE_MG)) {
32 levels_model.setAssigned(false);
33 }
34 // Parse and retrieve the default level
35 NodeList default_level_elements = CollectionDesignManager.collect_config.getDocumentElement().getElementsByTagName(CollectionConfiguration.LEVEL_DEFAULT_ELEMENT);
36 if(default_level_elements.getLength() > 0) {
37 default_level = new Level((Element)default_level_elements.item(0));
38 if (build_type.equals(BuildTypeManager.BUILD_TYPE_MG)) {
39 default_level.setAssigned(false);
40 }
41 }
42 }
43
44 private void addLevel(String level) {
45 if (getLevel(level) == null) {
46 int position = 0;
47
48 if (level.equals(CollectionConfiguration.SECTION_STR) && getSize()==1) {
49 position = 1;
50 }
51 add(position, new Level(level));
52 // add in a default collection meta
53 CollectionMeta meta = new CollectionMeta(CollectionConfiguration.STOP_CHARACTER + level);
54 meta.setAssigned(true);
55 meta.setValue(level);
56 CollectionDesignManager.collectionmeta_manager.addMetadatum(meta);
57
58 Gatherer.c_man.configurationChanged();
59 }
60
61 }
62
63 public void buildTypeChanged(String new_build_type) {
64 build_type = new_build_type;
65 boolean enabled = true;
66 if (new_build_type.equals(BuildTypeManager.BUILD_TYPE_MG)) {
67 enabled = false;
68 }
69 setAssigned(enabled);
70 if (default_level != null) {
71 default_level.setAssigned(enabled);
72 }
73
74 }
75
76 /** Method to acquire the controls for editing the indexes.
77 * @return the Control
78 */
79 public Control getControls() {
80 if(controls == null) {
81 // Build controls
82 controls = new LevelControl();
83 }
84 return controls;
85 }
86
87 public Level getLevel(String name) {
88 int levels_model_size = levels_model.getSize();
89 for(int i = 0; i < levels_model_size; i++) {
90 Level level = (Level) levels_model.getElementAt(i);
91 if(level.getLevel().equals(name)) {
92 return level;
93 }
94 }
95 return null;
96 }
97
98 public ArrayList getLevels() {
99 return children();
100 }
101
102 private void removeLevel(String level_name) {
103 // Remove any current metadata from this level
104 CollectionDesignManager.collectionmeta_manager.removeMetadata(CollectionConfiguration.STOP_CHARACTER + level_name);
105 // Remove the level
106 Level level_elem = null;
107 if ((level_elem = getLevel(level_name)) != null) {
108 levels_model.remove(level_elem);
109 Gatherer.c_man.configurationChanged();
110 }
111 }
112
113 /** Method to set the default index.
114 * @param index the new default Index
115 * @see org.greenstone.gatherer.Gatherer
116 * @see org.greenstone.gatherer.collection.CollectionManager
117 */
118 public void setDefault(String level) {
119 if(level != null) {
120 if(default_level == null) {
121 // Create the default level element, and place immediately after leveles element.
122 Element default_level_element = root.getOwnerDocument().createElement(CollectionConfiguration.LEVEL_DEFAULT_ELEMENT);
123 default_level = new Level(default_level_element);
124 Node target_node = CollectionConfiguration.findInsertionPoint(default_level_element);
125 if(target_node != null) {
126 root.getOwnerDocument().getDocumentElement().insertBefore(default_level_element, target_node);
127 }
128 else {
129 root.getOwnerDocument().getDocumentElement().appendChild(default_level_element);
130 }
131 }
132 default_level.setAssigned(true);
133 default_level.setLevel(level);
134
135
136 }
137 else {
138 if(default_level != null) {
139 default_level.setAssigned(false);
140 }
141 }
142 Gatherer.c_man.configurationChanged();
143 }
144
145 /** This class creates a set of controls for editing the levels. */
146 private class LevelControl
147 extends JPanel
148 implements Control {
149
150 JCheckBox document_checkbox = null;
151 JCheckBox section_checkbox = null;
152 JRadioButton document_default_radio = null;
153 JRadioButton section_default_radio = null;
154
155 public LevelControl() {
156
157 JPanel checkbox_panel = new JPanel();
158 JPanel default_panel = new JPanel();
159 document_checkbox = new JCheckBox();
160 document_checkbox.setText(Dictionary.get("CDM.LevelManager.Document"));
161 document_default_radio = new JRadioButton();
162 document_default_radio.setBackground(Configuration.getColor("coloring.collection_tree_background", false));
163 document_default_radio.setOpaque(false);
164 document_default_radio.setActionCommand(CollectionConfiguration.DOCUMENT_STR);
165 document_default_radio.setIcon(JarTools.getImage("radio_unselected.gif"));
166 document_default_radio.setSelectedIcon(JarTools.getImage("radio_selected.gif"));
167
168 section_checkbox = new JCheckBox();
169 section_checkbox.setText(Dictionary.get("CDM.LevelManager.Section"));
170 section_default_radio = new JRadioButton();
171 section_default_radio.setOpaque(true);
172 section_default_radio.setBackground(Configuration.getColor("coloring.collection_tree_background", false));
173 section_default_radio.setOpaque(false);
174 section_default_radio.setIcon(JarTools.getImage("radio_unselected.gif"));
175 section_default_radio.setSelectedIcon(JarTools.getImage("radio_selected.gif"));
176
177 section_default_radio.setActionCommand(CollectionConfiguration.SECTION_STR);
178 ButtonGroup default_group = new ButtonGroup();
179 default_group.add(document_default_radio);
180 default_group.add(section_default_radio);
181
182
183
184 if (levels_model.getSize()==0) {
185 // no levels yet, set document
186 document_checkbox.setSelected(true);
187 addLevel(CollectionConfiguration.DOCUMENT_STR);
188 } else {
189 if (getLevel(CollectionConfiguration.DOCUMENT_STR)!= null) {
190 document_checkbox.setSelected(true);
191 }
192 if (getLevel(CollectionConfiguration.SECTION_STR) != null) {
193 section_checkbox.setSelected(true);
194 }
195 }
196
197 if (default_level != null && default_level.isAssigned()) {
198 // set the default based on specified default
199 if (default_level.getLevel().equals(CollectionConfiguration.DOCUMENT_STR) && document_checkbox.isSelected()) {
200 document_default_radio.setSelected(true);
201 } else if (default_level.getLevel().equals(CollectionConfiguration.SECTION_STR) && section_checkbox.isSelected()) {
202 section_default_radio.setSelected(true);
203 } else {
204 default_level.setAssigned(false);
205
206 }
207 }
208 // if have no valid specified default
209 if (default_level == null || !default_level.isAssigned()) {
210 String default_l = CollectionConfiguration.DOCUMENT_STR;
211 if (document_checkbox.isSelected()) {
212 document_default_radio.setSelected(true);
213 default_l = CollectionConfiguration.DOCUMENT_STR;
214 } else if (section_checkbox.isSelected()) {
215 section_default_radio.setSelected(true);
216 default_l = CollectionConfiguration.SECTION_STR;
217 }
218 setDefault(default_l);
219 // make sure the assigned-ness is set correctly
220 buildTypeChanged(build_type);
221 }
222
223 validateControls();
224 JLabel checkbox_label = new JLabel(Dictionary.get("CDM.LevelManager.Level_Title"));
225 checkbox_panel.setLayout(new GridLayout(3,1));
226
227 checkbox_panel.add(checkbox_label);
228 checkbox_panel.add(document_checkbox);
229 checkbox_panel.add(section_checkbox);
230
231 JLabel default_label = new JLabel(Dictionary.get("CDM.LevelManager.Default"));
232 default_panel.setLayout(new GridLayout(3,1));
233 default_panel.add(default_label);
234 default_panel.add(document_default_radio);
235 default_panel.add(section_default_radio);
236
237
238 CheckBoxListener cbl = new CheckBoxListener();
239 document_checkbox.addActionListener(cbl);
240 section_checkbox.addActionListener(cbl);
241
242 RadioListener rl = new RadioListener();
243 document_default_radio.addActionListener(rl);
244 section_default_radio.addActionListener(rl);
245
246 setLayout(new BorderLayout(10,10));
247 setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
248 add(checkbox_panel, BorderLayout.WEST);
249 add(default_panel, BorderLayout.CENTER);
250 } // LevelControl
251
252 public void gainFocus() {
253
254 }
255
256 public void loseFocus() {
257
258 }
259
260 public void destroy() {
261 }
262
263 private class RadioListener
264 implements ActionListener {
265 public void actionPerformed(ActionEvent event) {
266 String new_level = event.getActionCommand();
267 setDefault(new_level);
268 }
269 }
270 private class CheckBoxListener
271 implements ActionListener {
272
273 public void actionPerformed(ActionEvent event) {
274 if (!((JCheckBox)event.getSource()).isSelected()) {
275 // deselecting
276 if (noLevelsSelected()) {
277 // can't do this
278 ((JCheckBox)event.getSource()).setSelected(true);
279 } else {
280 // remove the level
281 removeLevel(event.getActionCommand());
282 }
283 } else {
284 // selecting a new one
285 addLevel(event.getActionCommand());
286 }
287 validateControls();
288 }
289 }
290
291 private boolean noLevelsSelected() {
292 if (!document_checkbox.isSelected() && !section_checkbox.isSelected()) {
293 return true;
294
295 }
296 return false;
297 }
298
299 private void validateControls() {
300
301 boolean document_enabled = document_checkbox.isSelected();
302 document_default_radio.setEnabled(document_enabled);
303
304 boolean section_enabled = section_checkbox.isSelected();
305 section_default_radio.setEnabled(section_enabled);
306
307
308
309
310 // have we disabled our default??
311 if (!document_enabled && document_default_radio.isSelected()) {
312 section_default_radio.setSelected(true);
313 setDefault(CollectionConfiguration.SECTION_STR);
314
315 } else if (!section_enabled && section_default_radio.isSelected()) {
316 document_default_radio.setSelected(true);
317 setDefault(CollectionConfiguration.DOCUMENT_STR);
318 }
319
320
321 }
322
323 }
324
325}
Note: See TracBrowser for help on using the repository browser.