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

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

Added new option to Connection pane: library path.

  • Property svn:keywords set to Author Date Id Revision
File size: 16.9 KB
Line 
1package org.greenstone.gatherer.gui;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.net.*;
6import java.util.*;
7import javax.swing.*;
8import org.greenstone.gatherer.Gatherer;
9import org.greenstone.gatherer.checklist.CheckList;
10import org.greenstone.gatherer.checklist.Entry;
11import org.greenstone.gatherer.gui.GUIManager;
12import org.greenstone.gatherer.gui.ModalDialog;
13import org.greenstone.gatherer.gui.NumberField;
14import org.greenstone.gatherer.gui.SimpleMenuBar;
15import org.greenstone.gatherer.util.Utility;
16import org.greenstone.gatherer.util.XORToggleButtonGroup;
17import org.w3c.dom.*;
18
19public class Preferences
20 extends ModalDialog {
21
22 private CheckList warning_preferences_check_list;
23 private JButton apply_button;
24 private JButton cancel_button;
25 private JButton ok_button;
26 private JCheckBox use_proxy_checkbox;
27 private JCheckBox workflow_browse;
28 private JCheckBox workflow_create;
29 private JCheckBox workflow_mirror;
30 private JCheckBox workflow_gather;
31 private JCheckBox workflow_enrich;
32 private JCheckBox workflow_design;
33 private JCheckBox workflow_export;
34 private JCheckBox workflow_preview;
35 private JTabbedPane tab_pane;
36 private JTextField library_path_field;
37 private JTextField proxy_host_field;
38 private JTextField proxy_port_field;
39 private Preferences self;
40
41 static final Dimension LABEL_SIZE = new Dimension(100, 25);
42 static final Dimension ROW_SIZE = new Dimension(380, 25);
43 static final Dimension SIZE = new Dimension(400, 345);
44 static final String TRUE = "true";
45
46 public Preferences() {
47 // Initialize
48 super(Gatherer.g_man, true);
49 this.self = this;
50 setSize(SIZE);
51 setTitle("Preferences");
52 setJMenuBar(new SimpleMenuBar("10.2"));
53 // Creation
54 JPanel content_pane = (JPanel) getContentPane();
55 tab_pane = new JTabbedPane();
56 tab_pane.add("Preferences.Workflow", createWorkflowPreferences());
57 tab_pane.add("Preferences.Connection", createConnectionPreferences());
58 tab_pane.add("Preferences.Warnings", createWarningPreferences());
59
60 JPanel button_pane = new JPanel();
61 ok_button = new JButton("General.OK");
62 apply_button = new JButton("General.Apply");
63 cancel_button = new JButton("General.Cancel");
64 // Connection
65 Gatherer.dictionary.register(this, null, false);
66 Gatherer.dictionary.register(tab_pane, null, false);
67 Gatherer.dictionary.register(ok_button, null, false);
68 Gatherer.dictionary.register(apply_button, null, false);
69 Gatherer.dictionary.register(cancel_button, null, false);
70 ok_button.addActionListener(new OKButtonListener(true));
71 apply_button.addActionListener(new OKButtonListener(false));
72 cancel_button.addActionListener(new CancelButtonListener());
73 // Layout
74 button_pane.setBorder(BorderFactory.createEmptyBorder(5,2,2,2));
75 button_pane.setLayout(new GridLayout(1,3,0,5));
76 button_pane.add(ok_button);
77 button_pane.add(apply_button);
78 button_pane.add(cancel_button);
79
80 content_pane.setLayout(new BorderLayout());
81 content_pane.add(tab_pane, BorderLayout.CENTER);
82 content_pane.add(button_pane, BorderLayout.SOUTH);
83
84 Dimension frame_size = Gatherer.g_man.getSize();
85 Point frame_location = Gatherer.g_man.getLocation();
86 //setLocation(frame_location.x + ((frame_size.width - SIZE.width) / 2), frame_location.y + ((frame_size.height - SIZE.height)));
87 setLocation(((frame_size.width - SIZE.width) / 2), ((frame_size.height - SIZE.height)));
88
89 // Clean up
90 frame_location = null;
91 frame_size = null;
92 cancel_button = null;
93 ok_button = null;
94 button_pane = null;
95 tab_pane = null;
96 content_pane = null;
97 setVisible(true);
98 }
99
100 private JPanel createConnectionPreferences() {
101 JPanel library_path_pane = new JPanel();
102 library_path_pane.setPreferredSize(ROW_SIZE);
103 JLabel library_path_label = new JLabel("Preferences.Connection.Library_Path");
104 library_path_label.setPreferredSize(LABEL_SIZE);
105 library_path_field = new JTextField(Gatherer.config.getString("general.exec_address", true));
106 library_path_field.setCaretPosition(0);
107
108 boolean currently_enabled = Gatherer.config.get("general.use_proxy", true);
109 // Creation
110 JPanel connection_pane = new JPanel();
111 use_proxy_checkbox = new JCheckBox("Preferences.Connection.Use_Proxy", currently_enabled);
112 use_proxy_checkbox.setPreferredSize(ROW_SIZE);
113 JPanel proxy_host_pane = new JPanel();
114 proxy_host_pane.setPreferredSize(ROW_SIZE);
115 JLabel proxy_host_label = new JLabel("Preferences.Connection.Proxy_Host");
116 proxy_host_label.setPreferredSize(LABEL_SIZE);
117 proxy_host_field = new JTextField(Gatherer.config.getString("general.proxy_host", true));
118 proxy_host_field.setEnabled(currently_enabled);
119 JPanel proxy_port_pane = new JPanel();
120 proxy_port_pane.setPreferredSize(ROW_SIZE);
121 JLabel proxy_port_label = new JLabel("Preferences.Connection.Proxy_Port");
122 proxy_port_label.setPreferredSize(LABEL_SIZE);
123 proxy_port_field = new NumberField(Gatherer.config.getString("general.proxy_port", true));
124 proxy_port_field.setEnabled(currently_enabled);
125
126 // Connection
127 Gatherer.dictionary.register(library_path_label, null, false);
128 Gatherer.dictionary.register(use_proxy_checkbox, null, false);
129 Gatherer.dictionary.register(proxy_host_label, null, false);
130 Gatherer.dictionary.register(proxy_port_label, null, false);
131 use_proxy_checkbox.addActionListener(new UseProxyListener());
132 // Layout
133 library_path_pane.setLayout(new BorderLayout());
134 library_path_pane.add(library_path_label, BorderLayout.WEST);
135 library_path_pane.add(library_path_field, BorderLayout.CENTER);
136
137 proxy_host_pane.setLayout(new BorderLayout());
138 proxy_host_pane.add(proxy_host_label, BorderLayout.WEST);
139 proxy_host_pane.add(proxy_host_field, BorderLayout.CENTER);
140
141 proxy_port_pane.setLayout(new BorderLayout());
142 proxy_port_pane.add(proxy_port_label, BorderLayout.WEST);
143 proxy_port_pane.add(proxy_port_field, BorderLayout.CENTER);
144
145 connection_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
146 connection_pane.add(library_path_pane);
147 connection_pane.add(use_proxy_checkbox);
148 connection_pane.add(proxy_host_pane);
149 connection_pane.add(proxy_port_pane);
150
151 return connection_pane;
152 }
153
154 /** The warning preferences are controlled through a checklist. */
155 private JPanel createWarningPreferences() {
156 // Retrieve all of the warning preferences settings.
157 HashMap warning_preferences = Gatherer.config.getAll("warning\\..*", true);
158 warning_preferences_check_list = new CheckList();
159 for(Iterator keys = warning_preferences.keySet().iterator(); keys.hasNext(); ) {
160 String property = (String) keys.next();
161 String value = (String) warning_preferences.get(property);
162 // Remove 'warning.'
163 String title = Gatherer.dictionary.get(property.substring(8) + ".Title");
164 Entry entry = new Entry(title, value.equalsIgnoreCase(TRUE));
165 entry.setProperty(property);
166 warning_preferences_check_list.addEntry(entry);
167 }
168 // Creation
169 JPanel warning_preferences_pane = new JPanel();
170 // Connection
171 // Layout
172 warning_preferences_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
173 warning_preferences_pane.setLayout(new BorderLayout());
174 warning_preferences_pane.add(new JScrollPane(warning_preferences_check_list), BorderLayout.CENTER);
175
176 return warning_preferences_pane;
177 }
178
179 private JPanel createWorkflowPreferences() {
180 // Read in the predefined configurations file.
181 Vector predefined = new Vector();
182 Document predefined_document = Utility.parse("xml/workflows.xml", true);
183 Element predefined_element = predefined_document.getDocumentElement();
184 NodeList workflow_elements = predefined_element.getElementsByTagName("Workflow");
185 for(int i = 0; i < workflow_elements.getLength(); i++) {
186 predefined.add(new WorkflowElementWrapper((Element)workflow_elements.item(i)));
187 }
188 // Creation
189 JPanel workflow_preferences_pane = new JPanel();
190 JPanel checklist_pane = new JPanel();
191 JLabel title_label = new JLabel("Preferences.Workflow.Title");
192 title_label.setPreferredSize(ROW_SIZE);
193 XORToggleButtonGroup checkbox_group = new XORToggleButtonGroup();
194 workflow_browse = new JCheckBox("Preferences.Workflow.Browse", Gatherer.config.get("workflow.browse", false));
195 workflow_browse.setPreferredSize(ROW_SIZE);
196 workflow_mirror = new JCheckBox("Preferences.Workflow.Mirror", Gatherer.config.get("workflow.mirror", false));
197 workflow_mirror.setPreferredSize(ROW_SIZE);
198 workflow_gather = new JCheckBox("Preferences.Workflow.Gather", Gatherer.config.get("workflow.gather", false));
199 workflow_gather.setPreferredSize(ROW_SIZE);
200 workflow_enrich = new JCheckBox("Preferences.Workflow.Enrich", Gatherer.config.get("workflow.enrich", false));
201 workflow_enrich.setPreferredSize(ROW_SIZE);
202 workflow_design = new JCheckBox("Preferences.Workflow.Design", Gatherer.config.get("workflow.design", false));
203 workflow_design.setPreferredSize(ROW_SIZE);
204 workflow_export = new JCheckBox("Preferences.Workflow.Export", Gatherer.config.get("workflow.export", false));
205 workflow_export.setPreferredSize(ROW_SIZE);
206 workflow_create = new JCheckBox("Preferences.Workflow.Create", Gatherer.config.get("workflow.create", false));
207 workflow_create.setPreferredSize(ROW_SIZE);
208 workflow_preview = new JCheckBox("Preferences.Workflow.Preview", Gatherer.config.get("workflow.preview", false));
209 workflow_preview.setPreferredSize(ROW_SIZE);
210 JPanel predefined_pane = new JPanel();
211 JLabel predefined_label = new JLabel("Preferences.Workflow.Predefined.Label");
212 predefined_label.setPreferredSize(new Dimension(150,25));
213 JComboBox predefined_combobox = new JComboBox(predefined);
214 // Connection
215 checkbox_group.add(workflow_mirror);
216 checkbox_group.add(workflow_gather);
217 checkbox_group.add(workflow_enrich);
218 checkbox_group.add(workflow_design);
219 checkbox_group.add(workflow_export);
220 checkbox_group.add(workflow_create);
221 checkbox_group.add(workflow_preview);
222 Gatherer.dictionary.register(title_label, null, false);
223 Gatherer.dictionary.register(workflow_browse, null, false);
224 Gatherer.dictionary.register(workflow_mirror, null, false);
225 Gatherer.dictionary.register(workflow_gather, null, false);
226 Gatherer.dictionary.register(workflow_enrich, null, false);
227 Gatherer.dictionary.register(workflow_design, null, false);
228 Gatherer.dictionary.register(workflow_export, null, false);
229 Gatherer.dictionary.register(workflow_create, null, false);
230 Gatherer.dictionary.register(workflow_preview, null, false);
231 Gatherer.dictionary.register(predefined_label, null, false);
232 predefined_combobox.addActionListener(new PredefinedActionListener());
233 // Layout
234 checklist_pane.setLayout(new BoxLayout(checklist_pane, BoxLayout.Y_AXIS));
235 checklist_pane.add(title_label);
236 if(Gatherer.config.get("workflow.browse", true)) {
237 checklist_pane.add(workflow_browse);
238 }
239 if(Gatherer.config.get("workflow.mirror", true)) {
240 checklist_pane.add(workflow_mirror);
241 }
242 if(Gatherer.config.get("workflow.gather", true)) {
243 checklist_pane.add(workflow_gather);
244 }
245 if(Gatherer.config.get("workflow.enrich", true)) {
246 checklist_pane.add(workflow_enrich);
247 }
248 if(Gatherer.config.get("workflow.design", true)) {
249 checklist_pane.add(workflow_design);
250 }
251 if(Gatherer.config.get("workflow.export", true)) {
252 checklist_pane.add(workflow_export);
253 }
254 if(Gatherer.config.get("workflow.create", true)) {
255 checklist_pane.add(workflow_create);
256 }
257 if(Gatherer.config.get("workflow.preview", true)) {
258 checklist_pane.add(workflow_preview);
259 }
260 predefined_pane.setLayout(new BorderLayout());
261 predefined_pane.add(predefined_label, BorderLayout.WEST);
262 predefined_pane.add(predefined_combobox, BorderLayout.CENTER);
263
264 workflow_preferences_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
265 workflow_preferences_pane.setLayout(new BorderLayout());
266 workflow_preferences_pane.add(checklist_pane, BorderLayout.CENTER);
267 workflow_preferences_pane.add(predefined_pane, BorderLayout.SOUTH);
268
269 return workflow_preferences_pane;
270 }
271
272 public void dispose() {
273 // Deregister dictionary components
274 Gatherer.dictionary.deregister(this);
275 Gatherer.dictionary.deregister(tab_pane);
276 Gatherer.dictionary.deregister(ok_button);
277 Gatherer.dictionary.deregister(apply_button);
278 Gatherer.dictionary.deregister(cancel_button);
279 // Dispose
280 super.dispose();
281 }
282
283 private class OKButtonListener
284 implements ActionListener {
285 private boolean close;
286 public OKButtonListener(boolean close) {
287 this.close = close;
288 }
289 public void actionPerformed(ActionEvent event) {
290 // Submit the various changes.
291 // Connection preferences
292 String library_path_string = library_path_field.getText();
293 Gatherer.config.setString("general.exec_address", true, library_path_string);
294 if (!library_path_string.equals("")) {
295 try {
296 Gatherer.config.exec_address = new URL(library_path_string);
297 }
298 catch (MalformedURLException error) {
299 ///ystem.err.println("Error: Bad address: " + exec_address_string);
300 }
301 }
302
303 Gatherer.config.set("general.use_proxy", true, use_proxy_checkbox.isSelected());
304 Gatherer.config.setString("general.proxy_host", true, proxy_host_field.getText());
305 Gatherer.config.setString("general.proxy_port", true, proxy_port_field.getText());
306 Gatherer.setProxy();
307 // Warning preferences
308 for(int i = 0; i < warning_preferences_check_list.getEntryCount(); i++) {
309 Entry entry = warning_preferences_check_list.get(i);
310 Gatherer.config.set(entry.getProperty(), true, entry.isSelected());
311 }
312 // Workflow preferences
313 Gatherer.config.set("workflow.browse", false, workflow_browse.isSelected());
314 Gatherer.config.set("workflow.mirror", false, workflow_mirror.isSelected());
315 Gatherer.config.set("workflow.gather", false, workflow_gather.isSelected());
316 Gatherer.config.set("workflow.enrich", false, workflow_enrich.isSelected());
317 Gatherer.config.set("workflow.design", false, workflow_design.isSelected());
318 Gatherer.config.set("workflow.export", false, workflow_export.isSelected());
319 Gatherer.config.set("workflow.create", false, workflow_create.isSelected());
320 Gatherer.config.set("workflow.preview", false, workflow_preview.isSelected());
321 Gatherer.g_man.workflowUpdate("Browser", workflow_browse.isSelected());
322 Gatherer.g_man.workflowUpdate("Mirroring", workflow_mirror.isSelected());
323 Gatherer.g_man.workflowUpdate("Collection", workflow_gather.isSelected());
324 Gatherer.g_man.workflowUpdate("MetaEdit", workflow_enrich.isSelected());
325 Gatherer.g_man.workflowUpdate("Build", workflow_design.isSelected());
326 Gatherer.g_man.workflowUpdate("Export", workflow_export.isSelected());
327 Gatherer.g_man.workflowUpdate("Create", workflow_create.isSelected());
328 Gatherer.g_man.workflowUpdate("Preview", workflow_preview.isSelected());
329 // Hide dialog
330 if(close) {
331 self.dispose();
332 }
333 }
334 }
335
336 private class CancelButtonListener
337 implements ActionListener {
338 public void actionPerformed(ActionEvent event) {
339 self.dispose();
340 }
341 }
342
343 private class PredefinedActionListener
344 implements ActionListener {
345 public void actionPerformed(ActionEvent event) {
346 JComboBox cb = (JComboBox) event.getSource();
347 WorkflowElementWrapper element = (WorkflowElementWrapper) cb.getSelectedItem();
348 CheckboxUpdater task = new CheckboxUpdater(element);
349 SwingUtilities.invokeLater(task);
350 }
351
352 private class CheckboxUpdater
353 implements Runnable {
354 private WorkflowElementWrapper element;
355 public CheckboxUpdater(WorkflowElementWrapper element) {
356 this.element = element;
357 }
358 public void run() {
359 workflow_browse.setSelected(element.getEnabled("browse"));
360 workflow_create.setSelected(element.getEnabled("create"));
361 workflow_mirror.setSelected(element.getEnabled("mirror"));
362 workflow_gather.setSelected(element.getEnabled("gather"));
363 workflow_enrich.setSelected(element.getEnabled("enrich"));
364 workflow_design.setSelected(element.getEnabled("design"));
365 workflow_export.setSelected(element.getEnabled("export"));
366 workflow_preview.setSelected(element.getEnabled("preview"));
367 }
368 }
369 }
370
371 private class UseProxyListener
372 implements ActionListener {
373 public void actionPerformed(ActionEvent event) {
374 boolean enabled = use_proxy_checkbox.isSelected();
375 Gatherer.config.set("general.use_proxy", true, enabled);
376 // Fortunately this is already driven by the event thread.
377 proxy_host_field.setEnabled(enabled);
378 proxy_port_field.setEnabled(enabled);
379 }
380 }
381
382 private class WorkflowElementWrapper {
383 private Element element;
384 private String text;
385 public WorkflowElementWrapper(Element element) {
386 this.element = element;
387 }
388 public boolean getEnabled(String name) {
389 boolean result = true;
390 if(element.getAttribute(name).equalsIgnoreCase("false")) {
391 result = false;
392 }
393 return result;
394 }
395 public String toString() {
396 if(text == null) {
397 text = element.getFirstChild().getNodeValue();
398 }
399 return text;
400 }
401 }
402}
Note: See TracBrowser for help on using the repository browser.