1 10 package org.mmbase.util.transformers; 11 12 import java.io.*; 13 14 import org.mmbase.util.logging.*; 15 16 38 39 public class TransformingReader extends PipedReader { 40 41 private static final Logger log = Logging.getLoggerInstance(TransformingReader.class); 42 43 private Reader in; 44 private CharTransformerLink link; 45 46 47 public TransformingReader(Reader in, CharTransformer charTransformer) { 48 super(); 49 this.in = in; 50 PipedWriter w = new PipedWriter(); 51 try { 52 connect(w); 53 link = new CharTransformerLink(charTransformer, in, w, true); 54 org.mmbase.util.ThreadPools.filterExecutor.execute(link); 55 } catch (IOException ioe) { 56 log.error(ioe.getMessage() + Logging.stackTrace(ioe)); 57 } 58 } 59 60 public synchronized int read() throws IOException { 61 int result = super.read(); 62 if (result == -1) { waitReady(); 64 } 65 return result; 66 } 67 68 public synchronized int read(char cbuf[], int off, int len) throws IOException { 69 int result = super.read(cbuf, off, len); 70 if (result == -1) { 71 waitReady(); 72 } 73 return result; 74 } 75 76 79 protected void waitReady() { 80 try { 81 while (! link.ready()) { 82 synchronized(link) { link.wait(); 84 } 85 } 86 } catch (InterruptedException ie) { 87 log.warn("" + ie); 88 } 89 } 90 91 92 93 97 public void close() throws IOException { 98 log.info("closing"); 99 super.close(); 100 in.close(); 101 } 102 103 104 public static void main(String [] args) { 106 107 String testString = "use argument to change this string"; 108 if (args.length > 0) { 109 testString = args[0]; 110 } 111 112 113 BufferedReader reader = new BufferedReader(new TransformingReader(new StringReader(testString), new UnicodeEscaper())); 114 115 try { 116 while(true) { 117 String line = reader.readLine(); 118 if (line == null) break; 119 System.out.println(line); 120 } 121 } catch (Exception e) { 122 log.error(e + Logging.stackTrace(e)); 123 } 124 125 126 ChainedCharTransformer t = new ChainedCharTransformer(); 127 t.add(new UnicodeEscaper()); 128 t.add(new UpperCaser()); 129 t.add(new SpaceReducer()); 130 t.add(new Trimmer()); 131 132 reader = new BufferedReader(new TransformingReader(new StringReader(testString), t)); 133 134 try { 135 while(true) { 136 String line = reader.readLine(); 137 if (line == null) break; 138 System.out.println(line); 139 } 140 } catch (Exception e) { 141 log.error(e + Logging.stackTrace(e)); 142 } 143 } 144 145 146 147 } 148 149 | Popular Tags |