|
XmlConfigArray |
|
/*
** Luxor - XML User Interface Language (XUL) Toolkit
** Copyright (c) 2001, 2002 by Gerald Bauer
**
** This program is free software.
**
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE.
**
*/
package luxor.core.config;
import java.util.*;
import org.jdom.*;
import luxor.core.*;
public class XmlConfigArray extends XmlConfigContainer
{
private ArrayList _entry = new ArrayList();
private Object _prevValue;
public XmlConfigArray( Element element )
{
super( element );
}
public Object getValue()
{
if( _entry.size() == 0 )
{
Xul.error( "xml config data array '" + getId() + "' is empty; empty arrays are not supported; unable to deduce array type" );
return new Object[0];
}
// use first item to deduce type/class
XmlConfigNode node = ( XmlConfigNode ) _entry.get( 0 );
Class clazz = node.getValue().getClass();
if( clazz == String.class )
{
String[] array = new String[_entry.size()];
for( int i = 0; i < _entry.size(); i++ )
{
XmlConfigNode entry = ( XmlConfigNode ) _entry.get( i );
array[i] = ( String ) entry.getValue();
}
return array;
}
else
{
Xul.warning( "unsupported type used in xml config data array '" + getId() + "': " + clazz.getName() );
Object[] array = new Object[_entry.size()];
for( int i = 0; i < _entry.size(); i++ )
{
XmlConfigNode entry = ( XmlConfigNode ) _entry.get( i );
array[i] = entry.getValue();
}
return array;
}
}
public void add( XmlConfigNode node )
{
Object value = node.getValue();
// check for type mismatch; array supports only single type
if( _prevValue != null )
{
if( _prevValue.getClass() != value.getClass() )
{
Xul.error( "type mismatch in xml config data array '" + getId() + "': "
+ _prevValue.getClass().getName() + " != "
+ value.getClass().getName() );
}
}
_entry.add( node );
_prevValue = value;
}
}
|
XmlConfigArray |
|