KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > transformers > TransformingWriter


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.transformers;
11
12 import java.io.*;
13
14 import org.mmbase.util.logging.*;
15
16 /**
17  * A Filtering Writer based on CharTransformers.
18
19 <pre>
20
21   ____ _________
22  / \/ \
23  |this - PR --> W |
24  | PW | T |
25  \____/ \________/
26   
27
28   PR: piped reader, this PW: this writer, T: transformer
29
30   </pre>
31  * This writer can be instantiated with another Writer and a CharTransformer. All writing will be transformed by the given
32  * CharTransformer before arriving at the given Writer.
33  *
34  * When ready, this TransformingWriter should be 'closed'. A coding example can be found in this classe's main method.
35  *
36  * @author Michiel Meeuwissen
37  * @since MMBase-1.7
38  * @see ChainedCharTransformer
39  * @see TransformingReader
40  */

41
42 public class TransformingWriter extends PipedWriter {
43
44     private static final Logger log = Logging.getLoggerInstance(TransformingWriter.class);
45
46     private Writer out;
47     private CharTransformerLink link;
48
49
50     public TransformingWriter(Writer out, CharTransformer charTransformer) {
51         super();
52         this.out = out;
53
54         PipedReader r = new PipedReader();
55         try {
56             connect(r);
57             link = new CharTransformerLink(charTransformer, r, out, false);
58             org.mmbase.util.ThreadPools.filterExecutor.execute(link);
59         } catch (IOException ioe) {
60             log.error(ioe.getMessage());
61         }
62     }
63
64    
65     /**
66      * {@inheritDoc}
67      * ALso closes the wrapped Writer.
68      */

69     public void close() throws IOException {
70         super.close(); // accept no more input
71
try {
72             while (! link.ready()) {
73                 synchronized(link) { // make sure we have the lock
74
link.wait();
75                 }
76             }
77         } catch (InterruptedException JavaDoc ie) {
78             log.warn("" + ie);
79         }
80         out.close();
81     }
82    
83   
84     // main for testing purposes
85
public static void main(String JavaDoc[] args) {
86         Writer out = new OutputStreamWriter(System.out);
87         ChainedCharTransformer t = new ChainedCharTransformer();
88         t.add(new UpperCaser());
89         t.add(new SpaceReducer());
90         t.add(new Trimmer());
91         TransformingWriter writer = new TransformingWriter(out, t);
92         String JavaDoc testString = "use argument to change this string";
93         if (args.length > 0) {
94             testString = args[0];
95         }
96         try {
97             writer.write(testString);
98             writer.close();
99         } catch(Exception JavaDoc e) {
100             log.error("" + e + Logging.stackTrace(e));
101         }
102     }
103
104     
105
106
107 }
108
109
Popular Tags