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

Last change on this file since 12167 was 12163, checked in by kjdon, 18 years ago

LevelManager knows about build type now, so that it can set assigned=false to levels and default level for mg collection

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