/**
* TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L.
* Copyright (C) 2007 Autentia Real Bussiness Solution S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.autentia.tnt.xml;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import com.autentia.tnt.manager.report.ReportManager;
public class UtilitiesXML {
private static Log log = LogFactory.getLog(UtilitiesXML.class);
/**
* Este metodo busca un fichero de tipo XML en el classpath crea un objeto
* de tipo org.w3c.dom.Document.
* @param fichero: El nombre del fichero a procesar.
* @return
* @throws Exception
*/
public static Document file2Document(String fichero) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL urlfichero = loader.getResource(fichero);
Document XMLDoc = factory.newDocumentBuilder().parse(new InputSource(urlfichero.openStream()));
return XMLDoc;
}
/**
* Este metodo convierte un objeto de tipo org.w3c.dom.NodeList a List
* @param nodes
* @return
* @throws Exception
*/
public static List nodes2String (NodeList nodes) throws Exception {
List<String> nodeText = new ArrayList<String>();
for(int i=0;i<nodes.getLength();i++) {
Node node = (Node)nodes.item(i);
nodeText.add(normalizeName(getTexto(node)));
}
return nodeText;
}
/**
* Este metodo convierte un objeto de tipo org.w3c.dom.NodeList a List
* Este metodo solo saca el atributo especificado con nombre
* @param nodo
* @return
* @throws Exception
*/
public static List printAttribute (String nombre,NodeList nodes) throws Exception {
List<String> nodeText = new ArrayList<String>();
for(int i=0;i<nodes.getLength();i++) {
Node node = (Node)nodes.item(i);
nodeText.add(normalizeName(giveAttributeNode(nombre,node)));
}
return nodeText;
}
/**
* Devuelve el texto de un nodo: <tag>TEXTO</tag>
* @param n
* @return
*/
public static String getTexto (Node n) {
NodeList nl = n.getChildNodes();
Node act = null;
for (int i=0;i<nl.getLength();i++) {
act = nl.item(i);
if (act == null)
return null;
if ((act.getNodeType() == Node.CDATA_SECTION_NODE)||(act.getNodeType() == Node.TEXT_NODE))
return act.getNodeValue();
}
return "";
}
/**
* Devuelve el valor del atributo "nombre" de un nodo
* @param nombre
* @param nodo
* @return
*/
public static String giveAttributeNode(String name, Node node) {
NamedNodeMap map = node.getAttributes();
String value = null;
if(map!=null) {
Node nodoAt = map.getNamedItem(name);
if(nodoAt!=null)
value = nodoAt.getNodeValue();
}
return value;
}
/**
* Este metodo normaliza un texto pasado por parametro
* @param nombre
* @return
*/
public static String normalizeName(String name) {
return name.replace('.',' ');
}
/**
* Esta funcion retorna en un List todos los ficheros de la carpeta report
* @return
*/
public static List filesFromFolder(String path) {
File[] filesList = null;
List list = new ArrayList();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
File f = null;
try {
f = new File(loader.getResource(path).toURI());
} catch (URISyntaxException e) {
log.error("Error en filesFromFolder", e);
}
if(f!=null && f.isDirectory()) {
filesList = f.listFiles();
for(File file : filesList) {
int i = file.getAbsolutePath().lastIndexOf(".");
String format = file.getAbsolutePath().substring(i+1);
if(file.isFile() && (format.equals("jrxml"))) {
list.add(path+File.separator+file.getName());
}
}
}
return list;
}
/**
* Esta funcion recoge un path y devuelve el nombre del fichero referido sin extension
* @return
*/
public static String cleanReport(String path) {
String pathCleaned = "";
pathCleaned = path.substring(path.indexOf("Informe"));
pathCleaned = pathCleaned.replaceFirst(".jrxml","");
return pathCleaned;
}
}