Author: adrianc Date: Thu Oct 24 17:12:46 2013 New Revision: 1535444 URL: http://svn.apache.org/r1535444 Log: Some code simplification in the new URL generation classes.
Also loosened things up a bit in the OfbizUrlBuilder class: allow object construction with partial information - required by some services. I don't like this approach because it makes it possible to create nonsensical URLs, but it is a necessary evil to keep the existing code working. Modified: ofbiz/trunk/framework/common/servicedef/services_email.xml ofbiz/trunk/framework/common/src/org/ofbiz/common/email/NotificationServices.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/website/WebSiteProperties.java Modified: ofbiz/trunk/framework/common/servicedef/services_email.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_email.xml?rev=1535444&r1=1535443&r2=1535444&view=diff ============================================================================== --- ofbiz/trunk/framework/common/servicedef/services_email.xml (original) +++ ofbiz/trunk/framework/common/servicedef/services_email.xml Thu Oct 24 17:12:46 2013 @@ -110,6 +110,7 @@ under the License. <attribute name="xslfoAttachScreenLocationList" type="List" mode="IN" optional="true"/> <attribute name="attachmentNameList" type="List" mode="IN" optional="true"/> <attribute name="bodyParameters" type="Map" mode="IN" optional="true"/> + <!-- FIXME: webSiteId should not be optional, async service can't construct valid URLs without it --> <attribute name="webSiteId" type="String" mode="IN" optional="true"/> <attribute name="subject" type="String" mode="OUT" optional="true"/> <attribute name="body" type="String" mode="OUT" optional="false"/> Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/email/NotificationServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/email/NotificationServices.java?rev=1535444&r1=1535443&r2=1535444&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/email/NotificationServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/email/NotificationServices.java Thu Oct 24 17:12:46 2013 @@ -253,7 +253,10 @@ public class NotificationServices { // If the baseUrl was not specified we can do a best effort instead if (!context.containsKey("baseUrl")) { try { - WebappInfo webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); + WebappInfo webAppInfo = null; + if (webSiteId != null) { + webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); + } OfbizUrlBuilder builder = OfbizUrlBuilder.from(webAppInfo, delegator); StringBuilder newURL = new StringBuilder(); builder.buildHostPart(newURL, "", false); Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java?rev=1535444&r1=1535443&r2=1535444&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java Thu Oct 24 17:12:46 2013 @@ -25,7 +25,6 @@ import javax.servlet.http.HttpServletReq import org.ofbiz.base.component.ComponentConfig.WebappInfo; import org.ofbiz.base.util.Assert; -import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilMisc; import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; @@ -45,8 +44,7 @@ public final class OfbizUrlBuilder { public static final String module = OfbizUrlBuilder.class.getName(); /** - * Returns an <code>OfbizUrlBuilder</code> instance. The instance can be reused in - * the supplied request. + * Returns an <code>OfbizUrlBuilder</code> instance. * * @param request * @throws GenericEntityException @@ -54,22 +52,25 @@ public final class OfbizUrlBuilder { */ public static OfbizUrlBuilder from(HttpServletRequest request) throws GenericEntityException, WebAppConfigurationException { Assert.notNull("request", request); - WebSiteProperties webSiteProps = (WebSiteProperties) request.getAttribute("_WEBSITE_PROPS_"); - if (webSiteProps == null) { - webSiteProps = WebSiteProperties.from(request); - request.setAttribute("_WEBSITE_PROPS_", webSiteProps); + OfbizUrlBuilder builder = (OfbizUrlBuilder) request.getAttribute("_OFBIZ_URL_BUILDER_"); + if (builder == null) { + WebSiteProperties webSiteProps = WebSiteProperties.from(request); + URL url = ConfigXMLReader.getControllerConfigURL(request.getServletContext()); + ControllerConfig config = ConfigXMLReader.getControllerConfig(url); + String servletPath = (String) request.getAttribute("_CONTROL_PATH_"); + builder = new OfbizUrlBuilder(config, webSiteProps, servletPath); + request.setAttribute("_OFBIZ_URL_BUILDER_", builder); } - URL url = ConfigXMLReader.getControllerConfigURL(request.getServletContext()); - ControllerConfig config = ConfigXMLReader.getControllerConfig(url); - String servletPath = (String) request.getAttribute("_CONTROL_PATH_"); - return new OfbizUrlBuilder(config, webSiteProps, servletPath); + return builder; } /** * Returns an <code>OfbizUrlBuilder</code> instance. Use this method when you * don't have a <code>HttpServletRequest</code> object - like in scheduled jobs. * - * @param webAppInfo + * @param webAppInfo Optional - if <code>null</code>, the builder can only build the host part, + * and that will be based only on the settings in <code>url.properties</code> (the WebSite + * entity will be ignored). * @param delegator * @throws WebAppConfigurationException * @throws IOException @@ -77,20 +78,24 @@ public final class OfbizUrlBuilder { * @throws GenericEntityException */ public static OfbizUrlBuilder from(WebappInfo webAppInfo, Delegator delegator) throws WebAppConfigurationException, IOException, SAXException, GenericEntityException { - Assert.notNull("webAppInfo", webAppInfo, "delegator", delegator); WebSiteProperties webSiteProps = null; - String webSiteId = WebAppUtil.getWebSiteId(webAppInfo); - if (webSiteId != null) { - GenericValue webSiteValue = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); - if (webSiteValue != null) { - webSiteProps = WebSiteProperties.from(webSiteValue); + ControllerConfig config = null; + String servletPath = null; + if (webAppInfo != null) { + Assert.notNull("delegator", delegator); + String webSiteId = WebAppUtil.getWebSiteId(webAppInfo); + if (webSiteId != null) { + GenericValue webSiteValue = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); + if (webSiteValue != null) { + webSiteProps = WebSiteProperties.from(webSiteValue); + } } + config = ConfigXMLReader.getControllerConfig(webAppInfo); + servletPath = WebAppUtil.getControlServletPath(webAppInfo); } if (webSiteProps == null) { webSiteProps = WebSiteProperties.defaults(); } - ControllerConfig config = ConfigXMLReader.getControllerConfig(webAppInfo); - String servletPath = WebAppUtil.getControlServletPath(webAppInfo); return new OfbizUrlBuilder(config, webSiteProps, servletPath); } @@ -140,7 +145,10 @@ public final class OfbizUrlBuilder { if (queryIndex != -1) { requestMapUri = requestMapUri.substring(0, queryIndex); } - RequestMap requestMap = config.getRequestMapMap().get(requestMapUri); + RequestMap requestMap = null; + if (config != null) { + requestMap = config.getRequestMapMap().get(requestMapUri); + } if (requestMap != null) { makeSecure = requestMap.securityHttps; } @@ -178,6 +186,9 @@ public final class OfbizUrlBuilder { * @throws IOException */ public void buildPathPart(Appendable buffer, String url) throws WebAppConfigurationException, IOException { + if (servletPath == null) { + throw new IllegalStateException("Servlet path is unknown"); + } buffer.append(servletPath); if (!url.startsWith("/")) { buffer.append("/"); Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/website/WebSiteProperties.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/website/WebSiteProperties.java?rev=1535444&r1=1535443&r2=1535444&view=diff ============================================================================== --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/website/WebSiteProperties.java (original) +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/website/WebSiteProperties.java Thu Oct 24 17:12:46 2013 @@ -53,17 +53,24 @@ public final class WebSiteProperties { */ public static WebSiteProperties from(HttpServletRequest request) throws GenericEntityException { Assert.notNull("request", request); - Delegator delegator = (Delegator) request.getAttribute("delegator"); - if (delegator != null) { - String webSiteId = WebSiteWorker.getWebSiteId(request); - if (webSiteId != null) { - GenericValue webSiteValue = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); - if (webSiteValue != null) { - return from(webSiteValue); + WebSiteProperties webSiteProps = (WebSiteProperties) request.getAttribute("_WEBSITE_PROPS_"); + if (webSiteProps == null) { + Delegator delegator = (Delegator) request.getAttribute("delegator"); + if (delegator != null) { + String webSiteId = WebSiteWorker.getWebSiteId(request); + if (webSiteId != null) { + GenericValue webSiteValue = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); + if (webSiteValue != null) { + webSiteProps = from(webSiteValue); + } } } - } - return new WebSiteProperties(); + if (webSiteProps == null) { + webSiteProps = new WebSiteProperties(); + } + request.setAttribute("_WEBSITE_PROPS_", webSiteProps); + } + return webSiteProps; } /**