1 25 package org.ofbiz.webapp.ftl; 26 27 import java.io.IOException ; 28 import java.io.Writer ; 29 import java.util.Map ; 30 import javax.servlet.ServletContext ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 34 import freemarker.core.Environment; 35 import freemarker.ext.beans.BeanModel; 36 import freemarker.template.SimpleScalar; 37 import freemarker.template.TemplateModelException; 38 import freemarker.template.TemplateScalarModel; 39 import freemarker.template.TemplateTransformModel; 40 41 import org.ofbiz.webapp.control.RequestHandler; 42 43 50 public class OfbizUrlTransform implements TemplateTransformModel { 51 52 public boolean checkArg(Map args, String key, boolean defaultValue) { 53 if (!args.containsKey(key)) { 54 return defaultValue; 55 } else { 56 Object o = args.get(key); 57 if (o instanceof SimpleScalar) { 58 SimpleScalar s = (SimpleScalar) o; 59 return "true".equalsIgnoreCase(s.getAsString()); 60 } 61 return defaultValue; 62 } 63 } 64 65 public Writer getWriter(final Writer out, Map args) { 66 final StringBuffer buf = new StringBuffer (); 67 final boolean fullPath = checkArg(args, "fullPath", false); 68 final boolean secure = checkArg(args, "secure", false); 69 final boolean encode = checkArg(args, "encode", true); 70 71 return new Writer (out) { 72 public void write(char cbuf[], int off, int len) { 73 buf.append(cbuf, off, len); 74 } 75 76 public void flush() throws IOException { 77 out.flush(); 78 } 79 80 public void close() throws IOException { 81 try { 82 Environment env = Environment.getCurrentEnvironment(); 83 BeanModel req = (BeanModel) env.getVariable("request"); 84 BeanModel res = (BeanModel) env.getVariable("response"); 85 Object prefix = env.getVariable("urlPrefix"); 86 if (req != null) { 87 HttpServletRequest request = (HttpServletRequest ) req.getWrappedObject(); 88 ServletContext ctx = (ServletContext ) request.getAttribute("servletContext"); 89 HttpServletResponse response = null; 90 if (res != null) { 91 response = (HttpServletResponse ) res.getWrappedObject(); 92 } 93 94 RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); 96 out.write(rh.makeLink(request, response, buf.toString(), fullPath, secure, encode)); 97 } else if (prefix != null) { 98 if (prefix instanceof TemplateScalarModel) { 99 TemplateScalarModel s = (TemplateScalarModel) prefix; 100 String prefixString = s.getAsString(); 101 String bufString = buf.toString(); 102 boolean prefixSlash = prefixString.endsWith("/"); 103 boolean bufSlash = bufString.startsWith("/"); 104 if (prefixSlash && bufSlash) { 105 bufString = bufString.substring(1); 106 } else if (!prefixSlash && !bufSlash) { 107 bufString = "/" + bufString; 108 } 109 out.write(prefixString + bufString); 110 } 111 } else { 112 out.write(buf.toString()); 113 } 114 } catch (TemplateModelException e) { 115 throw new IOException (e.getMessage()); 116 } 117 } 118 }; 119 } 120 } 121 | Popular Tags |