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

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

a new manager for levels, to get the code out of indexmanager

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