/* Copyright (C) 2003-2011 Raik Nagel
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
// function : simple xml reader functions
package net.sf.jabref.util ;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class TXMLReader
{
private Document config ; // XML data
private DocumentBuilderFactory factory ;
private DocumentBuilder builder ;
private boolean ready = false ;
public TXMLReader(String resPath)
{
factory = DocumentBuilderFactory.newInstance() ;
try
{
builder = factory.newDocumentBuilder() ;
InputStream stream = null ;
if (resPath != null)
{
stream = TXMLReader.class.getResourceAsStream( resPath ) ;
}
// not found, check the src/ directory (IDE mode)
if (stream == null)
{
try
{
stream = new FileInputStream( "src" +resPath ) ;
}
catch (Exception e)
{
}
}
if (stream != null)
{
config = builder.parse( stream ) ;
ready = true ;
}
}
catch ( SAXException sxe )
{
sxe.printStackTrace() ;
}
catch ( ParserConfigurationException pce )
{
pce.printStackTrace() ;
}
catch ( IOException ioe )
{
ioe.printStackTrace() ;
}
catch (Exception oe)
{
oe.printStackTrace();
}
}
// ---------------------------------------------------------------------------
public boolean isReady()
{
return ready ;
}
public NodeList getNodes( String name )
{
return config.getElementsByTagName( name ) ;
}
// ---------------------------------------------------------------------------
private Element getFirstElement( Element element, String name )
{
NodeList nl = element.getElementsByTagName( name ) ;
if ( nl.getLength() < 1 )
{
throw new RuntimeException(
"Element: " + element + " does not contain: " + name ) ;
}
return ( Element ) nl.item( 0 ) ;
}
/** returns all "plain" data of a subnode with name <name> */
public String getSimpleElementText( Element node, String name )
{
Element namedElement = getFirstElement( node, name ) ;
return getSimpleElementText( namedElement ) ;
}
/** collect all "plain" data of a xml node */
public String getSimpleElementText( Element node )
{
StringBuffer sb = new StringBuffer() ;
NodeList children = node.getChildNodes() ;
for ( int i = 0 ; i < children.getLength() ; i++ )
{
Node child = children.item( i ) ;
if ( child instanceof Text )
{
sb.append( child.getNodeValue().trim() ) ;
}
}
return sb.toString() ;
}
// ---------------------------------------------------------------------------
// read some attributes
// --------------------------------------------------------------------------
public int readIntegerAttribute( Element node, String attrName, int defaultValue )
{
int back = defaultValue ;
if ( node != null )
{
String data = node.getAttribute( attrName ) ;
if ( data != null )
{
if ( data.length() > 0 )
{
try
{
back = Integer.parseInt( data ) ;
}
catch (Exception e) {}
}
}
}
return back ;
}
public String readStringAttribute( Element node, String attrName, String defaultValue )
{
if ( node != null )
{
String data = node.getAttribute( attrName ) ;
if ( data != null )
{
if ( data.length() > 0 )
{
return data ;
}
}
}
return defaultValue ;
}
public double readDoubleAttribute( Element node, String attrName, double defaultValue )
{
if ( node != null )
{
String data = node.getAttribute( attrName ) ;
if ( data != null )
{
if ( data.length() > 0 )
{
return Double.parseDouble( data ) ;
}
}
}
return defaultValue ;
}
}