1 package dinamica.parser; 2 3 import java.util.*; 4 5 6 16 public class FastTemplateEngine implements java.io.Serializable  17 { 18 19 20 21 24 private static final long serialVersionUID = 1L; 25 26 27 private HashMap markers = new HashMap(); 28 29 30 private ArrayList bodyParts = new ArrayList(); 31 32 33 private ArrayList dataParts = new ArrayList(); 34 35 public FastTemplateEngine() 36 { 37 } 38 39 public FastTemplateEngine(String templateBody) throws Throwable  40 { 41 setTemplate(templateBody); 42 } 43 44 49 public void setTemplate(String body) throws Throwable  50 { 51 52 if (body==null) 53 throw new Throwable ("Invalid parameter [body]: cannot be null."); 54 55 parse(body); 56 57 } 58 59 67 public void setValue(String key, String value) throws Throwable  68 { 69 if (markers.containsKey(key)) 70 markers.put(key, value); 71 else 72 { 73 String logMsg = "Invalid template key: " + key; 74 throw new Throwable (logMsg); 75 } 76 } 77 78 86 private void parse(String t) throws Throwable  87 { 88 89 int pos = 0; 90 int pos1 = 0; 91 int pos2 = 0; 92 int newPos = 0; 93 String str = "${fld:"; 94 95 96 while ( pos >= 0 ) 97 { 98 99 100 pos1 = t.indexOf(str, pos); 101 if (pos1>=0) 102 { 103 104 105 newPos = pos1 + str.length(); 106 pos2 = t.indexOf("}", newPos); 107 108 if (pos2>0) 109 { 110 String marker = t.substring(pos1, pos2 + 1); 112 markers.put(marker, marker); 113 dataParts.add(marker); 114 115 String part = t.substring(pos, pos1); 117 bodyParts.add(part); 118 } 119 else 120 { 121 String logMsg = "Invalid template - marker not closed with '}'."; 122 throw new Throwable ( logMsg ); 123 } 124 pos = pos2 + 1; 125 } 126 else 127 { 128 String part = t.substring(pos); 130 bodyParts.add(part); 131 pos = -1; 132 } 133 } 134 135 } 136 137 142 public void resetValues() 143 { 144 Set keys = markers.keySet(); 145 Object k[] = keys.toArray(); 146 for (int i=0; i<k.length;i++) 147 { 148 markers.put(k[i], k[i]); 149 } 150 151 } 152 153 159 public String toString() 160 { 161 162 StringBuffer sb = new StringBuffer (); 163 164 int markerCount = dataParts.size(); 165 for (int i=0; i<bodyParts.size(); i++) 166 { 167 sb.append(bodyParts.get(i)); 168 if (i<markerCount) 169 sb.append(markers.get(dataParts.get(i))); 170 } 171 172 return sb.toString(); 173 174 } 175 176 182 public ArrayList getMarkers() 183 { 184 185 String name = ""; 186 String format = ""; 187 188 ArrayList l = new ArrayList(); 189 190 Object k[] = markers.keySet().toArray(); 191 for (int i=0; i<k.length;i++) 192 { 193 String key = (String )k[i]; 194 String prefix = key.substring(2,5); 195 196 int pos = key.indexOf("@"); 197 if (pos>0) 198 { 199 name = key.substring(6, pos); 200 format = key.substring(pos + 1, key.length()-1); 201 } 202 else 203 { 204 name = key.substring(6, key.length()-1); 205 format = null; 206 } 207 208 Marker m = new Marker(key, prefix, name, format); 209 l.add(m); 210 211 } 212 return l; 213 } 214 215 } 216
| Popular Tags
|