blob: 7ce2acd4d442ea38cac1029d03e7d47f686bb152 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.model.terms;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.eclipse.bpel.model.BPELPlugin;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
/**
* The main plugin class to be used in the desktop.
*/
public class BPELTerms {
// preference key.
public static final String PREF_BPEL_TERMS_PATH = "pref_bpel_terms_path"; //$NON-NLS-1$
private ResourceBundle resourceBundle = null;
private String currentTerms = null;
private static String TERMS_PACKAGE = "org.eclipse.bpel.terms"; //$NON-NLS-1$
public static String SPEC_TERMS_PATH = TERMS_PACKAGE+".spec_terms"; //$NON-NLS-1$
protected boolean loadTerms(String terms) {
if (terms != null && terms.equals(currentTerms)) return true;
currentTerms = terms;
ResourceBundle newResourceBundle = null;
try {
newResourceBundle = ResourceBundle.getBundle(terms);
} catch (MissingResourceException x) {
return false;
}
resourceBundle = newResourceBundle;
return true;
}
Preferences.IPropertyChangeListener prefListener = new Preferences.IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (PREF_BPEL_TERMS_PATH.equals(event.getProperty())) {
loadTerms(getPluginPreferences().getString(PREF_BPEL_TERMS_PATH));
}
}
};
//The shared instance.
private static BPELTerms plugin;
/**
* The constructor.
*/
public BPELTerms() {
plugin = this;
}
/**
* Returns the shared instance. This method must work in both
* the eclipse and non-eclipse case.
*/
public synchronized static BPELTerms getDefault() {
// Lazy initialization for the non-eclipse case
if (plugin == null) {
plugin = new BPELTerms();
// Initialize the resource bundle to the spec terms since
// we don't have any preferences store.
plugin.loadTerms(SPEC_TERMS_PATH);
}
return plugin;
}
/**
* Returns the plugin's resource bundle,
*/
protected ResourceBundle getResourceBundle() {
if (resourceBundle == null) {
if (Platform.isRunning()) {
Preferences prefs = getPluginPreferences();
prefs.setDefault(PREF_BPEL_TERMS_PATH, SPEC_TERMS_PATH);
loadTerms(prefs.getString(PREF_BPEL_TERMS_PATH));
prefs.addPropertyChangeListener(prefListener);
}
}
return resourceBundle;
}
/**
* Returns the string from the plugin's resource bundle,
* or 'key' if not found.
*/
public static String getString(String key) {
ResourceBundle bundle = BPELTerms.getDefault().getResourceBundle();
try {
return (bundle != null) ? bundle.getString(key) : key;
} catch (MissingResourceException e) {
return key;
}
}
/**
* Retrieves a message with one parameter from the catalog. This is just a convenience
* wrapper for {@link #get(String,Object[])}.
* @param key The key of the message to retrieve.
* @param var The substitution variable to use.
* @return The message text or <code>null</code>, if the key cannot be found.
*/
public static String getString(String key, Object var) {
return getString(key, new Object[] { var });
}
/**
* Retrieves a message with an arbitrary number of parameters from the catalog.
* <ul>
* <li>If you specify less variables than there are parameters, the placeholders for
* the missing parameters will be left as-is. This is also true if you omit
* the variables at all using {@link #get(String)}.</li>
* <li>If you specify a <code>null</code> variable, the corresponding placeholder
* will be replaced with the string <code>null</code>.</li>
* <li>If you specify any variables at all when retrieving a message (it does not matter
* if they are actually used or not), you must escape the single quote character
* by doubling it in the message string. In contrast, if you don't specify any
* variables by using the {@link #get(String)} method (again, it does not matter if they
* are actually used), you must not escape the single quote character.</li>
* </ul>
* @param key The key of the message to retrieve.
* @param vars The list of substitution variables to use.
* @return The message text or <code>null</code>, if the key cannot be found.
*/
public static String getString(String key, Object[] vars)
{
String text = getString(key);
return text == null ? null : MessageFormat.format(text, vars);
}
/**
* Return the name of the currently-selected catalogue. This method must
* work whether we are in an eclipse or non-eclipse environment.
* @return the name of the currently-selected catalogue. The result will
* be either
*/
public static String getCatalogName() {
// Plugin preferences will not exist in a non-eclipse environment.
if (Platform.isRunning()) {
return BPELTerms.getDefault().getPluginPreferences().getString(PREF_BPEL_TERMS_PATH);
}
return SPEC_TERMS_PATH;
}
// TODO: temp method - should be removed
public Preferences getPluginPreferences() {
return BPELPlugin.getPlugin().getPluginPreferences();
}
// TODO: temp method - should be removed
public void savePluginPreferences() {
BPELPlugin.getPlugin().savePluginPreferences();
}
}