1 10 package org.mmbase.util.transformers; 11 12 import org.mmbase.util.functions.*; 13 import java.io.Reader ; 14 import java.io.Writer ; 15 16 17 28 29 public class SubstringFactory implements ParameterizedTransformerFactory { 30 31 32 protected final static Parameter[] PARAMS = { 33 new Parameter("from", Integer .class, new Integer (0)), 34 new Parameter("to" , Integer .class, new Integer (Integer.MAX_VALUE)), 35 new Parameter("ellipsis" , String .class, "") 36 }; 37 38 public Transformer createTransformer(Parameters parameters) { 39 return new Substring( (Integer ) parameters.get("from"), 40 (Integer ) parameters.get("to"), 41 (String ) parameters.get("ellipsis") ); 42 } 43 public Parameters createParameters() { 44 return new Parameters(PARAMS); 45 } 46 47 protected class Substring extends ReaderTransformer { 48 49 private final int from; 50 private final int to; 51 private final String ellipsis; 52 Substring(Integer f, Integer t, String e) { 53 from = f.intValue(); to = t.intValue(); ellipsis = e; 54 } 55 56 57 public Writer transform(Reader r, Writer w) { 59 if (from < 0 || to < 0) throw new UnsupportedOperationException ("When using streams, it is not possible to use negative values."); 60 int current = 0; 61 try { 62 while (true) { 63 int c = r.read(); 64 if (c == -1) break; 65 if (current >= from) { 66 w.write(c); 67 } 68 current++; 69 if (current >= to) { 70 if (ellipsis != null && (! ellipsis.equals(""))) w.write(ellipsis); 71 break; 72 } 73 } 74 } catch (java.io.IOException e) { 75 throw new RuntimeException (e); 76 } 77 return w; 78 } 79 80 public String toString() { 81 return "SUBSTRING(" + from + "," + to + "," + ellipsis + ")"; 82 } 83 } 84 85 } 86 | Popular Tags |