blob: 5c129dc558b5dec109e83c3f4694797a975e1dcd [file] [log] [blame]
// Copyright 2004, 2005 The Apache Software Foundation
//
// Licensed 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.tapestry.util.text;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
/**
* A version of java.util.Properties that can read the properties from files
* using an encoding other than ISO-8859-1. All non-latin characters are read
* correctly using the given encoding and no longer need to be quoted using
* native2ascii. In addition, the properties may be stored in an arbitrary map,
* rather than only in Properties. For example, using LinkedHashMap will
* preserve the order of the properties as defined in the file.
*
* @author mb
* @since 4.0
*/
public class LocalizedProperties
{
private Map _propertyMap;
/**
* Create a new object with an empty property storage.
*/
public LocalizedProperties()
{
this(new HashMap());
}
/**
* Use the provided argument as the storage location for the properties
* managed by this object. This allows different types of Map
* implementations to be used, such as a LinkedHashMap to preserve the order
* of the keys, for example. The provided map may contain the default
* property values as well.
*
* @param propertyMap
* the map where properties are to be stored
*/
public LocalizedProperties(Map propertyMap)
{
_propertyMap = propertyMap;
}
/**
* Returns the property value corresponding the provided key. If there is no
* such property, or the value in the provided map is not of type String,
* null is returned.
*
* @param key
* the property key
* @return the value of the property, or null if there is no such property
*/
public String getProperty(String key)
{
Object value = _propertyMap.get(key);
if (value instanceof String) return (String) value;
return null;
}
/**
* Returns the property value corresponding to the provided key, or the
* provided default value if no such property exists.
*
* @param key
* the property key
* @param defaultValue
* the default value of the property
* @return the value of the property, or the default value if there is no
* such property
*/
public String getProperty(String key, String defaultValue)
{
String value = getProperty(key);
if (value != null) return value;
return defaultValue;
}
/**
* Stores a property value.
*
* @param key
* the property key
* @param value
* the property value
*/
public void setProperty(String key, String value)
{
_propertyMap.put(key, value);
}
/**
* Returns the map containing all properties. The map can be used to
* enumerate the properties or their keys.
*
* @return a map containing the properties
*/
public Map getPropertyMap()
{
return _propertyMap;
}
/**
* Loads the properties from the given stream using the default character
* encoding. This method operates in the same way as the equivalent method
* in {@link java.util.Properties}, but it also handles non-ascii symbols.
*
* @param ins
* the stream to load the properties from
* @throws IOException
*/
public void load(InputStream ins)
throws IOException
{
LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(ins);
loader.load(_propertyMap);
}
/**
* Loads the properties from the given stream using the provided character
* encoding. This method operates in the same way as the equivalent method
* in {@link java.util.Properties}, but it also handles non-ascii symbols.
*
* @param ins
* the stream to load the properties from
* @param encoding
* the encoding the use when parsing the stream
* @throws IOException
*/
public void load(InputStream ins, String encoding)
throws IOException
{
LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(ins,
encoding);
loader.load(_propertyMap);
}
/**
* Loads the properties from the given reader. This method operates in the
* same way as the equivalent method in {@link java.util.Properties}, but
* it also handles non-ascii symbols.
*
* @param reader
* the reader to load the properties from
* @throws IOException
*/
public void load(Reader reader)
throws IOException
{
LocalizedPropertiesLoader loader = new LocalizedPropertiesLoader(reader);
loader.load(_propertyMap);
}
}