KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > Yasna > util > UnicodeFilterWriter


1 /*
2  * $RCSfile: UnicodeFilterWriter.java,v $
3  * $Revision: 1.3 $
4  * $Date: 2006/01/07 00:21:06 $
5  *
6  * Copyright (C) 2000 CoolServlets.com. All rights reserved.
7  *
8  * ===================================================================
9  * The Apache Software License, Version 1.1
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * 1. Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  *
18  * 2. Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in
20  * the documentation and/or other materials provided with the
21  * distribution.
22  *
23  * 3. The end-user documentation included with the redistribution,
24  * if any, must include the following acknowledgment:
25  * "This product includes software developed by
26  * CoolServlets.com (http://www.Yasna.com)."
27  * Alternately, this acknowledgment may appear in the software itself,
28  * if and wherever such third-party acknowledgments normally appear.
29  *
30  * 4. The names "Jive" and "CoolServlets.com" must not be used to
31  * endorse or promote products derived from this software without
32  * prior written permission. For written permission, please
33  * contact webmaster@Yasna.com.
34  *
35  * 5. Products derived from this software may not be called "Jive",
36  * nor may "Jive" appear in their name, without prior written
37  * permission of CoolServlets.com.
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE.
51  * ====================================================================
52  *
53  * This software consists of voluntary contributions made by many
54  * individuals on behalf of CoolServlets.com. For more information
55  * on CoolServlets.com, please see <http://www.Yasna.com>.
56  */

57
58 package com.Yasna.util;
59
60 import java.io.*;
61
62 /**
63  * Class for writing non-null unicode characters to character streams.<p>
64  *
65  * Example use:<p>
66  *
67  * <code>Writer out = new UnicodeWriter(new FileWriter("blah.txt"));</code>
68  */

69 public class UnicodeFilterWriter extends Writer {
70
71     // Underlying writer
72
private Writer out;
73
74     /**
75      * Create a new UnicodeWriter
76      *
77      * @param out A Writer.
78      */

79     public UnicodeFilterWriter( Writer out ) {
80         super(out);
81         this.out = out;
82     }
83
84     /**
85      * Check each character in the character array for the null character. If
86      * the null character is found ignore it (don't write to underlying character
87      * stream).
88      *
89      * @param cbuf The character array
90      * @param offset Offset from which to start writing characters
91      * @param length Number of characters to write
92      */

93     public void write(char[] cbuf, int offset, int length) throws IOException {
94         synchronized( lock ) {
95             int loopEnd = (offset+length);
96             for( int i=offset; i<loopEnd; i++ ) {
97                 switch(cbuf[i]) {
98                     // null character case
99
case '\u0000':
100                         break;
101                     case '\u0018':
102                         break;
103                     // everything else
104
default:
105                         out.write(cbuf[i]);
106                         break;
107                 }
108             }
109         }
110     }
111
112     /**
113      * Flush the stream
114      */

115     public void flush() throws IOException {
116         synchronized (lock) {
117             out.flush();
118         }
119     }
120
121     /**
122      * Close the stream
123      */

124     public void close() throws IOException {
125         synchronized (lock) {
126             if (out == null) {
127                 return;
128             }
129             out.close();
130             out = null;
131         }
132     }
133
134 }
135
Popular Tags