1
2
3
4
5
6
7 package org.asyrinx.joey.gen.task;
8
9 import java.io.File;
10 import java.io.InputStream;
11 import java.util.Properties;
12
13 import org.apache.velocity.app.VelocityEngine;
14 import org.apache.velocity.context.Context;
15 import org.apache.velocity.texen.Generator;
16 import org.asyrinx.brownie.core.lang.StringUtils;
17
18 /***
19 * @author takeshi
20 */
21 public class JoeyVelocityGeneratorImpl extends Generator implements JoeyVelocityGenerator {
22
23 /***
24 * @param propFile
25 */
26 public JoeyVelocityGeneratorImpl() {
27 super(loadDefaultProperties());
28 }
29
30 protected void fillContextDefaults(Context context) {
31 context.put("generator", this);
32 context.put("outputDirectory", getOutputPath());
33 }
34
35 private static final String DEFAULT_TEXEN_PROPERTIES = "org/asyrinx/joey/gen/task/texen.properties";
36
37 protected static final Properties loadDefaultProperties() {
38 final Properties result = new Properties();
39 final ClassLoader classLoader = VelocityEngine.class.getClassLoader();
40 try {
41 InputStream inputStream = null;
42 try {
43 inputStream = classLoader.getResourceAsStream(DEFAULT_TEXEN_PROPERTIES);
44 result.load(inputStream);
45 } finally {
46 if (inputStream != null)
47 inputStream.close();
48 }
49 } catch (Exception e) {
50 System.err.println("Cannot get default properties!");
51 }
52 return result;
53 }
54
55
56
57 private GenerationQuery query = GenerationQuery.THROUGH;
58
59
60
61
62
63
64
65 public String parse(String controlTemplate, Context controlContext) throws Exception {
66 return super.parse(controlTemplate, controlContext);
67 }
68
69
70
71
72
73
74
75
76 public String parse(String inputTemplate, String intputEncoding, String outputFile, String outputEncoding,
77 String objectID, Object object) throws Exception {
78 if (!StringUtils.isEmpty(outputFile)) {
79 final File file = new File(getOutputPath(), outputFile);
80 if (!query.canGenerate(inputTemplate, file))
81 return "";
82 }
83 return super.parse(inputTemplate, intputEncoding, outputFile, outputEncoding, objectID, object);
84 }
85
86 public GenerationQuery getQuery() {
87 return query;
88 }
89
90 public void setQuery(GenerationQuery query) {
91 this.query = query;
92 }
93 }