package com.insightfullogic.honest_profiler.ports.javafx.util;
import static java.util.Locale.ENGLISH;
import static java.util.ResourceBundle.getBundle;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Utility class for working with the I18N resources.
* <p>
* Not sure if this shouldn't be called I18NUtil.
*/
public final class ResourceUtil
{
// Class Properties
///////////////////////////////////////////////////////////////
// Constants recording the keys in the I18N resource bundle. //
///////////////////////////////////////////////////////////////
// - InfoBar help messages
// -- For the root MenuBar
public static final String INFO_MENU_ROOT = "menu.root.info";
// -- For the ChoiceBoxes
public static final String INFO_CHOICE_VIEWTYPE = "choice.viewtype.info";
public static final String INFO_CHOICE_FILTERTYPE = "choice.filtertype.info";
public static final String INFO_CHOICE_FILTERTARGET = "choice.filtertarget.info";
public static final String INFO_CHOICE_COMPARISONOPERATOR = "choice.comparisonOperator.info";
// -- For the Buttons
public static final String INFO_BUTTON_FREEZE_UNFROZEN = "button.freeze.unfrozen.info";
public static final String INFO_BUTTON_FREEZE_FROZEN = "button.freeze.frozen.info";
public static final String INFO_BUTTON_COMPARE = "button.compare.info";
public static final String INFO_BUTTON_FILTER = "button.filter.info";
public static final String INFO_BUTTON_EXPORT = "button.flat.export.info";
public static final String INFO_BUTTON_QUICKFILTER = "button.quickFilter.info";
public static final String INFO_BUTTON_EXPANDALL = "button.expandAll.info";
public static final String INFO_BUTTON_COLLAPSEALLALL = "button.collapseAll.info";
public static final String INFO_BUTTON_ADDFILTER = "button.addFilter.info";
public static final String INFO_BUTTON_REMOVEFILTER = "button.removeFilter.info";
// -- For text input fields
public static final String INFO_INPUT_QUICKFILTER = "input.quickFilter.info";
public static final String INFO_INPUT_FILTERVALUE = "input.filterValue.info";
// -- For Labels
public static final String INFO_LABEL_PROFILESAMPLECOUNT = "label.profileSampleCount.info";
public static final String INFO_LABEL_BASESOURCE = "label.baseSource.info";
public static final String INFO_LABEL_NEWSOURCE = "label.newSource.info";
public static final String INFO_LABEL_ANCESTORS = "label.ancestors.info";
public static final String INFO_LABEL_DESCENDANTS = "label.descendants.info";
// -- For CheckBoxes
public static final String INFO_CHECK_HIDEERRORTHREADS = "check.hideErrorThreads.info";
public static final String INFO_TABLE_FLAT = "table.flat.info";
public static final String INFO_TABLE_FLATDIFF = "table.flatDiff.info";
public static final String INFO_TABLE_TREE = "table.tree.info";
public static final String INFO_TABLE_TREEDIFF = "table.treeDiff.info";
// -- For ListViews
public static final String INFO_LIST_FILTERS = "list.filters.info";
// -- For Tabs
public static final String INFO_TAB_PROFILE = "tab.profile.info";
public static final String INFO_TAB_PROFILEDIFF = "tab.profileDiff.info";
// - Text Content
// -- For Labels
public static final String CONTENT_LABEL_PROFILESAMPLECOUNT = "label.profileSampleCount.content";
public static final String CONTENT_LABEL_EXCEPTION = "label.exception.content";
// -- For Tab headers
public static final String CONTENT_TAB_LOADING = "tab.loading.content";
// - Context Menu Item labels
// -- For TreeItems
public static final String CTXMENU_TREE_EXPANDFULLY = "ctxmenu.tree.expandFully";
public static final String CTXMENU_TREE_EXPANDFIRSTONLY = "ctxmenu.tree.expandFirstOnly";
public static final String CTXMENU_TREE_COLLAPSE = "ctxmenu.tree.collapse";
public static final String CTXMENU_TREE_EXPORTSUBTREE = "ctxmenu.tree.exportSubtree";
// - Tooltip messages
// -- For Buttons
public static final String TOOLTIP_BUTTON_FREEZE_UNFROZEN = "button.freeze.unfrozen.tooltip";
public static final String TOOLTIP_BUTTON_FREEZE_FROZEN = "button.freeze.frozen.tooltip";
// - Column Headers
public static final String COLUMN_METHOD = "column.method";
public static final String COLUMN_SELF_PCT_GRAPH = "column.selfCntPctGraph";
public static final String COLUMN_TOTAL_PCT_GRAPH = "column.totalCntPctGraph";
public static final String COLUMN_SELF_CNT = "column.selfCnt";
public static final String COLUMN_SELF_TIME = "column.selfTime";
public static final String COLUMN_SELF_CNT_DIFF = "column.selfCntDiff";
public static final String COLUMN_SELF_TIME_DIFF = "column.selfTimeDiff";
public static final String COLUMN_SELF_CNT_PCT = "column.selfCntPct";
public static final String COLUMN_SELF_TIME_PCT = "column.selfTimePct";
public static final String COLUMN_SELF_CNT_PCT_DIFF = "column.selfCntPctDiff";
public static final String COLUMN_SELF_TIME_PCT_DIFF = "column.selfTimePctDiff";
public static final String COLUMN_TOTAL_CNT = "column.totalCnt";
public static final String COLUMN_TOTAL_TIME = "column.totalTime";
public static final String COLUMN_TOTAL_CNT_DIFF = "column.totalCntDiff";
public static final String COLUMN_TOTAL_TIME_DIFF = "column.totalTimeDiff";
public static final String COLUMN_TOTAL_CNT_PCT = "column.totalCntPct";
public static final String COLUMN_TOTAL_TIME_PCT = "column.totalTimePct";
public static final String COLUMN_TOTAL_CNT_PCT_DIFF = "column.totalCntPctDiff";
public static final String COLUMN_TOTAL_TIME_PCT_DIFF = "column.totalTimePctDiff";
// - Dialog Titles
public static final String TITLE_DIALOG_OPENFILE = "dialog.openFile.title";
public static final String TITLE_DIALOG_SPECIFYFILTERS = "dialog.specifyFilters.title";
public static final String TITLE_DIALOG_SPECIFYFILTER = "dialog.specifyFilter.title";
public static final String TITLE_DIALOG_ERR_OPENPROFILE = "dialog.err.openProfile.title";
public static final String TITLE_DIALOG_ERR_EXPORTPROFILE = "dialog.err.exportProfile.title";
public static final String TITLE_DIALOG_ERR_ALREADYOPENPROFILE = "dialog.err.alreadyOpen.title";
// - Dialog Headers
public static final String HEADER_DIALOG_ERR_OPENPROFILE = "dialog.err.openProfile.header";
public static final String HEADER_DIALOG_ERR_EXPORTPROFILE = "dialog.err.exportProfile.header";
public static final String HEADER_DIALOG_ERR_ALREADYOPENPROFILE = "dialog.err.alreadyOpen.header";
// - Dialog Content
public static final String MESSAGE_DIALOG_ERR_OPENPROFILE = "dialog.err.openProfile.message";
public static final String MESSAGE_DIALOG_ERR_TASKCANCELED = "dialog.err.taskCanceled.message";
public static final String MESSAGE_DIALOG_ERR_EXPORTPROFILE = "dialog.err.exportProfile.message";
public static final String MESSAGE_DIALOG_ERR_ALREADYOPENPROFILE = "dialog.err.alreadyOpen.message";
// - File Types
public static final String TYPE_FILE_HP = "type.file.hp";
public static final String TYPE_FILE_ALL = "type.file.all";
// - Exception Messages
public static final String EXCEPTION_DIALOGCREATIONFAILED = "exception.dialogCreationFailed.message";
// - General Strings
public static final String GENERAL_UNKNOWN = "general.unknown";
public static final String GENERAL_THREAD = "general.thread";
public static final String GENERAL_DEPTH = "general.depth";
public static final String GENERAL_SAMPLECOUNT = "general.sampleCount";
///////////////////////////////////////////
// Bundle- and Locale-related constants. //
///////////////////////////////////////////
private static final Locale DEFAULT_LOCALE = ENGLISH;
private static final String BUNDLE_BASE = "com.insightfullogic.honest_profiler.ports.javafx.i18n.HPUIBundle";
private static final ResourceBundle DEFAULT_BUNDLE = getBundle(BUNDLE_BASE, DEFAULT_LOCALE);
/**
* Returns the default {@link Locale} for the application, which is set to {@link Locale#ENGLISH} since that's the
* only available {@link ResourceBundle} at time of writing.
* <p>
* @return the default {@link Locale}
*/
public static final Locale getDefaultLocale()
{
return DEFAULT_LOCALE;
}
/**
* Returns the {@link ResourceBundle} for the default {@link Locale}.
* <p>
* @return the {@link ResourceBundle} for the default {@link Locale}
*/
public static ResourceBundle getDefaultBundle()
{
return DEFAULT_BUNDLE;
}
/**
* Formats a message from the specified {@link ResourceBundle} using the specified arguments.
* <p>
* @param locale the {@link Locale} (see {@link MessageFormat#setLocale(Locale)})
* @param bundle the {@link ResourceBundle} containing the message pattern
* @param key the key of the message pattern in the {@link ResourceBundle}
* @param args the arguments needed for formatting the message
* @return the formatted message
*/
public static String format(Locale locale, ResourceBundle bundle, String key, Object... args)
{
MessageFormat formatter = new MessageFormat("");
formatter.setLocale(locale);
formatter.applyPattern(bundle.getString(key));
return formatter.format(args);
}
// Instance Constructors
/**
* Private constructor for Utility Class.
*/
private ResourceUtil()
{
// Private constructor for Utility Class
}
}