1320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/*
2320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more
3320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * contributor license agreements.  See the NOTICE file distributed with
4320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * this work for additional information regarding copyright ownership.
5320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
6320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * (the "License"); you may not use this file except in compliance with
7320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * the License.  You may obtain a copy of the License at
8320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson *
9320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
10320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson *
11320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Unless required by applicable law or agreed to in writing, software
12320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
13320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * See the License for the specific language governing permissions and
15320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * limitations under the License.
16320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */
17320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
18320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson// $Id: DOMSource.java 446598 2006-09-15 12:55:40Z jeremias $
19320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
20320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpackage javax.xml.transform.dom;
21320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
22320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport javax.xml.transform.Source;
23320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonimport org.w3c.dom.Node;
24320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
25320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson/**
26320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Acts as a holder for a transformation Source tree in the
27320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * form of a Document Object Model (DOM) tree.</p>
28f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
29320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * <p>Note that XSLT requires namespace support. Attempting to transform a DOM
30320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * that was not contructed with a namespace-aware parser may result in errors.
31320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * Parsers can be made namespace aware by calling
32320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * {@link javax.xml.parsers.DocumentBuilderFactory#setNamespaceAware(boolean awareness)}.</p>
33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
34320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @author <a href="Jeff.Suttor@Sun.com">Jeff Suttor</a>
35320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @version $Revision: 446598 $, $Date: 2006-09-15 05:55:40 -0700 (Fri, 15 Sep 2006) $
36320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson * @see <a href="http://www.w3.org/TR/DOM-Level-2">Document Object Model (DOM) Level 2 Specification</a>
37320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson */
38320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilsonpublic class DOMSource implements Source {
39320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
40320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
41320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p><code>Node</code> to serve as DOM source.</p>
42320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
43320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private Node node;
44320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
45320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
46320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>The base ID (URL or system ID) from where URLs
47320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * will be resolved.</p>
48320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
49320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    private String systemID;
50320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
51320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /** If {@link javax.xml.transform.TransformerFactory#getFeature}
52320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * returns true when passed this value as an argument,
53320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * the Transformer supports Source input of this type.
54320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
55320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public static final String FEATURE =
56320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        "http://javax.xml.transform.dom.DOMSource/feature";
57320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
58320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
59320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <p>Zero-argument default constructor.  If this constructor is used, and
60320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * no DOM source is set using {@link #setNode(Node node)} , then the
61320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * <code>Transformer</code> will
62320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * create an empty source {@link org.w3c.dom.Document} using
63320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * {@link javax.xml.parsers.DocumentBuilder#newDocument()}.</p>
64320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
65320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @see javax.xml.transform.Transformer#transform(Source xmlSource, Result outputTarget)
66320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
67320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public DOMSource() { }
68320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
69320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
70320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Create a new input source with a DOM node.  The operation
71320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * will be applied to the subtree rooted at this node.  In XSLT,
72320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * a "/" pattern still means the root of the tree (not the subtree),
73320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * and the evaluation of global variables and parameters is done
74320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * from the root node also.
75320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
76320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param n The DOM node that will contain the Source tree.
77320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
78320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public DOMSource(Node n) {
79320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setNode(n);
80320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
81320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
82320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
83320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Create a new input source with a DOM node, and with the
84320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * system ID also passed in as the base URI.
85320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
86320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param node The DOM node that will contain the Source tree.
87320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemID Specifies the base URI associated with node.
88320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
89320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public DOMSource(Node node, String systemID) {
90320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setNode(node);
91320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        setSystemId(systemID);
92320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
93320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
94320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
95320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the node that will represents a Source DOM tree.
96320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
97320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param node The node that is to be transformed.
98320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
99320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setNode(Node node) {
100320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.node = node;
101320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
102320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
103320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
104320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the node that represents a Source DOM tree.
105320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
106320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return The node that is to be transformed.
107320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
108320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public Node getNode() {
109320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return node;
110320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
111320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
112320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
113320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Set the base ID (URL or system ID) from where URLs
114320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * will be resolved.
115320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
116320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @param systemID Base URL for this DOM tree.
117320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
118320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public void setSystemId(String systemID) {
119320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        this.systemID = systemID;
120320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
121320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson
122320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    /**
123320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * Get the base ID (URL or system ID) from where URLs
124320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * will be resolved.
125320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     *
126320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     * @return Base URL for this DOM tree.
127320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson     */
128320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    public String getSystemId() {
129320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson        return this.systemID;
130320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson    }
131320c9890e8241fb0ad05de6fa5e6c3eb3aece159Jesse Wilson}
132