Coverage Report - org.jtheque.core.utils.file.XMLReader
 
Classes in this File Line Coverage Branch Coverage Complexity
XMLReader
0 %
0/72
0 %
0/8
2.867
 
 1  
 package org.jtheque.core.utils.file;
 2  
 
 3  
 /*
 4  
  * This file is part of JTheque.
 5  
  *
 6  
  * JTheque is free software: you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation, either version 3 of the License.
 9  
  *
 10  
  * JTheque is distributed in the hope that it will be useful,
 11  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  
  * GNU General Public License for more details.
 14  
  *
 15  
  * You should have received a copy of the GNU General Public License
 16  
  * along with JTheque.  If not, see <http://www.gnu.org/licenses/>.
 17  
  */
 18  
 
 19  
 import org.jdom.Document;
 20  
 import org.jdom.Element;
 21  
 import org.jdom.JDOMException;
 22  
 import org.jdom.input.SAXBuilder;
 23  
 import org.jdom.xpath.XPath;
 24  
 
 25  
 import java.io.Closeable;
 26  
 import java.io.File;
 27  
 import java.io.FileInputStream;
 28  
 import java.io.IOException;
 29  
 import java.io.InputStream;
 30  
 import java.net.MalformedURLException;
 31  
 import java.net.URL;
 32  
 import java.net.URLConnection;
 33  
 import java.util.Collection;
 34  
 
 35  
 /**
 36  
  * A reader for XML files.
 37  
  *
 38  
  * @author Baptiste Wicht
 39  
  */
 40  0
 public final class XMLReader implements Closeable {
 41  
     private InputStream stream;
 42  
     private Document document;
 43  
 
 44  
     private static final String OPEN_ERROR = "Error opening the file";
 45  
     private static final String READING_ERROR = "Error reading the file";
 46  
 
 47  
     /**
 48  
      * Open the file a the URL.
 49  
      *
 50  
      * @param strUrl The URL of the XML file.
 51  
      * @throws XMLException If an error occurs during the open process.
 52  
      */
 53  
     public void openURL(String strUrl) throws XMLException {
 54  
         URL url;
 55  
         try {
 56  0
             url = new URL(strUrl);
 57  0
         } catch (MalformedURLException e) {
 58  0
             throw new XMLException("Invalid URL", e);
 59  0
         }
 60  
 
 61  0
         openURL(url);
 62  0
     }
 63  
 
 64  
     /**
 65  
      * Open the file a the URL.
 66  
      *
 67  
      * @param url The URL of the XML file.
 68  
      * @throws XMLException If an error occurs during the open process.
 69  
      */
 70  
     public void openURL(URL url) throws XMLException {
 71  
         try {
 72  0
             URLConnection urlConnection = url.openConnection();
 73  0
             urlConnection.setUseCaches(false);
 74  
 
 75  0
             urlConnection.connect();
 76  
 
 77  0
             stream = urlConnection.getInputStream();
 78  
 
 79  0
             SAXBuilder sxb = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
 80  
 
 81  
             try {
 82  0
                 document = sxb.build(stream);
 83  0
             } catch (JDOMException e) {
 84  0
                 throw new XMLException(OPEN_ERROR, e);
 85  0
             }
 86  0
         } catch (IOException e) {
 87  0
             throw new XMLException(OPEN_ERROR, e);
 88  0
         }
 89  0
     }
 90  
 
 91  
     /**
 92  
      * Open the file.
 93  
      *
 94  
      * @param strFile The path to the file to open.
 95  
      * @throws XMLException If an error occurs during the open process.
 96  
      */
 97  
     public void openFile(String strFile) throws XMLException {
 98  0
         openFile(new File(strFile));
 99  0
     }
 100  
 
 101  
     /**
 102  
      * Open the file.
 103  
      *
 104  
      * @param file The file to open.
 105  
      * @throws XMLException If an error occurs during the open process.
 106  
      */
 107  
     public void openFile(File file) throws XMLException {
 108  
         try {
 109  0
             stream = new FileInputStream(file);
 110  
 
 111  0
             SAXBuilder sxb = new SAXBuilder();
 112  
 
 113  0
             document = sxb.build(stream);
 114  0
         } catch (JDOMException e) {
 115  0
             throw new XMLException(OPEN_ERROR, e);
 116  0
         } catch (IOException e) {
 117  0
             throw new XMLException(OPEN_ERROR, e);
 118  0
         }
 119  0
     }
 120  
 
 121  
     @Override
 122  
     public void close() throws IOException {
 123  0
         if (stream != null) {
 124  0
             stream.close();
 125  
         }
 126  0
     }
 127  
 
 128  
     /**
 129  
      * Return the root element of the reader.
 130  
      *
 131  
      * @return the root element else null if the reader is not open.
 132  
      */
 133  
     public Element getRootElement() {
 134  0
         if (document != null) {
 135  0
             return document.getRootElement();
 136  
         }
 137  
 
 138  0
         return null;
 139  
     }
 140  
 
 141  
     /**
 142  
      * Return all the nodes corresponding to the XPath request on the specified node.
 143  
      *
 144  
      * @param path The XPath request.
 145  
      * @param node The node to request in.
 146  
      * @return A List containing all elements corresponding to the request.
 147  
      * @throws XMLException If an errors occurs during the reading process.
 148  
      */
 149  
     public Collection<Element> getNodes(String path, Object node) throws XMLException {
 150  
         try {
 151  0
             return XPath.newInstance(path).selectNodes(node);
 152  0
         } catch (JDOMException e) {
 153  0
             throw new XMLException("Error selecting nodes", e);
 154  
         }
 155  
     }
 156  
 
 157  
     /**
 158  
      * Return the unique node corresponding to the XPath request on the specified node.
 159  
      *
 160  
      * @param path The XPath request.
 161  
      * @param node The node to request in.
 162  
      * @return The unique node corresponding to the request else null if there is no node corresponding to the request.
 163  
      * @throws XMLException If an errors occurs during the reading process.
 164  
      */
 165  
     public Element getNode(String path, Object node) throws XMLException {
 166  
         Element n;
 167  
 
 168  
         try {
 169  0
             n = (Element) XPath.newInstance(path).selectSingleNode(node);
 170  0
         } catch (JDOMException e) {
 171  0
             throw new XMLException("Error selecting nodes", e);
 172  0
         }
 173  
 
 174  0
         return n;
 175  
     }
 176  
 
 177  
     /**
 178  
      * Indicate if a node exists with the specified path in the specified node.
 179  
      *
 180  
      * @param path The path to search for.
 181  
      * @param node The node to search from.
 182  
      *
 183  
      * @return true if the path exists from the node else false.
 184  
      *
 185  
      * @throws XMLException If an errors occurs during the reading process.
 186  
      */
 187  
     public boolean existsNode(String path, Object node) throws XMLException {
 188  0
         return getNode(path, node) != null;
 189  
     }
 190  
 
 191  
     /**
 192  
      * Indicate if a value exists with the specified path in the specified node.
 193  
      *
 194  
      * @param path The path to search for.
 195  
      * @param node The node to search from.
 196  
      *
 197  
      * @return true if the path exists from the node else false.
 198  
      *
 199  
      * @throws XMLException If an errors occurs during the reading process.
 200  
      */
 201  
     public boolean existsValue(String path, Object node) throws XMLException {
 202  0
         return readString(path, node) != null;
 203  
     }
 204  
 
 205  
     /**
 206  
      * Read a String value from the node.
 207  
      *
 208  
      * @param path The XPath request.
 209  
      * @param node The node.
 210  
      * @return The string value of the request.
 211  
      * @throws XMLException If an errors occurs during the reading process.
 212  
      */
 213  
     public String readString(String path, Object node) throws XMLException {
 214  
         String value;
 215  
 
 216  
         try {
 217  0
             value = XPath.newInstance(path).valueOf(node);
 218  0
         } catch (JDOMException e) {
 219  0
             throw new XMLException(READING_ERROR, e);
 220  0
         }
 221  
 
 222  0
         return value;
 223  
     }
 224  
 
 225  
     /**
 226  
      * Read a int value from the node.
 227  
      *
 228  
      * @param path The XPath request.
 229  
      * @param node The node.
 230  
      * @return The int value of the request.
 231  
      * @throws XMLException If an errors occurs during the reading process.
 232  
      */
 233  
     public int readInt(String path, Object node) throws XMLException {
 234  
         String value;
 235  
 
 236  
         try {
 237  0
             value = XPath.newInstance(path).valueOf(node);
 238  0
         } catch (JDOMException e) {
 239  0
             throw new XMLException(READING_ERROR, e);
 240  0
         }
 241  
 
 242  0
         return Integer.parseInt(value);
 243  
     }
 244  
 
 245  
     /**
 246  
      * Read a double value from the node.
 247  
      *
 248  
      * @param path The XPath request.
 249  
      * @param node The node.
 250  
      * @return The double value of the request.
 251  
      * @throws XMLException If an errors occurs during the reading process.
 252  
      */
 253  
     public double readDouble(String path, Object node) throws XMLException {
 254  
         String value;
 255  
 
 256  
         try {
 257  0
             value = XPath.newInstance(path).valueOf(node);
 258  0
         } catch (JDOMException e) {
 259  0
             throw new XMLException(READING_ERROR, e);
 260  0
         }
 261  
 
 262  0
         return Double.parseDouble(value);
 263  
     }
 264  
 
 265  
     /**
 266  
      * Read a boolean value from the node.
 267  
      *
 268  
      * @param path The XPath request.
 269  
      * @param node The node.
 270  
      * @return The boolean value of the request.
 271  
      * @throws XMLException If an errors occurs during the reading process.
 272  
      */
 273  
     public boolean readBoolean(String path, Object node) throws XMLException {
 274  
         String value;
 275  
 
 276  
         try {
 277  0
             value = XPath.newInstance(path).valueOf(node);
 278  0
         } catch (JDOMException e) {
 279  0
             throw new XMLException(READING_ERROR, e);
 280  0
         }
 281  
 
 282  0
         return Boolean.parseBoolean(value);
 283  
     }
 284  
 
 285  
     /**
 286  
      * Read a long value from the node.
 287  
      *
 288  
      * @param path The XPath request.
 289  
      * @param node The node.
 290  
      * @return The double value of the request.
 291  
      * @throws XMLException If an errors occurs during the reading process.
 292  
      */
 293  
     public long readLong(String path, Object node) throws XMLException {
 294  
         String value;
 295  
 
 296  
         try {
 297  0
             value = XPath.newInstance(path).valueOf(node);
 298  0
         } catch (JDOMException e) {
 299  0
             throw new XMLException(READING_ERROR, e);
 300  0
         }
 301  
 
 302  0
         return Long.parseLong(value);
 303  
     }
 304  
 }