org.tizzit.util.xml.SAXHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.tizzit.util.xml.SAXHelper.java

Source

/**
 * Copyright (c) 2009 Juwi MacMillan Group GmbH
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.tizzit.util.xml;

import java.io.StringReader;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;

/**
 * <p>Title: ConQuest</p>
 * <p>Description: Enterprise Content Management</p>
 * <p>Copyright: Copyright (c) 2004</p>
 *
 * <b>Namespace support since 14.10.2009</b>
 *
 * @author <a href="sascha.kulawik@juwimm.com">Sascha-Matthias Kulawik</a>
 * @author <a href="mailto:eduard.siebert@juwimm.com">Eduard Siebert</a>
 * @version $Revision: 1.32 $
 */
public final class SAXHelper {
    private static final Log log = LogFactory.getLog(SAXHelper.class);

    private SAXHelper() {
    }

    /**
     * @since tizzit-common 15.10.2009
     */
    public static void addElement(ContentHandler handler, String namespaceUri, String elementName,
            String elementValue, Attributes attr) throws SAXException {
        if (elementName != null) {
            handler.startElement(namespaceUri, elementName, elementName, attr);
            String saveVal = (elementValue == null) ? "" : elementValue;
            char[] ca = saveVal.toCharArray();
            handler.characters(ca, 0, ca.length);
            handler.endElement(namespaceUri, elementName, elementName);
        }
    }

    public static void addElement(ContentHandler handler, String elementName, String elementValue)
            throws SAXException {
        addElement(handler, "", elementName, elementValue);
    }

    public static void addElement(ContentHandler handler, String elementName, Integer elementValue)
            throws SAXException {
        addElement(handler, "", elementName, elementValue);
    }

    public static void addElement(ContentHandler handler, String elementName, Boolean elementValue)
            throws SAXException {
        addElement(handler, "", elementName, elementValue);
    }

    /**
     * @since tizzit-common 15.10.2009
     */
    public static void addElement(ContentHandler handler, String namespaceUri, String elementName,
            String elementValue) throws SAXException {
        addElement(handler, namespaceUri, elementName, elementValue, new AttributesImpl());
    }

    /**
     * @since tizzit-common 15.10.2009
     */
    public static void addElement(ContentHandler handler, String namespaceUri, String elementName,
            Integer elementValue) throws SAXException {
        String saveVal = (elementValue == null) ? "" : elementValue.toString();
        addElement(handler, namespaceUri, elementName, saveVal, new AttributesImpl());
    }

    /**
     * @since tizzit-common 15.10.2009
     */
    public static void addElement(ContentHandler handler, String namespaceUri, String elementName,
            Boolean elementValue) throws SAXException {
        String saveVal = (elementValue == null) ? "" : elementValue.toString();
        addElement(handler, namespaceUri, elementName, saveVal, new AttributesImpl());
    }

    /**
     * Sets an attribute of an SAX AttributesImpl to a specific value.<br/>
     * If it exists, the value will be overwritten.
     *
     * @param attr The AttributesImpl
     * @param attrName The name
     * @param attrValue The (new) value
     */
    public static void setSAXAttr(AttributesImpl attr, String attrName, String attrValue) {
        setSAXAttr(attr, "", attrName, attrValue);
    }

    /**
     * Sets an attribute of an SAX AttributesImpl to a specific value (namespace supported).<br/>
     * If it exists, the value will be overwritten.
     *
     * @param attr The AttributesImpl
     * @param namespaceUri
     * @param attrName The name
     * @param attrValue The (new) value
     * @since tizzit-common 15.10.2009
     */
    public static void setSAXAttr(AttributesImpl attr, String namespaceUri, String attrName, String attrValue) {
        if (attrName != null) {
            int idx = attr.getIndex(attrName);
            String saveVal = (attrValue == null) ? "" : attrValue;
            if (idx >= 0) {
                String dd = attr.getType(attrName);
                attr.setAttribute(idx, namespaceUri, attrName, attrName, dd, saveVal);
            } else {
                attr.addAttribute(namespaceUri, attrName, attrName, "CDATA", saveVal);
            }
        }
    }

    /**
     * @param node the string to stream.
     * @param handler the content handler.
     * @since tizzit-common 15.10.2009
     */
    public static void string2sax(String node, ContentHandler handler) {
        try {
            Transformer t = TransformerFactory.newInstance().newTransformer();
            t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            t.setOutputProperty(OutputKeys.STANDALONE, "no");
            t.setOutputProperty(OutputKeys.METHOD, "xml");
            StreamSource source = new StreamSource(new StringReader(node));
            SAXResult result = new SAXResult(new OmitXmlDeclarationContentHandler(handler));
            t.transform(source, result);
        } catch (Exception exe) {
            log.error("unknown error occured", exe);
        }
    }

    /**
     * @param node the string to stream.
     * @param handler the content handler.
     * @since tizzit-common 15.10.2009
     */
    public static void string2sax(String node, ContentHandler handler, String encoding) {
        try {
            Transformer t = TransformerFactory.newInstance().newTransformer();
            t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            t.setOutputProperty(OutputKeys.STANDALONE, "no");
            t.setOutputProperty(OutputKeys.METHOD, "xml");
            if (!"".equals(encoding) && encoding != null) {
                t.setOutputProperty(OutputKeys.ENCODING, encoding);
            }
            StreamSource source = new StreamSource(new StringReader(node));
            SAXResult result = new SAXResult(new OmitXmlDeclarationContentHandler(handler));
            t.transform(source, result);
        } catch (Exception exe) {
            log.error("unknown error occured", exe);
        }
    }

    /**
     * This ContentHandler is to remove the xml Header. The OMIT_XML_DECLARATION does not work actually.
     *
     * @author <a href="mailto:j2ee@juwimm.com">Sascha-Matthias Kulawik</a>
     * company Juwi|MacMillan Group GmbH, Walsrode, Germany
     * @version $Id$
     * @since tizzit-common 15.10.2009
     */
    public static class OmitXmlDeclarationContentHandler extends DefaultHandler implements ContentHandler {
        private ContentHandler parent;

        public OmitXmlDeclarationContentHandler(ContentHandler parent) {
            this.parent = parent;
        }

        @Override
        public void endDocument() throws SAXException {
        }

        @Override
        public void startDocument() throws SAXException {
        }

        @Override
        public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
            parent.characters(arg0, arg1, arg2);
        }

        @Override
        public void endElement(String arg0, String arg1, String arg2) throws SAXException {
            parent.endElement(arg0, arg1, arg2);
        }

        @Override
        public void endPrefixMapping(String arg0) throws SAXException {
            parent.endPrefixMapping(arg0);
        }

        @Override
        public void ignorableWhitespace(char[] arg0, int arg1, int arg2) throws SAXException {
            parent.ignorableWhitespace(arg0, arg1, arg2);
        }

        @Override
        public void processingInstruction(String arg0, String arg1) throws SAXException {
            parent.processingInstruction(arg0, arg1);
        }

        @Override
        public void skippedEntity(String arg0) throws SAXException {
            parent.skippedEntity(arg0);
        }

        @Override
        public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
            parent.startElement(arg0, arg1, arg2, arg3);
        }

        @Override
        public void startPrefixMapping(String arg0, String arg1) throws SAXException {
            parent.startPrefixMapping(arg0, arg1);
        }

    }
}