001: /*
002: * Copyright 2001-2006 C:1 Financial Services GmbH
003: *
004: * This software is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License Version 2.1, as published by the Free Software Foundation.
007: *
008: * This software is distributed in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
011: * Lesser General Public License for more details.
012: *
013: * You should have received a copy of the GNU Lesser General Public
014: * License along with this library; if not, write to the Free Software
015: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
016: */
017:
018: package de.finix.contelligent.client.modules.preferences;
019:
020: import java.awt.BorderLayout;
021: import java.awt.Dimension;
022: import java.awt.event.ActionEvent;
023: import java.io.File;
024: import java.io.FileInputStream;
025: import java.io.FileNotFoundException;
026: import java.io.FileOutputStream;
027: import java.io.IOException;
028: import java.util.Locale;
029: import java.util.logging.Logger;
030: import java.util.prefs.BackingStoreException;
031: import java.util.prefs.InvalidPreferencesFormatException;
032: import java.util.prefs.Preferences;
033:
034: import javax.swing.AbstractAction;
035: import javax.swing.Action;
036: import javax.swing.JFileChooser;
037: import javax.swing.JOptionPane;
038: import javax.swing.JScrollPane;
039: import javax.swing.JSplitPane;
040: import javax.swing.JTree;
041: import javax.swing.ListSelectionModel;
042: import javax.swing.ToolTipManager;
043: import javax.swing.event.ListSelectionEvent;
044: import javax.swing.event.ListSelectionListener;
045: import javax.swing.event.TreeSelectionEvent;
046: import javax.swing.event.TreeSelectionListener;
047: import javax.swing.filechooser.FileFilter;
048: import javax.swing.tree.DefaultMutableTreeNode;
049: import javax.swing.tree.TreePath;
050:
051: import de.finix.contelligent.client.gui.ContelligentAction;
052: import de.finix.contelligent.client.i18n.Resources;
053: import de.finix.contelligent.client.modules.AbstractModule;
054: import de.finix.contelligent.client.remote.UpdateManager;
055: import de.finix.contelligent.client.util.ExceptionDialog;
056: import de.finix.contelligent.client.util.StringOptionPane;
057:
058: public class PreferencesModule extends AbstractModule {
059:
060: public final static String LOG_FILE = "filename";
061:
062: public final static String DEFAULT_LOG_FILE = "%h/client.log";
063:
064: public final static String LOG_LEVEL = "level";
065:
066: public final static String DEFAULT_LOG_LEVEL = "INFO";
067:
068: public final static String SERVER = "server";
069:
070: public final static String ANON_SERVER = "anonserver";
071:
072: public final static String DEFAULT_SERVER = "http://localhost:8080/contell/scms";
073:
074: public final static String DEFAULT_ANON_SERVER = "http://localhost:8080/contell/cms";
075:
076: public final static String UPDATE_INTERVAL = "update interval (s)";
077:
078: public final static int DEFAULT_UPDATE_INTERVAL = 2;
079:
080: public final static String EXTERNAL_TEXT_EDITOR = "text";
081:
082: public final static String DEFAULT_EXTERNAL_TEXT_EDITOR = "emacs";
083:
084: public final static String HTML_EDITOR = "text/html";
085:
086: public final static String DEFAULT_HTML_EDITOR = "/usr/local/mozilla/mozilla -edit";
087:
088: public final static String HTML_RENDERER = "text/html/render";
089:
090: public final static String DEFAULT_HTML_RENDERER = "/usr/local/mozilla/mozilla";
091:
092: public final static String IMAGE_DIRECTORY = "imageDirectory";
093:
094: public final static String FILE_DIRECTORY = "fileDirectory";
095:
096: public final static String DEFAULT_IMAGE_DIRECTORY = "";
097:
098: public final static String DEFAULT_FILE_DIRECTORY = "";
099:
100: public final static String LANGUAGE = "language";
101:
102: public final static String COUNTRY = "country";
103:
104: public final static String DEFAULT_LANGUAGE = Locale.getDefault()
105: .getLanguage();
106:
107: public final static String DEFAULT_COUNTRY = Locale.getDefault()
108: .getCountry();
109:
110: public final static String LANG_BASENAME = "language_basename";
111:
112: public final static String DEFAULT_LANG_BASENAME = "languages.language";
113:
114: public final static String GROUP = "defaultGroup";
115:
116: public final static String DEFAULT_GROUP = "system-users";
117:
118: public final static String CONTEXT = "defaultContext";
119:
120: public final static String DEFAULT_CONTEXT = "";
121:
122: public final static String SHOW_MEM_PANEL = "memoryPanel";
123:
124: public final static boolean DEFAULT_SHOW_MEM_PANEL = false;
125:
126: public final static String CALLBACK_PORT = "Callback port";
127:
128: public final static int DEFAULT_CALLBACK_PORT = 0;
129:
130: public final static String SESSION_TIMEOUT = "Session timeout";
131:
132: public final static int DEFAULT_SESSION_TIMEOUT = 10;
133:
134: public final static String SHOW_LINK_TARGETS = "Show link targets";
135:
136: public final static boolean DEFAULT_SHOW_LINK_TARGETS = false;
137:
138: public final static String CASCADE_FORMS = "Cascade forms";
139:
140: public final static boolean DEFAULT_CASCADE_FORMS = true;
141:
142: public final static String BREAK_LINES = "Break lines";
143:
144: public final static boolean DEFAULT_BREAK_LINES = true;
145:
146: public final static String PREFILL_NEW_NAME = "Prefill new component name";
147:
148: public final static boolean DEFAULT_PREFILL_NEW_NAME = false;
149:
150: public final static String LEGACY_TYPES = "Allow legacy type creation";
151:
152: public final static boolean DEFAULT_LEGACY_TYPES = false;
153:
154: public final static String DISABLE_BREADCRUMB_BAR = "Disable breadcrumb bar";
155:
156: public final static boolean DEFAULT_DISABLE_BREADCRUMB_BAR = false;
157:
158: public final static String EDIT_ALL_GROUPS = "Edit all groups";
159:
160: public final static boolean DEFAULT_EDIT_ALL_GROUPS = false;
161:
162: public final static String ALLOW_DETAGGING = "Allow detagging of render tags";
163:
164: public final static boolean DEFAULT_ALLOW_DETAGGING = true;
165:
166: public final static String ADVANCED_COPY = "Display advanced copy options";
167:
168: public final static boolean DEFAULT_ADVANCED_COPY = false;
169:
170: public final static String CLIENT_THEME = "Client Theme";
171:
172: public final static String DEFAULT_CLIENT_THEME = "default";
173:
174: public final static String TAB_WIDTH = "Width of tabs";
175:
176: public final static int DEFAULT_TAB_WIDTH = 8;
177:
178: public final static String UPDATE_MODE = "Update Mode";
179:
180: public final static int DEFAULT_UPDATE_MODE = UpdateManager.UPDATE_MODE_POLL;
181:
182: public final static String KEEP_ALIVE = "Keep alive";
183:
184: public final static boolean DEFAULT_KEEP_ALIVE = false;
185:
186: public final static String AUTO_RELOGIN = "Auto-Relogin";
187:
188: public final static boolean DEFAULT_AUTO_RELOGIN = true;
189:
190: public final static String VISIBLE_COMPONENTS_IN_FOLDER = "Visible components in folder";
191:
192: public final static int DEFAULT_VISIBLE_COMPONENTS_IN_FOLDER = 30;
193:
194: public final static String MAX_SUBMENU_ITEMS = "Maximum submenu items";
195:
196: public final static int DEFAULT_MAX_SUBMENU_ITEMS = 20;
197:
198: public final static String CACHED_COMPONENTS = "Cached components";
199:
200: public final static int DEFAULT_CACHED_COMPONENTS = 1500;
201:
202: public final static String FONTSIZE_OFFSET = "Font size offset";
203:
204: public final static int DEFAULT_FONTSIZE_OFFSET = 0;
205:
206: public final static String PUBLISHER_NAME = "publisher name";
207:
208: public final static String DEFAULT_PUBLISHER_NAME = "";
209:
210: public final static String PUBLISHER_ID = "publisher id";
211:
212: public final static String DEFAULT_PUBLISHER_ID = "";
213:
214: public final static String PUBLISHER_TYPE = "publisher type";
215:
216: public final static String DEFAULT_PUBLISHER_TYPE = "";
217:
218: public final static String AUTH_MECH = "preferred auth mechanism";
219:
220: public final static String DEFAULT_AUTH_MECH = "Basic";
221:
222: public final static String AUTH_DOMAIN = "preferred auth domain";
223:
224: public final static String DEFAULT_AUTH_DOMAIN = "system-users";
225:
226: public final static String PREVIEW_NAME = "last selected preview";
227:
228: public final static String DEFAULT_PREVIEW_NAME = "Normal";
229:
230: public final static String ENABLE_HIGHLIGHTING = "enable syntax highlighting";
231:
232: public final static boolean DEFAULT_ENABLE_HIGHLIGHTING = true;
233:
234: private static Preferences userPreferences = Preferences.userRoot()
235: .node("/finix/contelligent/client");
236:
237: private static Preferences loggingPreferences = userPreferences
238: .node("logging");
239:
240: private static Preferences applicationPreferences = userPreferences
241: .node("applications");
242:
243: private static Preferences serverPreferences = userPreferences
244: .node("server");
245:
246: private static Preferences directoryPreferences = userPreferences
247: .node("directory");
248:
249: private static Preferences publisherPreferences = userPreferences
250: .node("publisher");
251:
252: private static File defaultConfig = new File("default.ccc");
253:
254: private JTree tree;
255:
256: private TreePath treePath = null;
257:
258: private PreferencesTable preferencesTable;
259:
260: private AddPropertyAction addPropertyAction = new AddPropertyAction();
261:
262: private RemovePropertyAction removePropertyAction = new RemovePropertyAction();
263:
264: private LoadConfigurationAction loadConfigurationAction = new LoadConfigurationAction();
265:
266: private SaveConfigurationAction saveConfigurationAction = new SaveConfigurationAction();
267:
268: private static Logger logger = Logger
269: .getLogger(PreferencesModule.class.getName());
270:
271: public static Preferences getPreferences() {
272: return userPreferences;
273: }
274:
275: public static Preferences getLoggingPreferences() {
276: return loggingPreferences;
277: }
278:
279: public static Preferences getServerPreferences() {
280: return serverPreferences;
281: }
282:
283: public static Preferences getApplicationPreferences() {
284: return applicationPreferences;
285: }
286:
287: public static Preferences getDirectoryPreferences() {
288: return directoryPreferences;
289: }
290:
291: public static Preferences getPublisherPreferences() {
292: return publisherPreferences;
293: }
294:
295: public static String getDefaultLanguage() {
296: return getPreferences().get(PreferencesModule.LANGUAGE,
297: PreferencesModule.DEFAULT_LANGUAGE);
298: }
299:
300: public void init() {
301: setPreferredSize(new Dimension(550, 300));
302:
303: // build preferences...
304: PreferencesDescription userDescription = new PreferencesDescription(
305: userPreferences, Resources
306: .getLocalString("configuration"), Resources
307: .getLocalString("configuration_description"),
308: Resources.configureIcon);
309:
310: userDescription.defineProperty(LANG_BASENAME,
311: DEFAULT_LANG_BASENAME);
312: userDescription.defineProperty(LANGUAGE, DEFAULT_LANGUAGE);
313: userDescription.defineProperty(COUNTRY, DEFAULT_COUNTRY);
314: userDescription.defineProperty(GROUP, DEFAULT_GROUP);
315: userDescription.defineProperty(CONTEXT, DEFAULT_CONTEXT);
316: userDescription.defineProperty(VISIBLE_COMPONENTS_IN_FOLDER,
317: DEFAULT_VISIBLE_COMPONENTS_IN_FOLDER);
318: userDescription.defineProperty(MAX_SUBMENU_ITEMS,
319: DEFAULT_MAX_SUBMENU_ITEMS);
320: userDescription.defineProperty(CACHED_COMPONENTS,
321: DEFAULT_CACHED_COMPONENTS);
322: userDescription.defineProperty(SHOW_MEM_PANEL,
323: DEFAULT_SHOW_MEM_PANEL);
324: userDescription.defineProperty(SESSION_TIMEOUT,
325: DEFAULT_SESSION_TIMEOUT);
326: userDescription.defineProperty(SHOW_LINK_TARGETS,
327: DEFAULT_SHOW_LINK_TARGETS);
328: userDescription.defineProperty(CASCADE_FORMS,
329: DEFAULT_CASCADE_FORMS);
330: userDescription.defineProperty(EDIT_ALL_GROUPS,
331: DEFAULT_EDIT_ALL_GROUPS);
332: userDescription.defineProperty(ALLOW_DETAGGING,
333: DEFAULT_ALLOW_DETAGGING);
334: userDescription.defineProperty(ADVANCED_COPY,
335: DEFAULT_ADVANCED_COPY);
336: userDescription.defineProperty(CLIENT_THEME,
337: DEFAULT_CLIENT_THEME);
338: userDescription.defineProperty(TAB_WIDTH, DEFAULT_TAB_WIDTH);
339: userDescription.defineProperty(FONTSIZE_OFFSET,
340: DEFAULT_FONTSIZE_OFFSET);
341: userDescription
342: .defineProperty(BREAK_LINES, DEFAULT_BREAK_LINES);
343: userDescription.defineProperty(PREFILL_NEW_NAME,
344: DEFAULT_PREFILL_NEW_NAME);
345: userDescription.defineProperty(LEGACY_TYPES,
346: DEFAULT_LEGACY_TYPES);
347: userDescription.defineProperty(PREVIEW_NAME,
348: DEFAULT_PREVIEW_NAME);
349: userDescription.defineProperty(ENABLE_HIGHLIGHTING,
350: DEFAULT_ENABLE_HIGHLIGHTING);
351:
352: DefaultMutableTreeNode userNode = new DefaultMutableTreeNode(
353: userDescription);
354: PreferencesDescription loggingDescription = new PreferencesDescription(
355: loggingPreferences,
356: Resources.getLocalString("logging"), Resources
357: .getLocalString("logging_description"),
358: Resources.loggingIcon);
359: loggingDescription.defineProperty(LOG_FILE, DEFAULT_LOG_FILE);
360: loggingDescription.defineProperty(LOG_LEVEL, DEFAULT_LOG_LEVEL);
361: DefaultMutableTreeNode loggingNode = new DefaultMutableTreeNode(
362: loggingDescription);
363: PreferencesDescription applicationDescription = new PreferencesDescription(
364: applicationPreferences, Resources
365: .getLocalString("applications"), Resources
366: .getLocalString("applications_description"),
367: Resources.loggingIcon);
368: applicationDescription.defineProperty(HTML_EDITOR,
369: DEFAULT_HTML_EDITOR);
370: applicationDescription.defineProperty(HTML_RENDERER,
371: DEFAULT_HTML_RENDERER);
372: applicationDescription.defineProperty(EXTERNAL_TEXT_EDITOR,
373: DEFAULT_EXTERNAL_TEXT_EDITOR);
374: DefaultMutableTreeNode applicationNode = new DefaultMutableTreeNode(
375: applicationDescription);
376: PreferencesDescription directoryDescription = new PreferencesDescription(
377: directoryPreferences, Resources
378: .getLocalString("directories"), Resources
379: .getLocalString("directories_description"),
380: Resources.loggingIcon);
381: directoryDescription.defineProperty(IMAGE_DIRECTORY,
382: DEFAULT_IMAGE_DIRECTORY);
383: directoryDescription.defineProperty(FILE_DIRECTORY,
384: DEFAULT_FILE_DIRECTORY);
385: DefaultMutableTreeNode directoryNode = new DefaultMutableTreeNode(
386: directoryDescription);
387: PreferencesDescription serverDescription = new PreferencesDescription(
388: serverPreferences, Resources.getLocalString("server"),
389: Resources.getLocalString("server_description"),
390: Resources.serverIcon);
391: serverDescription.defineProperty(SERVER, DEFAULT_SERVER);
392: serverDescription.defineProperty(ANON_SERVER,
393: DEFAULT_ANON_SERVER);
394: serverDescription.defineProperty(UPDATE_INTERVAL,
395: DEFAULT_UPDATE_INTERVAL);
396: serverDescription.defineProperty(CALLBACK_PORT,
397: DEFAULT_CALLBACK_PORT);
398: serverDescription.defineProperty(UPDATE_MODE,
399: DEFAULT_UPDATE_MODE);
400: serverDescription.defineProperty(AUTO_RELOGIN,
401: DEFAULT_AUTO_RELOGIN);
402: serverDescription.defineProperty(AUTH_MECH, DEFAULT_AUTH_MECH);
403: serverDescription.defineProperty(AUTH_DOMAIN,
404: DEFAULT_AUTH_DOMAIN);
405: DefaultMutableTreeNode serverNode = new DefaultMutableTreeNode(
406: serverDescription);
407: PreferencesDescription publisherDescription = new PreferencesDescription(
408: publisherPreferences, Resources
409: .getLocalString("publisher"), Resources
410: .getLocalString("publisher_description"),
411: Resources.loggingIcon);
412: publisherDescription.defineProperty(PUBLISHER_TYPE,
413: DEFAULT_PUBLISHER_TYPE);
414: publisherDescription.defineProperty(PUBLISHER_NAME,
415: DEFAULT_PUBLISHER_NAME);
416: publisherDescription.defineProperty(PUBLISHER_ID,
417: DEFAULT_PUBLISHER_ID);
418: DefaultMutableTreeNode publisherNode = new DefaultMutableTreeNode(
419: publisherDescription);
420:
421: userNode.add(directoryNode);
422: userNode.add(serverNode);
423: userNode.add(loggingNode);
424: userNode.add(applicationNode);
425: userNode.add(publisherNode);
426:
427: tree = new JTree(userNode);
428: tree.setCellRenderer(new PreferencesTreeCellRenderer());
429: tree.setMinimumSize(new Dimension(150, 300));
430: ToolTipManager.sharedInstance().registerComponent(tree);
431: JSplitPane splitPane = new JSplitPane(
432: JSplitPane.HORIZONTAL_SPLIT);
433: splitPane.setTopComponent(tree);
434: tree.addTreeSelectionListener(new TreeSelectionListener() {
435: public void valueChanged(TreeSelectionEvent event) {
436: treePath = event.getPath();
437: if (treePath != null) {
438: addPropertyAction.setEnabled(true);
439: removePropertyAction.setEnabled(false);
440: PreferencesDescription description = (PreferencesDescription) ((DefaultMutableTreeNode) treePath
441: .getLastPathComponent()).getUserObject();
442: Preferences preferences = description
443: .getPreferences();
444: if (preferences != applicationPreferences) {
445: addPropertyAction.setEnabled(false);
446: }
447: updateTable(description);
448: }
449: }
450: });
451:
452: PreferencesTableModel preferencesTableModel = new PreferencesTableModel(
453: userPreferences);
454: preferencesTable = new PreferencesTable(preferencesTableModel);
455: preferencesTable.getColumnModel().getColumn(0)
456: .setPreferredWidth(125);
457: preferencesTable.getColumnModel().getColumn(1)
458: .setPreferredWidth(175);
459: preferencesTable
460: .setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
461: ListSelectionModel rowSelection = preferencesTable
462: .getSelectionModel();
463: rowSelection
464: .addListSelectionListener(new ListSelectionListener() {
465: public void valueChanged(ListSelectionEvent e) {
466: // Ignore extra messages.
467: if (e.getValueIsAdjusting())
468: return;
469: ListSelectionModel lsm = (ListSelectionModel) e
470: .getSource();
471: if (lsm.isSelectionEmpty()) {
472: removePropertyAction.setEnabled(false);
473: } else {
474: if (treePath != null) {
475: DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) treePath
476: .getLastPathComponent();
477: if (dmtn != null) {
478: PreferencesDescription description = (PreferencesDescription) dmtn
479: .getUserObject();
480: Preferences preferences = description
481: .getPreferences();
482: if (preferences == applicationPreferences) {
483: removePropertyAction
484: .setEnabled(true);
485: } else {
486: removePropertyAction
487: .setEnabled(false);
488: }
489: } else {
490: removePropertyAction
491: .setEnabled(false);
492: }
493: } else {
494: removePropertyAction.setEnabled(false);
495: }
496: }
497: }
498: });
499:
500: JScrollPane tableScroller = new JScrollPane(preferencesTable);
501: splitPane.setBottomComponent(tableScroller);
502:
503: add(splitPane, BorderLayout.CENTER);
504: }
505:
506: public Action[] getActions() {
507: addPropertyAction.setEnabled(false);
508: removePropertyAction.setEnabled(false);
509:
510: return new Action[] { loadConfigurationAction,
511: saveConfigurationAction, addPropertyAction,
512: removePropertyAction };
513: }
514:
515: public static class ConfigFileFilter extends FileFilter {
516: // Accept all directories and all gif, jpg, or tiff files.
517: public boolean accept(File f) {
518: if (f.isDirectory()) {
519: return true;
520: }
521:
522: String filename = f.getName();
523: if (filename.lastIndexOf(".") > 0) {
524: if (filename.substring(filename.lastIndexOf("."),
525: filename.length()).equals(".ccc")) {
526: return true;
527: }
528: }
529: return false;
530: }
531:
532: // The description of this filter
533: public String getDescription() {
534: return Resources
535: .getLocalString("config_file_filter_description");
536: }
537: }
538:
539: public static class LoadConfigurationAction extends AbstractAction
540: implements ContelligentAction {
541: public LoadConfigurationAction() {
542: super ("load_preferences_action", Resources.openIcon);
543: putValue(ROLLOVER_ICON, Resources.openIconRollOver);
544: putValue(SHORT_DESCRIPTION, "load_preferences_action_descr");
545: putValue(TYPE, PUSH_ACTION);
546: putValue(ACTION_TYPE, FILE_ACTION);
547: putValue(MENU_TARGET, MENU);
548: putValue(BUTTON_TARGET, NO_BUTTON);
549: }
550:
551: public void actionPerformed(ActionEvent e) {
552: JFileChooser fc = new JFileChooser();
553: fc.setFileFilter(new ConfigFileFilter());
554: if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
555: File file = fc.getSelectedFile();
556: try {
557: FileInputStream fileInputStream = new FileInputStream(
558: file);
559: userPreferences.importPreferences(fileInputStream);
560: fileInputStream.close();
561: } catch (FileNotFoundException fnf) {
562: ExceptionDialog.show(fnf);
563: } catch (IOException ioe) {
564: ExceptionDialog.show(ioe);
565: } catch (InvalidPreferencesFormatException ipfe) {
566: ExceptionDialog.show(ipfe);
567: }
568: }
569: }
570: }
571:
572: public static class SaveConfigurationAction extends AbstractAction
573: implements ContelligentAction {
574: public SaveConfigurationAction() {
575: super ("save_preferences_action", Resources.saveIcon);
576: putValue(ROLLOVER_ICON, Resources.saveIconRollOver);
577: putValue(SHORT_DESCRIPTION, "save_preferences_action_descr");
578: putValue(TYPE, PUSH_ACTION);
579: putValue(ACTION_TYPE, FILE_ACTION);
580: putValue(MENU_TARGET, MENU);
581: putValue(BUTTON_TARGET, NO_BUTTON);
582: }
583:
584: public void actionPerformed(ActionEvent e) {
585: JFileChooser fc = new JFileChooser();
586: fc.setFileFilter(new ConfigFileFilter());
587: if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
588: File file = fc.getSelectedFile();
589: try {
590: FileOutputStream fileOutputStream = new FileOutputStream(
591: file);
592: userPreferences.exportSubtree(fileOutputStream);
593: fileOutputStream.close();
594: } catch (BackingStoreException bse) {
595: ExceptionDialog.show(bse);
596: } catch (FileNotFoundException fnf) {
597: ExceptionDialog.show(fnf);
598: } catch (IOException ioe) {
599: ExceptionDialog.show(ioe);
600: }
601: }
602: }
603: }
604:
605: public class AddPropertyAction extends AbstractAction implements
606: ContelligentAction {
607: public AddPropertyAction() {
608: super ("add_property_action", Resources.addPropertyIcon);
609: putValue(ROLLOVER_ICON, Resources.addPropertyIconRollOver);
610: putValue(SHORT_DESCRIPTION, "add_property_action_descr");
611: putValue(TYPE, PUSH_ACTION);
612: putValue(ACTION_TYPE, EDIT_ACTION);
613: putValue(MENU_TARGET, MENU);
614: putValue(BUTTON_TARGET, TOOLBAR);
615: }
616:
617: public void actionPerformed(ActionEvent e) {
618: if (treePath != null) {
619: StringOptionPane optionPane = new StringOptionPane();
620: if (optionPane.showStringDialog(Resources
621: .getLocalString("add_property"), Resources
622: .getLocalString("enter_property_name")
623: + ":", "") == StringOptionPane.OK_OPTION) {
624: PreferencesDescription description = (PreferencesDescription) ((DefaultMutableTreeNode) treePath
625: .getLastPathComponent()).getUserObject();
626: Preferences preferences = description
627: .getPreferences();
628: preferences.put(optionPane.getText(), "");
629: updateTable(description);
630: }
631: }
632: }
633: }
634:
635: public class RemovePropertyAction extends AbstractAction implements
636: ContelligentAction {
637: public RemovePropertyAction() {
638: super ("remove_property_action",
639: Resources.deletePropertyIcon);
640: putValue(ROLLOVER_ICON,
641: Resources.deletePropertyIconRollOver);
642: putValue(SHORT_DESCRIPTION, "remove_property_action_descr");
643: putValue(TYPE, PUSH_ACTION);
644: putValue(ACTION_TYPE, EDIT_ACTION);
645: putValue(MENU_TARGET, MENU);
646: putValue(BUTTON_TARGET, TOOLBAR);
647: }
648:
649: public void actionPerformed(ActionEvent e) {
650: if (treePath != null
651: && preferencesTable.getSelectedRow() != -1) {
652: String key = (String) preferencesTable.getValueAt(
653: preferencesTable.getSelectedRow(), 0);
654: JOptionPane optionPane = new JOptionPane();
655: if (optionPane.showConfirmDialog(null, Resources
656: .getLocalString("really_delete")
657: + " '" + key + "'", Resources
658: .getLocalString("remove_property"),
659: JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
660: PreferencesDescription description = (PreferencesDescription) ((DefaultMutableTreeNode) treePath
661: .getLastPathComponent()).getUserObject();
662: Preferences preferences = description
663: .getPreferences();
664: preferences.remove(key);
665: updateTable(description);
666: }
667: }
668: }
669: }
670:
671: private void updateTable(PreferencesDescription description) {
672: PreferencesTableModel preferencesTableModel = new PreferencesTableModel(
673: description.getPreferences());
674: preferencesTable.setModel(preferencesTableModel);
675: preferencesTable.getColumnModel().getColumn(0)
676: .setPreferredWidth(125);
677: preferencesTable.getColumnModel().getColumn(1)
678: .setPreferredWidth(175);
679: }
680: }
|