svn commit: r1211258 - /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1211258 - /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java

hansbak-2
Author: hansbak
Date: Wed Dec  7 01:21:56 2011
New Revision: 1211258

URL: http://svn.apache.org/viewvc?rev=1211258&view=rev
Log:
extend the <@ofbizUrl macro with a new parameter: webSiteId to be able to generate url's for a specific website in generated emails

Modified:
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java?rev=1211258&r1=1211257&r2=1211258&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java Wed Dec  7 01:21:56 2011
@@ -18,15 +18,34 @@
  *******************************************************************************/
 package org.ofbiz.webapp.ftl;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.Writer;
 import java.util.Map;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.ParserConfigurationException;
 
+import org.ofbiz.base.component.ComponentConfig;
+import org.ofbiz.base.component.ComponentConfig.WebappInfo;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
 import org.ofbiz.webapp.control.RequestHandler;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
 
 import freemarker.core.Environment;
 import freemarker.ext.beans.BeanModel;
@@ -62,6 +81,7 @@ public class OfbizUrlTransform implement
         final boolean fullPath = checkArg(args, "fullPath", false);
         final boolean secure = checkArg(args, "secure", false);
         final boolean encode = checkArg(args, "encode", true);
+        final String webSiteId = getArg(args, "webSiteId");
 
         return new Writer(out) {
             @Override
@@ -81,7 +101,109 @@ public class OfbizUrlTransform implement
                     BeanModel req = (BeanModel) env.getVariable("request");
                     BeanModel res = (BeanModel) env.getVariable("response");
                     Object prefix = env.getVariable("urlPrefix");
-                    if (req != null) {
+                    if (UtilValidate.isNotEmpty(webSiteId)) {
+                        HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
+                        Delegator delegator = (Delegator) request.getAttribute("delegator");
+                        String httpsPort = null;
+                        String httpsServer = null;
+                        String httpPort = null;
+                        String httpServer = null;
+                        Boolean enableHttps = null;
+                        StringBuilder newURL = new StringBuilder();
+                        // make prefix url
+                        try {
+                            GenericValue webSite = delegator.findByPrimaryKeyCache("WebSite", UtilMisc.toMap("webSiteId", webSiteId));
+                            if (webSite != null) {
+                                httpsPort = webSite.getString("httpsPort");
+                                httpsServer = webSite.getString("httpsHost");
+                                httpPort = webSite.getString("httpPort");
+                                httpServer = webSite.getString("httpHost");
+                                enableHttps = webSite.getBoolean("enableHttps");
+                            }
+                        } catch (GenericEntityException e) {
+                            Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module);
+                        }
+                        // fill in any missing properties with fields from the global file
+                        if (UtilValidate.isEmpty(httpsPort)) {
+                            httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443");
+                        }
+                        if (UtilValidate.isEmpty(httpsServer)) {
+                            httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host");
+                        }
+                        if (UtilValidate.isEmpty(httpPort)) {
+                            httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80");
+                        }
+                        if (UtilValidate.isEmpty(httpServer)) {
+                            httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host");
+                        }
+                        if (enableHttps == null) {
+                            enableHttps = UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y");
+                        }
+                        if (secure && enableHttps) {
+                            String server = httpsServer;
+                            if (UtilValidate.isEmpty(server)) {
+                                server = request.getServerName();
+                            }
+                            newURL.append("https://");
+                            newURL.append(httpsServer);
+                            newURL.append(":").append(httpsPort);
+                        } else {
+                            newURL.append("http://");
+                            newURL.append(httpServer);
+                            if (!"80".equals(httpPort)) {
+                                newURL.append(":").append(httpPort);
+                            }
+                        }
+                        // make mount point
+                        String mountPoint = null;
+                        for (WebappInfo webAppInfo : ComponentConfig.getAllWebappResourceInfos()) {
+                            File file = new File(webAppInfo.getLocation() + "/WEB-INF/web.xml");
+                            if (!file.exists()) {
+                                continue;
+                            }
+                            InputStream is = new FileInputStream(file);
+                            try {
+                                Document doc = UtilXml.readXmlDocument(is, true, null);
+                                NodeList nList = doc.getElementsByTagName("context-param");
+                                for (int temp = 0; temp < nList.getLength(); temp++) {
+                                    Node nNode = nList.item(temp);
+                                    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+                                        Element eElement = (Element) nNode;
+                                        String paramName = getTagValue("param-name",eElement);
+                                        String paramValue = getTagValue("param-value",eElement);
+                                        if ("webSiteId".equals(paramName) && webSiteId.equals(paramValue)) {
+                                            mountPoint = webAppInfo.getContextRoot();
+                                            break;
+                                        }
+                                    }
+                                }
+                            } catch (SAXException e) {
+                                Debug.logWarning(e, e.getMessage(), module);
+                            } catch (ParserConfigurationException e) {
+                                Debug.logWarning(e, e.getMessage(), module);
+                            }
+                            if (UtilValidate.isNotEmpty(mountPoint)) {
+                            if (mountPoint.length() > 1) newURL.append(mountPoint);
+                                break;
+                            }
+                        }
+                        // make the path the the control servlet
+                        String controlPath = (String) request.getAttribute("_CONTROL_PATH_");
+                        String[] patch = controlPath.split("/");
+                        String patchStr = null;
+                        if (patch.length > 0) {
+                        patchStr = patch[patch.length-1];
+                        }
+                        if (UtilValidate.isNotEmpty(patchStr)) {
+                        newURL.append("/");
+                        newURL.append(patchStr);
+                        }
+                        newURL.append("/");
+                        // make requestUrl
+                        String requestUrl = buf.toString();
+                        newURL.append(requestUrl);
+                        out.write(newURL.toString());
+                    } else if (req != null) {
                         HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
                         ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
                         HttpServletResponse response = null;
@@ -117,4 +239,32 @@ public class OfbizUrlTransform implement
             }
         };
     }
+    private static String getArg(Map args, String key) {
+        String  result = "";
+        Object o = args.get(key);
+        if (o != null) {
+            if (Debug.verboseOn()) Debug.logVerbose("Arg Object : " + o.getClass().getName(), module);
+            if (o instanceof TemplateScalarModel) {
+                TemplateScalarModel s = (TemplateScalarModel) o;
+                try {
+                    result = s.getAsString();
+                } catch (TemplateModelException e) {
+                    Debug.logError(e, "Template Exception", module);
+                }
+            } else {
+              result = o.toString();
+            }
+        }
+        return result;
+    }
+    private static String getTagValue(String sTag, Element eElement){
+    String value = "";
+        try{
+            NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes();
+            Node nValue = (Node) nlList.item(0);
+            return value = nValue.getNodeValue();
+        } catch (Exception e) {
+            return value;
+        }
+    }
 }