Package com.jclark.xsl.sax2

Source Code of com.jclark.xsl.sax2.OutputMethodHandlerImpl

// $Id: OutputMethodHandlerImpl.java 97 2005-02-28 21:18:32Z blindsey $

package com.jclark.xsl.sax2;
import com.jclark.xsl.sax.Destination;

import org.xml.sax.*;

import java.util.Properties;
import java.io.IOException;

/**
* produces a ContentHandler suitable for a given output method
* i.e text, XML, etc  and destination
*/
public class OutputMethodHandlerImpl implements OutputMethodHandler
{
    private Destination dest;

    /**
     *
     */
    public OutputMethodHandlerImpl()
    { }

    /**
     * Creates a new instance for writing to the given URI.
     * Useful for "xt:document" extension element
     */
    public OutputMethodHandler createOutputMethodHandler(String uri)
    {
        Destination d = dest.resolve(uri);
        if (d == null) {
            return null;
        }
        OutputMethodHandlerImpl om = new OutputMethodHandlerImpl();
        om.setDestination(d);
        return om;
    }

    /**
     * set the target of our output stream
     */
    public void setDestination(Destination dest)
    {
        this.dest = dest;
    }

    static private final String JAVA_OUTPUT_METHOD =
        "http://www.jclark.com/xt/java";

    /**
     * obtain a ContentHandler appropriate for the named
     * output method and our destination
     */
    public ContentHandler createContentHandler(String name,
                                               Properties atts)
        throws SAXException, IOException
    {
        ContentHandler handler = null;
        if (name == null)
            ;

        // FIXME : we probably shouldn't use the same namespace as
        //   we use for SAX 1 handlers
        else if (name.startsWith(JAVA_OUTPUT_METHOD)
                 && (name.lastIndexOf(namespaceSeparator)
                     == JAVA_OUTPUT_METHOD.length())) {
            try {
                Class cls =
                    Class.forName(name.substring(JAVA_OUTPUT_METHOD.length() +
                                                 1));
                handler = (ContentHandler)cls.newInstance();
            }
            catch (ClassNotFoundException e) { }
            catch (InstantiationException e) { }
            catch (IllegalAccessException e) { }
            catch (ClassCastException e) { }
        }
        else if (name.equals("http://www.jclark.com/xt"
                             + namespaceSeparator
                             + "nxml")) {

            // FIXME: for these guys, here' where we might handle
            // the possibility of having a character Writer for
            // output, instead of the preferred OutputStream
            handler = new NXMLOutputHandler();
        } else if (name.equals("html")) {
            handler = new HTMLOutputHandler();
        } else if (name.equals("text")) {
            handler = new TextOutputHandler();
        }
        // FIXME: plug in XHTML

        if (handler == null) {
            handler = new XMLOutputHandler();
        }
        if (handler instanceof OutputContentHandler) {
            handler = ((OutputContentHandler)handler).init(dest, atts);
        }
        return handler;
    }
}
TOP

Related Classes of com.jclark.xsl.sax2.OutputMethodHandlerImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.