/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at
|
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
|
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at
|
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
|
* add the following below this CDDL HEADER, with the fields enclosed
|
* by brackets "[]" replaced with your own identifying * information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Portions Copyright 2006 Sun Microsystems, Inc.
|
*/
|
|
package org.opends.statuspanel.i18n;
|
|
import java.text.MessageFormat;
|
import java.util.ResourceBundle;
|
|
/**
|
* This class is used to retrieve localized messages from Resources.properties
|
* files. This class extends org.opends.quicksetup.i18n.ResourceProvider so
|
* that it first looks for properties in the Resources.properties located in
|
* the org.opends.quicksetup.resources package and then if they are not there
|
* looks for properties in org.opends.statuspanel.resources.
|
*
|
* This is done to avoid duplication of properties between the setup and the
|
* status panel.
|
*
|
*/
|
public class ResourceProvider
|
extends org.opends.quicksetup.i18n.ResourceProvider
|
{
|
private ResourceBundle bundle;
|
|
private static ResourceProvider instance;
|
|
private static final String BUNDLE_NAME =
|
"org.opends.statuspanel.resources.Resources";
|
|
private ResourceProvider()
|
{
|
}
|
|
/**
|
* Provides an instance of the ResourceProvider. The instance is unique for
|
* this process (which implies that during the process lifetime we can only
|
* have messages in one language).
|
*
|
* @return an instance of ResourceProvider.
|
*/
|
public static ResourceProvider getInstance()
|
{
|
if (instance == null)
|
{
|
instance = new ResourceProvider();
|
}
|
return instance;
|
}
|
|
/**
|
* Gets a localized message for a key value. In the properties file we have
|
* something of type:
|
* key=value
|
* @param key the key in the properties file.
|
* @return the value associated to the key in the properties file.
|
* @throws IllegalArgumentException if the key could not be found in the
|
* properties file.
|
*/
|
public String getMsg(String key) throws IllegalArgumentException
|
{
|
String msg;
|
try
|
{
|
/* First try to quick setup resource provider as it contains most of
|
* the labels.
|
*/
|
msg = super.getMsg(key);
|
}
|
catch (Exception ex)
|
{
|
/* Now try with the status panel specific resources.
|
*/
|
try
|
{
|
msg = getResourceBundle().getString(key);
|
|
} catch (java.util.MissingResourceException e)
|
{
|
// The less brutal alternative here is to do msg = key instead
|
// of
|
// throwing an exception but this helps being strict with
|
// resources
|
// (so I prefer to keep it as it is at least at the beginning)
|
throw new IllegalArgumentException("Unknown Resource Bundle key: " +
|
key);
|
}
|
}
|
return msg;
|
}
|
|
/**
|
* Gets a localized message for a key value. In the properties file we have
|
* something of type:
|
* key=value
|
*
|
* For instance if we pass as key "mykey" and as arguments {"value1"} and
|
* in the properties file we have:
|
* mykey=value with argument {0}.
|
*
|
* This method will return "value with argument value1".
|
*
|
* @param key the key in the properties file.
|
* @param args the arguments to be passed to generate the resulting value.
|
* @return the value associated to the key in the properties file.
|
* @throws IllegalArgumentException if the key could not be found in the
|
* properties file.
|
*/
|
public String getMsg(String key, String[] args)
|
throws IllegalArgumentException
|
{
|
String msg;
|
try
|
{
|
/* First try to quick setup resource provider as it contains most of
|
* the labels.
|
*/
|
msg = super.getMsg(key, args);
|
}
|
catch (Exception ex)
|
{
|
/* Now try with the status panel specific resources.
|
*/
|
try
|
{
|
String pattern = getResourceBundle().getString(key);
|
MessageFormat mf = new MessageFormat(pattern);
|
|
msg = mf.format(args);
|
} catch (java.util.MissingResourceException e)
|
{
|
// The less brutal alternative here is to do msg = key instead
|
// of
|
// throwing an exception but this helps being strict with
|
// resources
|
// (so I prefer to keep it as it is at least at the beginning)
|
throw new IllegalArgumentException("Unknown Resource Bundle key: " +
|
key);
|
}
|
}
|
return msg;
|
}
|
|
/**
|
* The ResourceBundle that will be used to get the localized messages.
|
* @return the ResourceBundle that will be used to get the localized
|
* messages.
|
*/
|
private ResourceBundle getResourceBundle()
|
{
|
if (bundle == null)
|
{
|
try
|
{
|
bundle =
|
ResourceBundle.getBundle(BUNDLE_NAME, getLocale(), this
|
.getClass().getClassLoader());
|
} catch (java.util.MissingResourceException e)
|
{
|
throw new IllegalStateException("Could not retrieve Resource Bundle: "
|
+ BUNDLE_NAME, e);
|
|
}
|
}
|
|
return bundle;
|
}
|
}
|