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

Last change on this file since 12800 was 12800, checked in by mdewsnip, 18 years ago

Tidied up CollectionConfiguration more.

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