Author: adrianc Date: Wed Sep 11 19:31:14 2013 New Revision: 1522002 URL: http://svn.apache.org/r1522002 Log: Refactored MacroScreenViewHandler.java so it doesn't require empty "do nothing" templates.
https://issues.apache.org/jira/browse/OFBIZ-5310 Modified: ofbiz/trunk/framework/widget/config/widget.properties ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Modified: ofbiz/trunk/framework/widget/config/widget.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/config/widget.properties?rev=1522002&r1=1522001&r2=1522002&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/config/widget.properties (original) +++ ofbiz/trunk/framework/widget/config/widget.properties Wed Sep 11 19:31:14 2013 @@ -73,7 +73,6 @@ screen.default.encoding=none screentext.name=text screentext.screenrenderer=component://widget/templates/textScreenMacroLibrary.ftl screentext.formrenderer=component://widget/templates/textFormMacroLibrary.ftl -screentext.menurenderer=component://widget/templates/textMenuMacroLibrary.ftl screentext.treerenderer=component://widget/templates/textTreeMacroLibrary.ftl screentext.default.contenttype=UTF-8 screentext.default.encoding=none @@ -81,7 +80,6 @@ screentext.default.encoding=none screenxml.name=xml screenxml.screenrenderer=component://widget/templates/xmlScreenMacroLibrary.ftl screenxml.formrenderer=component://widget/templates/xmlFormMacroLibrary.ftl -screenxml.menurenderer=component://widget/templates/xmlMenuMacroLibrary.ftl screenxml.treerenderer=component://widget/templates/xmlTreeMacroLibrary.ftl screenxml.encoder=xml screenxml.default.contenttype=UTF-8 @@ -90,7 +88,6 @@ screenxml.default.encoding=none screenfop.name=xsl-fo screenfop.screenrenderer=component://widget/templates/foScreenMacroLibrary.ftl screenfop.formrenderer=component://widget/templates/foFormMacroLibrary.ftl -screenfop.menurenderer=component://widget/templates/foMenuMacroLibrary.ftl screenfop.treerenderer=component://widget/templates/foTreeMacroLibrary.ftl screenfop.default.contenttype=application/pdf screenfop.default.encoding=none @@ -98,7 +95,6 @@ screenfop.default.encoding=none screencsv.name=csv screencsv.screenrenderer=component://widget/templates/csvScreenMacroLibrary.ftl screencsv.formrenderer=component://widget/templates/csvFormMacroLibrary.ftl -screencsv.menurenderer=component://widget/templates/csvMenuMacroLibrary.ftl screencsv.treerenderer=component://widget/templates/csvTreeMacroLibrary.ftl screencsv.default.contenttype=UTF-8 screencsv.default.encoding=none Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java?rev=1522002&r1=1522001&r2=1522002&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java Wed Sep 11 19:31:14 2013 @@ -88,17 +88,24 @@ public class MacroScreenViewHandler exte // to speed up output. writer = new StandardCompress().getWriter(writer, null); } - ScreenStringRenderer screenStringRenderer = new MacroScreenRenderer(UtilProperties.getPropertyValue("widget", getName() + ".name"), UtilProperties.getPropertyValue("widget", getName() + ".screenrenderer")); - FormStringRenderer formStringRenderer = new MacroFormRenderer(UtilProperties.getPropertyValue("widget", getName() + ".formrenderer"), request, response); - TreeStringRenderer treeStringRenderer = new MacroTreeRenderer(UtilProperties.getPropertyValue("widget", getName() + ".treerenderer"), writer); - MenuStringRenderer menuStringRenderer = new MacroMenuRenderer(UtilProperties.getPropertyValue("widget", getName() + ".menurenderer"), request, response); - ScreenRenderer screens = new ScreenRenderer(writer, null, screenStringRenderer); screens.populateContextForRequest(request, response, servletContext); - screens.getContext().put("formStringRenderer", formStringRenderer); - screens.getContext().put("treeStringRenderer", treeStringRenderer); - screens.getContext().put("menuStringRenderer", menuStringRenderer); + String macroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".formrenderer"); + if (UtilValidate.isNotEmpty(macroLibraryPath)) { + FormStringRenderer formStringRenderer = new MacroFormRenderer(macroLibraryPath, request, response); + screens.getContext().put("formStringRenderer", formStringRenderer); + } + macroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".treerenderer"); + if (UtilValidate.isNotEmpty(macroLibraryPath)) { + TreeStringRenderer treeStringRenderer = new MacroTreeRenderer(macroLibraryPath, writer); + screens.getContext().put("treeStringRenderer", treeStringRenderer); + } + macroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".menurenderer"); + if (UtilValidate.isNotEmpty(macroLibraryPath)) { + MenuStringRenderer menuStringRenderer = new MacroMenuRenderer(macroLibraryPath, request, response); + screens.getContext().put("menuStringRenderer", menuStringRenderer); + } screens.getContext().put("simpleEncoder", StringUtil.getEncoder(UtilProperties.getPropertyValue("widget", getName() + ".encoder"))); screenStringRenderer.renderScreenBegin(writer, screens.getContext()); screens.render(page); Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=1522002&r1=1522001&r2=1522002&view=diff ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java (original) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Wed Sep 11 19:31:14 2013 @@ -19,16 +19,14 @@ package org.ofbiz.widget.screen; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.ArrayList; -import java.util.Map; import java.util.ListIterator; +import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.ParserConfigurationException; import javolution.util.FastList; @@ -47,16 +45,15 @@ import org.ofbiz.base.util.string.Flexib import org.ofbiz.entity.Delegator; import org.ofbiz.entity.GenericEntityException; import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.condition.EntityCondition; import org.ofbiz.widget.ModelWidget; import org.ofbiz.widget.ModelWidgetAction; +import org.ofbiz.widget.PortalPageWorker; import org.ofbiz.widget.WidgetFactory; import org.ofbiz.widget.WidgetWorker; -import org.ofbiz.widget.PortalPageWorker; import org.ofbiz.widget.form.FormFactory; import org.ofbiz.widget.form.FormStringRenderer; import org.ofbiz.widget.form.ModelForm; -import org.ofbiz.widget.html.HtmlFormRenderer; -import org.ofbiz.widget.html.HtmlMenuRenderer; import org.ofbiz.widget.menu.MenuFactory; import org.ofbiz.widget.menu.MenuStringRenderer; import org.ofbiz.widget.menu.ModelMenu; @@ -65,7 +62,6 @@ import org.ofbiz.widget.tree.TreeFactory import org.ofbiz.widget.tree.TreeStringRenderer; import org.w3c.dom.Element; import org.xml.sax.SAXException; -import org.ofbiz.entity.condition.*; /** @@ -811,6 +807,12 @@ public abstract class ModelScreenWidget @Override public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) { + // Output format might not support forms, so make form rendering optional. + FormStringRenderer formStringRenderer = (FormStringRenderer) context.get("formStringRenderer"); + if (formStringRenderer == null) { + Debug.logVerbose("FormStringRenderer instance not found in rendering context, form not rendered.", module); + return; + } boolean protectScope = !shareScope(context); if (protectScope) { if (!(context instanceof MapStack<?>)) { @@ -818,22 +820,6 @@ public abstract class ModelScreenWidget } UtilGenerics.<MapStack<String>>cast(context).push(); } - - // try finding the formStringRenderer by name in the context in case one was prepared and put there - FormStringRenderer formStringRenderer = (FormStringRenderer) context.get("formStringRenderer"); - // if there was no formStringRenderer put in place, now try finding the request/response in the context and creating a new one - if (formStringRenderer == null) { - HttpServletRequest request = (HttpServletRequest) context.get("request"); - HttpServletResponse response = (HttpServletResponse) context.get("response"); - if (request != null && response != null) { - formStringRenderer = new HtmlFormRenderer(request, response); - } - } - // still null, throw an error - if (formStringRenderer == null) { - throw new IllegalArgumentException("Could not find a formStringRenderer in the context, and could not find HTTP request/response objects need to create one."); - } - ModelForm modelForm = getModelForm(context); //Debug.logInfo("before renderFormString, context:" + context, module); try { @@ -899,6 +885,12 @@ public abstract class ModelScreenWidget @Override public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException { + // Output format might not support trees, so make tree rendering optional. + TreeStringRenderer treeStringRenderer = (TreeStringRenderer) context.get("treeStringRenderer"); + if (treeStringRenderer == null) { + Debug.logVerbose("TreeStringRenderer instance not found in rendering context, tree not rendered.", module); + return; + } boolean protectScope = !shareScope(context); if (protectScope) { if (!(context instanceof MapStack<?>)) { @@ -925,12 +917,6 @@ public abstract class ModelScreenWidget Debug.logError(e, errMsg, module); throw new RuntimeException(errMsg); } - - TreeStringRenderer treeStringRenderer = (TreeStringRenderer) context.get("treeStringRenderer"); - if (treeStringRenderer == null) { - throw new IllegalArgumentException("Could not find a treeStringRenderer in the context"); - } - StringBuffer renderBuffer = new StringBuffer(); modelTree.renderTreeString(renderBuffer, context, treeStringRenderer); try { @@ -1322,21 +1308,12 @@ public abstract class ModelScreenWidget @Override public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) throws IOException { - // try finding the menuStringRenderer by name in the context in case one was prepared and put there + // Output format might not support menus, so make menu rendering optional. MenuStringRenderer menuStringRenderer = (MenuStringRenderer) context.get("menuStringRenderer"); - // if there was no menuStringRenderer put in place, now try finding the request/response in the context and creating a new one - if (menuStringRenderer == null) { - HttpServletRequest request = (HttpServletRequest) context.get("request"); - HttpServletResponse response = (HttpServletResponse) context.get("response"); - if (request != null && response != null) { - menuStringRenderer = new HtmlMenuRenderer(request, response); - } - } - // still null, throw an error if (menuStringRenderer == null) { - throw new IllegalArgumentException("Could not find a menuStringRenderer in the context, and could not find HTTP request/response objects need to create one."); + Debug.logVerbose("MenuStringRenderer instance not found in rendering context, menu not rendered.", module); + return; } - ModelMenu modelMenu = getModelMenu(context); modelMenu.renderMenuString(writer, context, menuStringRenderer); }