View Javadoc

1   /*
2    * joey-gen and its relative products are published under the terms
3    * of the Apache Software License.
4    * 
5    * Created on 2004/12/20 8:54:12
6    */
7   package org.asyrinx.joey.gen.core;
8   
9   import java.util.HashMap;
10  import java.util.Map;
11  
12  import ognl.OgnlException;
13  
14  import org.apache.commons.logging.Log;
15  import org.apache.commons.logging.LogFactory;
16  import org.apache.velocity.context.Context;
17  import org.asyrinx.brownie.core.lang.StringUtils;
18  
19  /***
20   * @author takeshi
21   */
22  public class VelocityOgnlHelper extends OgnlHelper {
23  
24      public VelocityOgnlHelper(Context context) {
25          super(toMap(context));
26          this.context = context;
27      }
28  
29      private static Map toMap(Context context) {
30          final Map result = new HashMap();
31          final Object[] keys = context.getKeys();
32          for (int i = 0; i < keys.length; i++)
33              result.put(keys[i], context.get(keys[i].toString()));
34          return result;
35      }
36  
37      final Context context;
38  
39      static final String VELOCITY_VARIABLE_HEADER = "velocity_";
40  
41      final Log log = LogFactory.getLog(this.getClass());
42  
43      public Object getValue(String expression) throws OgnlException {
44          final Object[] keys = this.context.getKeys();
45          for (int i = 0; i < keys.length; i++) {
46              final String key = keys[i].toString();
47              expression = StringUtils.replace(expression, "$" + key, VELOCITY_VARIABLE_HEADER + key);
48              expression = StringUtils.replace(expression, "${" + key + "}", VELOCITY_VARIABLE_HEADER + key);
49          }
50          if (expression.indexOf("${") > -1) {
51              for (int i = 0; i < keys.length; i++) {
52                  final String key = keys[i].toString();
53                  log.debug("velocity context: " + key + "=" + this.context.get(key));
54              }
55          }
56          return super.getValue(expression);
57      }
58  
59  }