| /* |
| * 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; |
| } |
| } |