1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed to the Apache Software Foundation (ASF) under one
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * or more contributor license agreements. See the NOTICE file
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed with this work for additional information
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * regarding copyright ownership. The ASF licenses this file
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to you under the Apache License, Version 2.0 (the  "License");
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License.
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *     http://www.apache.org/licenses/LICENSE-2.0
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * $Id$
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpackage org.apache.xml.serializer;
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.io.IOException;
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport org.w3c.dom.DOMErrorHandler;
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport org.w3c.dom.Node;
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport org.w3c.dom.ls.LSSerializerFilter;
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This interface is not intended to be used
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * by an end user, but rather by an XML parser that is implementing the DOM
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Level 3 Load and Save APIs.
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <p>
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the DOM Level 3 Load and Save interface at <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer">LSSeializer</a>.
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For a list of configuration parameters for DOM Level 3 see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration">DOMConfiguration</a>.
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For additional configuration parameters available with the DOM Level 3 Load and Save API LSSerializer see
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer-config">LSerializer config</a>.
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <p>
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The following example uses a DOM3Serializer indirectly, through an an XML
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * parser that uses this class as part of its implementation of the DOM Level 3
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Load and Save APIs, and is the prefered way to serialize with DOM Level 3 APIs.
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <p>
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Example:
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * <pre>
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    public class TestDOM3 {
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    public static void main(String args[]) throws Exception {
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Get document to serialize
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        TestDOM3 test = new TestDOM3();
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Serialize using standard DOM Level 3 Load/Save APIs
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        System.out.println(test.testDOM3LS());
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    }
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    public org.w3c.dom.Document getDocument() throws Exception {
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Create a simple DOM Document.
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        javax.xml.parsers.DocumentBuilderFactory factory =
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *            javax.xml.parsers.DocumentBuilderFactory.newInstance();
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        byte[] bytes = "<parent><child/></parent>".getBytes();
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        java.io.InputStream is = new java.io.ByteArrayInputStream(bytes);
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        org.w3c.dom.Document doc = builder.parse(is);
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        return doc;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    }
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    // This method uses standard DOM Level 3 Load Save APIs:
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.w3c.dom.bootstrap.DOMImplementationRegistry
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.w3c.dom.ls.DOMImplementationLS
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.w3c.dom.ls.DOMImplementationLS
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.w3c.dom.ls.LSSerializer
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.w3c.dom.DOMConfiguration
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    // The only thing non-standard in this method is the value set for the
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    // name of the class implementing the DOM Level 3 Load Save APIs,
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    // which in this case is:
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //   org.apache.xerces.dom.DOMImplementationSourceImpl
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    //
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    public String testDOM3LS() throws Exception {
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Get a simple DOM Document that will be serialized.
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        org.w3c.dom.Document docToSerialize = getDocument();
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Get a factory (DOMImplementationLS) for creating a Load and Save object.
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        org.w3c.dom.ls.DOMImplementationLS impl =
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *            (org.w3c.dom.ls.DOMImplementationLS)
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *            org.w3c.dom.bootstrap.DOMImplementationRegistry.newInstance().getDOMImplementation("LS");
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Use the factory to create an object (LSSerializer) used to
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // write out or save the document.
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        org.w3c.dom.ls.LSSerializer writer = impl.createLSSerializer();
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        org.w3c.dom.DOMConfiguration config = writer.getDomConfig();
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        config.setParameter("format-pretty-print", Boolean.TRUE);
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        // Use the LSSerializer to write out or serialize the document to a String.
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        String serializedXML = writer.writeToString(docToSerialize);
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *        return serializedXML;
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    }
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *    }  // end of class TestDOM3
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * </pre>
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#DOMConfiguration">DOMConfiguration</a>
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @see <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html#LS-LSSerializer-config">LSSerializer</a>
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @see org.apache.xml.serializer.Serializer
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @see org.apache.xml.serializer.DOMSerializer
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @xsl.usage advanced
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic interface DOM3Serializer {
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Serializes the Level 3 DOM node. Throws an exception only if an I/O
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * exception occured while serializing.
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * This interface is a public API.
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param node the Level 3 DOM node to serialize
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @throws IOException if an I/O exception occured while serializing
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void serializeDOM3(Node node) throws IOException;
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Sets a DOMErrorHandler on the DOM Level 3 Serializer.
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * This interface is a public API.
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param handler the Level 3 DOMErrorHandler
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void setErrorHandler(DOMErrorHandler handler);
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns a DOMErrorHandler set on the DOM Level 3 Serializer.
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * This interface is a public API.
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return A Level 3 DOMErrorHandler
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public DOMErrorHandler getErrorHandler();
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Sets a LSSerializerFilter on the DOM Level 3 Serializer to filter nodes
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * during serialization.
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * This interface is a public API.
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param filter the Level 3 LSSerializerFilter
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void setNodeFilter(LSSerializerFilter filter);
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns a LSSerializerFilter set on the DOM Level 3 Serializer to filter nodes
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * during serialization.
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * This interface is a public API.
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return The Level 3 LSSerializerFilter
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public LSSerializerFilter getNodeFilter();
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Sets the end-of-line sequence of characters to be used during serialization
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param newLine The end-of-line sequence of characters to be used during serialization
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void setNewLine(char[] newLine);
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org