/* * Copyright 2004-2012 the Seasar Foundation and the Others. * * 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.seasar.mayaa.impl.util; import java.io.InputStream; import org.seasar.mayaa.impl.util.xml.XMLReaderPool; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /** * @author Masataka Kurihara (Gluegent, Inc.) */ public final class XMLUtil { private XMLUtil() { // no instantiation. } public static void parse(DefaultHandler handler, InputStream stream, String publicID, String systemID, boolean namespace, boolean validation, boolean xmlSchema) { if (stream == null) { throw new IllegalArgumentException(); } XMLReaderPool pool = XMLReaderPool.getPool(); XMLReader xmlReader = pool.borrowXMLReader( handler, namespace, validation, xmlSchema); InputSource input = new InputSource(stream); input.setPublicId(publicID); input.setSystemId(systemID); try { xmlReader.parse(input); } catch (Throwable t) { if (t instanceof RuntimeException) { throw (RuntimeException) t; } throw new RuntimeException(t.getMessage(), t); } finally { pool.returnXMLReader(xmlReader); } } public static String getStringValue( Attributes attr, String localName, String defaultValue) { String value = attr.getValue(localName); if (StringUtil.hasValue(value)) { return value; } return defaultValue; } public static int getIntValue( Attributes attr, String localName, int defaultValue) { String value = attr.getValue(localName); if (StringUtil.hasValue(value)) { return Integer.parseInt(value); } return defaultValue; } public static boolean getBooleanValue( Attributes attr, String localName, boolean defaultValue) { String value = attr.getValue(localName); return ObjectUtil.booleanValue(value, defaultValue); } public static Class getClassValue( Attributes attr, String localName, Class defaultValue) { String className = attr.getValue(localName); if (StringUtil.hasValue(className)) { return ObjectUtil.loadClass(className); } return defaultValue; } public static Object getObjectValue( Attributes attr, String localName, Class expectedClass) { if (attr == null || StringUtil.isEmpty(localName) || expectedClass == null) { throw new IllegalArgumentException(); } Class clazz = getClassValue(attr, localName, null); if (clazz != null) { if (expectedClass.isAssignableFrom(clazz)) { return ObjectUtil.newInstance(clazz); } throw new IllegalClassTypeException(expectedClass, clazz); } return null; } }