Author: adrianc Date: Thu Oct 30 07:27:05 2014 New Revision: 1635411 URL: http://svn.apache.org/r1635411 Log: MacroScreenViewHandler.java improvement: get macro library locations from Visual Theme resources. Themes can create their own HTML now.
resourceTypeEnumId=VT_SCRN_MACRO_LIB - screen macro library location resourceTypeEnumId=VT_FORM_MACRO_LIB - form macro library location resourceTypeEnumId=VT_TREE_MACRO_LIB - tree macro library location resourceTypeEnumId=VT_MENU_MACRO_LIB - menu macro library location Modified: ofbiz/branches/boostrap_theme/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java Modified: ofbiz/branches/boostrap_theme/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java URL: http://svn.apache.org/viewvc/ofbiz/branches/boostrap_theme/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java?rev=1635411&r1=1635410&r2=1635411&view=diff ============================================================================== --- ofbiz/branches/boostrap_theme/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java (original) +++ ofbiz/branches/boostrap_theme/framework/widget/src/org/ofbiz/widget/screen/MacroScreenViewHandler.java Thu Oct 30 07:27:05 2014 @@ -20,6 +20,7 @@ package org.ofbiz.widget.screen; import java.io.IOException; import java.io.Writer; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -29,8 +30,11 @@ import javax.xml.parsers.ParserConfigura import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.StringUtil; -import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.base.util.*; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.collections.MapStack; +import org.ofbiz.service.LocalDispatcher; +import org.ofbiz.service.*; import org.ofbiz.webapp.view.AbstractViewHandler; import org.ofbiz.webapp.view.ViewHandlerException; import org.ofbiz.widget.form.FormStringRenderer; @@ -54,7 +58,55 @@ public class MacroScreenViewHandler exte this.servletContext = context; } - public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, HttpServletResponse response) throws ViewHandlerException { + private ScreenStringRenderer loadRenderers(HttpServletRequest request, HttpServletResponse response, + Map<String, Object> context, Writer writer) throws GeneralException, TemplateException, IOException { + String screenMacroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".screenrenderer"); + String formMacroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".formrenderer"); + String treeMacroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".treerenderer"); + String menuMacroLibraryPath = UtilProperties.getPropertyValue("widget", getName() + ".menurenderer"); + Map<String, Object> userPreferences = UtilGenerics.cast(context.get("userPreferences")); + if (userPreferences != null) { + String visualThemeId = (String) userPreferences.get("VISUAL_THEME"); + if (visualThemeId != null) { + LocalDispatcher dispatcher = (LocalDispatcher) context.get("dispatcher"); + Map<String, Object> serviceCtx = dispatcher.getDispatchContext().makeValidContext("getVisualThemeResources", + ModelService.IN_PARAM, context); + serviceCtx.put("visualThemeId", visualThemeId); + Map<String, Object> serviceResult = dispatcher.runSync("getVisualThemeResources", serviceCtx); + if (ServiceUtil.isSuccess(serviceResult)) { + Map<String, Object> themeResources = UtilGenerics.cast(serviceResult.get("themeResources")); + String macroLibraryPath = (String) themeResources.get("VT_SCRN_MACRO_LIB"); + if (macroLibraryPath != null) { + screenMacroLibraryPath = macroLibraryPath; + } + macroLibraryPath = (String) themeResources.get("VT_FORM_MACRO_LIB"); + if (macroLibraryPath != null) { + formMacroLibraryPath = macroLibraryPath; + } + macroLibraryPath = (String) themeResources.get("VT_TREE_MACRO_LIB"); + if (macroLibraryPath != null) { + treeMacroLibraryPath = macroLibraryPath; + } + macroLibraryPath = (String) themeResources.get("VT_MENU_MACRO_LIB"); + if (macroLibraryPath != null) { + menuMacroLibraryPath = macroLibraryPath; + } + } + } + } + ScreenStringRenderer screenStringRenderer = new MacroScreenRenderer(UtilProperties.getPropertyValue("widget", getName() + + ".name"), screenMacroLibraryPath); + FormStringRenderer formStringRenderer = new MacroFormRenderer(formMacroLibraryPath, request, response); + context.put("formStringRenderer", formStringRenderer); + TreeStringRenderer treeStringRenderer = new MacroTreeRenderer(treeMacroLibraryPath, writer); + context.put("treeStringRenderer", treeStringRenderer); + MenuStringRenderer menuStringRenderer = new MacroMenuRenderer(menuMacroLibraryPath, request, response); + context.put("menuStringRenderer", menuStringRenderer); + return screenStringRenderer; + } + + public void render(String name, String page, String info, String contentType, String encoding, HttpServletRequest request, + HttpServletResponse response) throws ViewHandlerException { try { Writer writer = response.getWriter(); @@ -74,28 +126,15 @@ 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")); - ScreenRenderer screens = new ScreenRenderer(writer, null, screenStringRenderer); - screens.populateContextForRequest(request, response, servletContext); - 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()); + MapStack<String> context = MapStack.create(); + ScreenRenderer.populateContextForRequest(context, null, request, response, servletContext); + ScreenStringRenderer screenStringRenderer = loadRenderers(request, response, context, writer); + ScreenRenderer screens = new ScreenRenderer(writer, context, screenStringRenderer); + context.put("screens", screens); + context.put("simpleEncoder", StringUtil.getEncoder(UtilProperties.getPropertyValue("widget", getName() + ".encoder"))); + screenStringRenderer.renderScreenBegin(writer, context); screens.render(page); - screenStringRenderer.renderScreenEnd(writer, screens.getContext()); + screenStringRenderer.renderScreenEnd(writer, context); writer.flush(); } catch (TemplateException e) { Debug.logError(e, "Error initializing screen renderer", module);