1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 package org.melati.template;
46
47 import java.text.DateFormat;
48
49 import org.melati.Melati;
50 import org.melati.poem.Field;
51 import org.melati.poem.PoemLocale;
52 import org.melati.util.MelatiStringWriter;
53 import org.melati.util.MelatiWriter;
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 public abstract class AbstractMarkupLanguage implements MarkupLanguage {
71
72 protected TempletLoader templetLoader = null;
73 protected Melati melati = null;
74 protected PoemLocale locale = null;
75
76
77 public static final int FIELD_POSSIBILITIES_LIMIT = 10000;
78
79 public static final int DATE_FIELD_POSSIBILITIES_LIMIT = 50;
80
81 private String name;
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 public AbstractMarkupLanguage(String name,
97 Melati melati,
98 TempletLoader templetLoader,
99 PoemLocale locale) {
100 this.name = name;
101 this.melati = melati;
102 this.templetLoader = templetLoader;
103 this.locale = locale;
104 }
105
106
107
108
109
110
111
112
113 protected AbstractMarkupLanguage(String name, AbstractMarkupLanguage other) {
114 this(name, other.melati, other.templetLoader, other.locale);
115 }
116
117
118
119
120
121 public String getName() {
122 return name;
123 }
124
125
126
127
128
129
130 public String toString() {
131 return getName() + "/" + locale.toString();
132 }
133
134 private MelatiStringWriter getStringWriter() {
135 return (MelatiStringWriter)melati.getStringWriter();
136 }
137
138
139
140
141
142 public String rendered(String s, int limit) {
143 MelatiStringWriter sw = getStringWriter();
144 render(s,limit,sw);
145 return sw.toString();
146 }
147
148
149
150
151
152 public String rendered(Field<?> field, int style, int limit)
153 throws TemplateEngineException {
154 MelatiStringWriter sw = getStringWriter();
155 render(field, style, limit, sw);
156 return sw.toString();
157 }
158
159
160
161
162
163 public String rendered(Field<?> field, int style)
164 throws TemplateEngineException {
165 MelatiStringWriter sw = getStringWriter();
166 render(field, style, FIELD_POSSIBILITIES_LIMIT, sw);
167 return sw.toString();
168 }
169
170
171
172
173
174 public String rendered(Object o) {
175 MelatiStringWriter sw = getStringWriter();
176 if (o instanceof String)
177 render((String)o, sw);
178 else if (o instanceof Field)
179 render((Field<?>)o, sw);
180 else
181 render(o, sw);
182 return sw.toString();
183 }
184
185
186
187
188
189 public String renderedMarkup(String s) {
190 MelatiStringWriter sw = getStringWriter();
191 renderMarkup(s, sw);
192 return sw.toString();
193 }
194
195
196
197
198
199
200
201
202
203 protected void render(String s, int limit, MelatiWriter writer) {
204 render(s.length() < limit + 3 ? s : s.substring(0, limit) + "...", writer);
205 }
206
207
208
209
210
211
212
213
214 protected abstract void render(String s, MelatiWriter writer);
215
216
217
218
219
220
221
222
223 protected abstract void renderMarkup(String s, MelatiWriter writer);
224
225
226
227
228
229
230
231
232 protected void render(Field<?> field, MelatiWriter writer) {
233 render(field, DateFormat.MEDIUM, FIELD_POSSIBILITIES_LIMIT, writer);
234 }
235
236
237
238
239
240
241
242
243
244
245
246
247 protected void render(Field<?> field, int style, int limit, MelatiWriter writer) {
248 render(field.getCookedString(locale, style), limit, writer);
249 }
250
251
252
253
254
255
256 public String renderedStart(Field<?> field) {
257 MelatiStringWriter sw = getStringWriter();
258 renderStart(field, sw);
259 return sw.toString();
260 }
261
262
263 protected void renderStart(Field<?> field, MelatiWriter writer) {
264 render(field, DateFormat.MEDIUM, DATE_FIELD_POSSIBILITIES_LIMIT, writer);
265 }
266
267
268
269
270
271
272
273
274
275 protected void render(Object o) {
276 MelatiWriter writer = melati.getWriter();
277 render(o, writer);
278 }
279
280
281
282
283
284
285
286
287
288
289 protected void render(Object o, MelatiWriter writer) {
290 if (o == null)
291 throw new NullPointerException();
292 else {
293 TemplateContext vars =
294 melati.getTemplateEngine().getTemplateContext();
295 Template templet =
296 templetLoader.templet(melati.getTemplateEngine(), this, o.getClass());
297 vars.put("object", o);
298 vars.put("melati", melati);
299 vars.put("ml", melati.getMarkupLanguage());
300 expandTemplet(templet, vars, writer);
301 }
302 }
303
304
305
306
307
308
309
310
311
312
313
314
315 public String input(Field<?> field)
316 throws TemplateEngineException,
317 NotFoundException {
318 return input(field, null, "", false);
319 }
320
321
322
323
324
325 public String inputAs(Field<?> field, String templetName)
326 throws TemplateEngineException,
327 NotFoundException {
328 return input(field, templetName, "", false);
329 }
330
331
332
333
334
335 public String searchInput(Field<?> field, String nullValue)
336 throws TemplateEngineException,
337 NotFoundException{
338 return input(field, null, nullValue, true);
339 }
340
341 protected String input(Field<?> field,
342 String templetName,
343 String nullValue,
344 boolean overrideNullable)
345 throws NotFoundException {
346
347 Template templet;
348 if (templetName == null)
349 templet = templetLoader.templet(melati.getTemplateEngine(), this, field) ;
350 else
351 templet = templetLoader.templet(melati.getTemplateEngine(), this, templetName);
352
353 TemplateContext vars =
354 melati.getTemplateEngine().getTemplateContext();
355
356 if (overrideNullable) {
357 field = field.withNullable(true);
358 vars.put("nullValue", nullValue);
359 }
360
361 vars.put("melati", melati);
362 vars.put("ml", melati.getMarkupLanguage());
363 vars.put("object", field);
364 vars.put("field", field);
365 MelatiStringWriter sw = getStringWriter();
366 melati.getTemplateEngine().expandTemplate(sw, templet,vars);
367
368 return sw.toString();
369 }
370
371
372
373
374
375
376
377
378
379 protected void expandTemplet(Template templet, TemplateContext tc,
380 MelatiWriter out) {
381 melati.getTemplateEngine().expandTemplate(out, templet, tc);
382 }
383 }
384
385