1/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Licensed to the Apache Software Foundation (ASF) under one
7 * or more contributor license agreements. See the NOTICE file
8 * distributed with this work for additional information
9 * regarding copyright ownership. The ASF licenses this file
10 * to you under the Apache License, Version 2.0 (the  "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
13 *
14 *     http://www.apache.org/licenses/LICENSE-2.0
15 *
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 */
22
23package com.sun.org.apache.xml.internal.serializer.dom3;
24
25import java.io.IOException;
26
27import com.sun.org.apache.xml.internal.serializer.DOM3Serializer;
28import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
29import com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException;
30import org.w3c.dom.DOMErrorHandler;
31import org.w3c.dom.Node;
32import org.w3c.dom.ls.LSSerializerFilter;
33
34/**
35 * This class implements the DOM3Serializer interface.
36 *
37 * @xsl.usage internal
38 */
39public final class DOM3SerializerImpl implements DOM3Serializer {
40
41    /**
42     * Private class members
43     */
44    // The DOMErrorHandler
45    private DOMErrorHandler fErrorHandler;
46
47    // A LSSerializerFilter
48    private LSSerializerFilter fSerializerFilter;
49
50    // The end-of-line character sequence
51    private String fNewLine;
52
53    // A SerializationHandler ex. an instance of ToXMLStream
54    private SerializationHandler fSerializationHandler;
55
56    /**
57     * Constructor
58     *
59     * @param handler An instance of the SerializationHandler interface.
60     */
61    public DOM3SerializerImpl(SerializationHandler handler) {
62        fSerializationHandler = handler;
63    }
64
65    // Public memebers
66
67    /**
68     * Returns a DOMErrorHandler set on the DOM Level 3 Serializer.
69     *
70     * This interface is a public API.
71     *
72     * @return A Level 3 DOMErrorHandler
73     */
74    public DOMErrorHandler getErrorHandler() {
75        return fErrorHandler;
76    }
77
78    /**
79     * Returns a LSSerializerFilter set on the DOM Level 3 Serializer to filter nodes
80     * during serialization.
81     *
82     * This interface is a public API.
83     *
84     * @return The Level 3 LSSerializerFilter
85     */
86    public LSSerializerFilter getNodeFilter() {
87        return fSerializerFilter;
88    }
89
90
91    /**
92     * Serializes the Level 3 DOM node by creating an instance of DOM3TreeWalker
93     * which traverses the DOM tree and invokes handler events to serialize
94     * the DOM NOde. Throws an exception only if an I/O exception occured
95     * while serializing.
96     * This interface is a public API.
97     *
98     * @param node the Level 3 DOM node to serialize
99     * @throws IOException if an I/O exception occured while serializing
100     */
101    public void serializeDOM3(Node node) throws IOException {
102        try {
103            DOM3TreeWalker walker = new DOM3TreeWalker(fSerializationHandler,
104                    fErrorHandler, fSerializerFilter, fNewLine);
105
106            walker.traverse(node);
107        } catch (org.xml.sax.SAXException se) {
108            throw new WrappedRuntimeException(se);
109        }
110    }
111
112    /**
113     * Sets a DOMErrorHandler on the DOM Level 3 Serializer.
114     *
115     * This interface is a public API.
116     *
117     * @param handler the Level 3 DOMErrorHandler
118     */
119    public void setErrorHandler(DOMErrorHandler handler) {
120        fErrorHandler = handler;
121    }
122
123    /**
124     * Sets a LSSerializerFilter on the DOM Level 3 Serializer to filter nodes
125     * during serialization.
126     *
127     * This interface is a public API.
128     *
129     * @param filter the Level 3 LSSerializerFilter
130     */
131    public void setNodeFilter(LSSerializerFilter filter) {
132        fSerializerFilter = filter;
133    }
134
135    /**
136     * Sets a SerializationHandler on the DOM Serializer.
137     *
138     * This interface is a public API.
139     *
140     * @param handler An instance of SerializationHandler
141     */
142    public void setSerializationHandler(SerializationHandler handler) {
143        fSerializationHandler = handler;
144    }
145
146    /**
147     * Sets the new line character to be used during serialization
148     * @param newLine a String that is the end-of-line character sequence to be
149     * used in serialization.
150     */
151    public void setNewLine(String newLine) {
152        fNewLine = newLine;
153    }
154}
155