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

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

Removed XORToggleButtonGroup import.

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