/* * DrakkarKeel - An Enterprise Collaborative Search Platform * * The contents of this file are subject under the terms described in the * DRAKKARKEEL_LICENSE file included in this distribution; you may not use this * file except in compliance with the License. * * 2013-2014 DrakkarKeel Platform. */ package drakkar.oar.util; import java.io.*; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; /** * Esta clase es la encargada de crea y leer los parámetros del fichero XML creado * para guardar determinadas propiedades de configuración */ public class XMLParser { /** * Constructor por defecto de la clase */ public XMLParser() { } /** * Constructor de la clase * * @param configurationFile directorio del fichero de configuración * * @throws Exception si ocurre algún error durante el proceso de construcción * del fichero de configuración */ @SuppressWarnings({"unchecked", "unchecked"}) public XMLParser(File configurationFile) throws Exception { this.configurationfile = configurationFile; SAXBuilder builder = new SAXBuilder(false); xmldoc = builder.build(configurationFile); raiz = xmldoc.getRootElement(); parameters = (List<Element>) raiz.getChildren("parameter"); } /** * Constructor de la clase * * @param configFilePath dirección del fichero de configración * * @throws Exception si ocurre algún error durante el proceso de construcción * del fichero de configuración */ public XMLParser(String configFilePath) throws Exception { this(new File(configFilePath)); } /** * Devuelve el valor asociado al nombre del parámetro * * @param parameterName nombre del parámetro * * @return valor */ public String getValue(String parameterName) { for (Element parameter : parameters) { if (parameter.getAttributeValue("name").equals(parameterName)) { return parameter.getAttributeValue("value"); } } return null; } private Element getElement(String parameterName) { for (Element parameter : parameters) { if (parameter.getAttributeValue("name").equals(parameterName)) { return parameter; } } return null; } /** * Modifica el valor asociado al parámetro especificado * * @param parametername nombre del parámetro * @param newvalue nuevo valor * * @return true si se pudo actualizar el valor, false en caso contrario */ public boolean setValue(String parametername, String newvalue) { org.jdom.Element element = getElement(parametername); if (element != null) { element.setAttribute("value", newvalue); try { org.jdom.output.XMLOutputter out = new org.jdom.output.XMLOutputter(); try (java.io.FileOutputStream file = new java.io.FileOutputStream(configurationfile)) { out.output(xmldoc, file); file.flush(); } //out.output(xmldoc, System.out); return true; } catch (Exception e) { e.printStackTrace(); } } return false; } /** * Crea un fichero de configuración el la dirección especificada, a partir de * los parámetros proporcionados * * @param configFilePath dirección del fichero de configuración * @param params lista de parámetros * * @return true si se pudo crear el fichero, false en caso contrario */ public static boolean createXMLConfig(String configFilePath, List<Parameter> params) { PrintWriter write = null; try { // File file = new File(uriConfigFile + ".xml"); File file = new File(configFilePath); if (!file.exists()) { File f = new File(file.getParent()); if (!f.exists()) { f.mkdir(); } } write = new PrintWriter(new FileOutputStream(file)); write.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); write.println("<configuration>"); for (Parameter parameter : params) { write.print("<parameter name=\"" + parameter.getKey() + "\" value=\"" + parameter.getValue() + "\"/>\n"); } write.println("</configuration>"); write.close(); } catch (FileNotFoundException ex) { if (write != null) { write.close(); } } return true; } /** * Devuelve una instancia de la clase * * @param name nombre del fichero de configuración * * @return instancia * * @throws Exception si ocurre algún error durante el proceso de construcción * del fichero de configuración */ public static XMLParser getInstance(String name) throws Exception { return new XMLParser(name); } /** * Devuelve una instancia de la clase * * @param name nombre del fichero de configuración * * @return instancia * * @throws Exception si ocurre algún error durante el proceso de construcción * del fichero de configuración */ public static XMLParser getInstance(File file) throws Exception { return new XMLParser(file); } private Document xmldoc; private List<Element> parameters; private Element raiz; private File configurationfile; }