/* Copyright (c) 2011 GeoSolutions - http://www.geo-solutions.it/. All rights reserved. * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package it.geosolutions.geoserver.jms.impl.handlers; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import org.apache.commons.io.IOUtils; import org.jdom.Document; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; import org.xml.sax.InputSource; /** * * Class used to handle a JDOM parse-able xml file * * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it * */ public class DocumentFile { private final File path; private final String body; /** * @return the path */ public final File getPath() { return path; } /** * @return the body containing the parsed file */ public final String getBody() { return body; } /** * Constructor * @param path the path referring to this file * @param document the string containing the body of the file (should be a valid JDOM document) * @throws JDOMException * @throws IOException */ public DocumentFile(File path, final String document) throws JDOMException, IOException { if (!path.exists()){ throw new IllegalArgumentException("Unable to locate the file path: \'"+path+"\'"); } this.path = path; this.body = document; } public DocumentFile(File path) throws JDOMException, IOException { if (!path.exists()){ throw new IllegalArgumentException("Unable to locate the file path: \'"+path+"\'"); } this.path = path; this.body = reader(path); } /** * write the body to the passed file argument * @param file * @throws JDOMException * @throws IOException */ public void writeTo(File file) throws JDOMException, IOException{ writer(file, body); } /** * * @param xmlString * @return * @throws JDOMException * @throws IOException */ protected static Document parser(String xmlString) throws JDOMException, IOException { InputSource source=null; StringReader reader=null; try { reader=new StringReader(xmlString); source = new InputSource(reader); final SAXBuilder builder = new SAXBuilder(); final Document doc = builder.build(source); return doc; } finally { IOUtils.closeQuietly(reader); } } private static String reader(File file) throws JDOMException, IOException { FileReader reader=null; try { reader=new FileReader(file); final SAXBuilder builder = new SAXBuilder(); XMLOutputter outputter=new XMLOutputter(); final Document doc = builder.build(reader); return outputter.outputString(doc); } finally { IOUtils.closeQuietly(reader); } } /** * * @param file * @param xml * @throws JDOMException * @throws IOException */ protected static void writer(File file, String xml) throws JDOMException, IOException { FileWriter writer=null; StringReader reader=null; try { writer=new FileWriter(file); reader=new StringReader(xml); char[] cbuf=new char[2048]; int size=0; while (reader.ready() && (size=reader.read(cbuf))!=-1){ writer.write(cbuf,0,size); } } finally { writer.flush(); IOUtils.closeQuietly(writer); IOUtils.closeQuietly(reader); } } }