1 /* 2 * File: ContentHandlerUtils.java 3 * Created: 15-dub-06 8:40:12 4 * 5 * Copyright 2006 Michal Burda. 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 package net.sf.webmancer.util.xml.sax; 22 23 import javax.xml.namespace.QName; 24 25 import net.sf.webmancer.util.ContractChecker; 26 27 import org.xml.sax.Attributes; 28 import org.xml.sax.Locator; 29 30 /** 31 * This class provides various utility methods used while creating SAX parsers. SAX parsing is parsing of XML files 32 * using Simple API for XML. 33 * 34 * @author Michal Burda 35 */ 36 public class ContentHandlerUtils { 37 38 /** 39 * Prevent instantiation 40 */ 41 private ContentHandlerUtils() { 42 super(); 43 } 44 45 /** 46 * Search in <code>atts</code> for an attribute with name given by <code>attributeQName</code> and return its 47 * value or <code>null</code> if no such attribute is found. All parameters must not be <code>null</code>. 48 * 49 * @param atts 50 * The list of attributes being searched in 51 * @param attributeQName 52 * The QName of the searched attribute 53 * @return The attribute value or <code>null</code> if no such attribute is found 54 */ 55 public static String getAttributesValue(final Attributes atts, final QName attributeQName) { 56 ContractChecker.mustNotBeNull(atts, "atts"); 57 ContractChecker.mustNotBeNull(attributeQName, "attributeQName"); 58 return atts.getValue(attributeQName.getNamespaceURI(), attributeQName.getLocalPart()); 59 } 60 61 /** 62 * Throws {@link SAXSemanticException} if the given <code>condition</code> is not satisfied. 63 * 64 * @param condition 65 * The condition that has to be satisfied or the exception is thrown 66 * @param message 67 * The error message 68 * @param locator 69 * The locator of the error 70 * @throws SAXSemanticException 71 * Thrown if the given condition is not satisfied 72 */ 73 public static void expected(boolean condition, final String message, final Locator locator) throws SAXSemanticException { 74 if (!condition) { 75 throw new SAXSemanticException(message, locator); 76 } 77 } 78 79 /** 80 * Search in <code>atts</code> for an attribute with name given by <code>attributeQName</code> and return its 81 * value as int. If no such attribute is found or its value is not parsable string, the {@link SAXSemanticException} 82 * is thrown. 83 * 84 * @param atts 85 * The list of attributes being searched in 86 * @param attributeQName 87 * The QName of the searched attribute 88 * @param locator 89 * The locator that would be used in exception creation 90 * @return The attribute value as int 91 * @throws SAXSemanticException 92 * Thrown if no such attribute is found or its value is not parsable string 93 */ 94 public static int getAttributesValueAsInt(final Attributes atts, final QName attributeQName, final Locator locator) 95 throws SAXSemanticException { 96 try { 97 return Integer.parseInt(getAttributesValue(atts, attributeQName)); 98 } catch (NumberFormatException e) { 99 throw new SAXSemanticException("Integer value expected", locator, e); 100 } 101 } 102 103 /** 104 * Search in <code>atts</code> for an attribute with name given by <code>attributeQName</code> and return its 105 * value as long. If no such attribute is found or its value is not parsable string, the 106 * {@link SAXSemanticException} is thrown. 107 * 108 * @param atts 109 * The list of attributes being searched in 110 * @param attributeQName 111 * The QName of the searched attribute 112 * @param locator 113 * The locator that would be used in exception creation 114 * @return The attribute value as long 115 * @throws SAXSemanticException 116 * Thrown if no such attribute is found or its value is not parsable string 117 */ 118 public static long getAttributesValueAsLong(final Attributes atts, final QName attributeQName, final Locator locator) 119 throws SAXSemanticException { 120 try { 121 return Long.parseLong(getAttributesValue(atts, attributeQName)); 122 } catch (NumberFormatException e) { 123 throw new SAXSemanticException("Long value expected", locator, e); 124 } 125 } 126 127 /** 128 * Search in <code>atts</code> for an attribute with name given by <code>attributeQName</code> and return its 129 * value as float. If no such attribute is found or its value is not parsable string, the 130 * {@link SAXSemanticException} is thrown. 131 * 132 * @param atts 133 * The list of attributes being searched in 134 * @param attributeQName 135 * The QName of the searched attribute 136 * @param locator 137 * The locator that would be used in exception creation 138 * @return The attribute value as float 139 * @throws SAXSemanticException 140 * Thrown if no such attribute is found or its value is not parsable string 141 */ 142 public static float getAttributesValueAsFloat(final Attributes atts, final QName attributeQName, final Locator locator) 143 throws SAXSemanticException { 144 try { 145 return Float.parseFloat(getAttributesValue(atts, attributeQName)); 146 } catch (NumberFormatException e) { 147 throw new SAXSemanticException("Float value expected", locator, e); 148 } 149 } 150 151 /** 152 * Search in <code>atts</code> for an attribute with name given by <code>attributeQName</code> and return its 153 * value as double. If no such attribute is found or its value is not parsable string, the 154 * {@link SAXSemanticException} is thrown. 155 * 156 * @param atts 157 * The list of attributes being searched in 158 * @param attributeQName 159 * The QName of the searched attribute 160 * @param locator 161 * The locator that would be used in exception creation 162 * @return The attribute value as double 163 * @throws SAXSemanticException 164 * Thrown if no such attribute is found or its value is not parsable string 165 */ 166 public static double getAttributesValueAsDouble(final Attributes atts, final QName attributeQName, final Locator locator) 167 throws SAXSemanticException { 168 try { 169 return Integer.parseInt(getAttributesValue(atts, attributeQName)); 170 } catch (NumberFormatException e) { 171 throw new SAXSemanticException("Double value expected", locator, e); 172 } 173 } 174 }