it.geosolutions.geoserver.jms.impl.handlers.DocumentFile.java Source code

Java tutorial

Introduction

Here is the source code for it.geosolutions.geoserver.jms.impl.handlers.DocumentFile.java

Source

/* 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);
        }
    }

}