|
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 |
|