source: trunk/gli/src/org/greenstone/gatherer/gui/Preferences.java@ 5181

Last change on this file since 5181 was 5181, checked in by mdewsnip, 21 years ago

Removed use of XORToggleButtonGroup (to ensure at least one pane is selected).

  • Property svn:keywords set to Author Date Id Revision
File size: 25.3 KB
Line 
1package org.greenstone.gatherer.gui;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.io.*;
6import java.net.*;
7import java.util.*;
8import javax.swing.*;
9import javax.swing.event.*;
10import org.greenstone.gatherer.Configuration;
11import org.greenstone.gatherer.Gatherer;
12import org.greenstone.gatherer.checklist.CheckList;
13import org.greenstone.gatherer.checklist.Entry;
14import org.greenstone.gatherer.gui.GUIManager;
15import org.greenstone.gatherer.gui.ModalDialog;
16import org.greenstone.gatherer.gui.NumberField;
17import org.greenstone.gatherer.gui.SimpleMenuBar;
18import org.greenstone.gatherer.util.StaticStrings;
19import org.greenstone.gatherer.util.Utility;
20import org.greenstone.gatherer.util.XORToggleButtonGroup;
21import org.w3c.dom.*;
22
23public class Preferences
24 extends ModalDialog {
25
26 private CheckList warning_preferences_check_list;
27 private JButton apply_button;
28 private JButton cancel_button;
29 private JButton ok_button;
30 private JCheckBox use_proxy_checkbox;
31 private JCheckBox workflow_browse;
32 private JCheckBox workflow_create;
33 private JCheckBox workflow_mirror;
34 private JCheckBox workflow_gather;
35 private JCheckBox workflow_enrich;
36 private JCheckBox workflow_design;
37 private JCheckBox workflow_export;
38 private JCheckBox workflow_preview;
39 private JComboBox language_combobox;
40 private JLabel extracted_metadata_label;
41 private JLabel file_size_label;
42 private JLabel language_label;
43 private JLabel library_path_label;
44 private JLabel predefined_label;
45 private JLabel proxy_host_label;
46 private JLabel proxy_port_label;
47 private JLabel title_label;
48 private JRadioButton hide_extracted_metadata_radio_button;
49 private JRadioButton hide_file_size_radio_button;
50 private JRadioButton show_file_size_radio_button;
51 private JRadioButton view_extracted_metadata_radio_button;
52 private JTabbedPane tab_pane;
53 private JTextField library_path_field;
54 private JTextField proxy_host_field;
55 private JTextField proxy_port_field;
56 private Preferences self;
57
58 static final Dimension LABEL_SIZE = new Dimension(150, 25);
59 static final Dimension ROW_SIZE = new Dimension(450, 25);
60 static final Dimension SIZE = new Dimension(450, 345);
61 static final String TRUE = "true";
62
63 public Preferences() {
64 // Initialize
65 super(Gatherer.g_man, true);
66 this.self = this;
67 setSize(SIZE);
68 setTitle("Preferences");
69 setJMenuBar(new SimpleMenuBar("10.2"));
70 // Creation
71 JPanel content_pane = (JPanel) getContentPane();
72 tab_pane = new JTabbedPane();
73 tab_pane.add("Preferences.General", createGeneralPreferences());
74 tab_pane.add("Preferences.Workflow", createWorkflowPreferences());
75 tab_pane.add("Preferences.Connection", createConnectionPreferences());
76 tab_pane.add("Preferences.Warnings", createWarningPreferences());
77
78 JPanel button_pane = new JPanel();
79 ok_button = new JButton("General.OK");
80 apply_button = new JButton("General.Apply");
81 cancel_button = new JButton("General.Cancel");
82 // Connection
83 Gatherer.dictionary.register(this, null, false);
84 Gatherer.dictionary.register(tab_pane, null, false);
85 Gatherer.dictionary.register(ok_button, null, false);
86 Gatherer.dictionary.register(apply_button, null, false);
87 Gatherer.dictionary.register(cancel_button, null, false);
88 ok_button.addActionListener(new OKButtonListener(true));
89 apply_button.addActionListener(new OKButtonListener(false));
90 cancel_button.addActionListener(new CancelButtonListener());
91 // Layout
92 button_pane.setBorder(BorderFactory.createEmptyBorder(5,2,2,2));
93 button_pane.setLayout(new GridLayout(1,3,0,5));
94 button_pane.add(ok_button);
95 button_pane.add(apply_button);
96 button_pane.add(cancel_button);
97
98 content_pane.setLayout(new BorderLayout());
99 content_pane.add(tab_pane, BorderLayout.CENTER);
100 content_pane.add(button_pane, BorderLayout.SOUTH);
101
102 Dimension frame_size = Gatherer.g_man.getSize();
103 Point frame_location = Gatherer.g_man.getLocation();
104 //setLocation(frame_location.x + ((frame_size.width - SIZE.width) / 2), frame_location.y + ((frame_size.height - SIZE.height)));
105 setLocation(((frame_size.width - SIZE.width) / 2), ((frame_size.height - SIZE.height)));
106
107 // Clean up
108 frame_location = null;
109 frame_size = null;
110 cancel_button = null;
111 ok_button = null;
112 button_pane = null;
113 tab_pane = null;
114 content_pane = null;
115 setVisible(true);
116 }
117
118 private JPanel createConnectionPreferences() {
119 JPanel library_path_pane = new JPanel();
120 library_path_pane.setPreferredSize(ROW_SIZE);
121 library_path_label = new JLabel("Preferences.Connection.Library_Path");
122 library_path_label.setPreferredSize(LABEL_SIZE);
123 library_path_field = new JTextField(Gatherer.config.getString("general.exec_address", true));
124 library_path_field.setCaretPosition(0);
125
126 boolean currently_enabled = Gatherer.config.get("general.use_proxy", true);
127 // Creation
128 JPanel connection_pane = new JPanel();
129 use_proxy_checkbox = new JCheckBox("Preferences.Connection.Use_Proxy", currently_enabled);
130 use_proxy_checkbox.setPreferredSize(ROW_SIZE);
131 JPanel proxy_host_pane = new JPanel();
132 proxy_host_pane.setPreferredSize(ROW_SIZE);
133 proxy_host_label = new JLabel("Preferences.Connection.Proxy_Host");
134 proxy_host_label.setPreferredSize(LABEL_SIZE);
135 proxy_host_field = new JTextField(Gatherer.config.getString("general.proxy_host", true));
136 proxy_host_field.setEnabled(currently_enabled);
137 JPanel proxy_port_pane = new JPanel();
138 proxy_port_pane.setPreferredSize(ROW_SIZE);
139 proxy_port_label = new JLabel("Preferences.Connection.Proxy_Port");
140 proxy_port_label.setPreferredSize(LABEL_SIZE);
141 proxy_port_field = new NumberField(Gatherer.config.getString("general.proxy_port", true));
142 proxy_port_field.setEnabled(currently_enabled);
143
144 // Connection
145 Gatherer.dictionary.register(library_path_label, null, false);
146 Gatherer.dictionary.register(use_proxy_checkbox, null, false);
147 Gatherer.dictionary.register(proxy_host_label, null, false);
148 Gatherer.dictionary.register(proxy_port_label, null, false);
149 use_proxy_checkbox.addActionListener(new UseProxyListener());
150 // Layout
151 library_path_pane.setLayout(new BorderLayout());
152 library_path_pane.add(library_path_label, BorderLayout.WEST);
153 library_path_pane.add(library_path_field, BorderLayout.CENTER);
154
155 proxy_host_pane.setLayout(new BorderLayout());
156 proxy_host_pane.add(proxy_host_label, BorderLayout.WEST);
157 proxy_host_pane.add(proxy_host_field, BorderLayout.CENTER);
158
159 proxy_port_pane.setLayout(new BorderLayout());
160 proxy_port_pane.add(proxy_port_label, BorderLayout.WEST);
161 proxy_port_pane.add(proxy_port_field, BorderLayout.CENTER);
162
163 connection_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
164 connection_pane.add(library_path_pane);
165 connection_pane.add(use_proxy_checkbox);
166 connection_pane.add(proxy_host_pane);
167 connection_pane.add(proxy_port_pane);
168
169 return connection_pane;
170 }
171
172 private JPanel createGeneralPreferences() {
173 JPanel general_pane = new JPanel();
174
175 // Build the model of available languages
176 ArrayList dictionary_model = new ArrayList();
177
178 Locale french = new Locale("fr","FR");
179 System.err.println("French locale: " + french);
180
181
182 dictionary_model.add(new DictionaryEntry(Locale.ENGLISH));
183 File classes_folder = new File(Utility.BASE_DIR + StaticStrings.CLASSES_FOLDER);
184 File[] possible_dictionaries = classes_folder.listFiles();
185 for(int i = 0; i < possible_dictionaries.length; i++) {
186 String filename = possible_dictionaries[i].getName();
187 if(filename.endsWith(StaticStrings.PROPERTIES_FILE_EXTENSION) && filename.indexOf(StaticStrings.UNDERSCORE_CHARACTER) != -1) {
188 StringTokenizer tokenizer = new StringTokenizer(filename.substring(filename.indexOf(StaticStrings.UNDERSCORE_CHARACTER) + 1, filename.indexOf(StaticStrings.STOP_CHARACTER)), StaticStrings.UNDERSCORE_CHARACTER);
189 Locale locale = null;
190 switch(tokenizer.countTokens()) {
191 case 1:
192 locale = new Locale(tokenizer.nextToken().toLowerCase());
193 break;
194 case 2:
195 locale = new Locale(tokenizer.nextToken().toLowerCase(), tokenizer.nextToken().toUpperCase());
196 break;
197 }
198 tokenizer = null;
199 // Open the file and read the first line
200 String description = null;
201 try {
202 BufferedReader br = new BufferedReader(new FileReader(possible_dictionaries[i]));
203 String first_line = br.readLine();
204 br.close();
205 description = first_line.substring(first_line.indexOf(StaticStrings.COLON_CHARACTER) + 1);
206 }
207 catch(Exception error) {
208 }
209 DictionaryEntry entry = new DictionaryEntry(description, locale);
210 description = null;
211 locale = null;
212 if(!dictionary_model.contains(entry)) {
213 dictionary_model.add(entry);
214 }
215 entry = null;
216 }
217 filename = null;
218 }
219 possible_dictionaries = null;
220 classes_folder = null;
221
222 // Extracted metadata
223 JPanel extracted_metadata_pane = new JPanel();
224 extracted_metadata_label = new JLabel("NewCollectionPrompt.Extracted_Metadata");
225 ButtonGroup extracted_metadata_button_group = new ButtonGroup();
226 view_extracted_metadata_radio_button = new JRadioButton("NewCollectionPrompt.View_Extracted_Metadata");
227 view_extracted_metadata_radio_button.setEnabled(Gatherer.c_man.ready());
228 view_extracted_metadata_radio_button.setOpaque(false);
229 extracted_metadata_button_group.add(view_extracted_metadata_radio_button);
230 hide_extracted_metadata_radio_button = new JRadioButton("NewCollectionPrompt.Hide_Extracted_Metadata");
231 hide_extracted_metadata_radio_button.setEnabled(Gatherer.c_man.ready());
232 hide_extracted_metadata_radio_button.setOpaque(false);
233 extracted_metadata_button_group.add(hide_extracted_metadata_radio_button);
234 if(Gatherer.config.get("general.view_extracted_metadata", Configuration.COLLECTION_SPECIFIC)) {
235 view_extracted_metadata_radio_button.setSelected(true);
236 }
237 else {
238 hide_extracted_metadata_radio_button.setSelected(true);
239 }
240
241 // Show file sizes
242 JPanel file_size_pane = new JPanel();
243 file_size_label = new JLabel("Prefereces.General.File_Size");
244 ButtonGroup file_size_button_group = new ButtonGroup();
245 show_file_size_radio_button = new JRadioButton("Prefereces.General.Show_File_Size");
246 show_file_size_radio_button.setEnabled(Gatherer.c_man.ready());
247 show_file_size_radio_button.setOpaque(false);
248 file_size_button_group.add(show_file_size_radio_button);
249 hide_file_size_radio_button = new JRadioButton("Prefereces.General.Hide_File_Size");
250 hide_file_size_radio_button.setEnabled(Gatherer.c_man.ready());
251 hide_file_size_radio_button.setOpaque(false);
252 file_size_button_group.add(hide_file_size_radio_button);
253 if(Gatherer.config.get("general.show_file_size", Configuration.COLLECTION_SPECIFIC)) {
254 show_file_size_radio_button.setSelected(true);
255 }
256 else {
257 hide_file_size_radio_button.setSelected(true);
258 }
259
260 // Language
261 JPanel language_pane = new JPanel();
262 language_label = new JLabel("Preferences.General.Interface_Language");
263 language_label.setPreferredSize(LABEL_SIZE);
264 language_combobox = new JComboBox(dictionary_model.toArray());
265
266 // Connect
267 Gatherer.dictionary.register(file_size_label, null, false);
268 Gatherer.dictionary.register(show_file_size_radio_button, null, false);
269 Gatherer.dictionary.register(hide_file_size_radio_button, null, false);
270 Gatherer.dictionary.register(view_extracted_metadata_radio_button, null, false);
271 Gatherer.dictionary.register(hide_extracted_metadata_radio_button, null, false);
272 Gatherer.dictionary.register(language_label, null, false);
273 language_combobox.addActionListener(new LanguageComboboxListener());
274 // Layout
275
276 file_size_pane.setLayout(new GridLayout(1,3,5,0));
277 file_size_pane.add(show_file_size_radio_button);
278 file_size_pane.add(hide_file_size_radio_button);
279
280 extracted_metadata_pane.setLayout(new GridLayout(1,3,5,0));
281 extracted_metadata_pane.add(view_extracted_metadata_radio_button);
282 extracted_metadata_pane.add(hide_extracted_metadata_radio_button);
283
284 language_pane.setLayout(new BorderLayout());
285 language_pane.add(language_label, BorderLayout.WEST);
286 language_pane.add(language_combobox, BorderLayout.CENTER);
287
288 general_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
289 general_pane.setLayout(new GridLayout(5,1,0,5));
290 general_pane.add(extracted_metadata_pane);
291 general_pane.add(file_size_pane);
292 general_pane.add(language_pane);
293
294 return general_pane;
295 }
296
297 /** The warning preferences are controlled through a checklist. */
298 private JPanel createWarningPreferences() {
299 // Retrieve all of the warning preferences settings.
300 HashMap warning_preferences = Gatherer.config.getAll("warning\\..*", true);
301 warning_preferences_check_list = new CheckList(false);
302 for(Iterator keys = warning_preferences.keySet().iterator(); keys.hasNext(); ) {
303 String property = (String) keys.next();
304 String value = (String) warning_preferences.get(property);
305 // Remove 'warning.'
306 String title = Gatherer.dictionary.get(property.substring(8) + ".Title");
307 Entry entry = new Entry(title, value.equalsIgnoreCase(TRUE));
308 entry.setProperty(property);
309 warning_preferences_check_list.addEntry(entry);
310 }
311 // Creation
312 JPanel warning_preferences_pane = new JPanel();
313 // Connection
314 // Layout
315 warning_preferences_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
316 warning_preferences_pane.setLayout(new BorderLayout());
317 warning_preferences_pane.add(new JScrollPane(warning_preferences_check_list), BorderLayout.CENTER);
318
319 return warning_preferences_pane;
320 }
321
322 private JPanel createWorkflowPreferences() {
323 // Read in the predefined configurations file.
324 Vector predefined = new Vector();
325 Document predefined_document = Utility.parse("xml/workflows.xml", true);
326 Element predefined_element = predefined_document.getDocumentElement();
327 NodeList workflow_elements = predefined_element.getElementsByTagName("Workflow");
328 for(int i = 0; i < workflow_elements.getLength(); i++) {
329 predefined.add(new WorkflowElementWrapper((Element)workflow_elements.item(i)));
330 }
331 // Creation
332 JPanel workflow_preferences_pane = new JPanel();
333 JPanel checklist_pane = new JPanel();
334 title_label = new JLabel("Preferences.Workflow.Title");
335 title_label.setPreferredSize(ROW_SIZE);
336 workflow_browse = new JCheckBox("Preferences.Workflow.Browse", Gatherer.config.get("workflow.browse", false));
337 workflow_browse.setPreferredSize(ROW_SIZE);
338 workflow_mirror = new JCheckBox("Preferences.Workflow.Mirror", Gatherer.config.get("workflow.mirror", false));
339 workflow_mirror.setPreferredSize(ROW_SIZE);
340 workflow_gather = new JCheckBox("Preferences.Workflow.Gather", Gatherer.config.get("workflow.gather", false));
341 workflow_gather.setPreferredSize(ROW_SIZE);
342 workflow_enrich = new JCheckBox("Preferences.Workflow.Enrich", Gatherer.config.get("workflow.enrich", false));
343 workflow_enrich.setPreferredSize(ROW_SIZE);
344 workflow_design = new JCheckBox("Preferences.Workflow.Design", Gatherer.config.get("workflow.design", false));
345 workflow_design.setPreferredSize(ROW_SIZE);
346 workflow_export = new JCheckBox("Preferences.Workflow.Export", Gatherer.config.get("workflow.export", false));
347 workflow_export.setPreferredSize(ROW_SIZE);
348 workflow_create = new JCheckBox("Preferences.Workflow.Create", Gatherer.config.get("workflow.create", false));
349 workflow_create.setPreferredSize(ROW_SIZE);
350 workflow_preview = new JCheckBox("Preferences.Workflow.Preview", Gatherer.config.get("workflow.preview", false));
351 workflow_preview.setPreferredSize(ROW_SIZE);
352 JPanel predefined_pane = new JPanel();
353 predefined_label = new JLabel("Preferences.Workflow.Predefined.Label");
354 predefined_label.setPreferredSize(new Dimension(150,25));
355 JComboBox predefined_combobox = new JComboBox(predefined);
356 // Connection
357 Gatherer.dictionary.register(title_label, null, false);
358 Gatherer.dictionary.register(workflow_browse, null, false);
359 Gatherer.dictionary.register(workflow_mirror, null, false);
360 Gatherer.dictionary.register(workflow_gather, null, false);
361 Gatherer.dictionary.register(workflow_enrich, null, false);
362 Gatherer.dictionary.register(workflow_design, null, false);
363 Gatherer.dictionary.register(workflow_export, null, false);
364 Gatherer.dictionary.register(workflow_create, null, false);
365 Gatherer.dictionary.register(workflow_preview, null, false);
366 Gatherer.dictionary.register(predefined_label, null, false);
367 predefined_combobox.addActionListener(new PredefinedActionListener());
368 // Layout
369 checklist_pane.setLayout(new BoxLayout(checklist_pane, BoxLayout.Y_AXIS));
370 checklist_pane.add(title_label);
371 if(Gatherer.config.get("workflow.browse", true)) {
372 checklist_pane.add(workflow_browse);
373 }
374 if(Gatherer.config.get("workflow.mirror", true)) {
375 checklist_pane.add(workflow_mirror);
376 }
377 if(Gatherer.config.get("workflow.gather", true)) {
378 checklist_pane.add(workflow_gather);
379 }
380 if(Gatherer.config.get("workflow.enrich", true)) {
381 checklist_pane.add(workflow_enrich);
382 }
383 if(Gatherer.config.get("workflow.design", true)) {
384 checklist_pane.add(workflow_design);
385 }
386 if(Gatherer.config.get("workflow.export", true)) {
387 checklist_pane.add(workflow_export);
388 }
389 if(Gatherer.config.get("workflow.create", true)) {
390 checklist_pane.add(workflow_create);
391 }
392 if(Gatherer.config.get("workflow.preview", true)) {
393 checklist_pane.add(workflow_preview);
394 }
395 predefined_pane.setLayout(new BorderLayout());
396 predefined_pane.add(predefined_label, BorderLayout.WEST);
397 predefined_pane.add(predefined_combobox, BorderLayout.CENTER);
398
399 workflow_preferences_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
400 workflow_preferences_pane.setLayout(new BorderLayout());
401 workflow_preferences_pane.add(checklist_pane, BorderLayout.CENTER);
402 workflow_preferences_pane.add(predefined_pane, BorderLayout.SOUTH);
403
404 return workflow_preferences_pane;
405 }
406
407 public void dispose() {
408 // Deregister dictionary components
409
410 // Connection
411 Gatherer.dictionary.deregister(library_path_label);
412 Gatherer.dictionary.deregister(use_proxy_checkbox);
413 Gatherer.dictionary.deregister(proxy_host_label);
414 Gatherer.dictionary.deregister(proxy_port_label);
415
416 // General
417 Gatherer.dictionary.deregister(file_size_label);
418 Gatherer.dictionary.deregister(show_file_size_radio_button);
419 Gatherer.dictionary.deregister(hide_file_size_radio_button);
420 Gatherer.dictionary.deregister(extracted_metadata_label);
421 Gatherer.dictionary.deregister(view_extracted_metadata_radio_button);
422 Gatherer.dictionary.deregister(hide_extracted_metadata_radio_button);
423 Gatherer.dictionary.deregister(language_label);
424
425 // Workflow
426 Gatherer.dictionary.deregister(title_label);
427 Gatherer.dictionary.deregister(workflow_browse);
428 Gatherer.dictionary.deregister(workflow_mirror);
429 Gatherer.dictionary.deregister(workflow_gather);
430 Gatherer.dictionary.deregister(workflow_enrich);
431 Gatherer.dictionary.deregister(workflow_design);
432 Gatherer.dictionary.deregister(workflow_export);
433 Gatherer.dictionary.deregister(workflow_create);
434 Gatherer.dictionary.deregister(workflow_preview);
435 Gatherer.dictionary.deregister(predefined_label);
436
437 // Dialog
438 Gatherer.dictionary.deregister(this);
439 Gatherer.dictionary.deregister(tab_pane);
440 Gatherer.dictionary.deregister(ok_button);
441 Gatherer.dictionary.deregister(apply_button);
442 Gatherer.dictionary.deregister(cancel_button);
443 // Dispose
444 super.dispose();
445 }
446
447 private class OKButtonListener
448 implements ActionListener {
449 private boolean close;
450 public OKButtonListener(boolean close) {
451 this.close = close;
452 }
453 public void actionPerformed(ActionEvent event) {
454 // Submit the various changes.
455 // Connection preferences
456 String library_path_string = library_path_field.getText();
457 Gatherer.config.setString("general.exec_address", true, library_path_string);
458 if (!library_path_string.equals("")) {
459 try {
460 Gatherer.config.exec_address = new URL(library_path_string);
461 }
462 catch (MalformedURLException error) {
463 ///ystem.err.println("Error: Bad address: " + exec_address_string);
464 }
465 }
466 Gatherer.config.set("general.use_proxy", true, use_proxy_checkbox.isSelected());
467 Gatherer.config.setString("general.proxy_host", true, proxy_host_field.getText());
468 Gatherer.config.setString("general.proxy_port", true, proxy_port_field.getText());
469 Gatherer.setProxy();
470
471 // General preferences
472 Gatherer.config.set("general.show_file_size", Configuration.COLLECTION_SPECIFIC, show_file_size_radio_button.isSelected());
473 if(Gatherer.g_man.mirror_pane != null) {
474 Gatherer.g_man.mirror_pane.refreshTrees();
475 }
476 Gatherer.g_man.collection_pane.refreshTrees();
477 Gatherer.g_man.metaedit_pane.refreshTrees();
478
479 Gatherer.config.set("general.view_extracted_metadata", Configuration.COLLECTION_SPECIFIC, view_extracted_metadata_radio_button.isSelected());
480 Gatherer.g_man.metaedit_pane.valueChanged((TreeSelectionEvent) null); // Refresh metadata table
481
482 Gatherer.config.setLocale("general.locale", Configuration.GENERAL_SETTING, ((DictionaryEntry)language_combobox.getSelectedItem()).getLocale());
483
484 // Warning preferences
485 for(int i = 0; i < warning_preferences_check_list.getEntryCount(); i++) {
486 Entry entry = warning_preferences_check_list.get(i);
487 Gatherer.config.set(entry.getProperty(), true, entry.isSelected());
488 }
489 // Workflow preferences
490 Gatherer.config.set("workflow.browse", false, workflow_browse.isSelected());
491 Gatherer.config.set("workflow.mirror", false, workflow_mirror.isSelected());
492 Gatherer.config.set("workflow.gather", false, workflow_gather.isSelected());
493 Gatherer.config.set("workflow.enrich", false, workflow_enrich.isSelected());
494 Gatherer.config.set("workflow.design", false, workflow_design.isSelected());
495 Gatherer.config.set("workflow.export", false, workflow_export.isSelected());
496 Gatherer.config.set("workflow.create", false, workflow_create.isSelected());
497 Gatherer.config.set("workflow.preview", false, workflow_preview.isSelected());
498 Gatherer.g_man.workflowUpdate("Browser", workflow_browse.isSelected());
499 Gatherer.g_man.workflowUpdate("Mirroring", workflow_mirror.isSelected());
500 Gatherer.g_man.workflowUpdate("Collection", workflow_gather.isSelected());
501 Gatherer.g_man.workflowUpdate("MetaEdit", workflow_enrich.isSelected());
502 Gatherer.g_man.workflowUpdate("Build", workflow_design.isSelected());
503 Gatherer.g_man.workflowUpdate("Export", workflow_export.isSelected());
504 Gatherer.g_man.workflowUpdate("Create", workflow_create.isSelected());
505 Gatherer.g_man.workflowUpdate("Preview", workflow_preview.isSelected());
506 // Hide dialog
507 if(close) {
508 self.dispose();
509 }
510 }
511 }
512
513 private class CancelButtonListener
514 implements ActionListener {
515 public void actionPerformed(ActionEvent event) {
516 self.dispose();
517 }
518 }
519
520 private class DictionaryEntry
521 implements Comparable {
522 private Locale locale;
523 private String description;
524 public DictionaryEntry(Locale locale) {
525 this.description = null;
526 this.locale = locale;
527 }
528 public DictionaryEntry(String description, Locale locale) {
529 this.description = description;
530 this.locale = locale;
531 }
532 public int compareTo(Object object) {
533 return toString().compareTo(object.toString());
534 }
535 public boolean equals(Object object) {
536 return toString().equals(object.toString());
537 }
538 public Locale getLocale() {
539 return locale;
540 }
541 public String toString() {
542 if(description != null) {
543 return description;
544 }
545 else {
546 return locale.getDisplayName();
547 }
548 }
549 }
550
551 private class PredefinedActionListener
552 implements ActionListener {
553 public void actionPerformed(ActionEvent event) {
554 JComboBox cb = (JComboBox) event.getSource();
555 WorkflowElementWrapper element = (WorkflowElementWrapper) cb.getSelectedItem();
556 CheckboxUpdater task = new CheckboxUpdater(element);
557 SwingUtilities.invokeLater(task);
558 }
559
560 private class CheckboxUpdater
561 implements Runnable {
562 private WorkflowElementWrapper element;
563 public CheckboxUpdater(WorkflowElementWrapper element) {
564 this.element = element;
565 }
566 public void run() {
567 workflow_browse.setSelected(element.getEnabled("browse"));
568 workflow_create.setSelected(element.getEnabled("create"));
569 workflow_mirror.setSelected(element.getEnabled("mirror"));
570 workflow_gather.setSelected(element.getEnabled("gather"));
571 workflow_enrich.setSelected(element.getEnabled("enrich"));
572 workflow_design.setSelected(element.getEnabled("design"));
573 workflow_export.setSelected(element.getEnabled("export"));
574 workflow_preview.setSelected(element.getEnabled("preview"));
575 }
576 }
577 }
578
579 private class LanguageComboboxListener
580 implements ActionListener {
581 public void actionPerformed(ActionEvent event) {
582 // Retrieve the entry
583 DictionaryEntry entry = (DictionaryEntry) language_combobox.getSelectedItem();
584 if(entry != null) {
585 Gatherer.dictionary.changeDictionary(entry.getLocale());
586 // Display message
587 JOptionPane.showMessageDialog(Gatherer.g_man, Gatherer.dictionary.get("Preferences.General.Restart_Required"), Gatherer.dictionary.get("Preferences.General.Restart_Required"), JOptionPane.WARNING_MESSAGE);
588 }
589 }
590 }
591
592 private class UseProxyListener
593 implements ActionListener {
594 public void actionPerformed(ActionEvent event) {
595 boolean enabled = use_proxy_checkbox.isSelected();
596 Gatherer.config.set("general.use_proxy", true, enabled);
597 // Fortunately this is already driven by the event thread.
598 proxy_host_field.setEnabled(enabled);
599 proxy_port_field.setEnabled(enabled);
600 }
601 }
602
603 private class WorkflowElementWrapper {
604 private Element element;
605 private String text;
606 public WorkflowElementWrapper(Element element) {
607 this.element = element;
608 }
609 public boolean getEnabled(String name) {
610 boolean result = true;
611 if(element.getAttribute(name).equalsIgnoreCase("false")) {
612 result = false;
613 }
614 return result;
615 }
616 public String toString() {
617 if(text == null) {
618 text = element.getFirstChild().getNodeValue();
619 }
620 return text;
621 }
622 }
623}
Note: See TracBrowser for help on using the repository browser.