001: /*
002: * Gruntspud
003: *
004: * Copyright (C) 2002 Brett Smith.
005: *
006: * Written by: Brett Smith <t_magicthize@users.sourceforge.net>
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU Library General Public License
010: * as published by the Free Software Foundation; either version 2 of
011: * the License, or (at your option) any later version.
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU Library General Public License for more details.
016: *
017: * You should have received a copy of the GNU Library General Public
018: * License along with this program; if not, write to the Free Software
019: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
020: */
021:
022: package gruntspud;
023:
024: import java.awt.event.KeyEvent;
025: import java.util.MissingResourceException;
026: import java.util.ResourceBundle;
027: import java.util.StringTokenizer;
028:
029: import javax.swing.KeyStroke;
030:
031: /**
032: * @author magicthize
033: *
034: * Set of utilities useful for resource bundles
035: */
036:
037: public class ResourceUtil {
038:
039: /**
040: * Return a string without throwing an exception, just return <code>null</code>
041: * if property is missing
042: *
043: * @param bundle
044: * @param key
045: * @return value
046: */
047: public static String getResource(ResourceBundle bundle, String key) {
048: try {
049: return bundle.getString(key);
050: } catch (MissingResourceException mre) {
051: Constants.UI_LOG.error(mre);
052: }
053: return null;
054: }
055:
056: /**
057: * Get a boolean from a resource bundle. The value must be either
058: * true, yes or on (case insensitive) to return <code>true</code>
059: * alphabetic character, or -1 will be returned
060: *
061: * @param bundle the resource bundle
062: * @param key the key in the bundle
063: * @return boolean value
064: */
065: public static boolean getResourceBoolean(ResourceBundle bundle,
066: String key) {
067: String val = getResource(bundle, key);
068: return val != null
069: && (val.equalsIgnoreCase("true")
070: || val.equalsIgnoreCase("on") || val
071: .equalsIgnoreCase("yes"));
072: }
073:
074: /**
075: * Get a mnemonic from a resource bundle. The value must be a single
076: * alphabetic character, or -1 will be returned
077: *
078: * @param bundle the resource bundle
079: * @param key the key in the bundle
080: * @return the mnemonic code, or -1 if no resource is found
081: */
082: public static char getResourceMnemonic(ResourceBundle bundle,
083: String key) {
084: String val = getResource(bundle, key);
085: if (val == null || val.length() != 1) {
086: return (char) -1;
087: }
088: char ch = val.charAt(0);
089: return Character.isLetter(ch) ? ch : (char) -1;
090: }
091:
092: /**
093: * Get a <code>KeyStroke</code> object given a string. The string is made
094: * up of the virtual key name (VK_DELETE, VK_F1, VK_A etc) and a list of
095: * modifiers. <code>VK_F1+SHIFT+CTRL+ALT</code> would mean F1+Shift+Ctrl+Alt
096: * would have to be pressed to achieve this KeyStroke.
097: *
098: * @param bundle the resource bunle
099: * @param key the key name
100: * @return the keystroke object, or <code>null</code> if invalid
101: */
102: public static KeyStroke getResourceKeyStroke(ResourceBundle bundle,
103: String key) {
104: String val = getResource(bundle, key);
105: if (val != null && val.length() > 3) {
106: StringTokenizer t = new StringTokenizer(val, "+");
107: int mod = 0;
108: int id = -1;
109: while (t.hasMoreTokens()) {
110: String x = t.nextToken();
111: if (x.equalsIgnoreCase("ctrl"))
112: mod += KeyEvent.CTRL_MASK;
113: else if (x.equalsIgnoreCase("shift"))
114: mod += KeyEvent.SHIFT_MASK;
115: else if (x.equalsIgnoreCase("alt"))
116: mod += KeyEvent.ALT_MASK;
117: else {
118: try {
119: java.lang.reflect.Field f = KeyEvent.class
120: .getField(x);
121: id = f.getInt(null);
122: } catch (Throwable ex) {
123: ex.printStackTrace();
124: }
125: }
126: }
127: if (id != -1) {
128: return KeyStroke.getKeyStroke(id, mod);
129: }
130: }
131: return null;
132: }
133: }
|