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

Last change on this file since 6160 was 6051, checked in by jmt12, 21 years ago

Here is the result of sixteen hours work over the weekend. I'm too tired to comment them all separately, but here are some of the highlights:
Rewrote how the 'base on collection' method actually retrieves and updates the collection configuration - ensuring the CDM.CollectionConfiguration class is used instead of the retarded Collection.CollectionConfiguration (which coincidently has had a name change to BasicCollectionConfiguration). Went through code search for places where the two versions had been confused. Rewrote large swathes of GDMDocument so as to differentiate between normal and extracted metadata - an attempt to prevent the snowballing extracted metadata problem. Fixed problem where GLI was correctly recieving the last few lines of an external process. The collection shortname is no longer visible, nor is the confusing double name for metadata elements. Also coloured folders in the trees are kaput. The users email is now saved as part of the GLI configuration and is used as appropriate to fill out collection fields. There are new options on the right click menus over trees to allow the expansion and collapsing of folders. 'Show Files' now shows all types (or at least 6 types) of image properly (arg, the plagues of copy and paste). 'Based On' collections are public, plugin list automatically moves to next entry if plugin removed (I guess we should do the same in every other screen?) and metadata arguments in plugins/classifiers are no longer editable. There are about a dozen other small things, but I can't remember them. Hope I remembered to set all of the files to UNIX line-endings.

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