/**
* Copyright (C) IntelliBitz Technologies., Muthu Ramadoss
* 168, Medavakkam Main Road, Madipakkam, Chennai 600091, Tamilnadu, India.
* http://www.intellibitz.com
* training@intellibitz.com
* +91 44 2247 5106
* http://groups.google.com/group/etoe
* http://sted.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* STED, Copyright (C) 2007 IntelliBitz Technologies
* STED comes with ABSOLUTELY NO WARRANTY;
* This is free software, and you are welcome
* to redistribute it under the GNU GPL conditions;
*
* Visit http://www.gnu.org/ for GPL License terms.
*/
/**
* $Id:Resources.java 55 2007-05-19 05:55:34Z sushmu $
* $HeadURL: svn+ssh://sushmu@svn.code.sf.net/p/sted/code/FontTransliterator/trunk/src/intellibitz/sted/util/Resources.java $
*/
package intellibitz.sted.util;
import intellibitz.sted.fontmap.FontInfo;
import intellibitz.sted.io.SettingsXMLHandler;
import org.xml.sax.SAXException;
import javax.swing.ImageIcon;
import javax.xml.parsers.ParserConfigurationException;
import java.awt.Font;
import static java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.logging.Logger;
public class Resources
{
public static final String COLON = ":";
public static final String EMPTY_STRING = "";
public static final String SPACE = " ";
public static final String EQUALS = "=";
public static final String SYMBOL_ASTERISK = "*";
public static final String NEWLINE_DELIMITER = "\n";
public static final String SYSTEM = "SYSTEM";
public static final String RESOURCE = "RESOURCE";
public static final String STED_CONFIG_NAME = "config.sted";
public static final String STED_VERSION = "sted.version";
public static final String LOG_CONFIG_NAME = "config.log";
public static final String MENU_CONFIG_NAME = "config.menu";
public static final String FONTMAP_FILE = "fontmap.file";
public static final String LABEL_ADD = "label.add";
public static final String LABEL_CLEAR = "label.clear";
public static final String LABEL_FONT_LOAD = "label.font.load";
public static final String ICON_FILE_INPUT = "icon.file.input";
public static final String ICON_FILE_OUTPUT = "icon.file.output";
public static final String ICON_FILE_NORMAL_STATE =
"icon.file.normal.state";
public static final String ICON_FILE_EDIT_STATE = "icon.file.edit.state";
public static final String ICON_STED = "icon.sted";
public static final String ICON_HELP = "icon.help";
public static final String ICON_HELP_HOME = "icon.help.home";
public static final String ICON_HELP_BACK = "icon.help.back";
public static final String ICON_HELP_FORWARD = "icon.help.forward";
public static final String ICON_LOCK = "icon.status.lock";
public static final String ICON_UNLOCK = "icon.status.unlock";
public static final String TITLE_ABOUT_STED = "title.about.sted";
public static final String TITLE_KEYPAD = "title.keypad";
public static final String TITLE_MAPPING = "title.mapping";
public static final String TITLE_MAPPING_RULE = "title.mapping.rule";
public static final String TITLE_MAPPING_PREVIEW = "title.mapping.preview";
public static final String KEYPAD_COLUMN_COUNT = "keypad.column.count";
public static final String FONT_CHAR_MAXINDEX = "font.char.maxindex";
public static final String TITLE_TAB_INPUT = "title.tab.input";
public static final String TITLE_TAB_OUTPUT = "title.tab.output";
public static final String TITLE_TAB_FONTMAP = "title.tab.fontmap";
public static final String TIP_TAB_FONTMAP = "tip.tab.fontmap";
public static final String TITLE_TABLE_COLUMN_SYMBOL1 =
"title.table.column.symbol1";
public static final String TITLE_TABLE_COLUMN_SYMBOL2 =
"title.table.column.symbol2";
public static final String TITLE_TABLE_COLUMN_EQUALS =
"title.table.column.equals";
public static final String TITLE_TABLE_COLUMN_FIRST_LETTER =
"title.table.column.letter1";
public static final String TITLE_TABLE_COLUMN_LAST_LETTER =
"title.table.column.letter2";
public static final String TITLE_TABLE_COLUMN_FOLLOWED_BY =
"title.table.column.followed";
public static final String TITLE_TABLE_COLUMN_PRECEDED_BY =
"title.table.column.preceded";
public static final String TITLE_HELP = "title.help";
public static final String HELP_INDEX = "help.index";
public static final String SETTINGS_STED_UI = "settings.sted.ui";
public static final String SETTINGS_STED_USER = "settings.sted.user";
public static final String SETTINGS_PATH = "sted.settings.path";
public static final String STED_HOME_PATH = "sted.home.path";
public static final String RESOURCE_PATH = "sted.resource.path";
public static final String LOG_PATH = "sted.log.path";
public static final String SAMPLE_INPUT_TEXT = "sample.input.text";
public static final String ACTION_CONVERT_NAME = "Convert";
public static final String ACTION_STOP_NAME = "Stop";
public static final String ACTION_PRESERVE_TAGS = "Preserve <Tags>";
public static final String ACTION_TRANSLITERATE_REVERSE =
"Reverse Transliterate";
public static final String ACTION_FILE_RELOAD = "ReLoad from Disk";
public static final String ACTION_VIEW_LAF = "Look & Feel";
public static final String ACTION_FILE_NEW_COMMAND = "New";
public static final String ACTION_FILE_RELOAD_COMMAND = "ReLoad";
public static final String ACTION_FILE_REOPEN_COMMAND = "ReOpen";
public static final String ACTION_FILE_SAVE_COMMAND = "Save";
public static final String ACTION_FILE_SAVEAS_COMMAND = "Save As...";
public static final String ACTION_FILE_CLOSE_COMMAND = "Close";
public static final String ACTION_SELECT_INPUT_FILE_COMMAND = "Input";
public static final String ACTION_SELECT_OUTPUT_FILE_COMMAND = "Output";
public static final String ACTION_DELETE_COMMAND = "Delete";
public static final String ACTION_CUT_COMMAND = "Cut";
public static final String ACTION_COPY_COMMAND = "Copy";
public static final String ACTION_UNDO_COMMAND = "Undo";
public static final String ACTION_REDO_COMMAND = "Redo";
public static final String ACTION_PASTE_COMMAND = "Paste";
public static final String ACTION_SELECT_ALL_COMMAND = "Select All";
public static final String ACTION_VIEW_TOOLBAR_COMMAND = "ViewTool";
public static final String ACTION_VIEW_STATUS_COMMAND = "ViewStatus";
public static final String ACTION_VIEW_SAMPLE_COMMAND = "ViewSample";
public static final String ACTION_VIEW_SAMPLE = "Mapping Preview";
public static final String ACTION_VIEW_MAPPING_COMMAND = "ViewMapping";
public static final String ACTION_VIEW_MAPPING = "Mapping Rules";
public static final String MENU_POPUP_MAPPING = "Mapping";
public static final String FOLLOWED_BY = "Followed By: ";
public static final String PRECEDED_BY = "Preceded By: ";
public static final String TITLE = "title";
public static final String XML = "xml";
public static final String ENTRIES = "entries";
public static final String ENTRY_CONDITIONAL_AND = "AND";
public static final String ENTRY_CONDITIONAL_OR = "OR";
public static final String ENTRY_CONDITIONAL_NOT = "NOT";
public static final String ENTRY_TOSTRING_DELIMITER = ":";
public static final String HTML_TAG_START = "<";
public static final String HTML_TAG_START_ESCAPE = "&";
public static final String HTML_TAG_END = ">";
public static final String HTML_TAG_END_ESCAPE = ";";
public static final String RULE_TITLE = " If <> is: ";
public static final int ENTRY_STATUS_ADD = 1;
public static final int ENTRY_STATUS_EDIT = 2;
public static final int ENTRY_STATUS_DELETE = 3;
// @since version 0.61
public static final String MENUBAR_STED = "STED-MenuBar";
public static final String MENUBAR_FONTMAP = "FontMap-MenuBar";
// @since version 0.62
public static final String INPUT_FILE = "input.file";
public static final String OUTPUT_FILE = "output.file";
public static final String ICON_GC = "icon.gc";
public static final String ICON_GC2 = "icon.gc.rollover";
public static final int DEFAULT_MENU_COUNT = 2;
public static final String SAMPLE_FONTMAP = "sample.fontmap";
public static final String MENU_SAMPLES_NAME = "Samples";
private static ResourceBundle resourceBundle;
private static final Logger logger =
Logger.getLogger("intellibitz.sted.util.Resources");
private static final Map<String, String> settings =
new HashMap<String, String>();
public static final String SETTINGS_FILE_PATH_USER;
public static final Map<String, ImageIcon> imageIcons =
new HashMap<String, ImageIcon>();
private static int id;
static final Map<String, FontInfo> fonts =
new HashMap<String, FontInfo>();
static
{
resourceBundle = ResourceBundle
.getBundle(Resources.STED_CONFIG_NAME, Locale.getDefault());
logger.finest("retrieved resource bundle " + resourceBundle);
String settingsPath =
System.getProperty(Resources.SETTINGS_PATH, "../settings/");
settingsPath = FileHelper.suffixFileSeparator(settingsPath);
String SETTINGS_FILE_PATH_STED = settingsPath
+ getResource(
Resources.SETTINGS_STED_UI);
SETTINGS_FILE_PATH_USER = settingsPath
+ getResource(Resources.SETTINGS_STED_USER);
try
{
readSettings(SETTINGS_FILE_PATH_STED);
}
catch (IOException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - IOException " + e.getMessage());
}
catch (SAXException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - SAXException " + e.getMessage());
}
catch (ParserConfigurationException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - ParserConfigurationException " +
e.getMessage());
}
try
{
readSettings(SETTINGS_FILE_PATH_USER);
}
catch (IOException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - IOException " + e.getMessage());
logger.info(
"NOTE: Safely ignore the user.xml not found error if starting STED for the first time");
}
catch (SAXException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - SAXException " + e.getMessage());
}
catch (ParserConfigurationException e)
{
logger.throwing("Resources", "static initializer block", e);
logger.severe(
"Unable to read settings - ParserConfigurationException " +
e.getMessage());
}
Resources.getImageIcons()
.put(Resources.ICON_STED, Resources.getSystemResourceIcon
(Resources.getResource(Resources.ICON_STED)));
// load all system fonts
loadFonts(getLocalGraphicsEnvironment().getAllFonts());
}
private Resources()
{
}
protected void finalize()
throws Throwable
{
resourceBundle = null;
super.finalize();
}
public static String getSTEDTitle()
{
return getResource(TITLE);
}
public static Image getSTEDImage()
{
return getSTEDIcon().getImage();
}
public static ImageIcon getSTEDIcon()
{
return
getSystemResourceIcon(getSetting(ICON_STED));
}
public static ImageIcon getCleanIcon()
{
return getSystemResourceIcon(
getResource(ICON_FILE_NORMAL_STATE));
}
public static ImageIcon getDirtyIcon()
{
return getSystemResourceIcon(
getResource(ICON_FILE_EDIT_STATE));
}
public static ImageIcon getLockIcon()
{
return
getSystemResourceIcon(getResource(ICON_LOCK));
}
public static ImageIcon getUnLockIcon()
{
return
getSystemResourceIcon(getResource(ICON_UNLOCK));
}
public static String getVersion()
{
return getResource(STED_VERSION);
}
public static String getResource(String name)
{
String val = null;
try
{
val = resourceBundle.getString(name);
}
catch (MissingResourceException e)
{
// ignore, since we will try alternates
}
// if not from resource bundle.. try system property.. or the settings file
if (val == null)
{
val = getPropertySettings(name);
}
if (val == null)
{
logger.severe("Resource not found for: " + name);
}
return val;
}
private static String getPropertySettings(String name)
{
// try the system property - might come from command line
// system property will override the options in the settings file
String val = System.getProperty(name);
if (val == null)
{
// read from the settings file
val = getSetting(name);
}
return val;
}
public static String getSetting(String name)
{
return settings.get(name);
}
public static ArrayList<String> getSettingBeginsWith(String prefix)
{
final Iterator<String> keys = settings.keySet().iterator();
final ArrayList<String> result = new ArrayList<String>();
while (keys.hasNext())
{
final String key = keys.next();
if (key.startsWith(prefix))
{
final String val = settings.get(key);
result.add(val);
}
}
return result;
}
private static void readSettings(String path)
throws IOException, SAXException, ParserConfigurationException
{
final SettingsXMLHandler settingsXMLHandler =
new SettingsXMLHandler(new File(path));
settingsXMLHandler.read();
settings.putAll(settingsXMLHandler.getSettings());
}
public static ImageIcon getSystemResourceIcon(String iconName)
{
if (iconName != null)
{
try
{
ImageIcon imageIcon = imageIcons.get(iconName);
if (null != imageIcon)
{
return imageIcon;
}
// try with the filename
imageIcon = new ImageIcon(iconName);
if (null != imageIcon)
{
imageIcons.put(iconName, imageIcon);
return imageIcon;
}
final URL url = ClassLoader.getSystemResource(iconName);
if (url != null)
{
imageIcon = new ImageIcon(url);
imageIcons.put(iconName, imageIcon);
}
return imageIcon;
}
catch (NullPointerException e)
{
logger.warning("No icon found or can be loaded for " + iconName
+ " " + e.getMessage() +
e.getStackTrace().toString());
}
}
logger.warning(
"Cannot find Resource. Returning null as icon for " + iconName);
return null;
}
public static Map<String, ImageIcon> getImageIcons()
{
return imageIcons;
}
public static String getSampleFontMap()
{
return prefixResourcePath(getResource(SAMPLE_FONTMAP));
}
public static String prefixResourcePath(String path)
{
return getResourceDirPath() +
path;
}
public static String getResourceDirPath()
{
return FileHelper.suffixFileSeparator(
Resources.getResource(
RESOURCE_PATH));
}
public static int getId()
{
return ++id;
}
static void loadFonts(Font[] allFonts)
{
for (final Font font : allFonts)
{
Font f = font.deriveFont(Font.PLAIN, 14);
fonts.put(font.getName(), new FontInfo(f, SYSTEM));
}
}
public static Map<String, FontInfo> getFonts()
{
return fonts;
}
public static FontInfo getFont(String fontName)
{
return fonts.get(fontName);
}
}