/**
* Copyright (c) 2003-2009, Xith3D Project Group all rights reserved.
*
* Portions based on the Java3D interface, Copyright by Sun Microsystems.
* Many thanks to the developers of Java3D and Sun Microsystems for their
* innovation and design.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of the 'Xith3D Project Group' nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A
* RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE
*/
package org.xith3d.utility.properties;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Hashtable;
import java.util.Properties;
import org.xith3d.utility.exception.Check;
import org.xith3d.utility.logging.X3DLog;
/**
* :Id: PropertyManager.java,v 1.6 2003/02/24 00:13:53 wurp Exp $
*
* :Log: PropertyManager.java,v $
* Revision 1.6 2003/02/24 00:13:53 wurp
* Formatted all java code for cvs (strictSunConvention.xml)
*
* Revision 1.5 2002/05/15 02:02:31 dilvish
* Major updates for inventory and terrain
*
* Revision 1.4 2001/06/20 04:05:42 wurp
* added log4j.
*
* Revision 1.3 2001/01/02 11:12:26 wurp
* Added getProperty to PropertyManager; made convertToString
* slightly more efficient in StringProperty.
*
* Revision 1.2 2000/11/04 12:09:58 wizofid
* Finishing property manager integeration
*
* Revision 1.1 2000/10/08 21:38:22 entropy
* Initial checkin
*
* Revision 1.1 2000/09/21 11:08:03 dyazel
* Implemented a generic property manager
*
*
* This class allows you to setup project properties, read and write them to a
* commented property file, and yet still be able to access the values quickly at
* runtime.
*
* @author David Yazel
*/
public class PropertyManager
{
private Hashtable< String, PropertyInterface > props = new Hashtable< String, PropertyInterface >( 50 );
/**
* When adding a property to the list, we specfify all the information regarding that
* property so we can read and write them
* @param prop The name of the property
*/
public void addProperty( PropertyInterface prop )
{
props.put( prop.getName(), prop );
}
private String nameToKey( String name )
{
String result = name.replace( ' ', '_' );
return ( result );
}
/**
* Retrieves a property from the manager.
*
* @param name The name of the property
* @return PropertyInterface reference back to the property.
*/
public PropertyInterface getProperty( String name )
{
return ( props.get( name ) );
}
/**
* Writes the properties out to a file
*/
public void save( String filename )
{
try
{
PrintStream prnout = new PrintStream( new BufferedOutputStream( new FileOutputStream( filename ) ) );
// step through all the properties and write them out
for ( PropertyInterface node: props.values() )
{
prnout.println( "#" + node.getComment() );
prnout.println( nameToKey( node.getName() ) + "=" + node.convertToString() );
prnout.println();
}
prnout.close();
}
catch ( java.io.FileNotFoundException e )
{
Check.assertion( false, e.getMessage() );
}
}
/**
* This will load the specified file, then match all the defined properties against
* the properties in the file. The values in the properties will then be overwritten
*/
public void load( String filename )
{
X3DLog.debug( "Loading property file : ", filename );
try
{
BufferedInputStream infile = new BufferedInputStream( new FileInputStream( filename ) );
Properties p = new Properties();
p.load( infile );
// step through all the properties and write them out
for ( PropertyInterface node: props.values() )
{
String key = nameToKey( node.getName() );
String value = p.getProperty( key );
if ( value != null )
{
node.convertFromString( value );
X3DLog.debug( " Property ", key, " = ", node.convertToString() );
}
else
{
X3DLog.debug( " Property ", key, " not found, using defaults" );
}
}
infile.close();
}
catch ( java.io.FileNotFoundException e )
{
X3DLog.exception( "Property file ", filename, " not found, using defaults" );
}
catch ( java.io.IOException e )
{
Check.assertion( false, e.getMessage() );
}
}
public PropertyManager()
{
}
}