/** * LICENCIA LGPL: * * Esta librería es Software Libre; Usted puede redistribuirlo y/o modificarlo * bajo los términos de la GNU Lesser General Public License (LGPL) * tal y como ha sido publicada por la Free Software Foundation; o * bien la versión 2.1 de la Licencia, o (a su elección) cualquier versión posterior. * * Esta librería se distribuye con la esperanza de que sea útil, pero SIN NINGUNA * GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o ADECUACIÓN A UN * PROPÓSITO PARTICULAR. Consulte la GNU Lesser General Public License (LGPL) para más * detalles * * Usted debe recibir una copia de la GNU Lesser General Public License (LGPL) * junto con esta librería; si no es así, escriba a la Free Software Foundation Inc. * 51 Franklin Street, 5º Piso, Boston, MA 02110-1301, USA. * */ package es.mityc.firmaJava.libreria.xades.elementos; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import es.mityc.firmaJava.libreria.utilidades.NombreNodo; import es.mityc.firmaJava.libreria.xades.errores.InvalidInfoNodeException; /** * @author Ministerio de Industria, Turismo y Comercio * @version 1.0 */ public abstract class AbstractXMLElement { protected AbstractXMLElement() { } /** * Incluye la información de este nodo al elemento indicado. Implementado por los tipos. * * @param doc * @return * @throws InvalidInfoNodeException */ protected void addContent(Element element) throws InvalidInfoNodeException { throw new UnsupportedOperationException("invalid operation"); } /** * Devuelve el árbol de nodos que representa este elemento. Implementado por los elementos finales. * * @param doc Documento donde se agregará el elemento */ protected Element createElement(Document doc) throws InvalidInfoNodeException { throw new UnsupportedOperationException("invalid operation"); } /** * Lee la información del nodo * * @param element elemento del que cuelga la información * @throws InvalidInfoNodeException lanzada cuando la estructura de nodos leída es inválida */ public abstract void load(Element element) throws InvalidInfoNodeException; /** * Compara otro objeto similar a ver si contienen la misma información * * @param obj Objeto que ha de ser de la misma clase * @return <code>true</code> si contienen la misma información, <code>false</code> en cualquier otro caso */ public abstract boolean equals(Object obj); /** * Comprueba que el elemento indicado tiene el namespaceURI y el nombre esperados * * @param element Elemento que chequear * @param namespaceURI NamespaceURI esperado * @param name Nombre esperado * @throws InvalidInfoNodeException Se lanza cuando no se cumple lo esperado */ protected void checkElementName(Element element, String namespaceURI, String name) throws InvalidInfoNodeException { if (!isElementName(element, namespaceURI, name)) throw new InvalidInfoNodeException("Elemento esperado (".concat(namespaceURI).concat(":").concat(name).concat(" Elemento obtenido ") + element.getNamespaceURI() + ":".concat(element.getLocalName())); } /** * Comprueba si el elemento indicado tiene el nombre esperado * * @param element Elemento que chequear * @param namespaceURI NamespaceURI esperado * @param name Nombre esperado * @return */ protected boolean isElementName(Element element, String namespaceURI, String name) { if ((element != null) && (new NombreNodo(namespaceURI, name).equals( new NombreNodo(element.getNamespaceURI(), element.getLocalName())))) return true; return false; } /** * Indica si el nodo pasado es o no del tipo al que se le hace la consulta * * @param node * @return */ protected boolean isThisNode(Node node) { throw new UnsupportedOperationException("invalid operation"); } /** * Convierte el nodo indicado a un elemento * @param node * @return <code>null<code> si el nodo indicado no es un Element */ protected Element nodeToElement(Node node) { Element element = null; if (node != null) { if (node.getNodeType() == Node.ELEMENT_NODE) element = (Element)node; } return element; } }