1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the  "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 /*
19  * $Id: WriterChain.java 468654 2006-10-28 07:09:23Z minchau $
20  */
21 package org.apache.xml.serializer;
22 
23 import java.io.IOException;
24 
25 /**
26  * It is unfortunate that java.io.Writer is a class rather than an interface.
27  * The serializer has a number of classes that extend java.io.Writer
28  * and which send their ouput to a yet another wrapped Writer or OutputStream.
29  *
30  * The purpose of this interface is to force such classes to over-ride all of
31  * the important methods defined on the java.io.Writer class, namely these:
32  * <code>
33  * write(int val)
34  * write(char[] chars)
35  * write(char[] chars, int start, int count)
36  * write(String chars)
37  * write(String chars, int start, int count)
38  * flush()
39  * close()
40  * </code>
41  * In this manner nothing will accidentally go directly to
42  * the base class rather than to the wrapped Writer or OutputStream.
43  *
44  * The purpose of this class is to have a uniform way of chaining the output of one writer to
45  * the next writer in the chain. In addition there are methods to obtain the Writer or
46  * OutputStream that this object sends its output to.
47  *
48  * This interface is only for internal use withing the serializer.
49  * @xsl.usage internal
50  */
51 interface WriterChain
52 {
53     /** This method forces us to over-ride the method defined in java.io.Writer */
write(int val)54     public void write(int val) throws IOException;
55     /** This method forces us to over-ride the method defined in java.io.Writer */
write(char[] chars)56     public void write(char[] chars) throws IOException;
57     /** This method forces us to over-ride the method defined in java.io.Writer */
write(char[] chars, int start, int count)58     public void write(char[] chars, int start, int count) throws IOException;
59     /** This method forces us to over-ride the method defined in java.io.Writer */
write(String chars)60     public void write(String chars) throws IOException;
61     /** This method forces us to over-ride the method defined in java.io.Writer */
write(String chars, int start, int count)62     public void write(String chars, int start, int count) throws IOException;
63     /** This method forces us to over-ride the method defined in java.io.Writer */
flush()64     public void flush() throws IOException;
65     /** This method forces us to over-ride the method defined in java.io.Writer */
close()66     public void close() throws IOException;
67 
68     /**
69      * If this method returns null, getOutputStream() must return non-null.
70      * Get the writer that this writer sends its output to.
71      *
72      * It is possible that the Writer returned by this method does not
73      * implement the WriterChain interface.
74      */
getWriter()75     public java.io.Writer getWriter();
76 
77     /**
78      * If this method returns null, getWriter() must return non-null.
79      * Get the OutputStream that this writer sends its output to.
80      */
getOutputStream()81     public java.io.OutputStream getOutputStream();
82 }
83