001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: DOM3SerializerImpl.java 1225426 2011-12-29 04:13:08Z mrglavas $ 020 */ 021 022 package org.apache.xml.serializer.dom3; 023 024 import java.io.IOException; 025 026 import org.apache.xml.serializer.DOM3Serializer; 027 import org.apache.xml.serializer.SerializationHandler; 028 import org.apache.xml.serializer.utils.WrappedRuntimeException; 029 import org.w3c.dom.DOMErrorHandler; 030 import org.w3c.dom.Node; 031 import org.w3c.dom.ls.LSSerializerFilter; 032 033 /** 034 * This class implements the DOM3Serializer interface. 035 * 036 * @xsl.usage internal 037 */ 038 public final class DOM3SerializerImpl implements DOM3Serializer { 039 040 /** 041 * Private class members 042 */ 043 // The DOMErrorHandler 044 private DOMErrorHandler fErrorHandler; 045 046 // A LSSerializerFilter 047 private LSSerializerFilter fSerializerFilter; 048 049 // A LSSerializerFilter 050 private String fNewLine; 051 052 // A SerializationHandler ex. an instance of ToXMLStream 053 private SerializationHandler fSerializationHandler; 054 055 /** 056 * Constructor 057 * 058 * @param handler An instance of the SerializationHandler interface. 059 */ 060 public DOM3SerializerImpl(SerializationHandler handler) { 061 fSerializationHandler = handler; 062 } 063 064 // Public memebers 065 066 /** 067 * Returns a DOMErrorHandler set on the DOM Level 3 Serializer. 068 * 069 * This interface is a public API. 070 * 071 * @return A Level 3 DOMErrorHandler 072 */ 073 public DOMErrorHandler getErrorHandler() { 074 return fErrorHandler; 075 } 076 077 /** 078 * Returns a LSSerializerFilter set on the DOM Level 3 Serializer to filter nodes 079 * during serialization. 080 * 081 * This interface is a public API. 082 * 083 * @return The Level 3 LSSerializerFilter 084 */ 085 public LSSerializerFilter getNodeFilter() { 086 return fSerializerFilter; 087 } 088 089 /** 090 * Gets the end-of-line sequence of characters to be used during serialization. 091 */ 092 public char[] getNewLine() { 093 return (fNewLine != null) ? fNewLine.toCharArray() : null; 094 } 095 096 /** 097 * Serializes the Level 3 DOM node by creating an instance of DOM3TreeWalker 098 * which traverses the DOM tree and invokes handler events to serialize 099 * the DOM NOde. Throws an exception only if an I/O exception occured 100 * while serializing. 101 * This interface is a public API. 102 * 103 * @param node the Level 3 DOM node to serialize 104 * @throws IOException if an I/O exception occured while serializing 105 */ 106 public void serializeDOM3(Node node) throws IOException { 107 try { 108 DOM3TreeWalker walker = new DOM3TreeWalker(fSerializationHandler, 109 fErrorHandler, fSerializerFilter, fNewLine); 110 111 walker.traverse(node); 112 } catch (org.xml.sax.SAXException se) { 113 throw new WrappedRuntimeException(se); 114 } 115 } 116 117 /** 118 * Sets a DOMErrorHandler on the DOM Level 3 Serializer. 119 * 120 * This interface is a public API. 121 * 122 * @param handler the Level 3 DOMErrorHandler 123 */ 124 public void setErrorHandler(DOMErrorHandler handler) { 125 fErrorHandler = handler; 126 } 127 128 /** 129 * Sets a LSSerializerFilter on the DOM Level 3 Serializer to filter nodes 130 * during serialization. 131 * 132 * This interface is a public API. 133 * 134 * @param filter the Level 3 LSSerializerFilter 135 */ 136 public void setNodeFilter(LSSerializerFilter filter) { 137 fSerializerFilter = filter; 138 } 139 140 /** 141 * Sets a SerializationHandler on the DOM Serializer. 142 * 143 * This interface is a public API. 144 * 145 * @param handler An instance of SerializationHandler 146 */ 147 public void setSerializationHandler(SerializationHandler handler) { 148 fSerializationHandler = handler; 149 } 150 151 /** 152 * Sets the end-of-line sequence of characters to be used during serialization. 153 * @param newLine The end-of-line sequence of characters to be used during serialization. 154 */ 155 public void setNewLine(char[] newLine) { 156 fNewLine = (newLine != null) ? new String(newLine) : null; 157 } 158 }