- /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * 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.
- */
- /*
- * $Id: TransletOutputHandlerFactory.java,v 1.16 2004/02/16 22:56:25 minchau Exp $
- */
-
- package com.sun.org.apache.xalan.internal.xsltc.runtime.output;
-
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.Writer;
-
- import javax.xml.parsers.ParserConfigurationException;
-
- import com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM;
- import com.sun.org.apache.xml.internal.serializer.ToHTMLSAXHandler;
- import com.sun.org.apache.xml.internal.serializer.ToHTMLStream;
- import com.sun.org.apache.xml.internal.serializer.ToTextSAXHandler;
- import com.sun.org.apache.xml.internal.serializer.ToTextStream;
- import com.sun.org.apache.xml.internal.serializer.ToUnknownStream;
- import com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler;
- import com.sun.org.apache.xml.internal.serializer.ToXMLStream;
- import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
- import org.w3c.dom.Node;
-
- import org.xml.sax.ContentHandler;
- import org.xml.sax.ext.LexicalHandler;
-
- /**
- * @author Santiago Pericas-Geertsen
- */
- public class TransletOutputHandlerFactory {
-
- public static final int STREAM = 0;
- public static final int SAX = 1;
- public static final int DOM = 2;
-
- private String _encoding = "utf-8";
- private String _method = null;
- private int _outputType = STREAM;
- private OutputStream _ostream = System.out;
- private Writer _writer = null;
- private Node _node = null;
- private int _indentNumber = -1;
- private ContentHandler _handler = null;
- private LexicalHandler _lexHandler = null;
-
- static public TransletOutputHandlerFactory newInstance() {
- return new TransletOutputHandlerFactory();
- }
-
- public void setOutputType(int outputType) {
- _outputType = outputType;
- }
-
- public void setEncoding(String encoding) {
- if (encoding != null) {
- _encoding = encoding;
- }
- }
-
- public void setOutputMethod(String method) {
- _method = method;
- }
-
- public void setOutputStream(OutputStream ostream) {
- _ostream = ostream;
- }
-
- public void setWriter(Writer writer) {
- _writer = writer;
- }
-
- public void setHandler(ContentHandler handler) {
- _handler = handler;
- }
-
- public void setLexicalHandler(LexicalHandler lex) {
- _lexHandler = lex;
- }
-
- public void setNode(Node node) {
- _node = node;
- }
-
- public Node getNode() {
- return (_handler instanceof SAX2DOM) ? ((SAX2DOM)_handler).getDOM()
- : null;
- }
-
- public void setIndentNumber(int value) {
- _indentNumber = value;
- }
-
- public SerializationHandler getSerializationHandler()
- throws IOException, ParserConfigurationException
- {
- SerializationHandler result = null;
- switch (_outputType)
- {
- case STREAM :
-
- if (_method == null)
- {
- result = new ToUnknownStream();
- }
- else if (_method.equalsIgnoreCase("xml"))
- {
-
- result = new ToXMLStream();
-
- }
- else if (_method.equalsIgnoreCase("html"))
- {
-
- result = new ToHTMLStream();
-
- }
- else if (_method.equalsIgnoreCase("text"))
- {
-
- result = new ToTextStream();
-
- }
-
- if (result != null && _indentNumber >= 0)
- {
- result.setIndentAmount(_indentNumber);
- }
-
- result.setEncoding(_encoding);
-
- if (_writer != null)
- {
- result.setWriter(_writer);
- }
- else
- {
- result.setOutputStream(_ostream);
- }
- return result;
-
- case DOM :
- _handler = (_node != null) ? new SAX2DOM(_node) : new SAX2DOM();
- _lexHandler = (LexicalHandler) _handler;
- // falls through
- case SAX :
- if (_method == null)
- {
- _method = "xml"; // default case
- }
-
- if (_method.equalsIgnoreCase("xml"))
- {
-
- if (_lexHandler == null)
- {
- result = new ToXMLSAXHandler(_handler, _encoding);
- }
- else
- {
- result =
- new ToXMLSAXHandler(
- _handler,
- _lexHandler,
- _encoding);
- }
-
- }
- else if (_method.equalsIgnoreCase("html"))
- {
-
- if (_lexHandler == null)
- {
- result = new ToHTMLSAXHandler(_handler, _encoding);
- }
- else
- {
- result =
- new ToHTMLSAXHandler(
- _handler,
- _lexHandler,
- _encoding);
- }
-
- }
- else if (_method.equalsIgnoreCase("text"))
- {
-
- if (_lexHandler == null)
- {
- result = new ToTextSAXHandler(_handler, _encoding);
- }
- else
- {
- result =
- new ToTextSAXHandler(
- _handler,
- _lexHandler,
- _encoding);
- }
-
- }
- return result;
- }
- return null;
- }
-
- }