1/*
2 * Copyright (c) 2009-2010 jMonkeyEngine
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 *   notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 *   notice, this list of conditions and the following disclaimer in the
14 *   documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17 *   may be used to endorse or promote products derived from this software
18 *   without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33package com.jme3.util.xml;
34
35import com.jme3.math.ColorRGBA;
36import com.jme3.math.Vector3f;
37import org.xml.sax.Attributes;
38import org.xml.sax.SAXException;
39
40/**
41 * Utility methods for parsing XML data using SAX.
42 */
43public final class SAXUtil {
44
45    /**
46     * Parses an integer from a string, if the string is null returns
47     * def.
48     *
49     * @param i
50     * @param def
51     * @return
52     * @throws SAXException
53     */
54    public static int parseInt(String i, int def) throws SAXException{
55        if (i == null)
56            return def;
57        else{
58            try {
59                return Integer.parseInt(i);
60            } catch (NumberFormatException ex){
61                throw new SAXException("Expected an integer, got '"+i+"'");
62            }
63        }
64    }
65
66    public static int parseInt(String i) throws SAXException{
67        if (i == null)
68            throw new SAXException("Expected an integer");
69        else{
70            try {
71                return Integer.parseInt(i);
72            } catch (NumberFormatException ex){
73                throw new SAXException("Expected an integer, got '"+i+"'");
74            }
75        }
76    }
77
78    public static float parseFloat(String f, float def) throws SAXException{
79        if (f == null)
80            return def;
81        else{
82            try {
83                return Float.parseFloat(f);
84            } catch (NumberFormatException ex){
85                throw new SAXException("Expected a decimal, got '"+f+"'");
86            }
87        }
88    }
89
90    public static float parseFloat(String f) throws SAXException{
91        if (f == null)
92            throw new SAXException("Expected a decimal");
93        else{
94            try {
95                return Float.parseFloat(f);
96            } catch (NumberFormatException ex){
97                throw new SAXException("Expected a decimal, got '"+f+"'");
98            }
99        }
100    }
101
102    public static boolean parseBool(String bool, boolean def) throws SAXException{
103        if (bool == null || bool.equals(""))
104            return def;
105        else
106            return Boolean.valueOf(bool);
107        //else
108        //else
109        //    throw new SAXException("Expected a boolean, got'"+bool+"'");
110    }
111
112    public static String parseString(String str, String def){
113        if (str == null)
114            return def;
115        else
116            return str;
117    }
118
119    public static String parseString(String str) throws SAXException{
120        if (str == null)
121            throw new SAXException("Expected a string");
122        else
123            return str;
124    }
125
126    public static Vector3f parseVector3(Attributes attribs) throws SAXException{
127        float x = parseFloat(attribs.getValue("x"));
128        float y = parseFloat(attribs.getValue("y"));
129        float z = parseFloat(attribs.getValue("z"));
130        return new Vector3f(x,y,z);
131    }
132
133    public static ColorRGBA parseColor(Attributes attribs) throws SAXException{
134        float r = parseFloat(attribs.getValue("r"));
135        float g = parseFloat(attribs.getValue("g"));
136        float b = parseFloat(attribs.getValue("b"));
137        return new ColorRGBA(r, g, b, 1f);
138    }
139
140}
141