blob: d339b499b763eb54c138a27aca66e57ba6d16056 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.felix.metatype.internal;
import org.apache.felix.metatype.internal.l10n.Resources;
import org.osgi.service.log.LogService;
/**
* The <code>LocalizedBase</code> class provides methods to localize strings
* and string arrays on demand using a <code>ResourceBundle</code> specified
* at construction time.
*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
abstract class LocalizedBase
{
/**
* The {@link Resources} used to localize strings.
*
* @see #localize(String)
* @see #localize(String[])
*/
private final Resources resources;
/**
* Sets up this class using the given <code>ResourceBundle</code>.
*
* @param resources The {@link Resources} used to localize return values of
* localizable methods.
*
* @throws NullPointerException If <code>resources</code> is
* <code>null</code>.
*/
protected LocalizedBase( Resources resources )
{
if ( resources == null )
{
throw new NullPointerException( "resources" );
}
this.resources = resources;
}
/**
* Returns the {@link Resources} assigned to this instance.
*/
protected Resources getResources()
{
return resources;
}
/**
* Calls {@link #localize(String)} for each string in the array and returns
* an array of the resulting localized strings. If <code>strings</code> is
* <code>null</code> <code>null</code> is returned.
*
* @param strings An array of non-<code>null</code> strings to localize.
*
* @return <code>null</code> if <code>strings</code> is <code>null</code> or
* an array of the same size as the <code>strings</code> array
* containing localized strings.
*/
protected String[] localize( String[] strings )
{
if ( strings == null )
{
return null;
}
String[] localized = new String[strings.length];
for ( int i = 0; i < strings.length; i++ )
{
localized[i] = localize( strings[i] );
}
return localized;
}
/**
* Localizes the string using the
* {@linkplain #getResources() resources} set on this instance if
* string starts with the percent character (<code>%</code>). If the
* string is <code>null</code>, does not start with a percent character
* or the resource whose key is the string without the leading the percent
* character is not found the string is returned without the leading percent
* character.
* <p>
* Examples of different localizations:
* <p>
* <table border="0" cellspacing="0" cellpadding="3">
* <tr bgcolor="#ccccff">
* <th><code>string</code></th>
* <th>Key</th>
* <th>Resource</th>
* <th>Result</th>
* </tr>
* <tr>
* <td><code>null</code></td>
* <td>-</td>
* <td>-</td>
* <td><code>null</code></td>
* </tr>
* <tr bgcolor="#eeeeff">
* <td>sample</td>
* <td>-</td>
* <td>-</td>
* <td>sample</td>
* </tr>
* <tr>
* <td><b>%</b>sample</td>
* <td>sample</td>
* <td>-</td>
* <td>sample</td>
* </tr>
* <tr bgcolor="#eeeeff">
* <td><b>%</b>sample</td>
* <td>sample</td>
* <td>resource</td>
* <td>resource</td>
* </tr>
* </table>
*
* @param string The string to localize
* @return The localized string
*/
protected String localize( String string )
{
if ( string != null && string.startsWith( "%" ) )
{
string = string.substring( 1 );
try
{
return getResources().getResource( string );
}
catch ( Exception e )
{
// ClassCastException, MissingResourceException
Activator.log( LogService.LOG_DEBUG, "localize: Failed getting resource '" + string + "'", e );
}
}
// just return the string unmodified
return string;
}
}