001: /*
002: * de.jwic.renderer.velocity.BaseVelocityRenderer
003: * $Id: BaseVelocityRenderer.java,v 1.2 2006/02/02 11:09:39 lordsam Exp $
004: */
005: package de.jwic.renderer.velocity;
006:
007: import java.util.ArrayList;
008: import java.util.HashMap;
009: import java.util.List;
010: import java.util.Map;
011: import java.util.Properties;
012:
013: import org.apache.commons.lang.StringEscapeUtils;
014: import org.apache.commons.logging.Log;
015: import org.apache.commons.logging.LogFactory;
016: import org.apache.velocity.Template;
017: import org.apache.velocity.VelocityContext;
018: import org.apache.velocity.app.VelocityEngine;
019: import org.apache.velocity.exception.ParseErrorException;
020: import org.apache.velocity.exception.ResourceNotFoundException;
021:
022: import de.jwic.base.ConfigurationTool;
023: import de.jwic.base.Control;
024: import de.jwic.base.IControlRenderer;
025: import de.jwic.renderer.util.JWicTools;
026:
027: /**
028: *
029: * @author Florian Lippisch
030: * @version $Revision: 1.2 $
031: */
032: public abstract class BaseVelocityRenderer implements IControlRenderer {
033:
034: protected final Log log = LogFactory.getLog(getClass());
035: protected VelocityEngine ve = null;
036:
037: protected Map tplNames = new HashMap();
038: protected List tplExtension = new ArrayList();
039:
040: /**
041: * Default constructor.
042: * @throws Exception
043: */
044: public BaseVelocityRenderer() throws Exception {
045: tplExtension.add(".vtl");
046: }
047:
048: /**
049: * Set the velocityEngine used by this renderer.
050: * @param engine
051: */
052: public void setVelocityEngine(VelocityEngine engine) {
053: ve = engine;
054: }
055:
056: /**
057: * @param velocityProperties The velocityProperties to set.
058: * @throws Exception
059: */
060: public void setVelocityProperties(Properties velocityProperties)
061: throws Exception {
062: ve = new VelocityEngine();
063: ConfigurationTool.insertRootPath(velocityProperties);
064: ve.init(velocityProperties);
065: }
066:
067: /**
068: * Creates a new velocity context and adds standard objects.
069: * @return
070: */
071: protected VelocityContext createContext(Control control) {
072: VelocityContext vCtx = new VelocityContext();
073: vCtx.put("jwic", new JWicTools(control.getSessionContext()
074: .getLocale()));
075: vCtx.put("escape", new StringEscapeUtils());
076: return vCtx;
077: }
078:
079: /**
080: * Returns the template with the given ID.
081: * @param templateId
082: * @return
083: * @throws Exception
084: * @throws ParseErrorException
085: */
086: protected Template getTemplate(String tplName)
087: throws ParseErrorException, Exception {
088:
089: Template tpl = null;
090: String tryName = null;
091:
092: // check if we already looked up the template with the given name.
093: if (tplNames.containsKey(tplName)) {
094: tryName = (String) tplNames.get(tplName);
095: if (tryName != null) { // if tryName is null, there is no template with the given name.
096: tpl = ve.getTemplate(tryName);
097: }
098: } else {
099: String ext = null;
100: // the template name is unknown - try to find out wich name to use for the template.
101: for (int i = 0; i < tplExtension.size(); i++) {
102: tryName = tplName;
103: ext = tplExtension.get(i).toString();
104: try {
105: tpl = ve.getTemplate(tryName + ext);
106: break;
107: } catch (ResourceNotFoundException rnfe) {
108: // try classloader format
109: tryName = tryName.replace('.', '/');
110: try {
111: tpl = ve.getTemplate(tryName + ext);
112: break;
113: } catch (ResourceNotFoundException rnfe3) {
114: // do nothing to remember that there is no template.
115: }
116: }
117:
118: }
119: if (tpl == null) {
120: tplNames.put(tplName, null); // remember that there is no template with that name
121: } else {
122: tplNames.put(tplName, tryName + ext); // remember the name that "worked"
123: }
124: }
125: return tpl;
126:
127: }
128:
129: /**
130: * Returns the supported template file extension list.
131: * Default element is ".vtl".
132: * @return
133: */
134: public List getTemplateExtension() {
135: return tplExtension;
136: }
137:
138: /**
139: * Sets the template file extension list.
140: * Default element is ".vtl".
141: * @param templateExtension
142: */
143: public void setTemplateExtension(List templateExtension) {
144: this.tplExtension = templateExtension;
145: }
146: }
|