1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18// $Id: SAXResult.java 446598 2006-09-15 12:55:40Z jeremias $
19
20package javax.xml.transform.sax;
21
22import javax.xml.transform.Result;
23import org.xml.sax.ContentHandler;
24import org.xml.sax.ext.LexicalHandler;
25
26/**
27 * <p>Acts as an holder for a transformation Result.</p>
28 *
29 * @author <a href="Jeff.Suttor@Sun.com">Jeff Suttor</a>
30 */
31public class SAXResult implements Result {
32
33    /**
34     * If {@link javax.xml.transform.TransformerFactory#getFeature}
35     * returns true when passed this value as an argument,
36     * the Transformer supports Result output of this type.
37     */
38    public static final String FEATURE =
39        "http://javax.xml.transform.sax.SAXResult/feature";
40
41    /**
42     * Zero-argument default constructor.
43     */
44    public SAXResult() {
45    }
46
47    /**
48     * Create a SAXResult that targets a SAX2 {@link org.xml.sax.ContentHandler}.
49     *
50     * @param handler Must be a non-null ContentHandler reference.
51     */
52    public SAXResult(ContentHandler handler) {
53        setHandler(handler);
54    }
55
56    /**
57     * Set the target to be a SAX2 {@link org.xml.sax.ContentHandler}.
58     *
59     * @param handler Must be a non-null ContentHandler reference.
60     */
61    public void setHandler(ContentHandler handler) {
62        this.handler = handler;
63    }
64
65    /**
66     * Get the {@link org.xml.sax.ContentHandler} that is the Result.
67     *
68     * @return The ContentHandler that is to be transformation output.
69     */
70    public ContentHandler getHandler() {
71        return handler;
72    }
73
74    /**
75     * Set the SAX2 {@link org.xml.sax.ext.LexicalHandler} for the output.
76     *
77     * <p>This is needed to handle XML comments and the like.  If the
78     * lexical handler is not set, an attempt should be made by the
79     * transformer to cast the {@link org.xml.sax.ContentHandler} to a
80     * <code>LexicalHandler</code>.</p>
81     *
82     * @param handler A non-null <code>LexicalHandler</code> for
83     * handling lexical parse events.
84     */
85    public void setLexicalHandler(LexicalHandler handler) {
86        this.lexhandler = handler;
87    }
88
89    /**
90     * Get a SAX2 {@link org.xml.sax.ext.LexicalHandler} for the output.
91     *
92     * @return A <code>LexicalHandler</code>, or null.
93     */
94    public LexicalHandler getLexicalHandler() {
95        return lexhandler;
96    }
97
98    /**
99     * Method setSystemId Set the systemID that may be used in association
100     * with the {@link org.xml.sax.ContentHandler}.
101     *
102     * @param systemId The system identifier as a URI string.
103     */
104    public void setSystemId(String systemId) {
105        this.systemId = systemId;
106    }
107
108    /**
109     * Get the system identifier that was set with setSystemId.
110     *
111     * @return The system identifier that was set with setSystemId, or null
112     * if setSystemId was not called.
113     */
114    public String getSystemId() {
115        return systemId;
116    }
117
118    //////////////////////////////////////////////////////////////////////
119    // Internal state.
120    //////////////////////////////////////////////////////////////////////
121
122    /**
123     * The handler for parse events.
124     */
125    private ContentHandler handler;
126
127    /**
128     * The handler for lexical events.
129     */
130    private LexicalHandler lexhandler;
131
132    /**
133     * The systemID that may be used in association
134     * with the node.
135     */
136    private String systemId;
137}
138