| /******************************************************************************* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| *******************************************************************************/ |
| package org.apache.ofbiz.widget.renderer.macro; |
| |
| import java.io.IOException; |
| import java.io.Reader; |
| import java.io.StringReader; |
| import java.io.StringWriter; |
| import java.math.BigDecimal; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.Locale; |
| import java.util.Map; |
| import java.util.WeakHashMap; |
| |
| import javax.servlet.ServletContext; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.xml.parsers.ParserConfigurationException; |
| |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.GeneralException; |
| import org.apache.ofbiz.base.util.UtilFormatOut; |
| import org.apache.ofbiz.base.util.UtilGenerics; |
| import org.apache.ofbiz.base.util.UtilHttp; |
| import org.apache.ofbiz.base.util.UtilMisc; |
| import org.apache.ofbiz.base.util.UtilProperties; |
| import org.apache.ofbiz.base.util.UtilValidate; |
| import org.apache.ofbiz.base.util.template.FreeMarkerWorker; |
| import org.apache.ofbiz.entity.Delegator; |
| import org.apache.ofbiz.entity.GenericValue; |
| import org.apache.ofbiz.entity.util.EntityUtilProperties; |
| import org.apache.ofbiz.service.LocalDispatcher; |
| import org.apache.ofbiz.webapp.control.RequestHandler; |
| import org.apache.ofbiz.webapp.taglib.ContentUrlTag; |
| import org.apache.ofbiz.widget.WidgetWorker; |
| import org.apache.ofbiz.widget.content.WidgetContentWorker; |
| import org.apache.ofbiz.widget.content.WidgetDataResourceWorker; |
| import org.apache.ofbiz.widget.model.ModelForm; |
| import org.apache.ofbiz.widget.model.ModelScreen; |
| import org.apache.ofbiz.widget.model.ModelScreenWidget; |
| import org.apache.ofbiz.widget.model.ModelScreenWidget.Column; |
| import org.apache.ofbiz.widget.model.ModelScreenWidget.ColumnContainer; |
| import org.apache.ofbiz.widget.model.ModelWidget; |
| import org.apache.ofbiz.widget.model.ScreenFactory; |
| import org.apache.ofbiz.widget.renderer.FormStringRenderer; |
| import org.apache.ofbiz.widget.renderer.MenuStringRenderer; |
| import org.apache.ofbiz.widget.renderer.Paginator; |
| import org.apache.ofbiz.widget.renderer.ScreenStringRenderer; |
| import org.xml.sax.SAXException; |
| |
| import freemarker.core.Environment; |
| import freemarker.template.Template; |
| import freemarker.template.TemplateException; |
| |
| public class MacroScreenRenderer implements ScreenStringRenderer { |
| |
| public static final String module = MacroScreenRenderer.class.getName(); |
| private Template macroLibrary; |
| private WeakHashMap<Appendable, Environment> environments = new WeakHashMap<Appendable, Environment>(); |
| private String rendererName; |
| private int elementId = 999; |
| protected boolean widgetCommentsEnabled = false; |
| private static final String formrenderer = UtilProperties.getPropertyValue("widget", "screen.formrenderer"); |
| private int screenLetsIdCounter = 1; |
| |
| public MacroScreenRenderer(String name, String macroLibraryPath) throws TemplateException, IOException { |
| macroLibrary = FreeMarkerWorker.getTemplate(macroLibraryPath); |
| rendererName = name; |
| } |
| |
| @Deprecated |
| public MacroScreenRenderer(String name, String macroLibraryPath, Appendable writer) throws TemplateException, IOException { |
| this(name, macroLibraryPath); |
| } |
| |
| private String getNextElementId() { |
| elementId++; |
| return "hsr" + elementId; |
| } |
| |
| private void executeMacro(Appendable writer, String macro) throws IOException { |
| try { |
| Environment environment = getEnvironment(writer); |
| Reader templateReader = new StringReader(macro); |
| // FIXME: I am using a Date as an hack to provide a unique name for the template... |
| Template template = new Template((new java.util.Date()).toString(), templateReader, FreeMarkerWorker.getDefaultOfbizConfig()); |
| templateReader.close(); |
| environment.include(template); |
| } catch (TemplateException e) { |
| Debug.logError(e, "Error rendering screen macro [" + macro + "] thru ftl", module); |
| } catch (IOException e) { |
| Debug.logError(e, "Error rendering screen macro [" + macro + "] thru ftl", module); |
| } |
| } |
| |
| private void executeMacro(Appendable writer, String macroName, Map<String, Object> parameters) throws IOException { |
| StringBuilder sb = new StringBuilder("<@"); |
| sb.append(macroName); |
| if (parameters != null) { |
| for (Map.Entry<String, Object> parameter : parameters.entrySet()) { |
| sb.append(' '); |
| sb.append(parameter.getKey()); |
| sb.append("="); |
| Object value = parameter.getValue(); |
| if (value instanceof String) { |
| sb.append('"'); |
| sb.append(((String) value).replaceAll("\"", "\\\\\"")); |
| sb.append('"'); |
| } else { |
| sb.append(value); |
| } |
| } |
| } |
| sb.append(" />"); |
| executeMacro(writer, sb.toString()); |
| } |
| |
| private Environment getEnvironment(Appendable writer) throws TemplateException, IOException { |
| Environment environment = environments.get(writer); |
| if (environment == null) { |
| Map<String, Object> input = UtilMisc.toMap("key", null); |
| environment = FreeMarkerWorker.renderTemplate(macroLibrary, input, writer); |
| environments.put(writer, environment); |
| } |
| return environment; |
| } |
| |
| public String getRendererName() { |
| return rendererName; |
| } |
| |
| public void renderScreenBegin(Appendable writer, Map<String, Object> context) throws IOException { |
| executeMacro(writer, "renderScreenBegin", null); |
| } |
| |
| public void renderScreenEnd(Appendable writer, Map<String, Object> context) throws IOException { |
| executeMacro(writer, "renderScreenEnd", null); |
| } |
| |
| public void renderSectionBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Section section) throws IOException { |
| if (section.isMainSection()) { |
| this.widgetCommentsEnabled = ModelWidget.widgetBoundaryCommentsEnabled(context); |
| } |
| if (this.widgetCommentsEnabled) { |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| StringBuilder sb = new StringBuilder("Begin "); |
| sb.append(section.isMainSection() ? "Screen " : "Section Widget "); |
| sb.append(section.getBoundaryCommentName()); |
| parameters.put("boundaryComment", sb.toString()); |
| executeMacro(writer, "renderSectionBegin", parameters); |
| } |
| } |
| public void renderSectionEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Section section) throws IOException { |
| if (this.widgetCommentsEnabled) { |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| StringBuilder sb = new StringBuilder(); |
| sb.append("End "); |
| sb.append(section.isMainSection() ? "Screen " : "Section Widget "); |
| sb.append(section.getBoundaryCommentName()); |
| parameters.put("boundaryComment", sb.toString()); |
| executeMacro(writer, "renderSectionEnd", parameters); |
| } |
| } |
| |
| public void renderContainerBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Container container) throws IOException { |
| String containerId = container.getId(context); |
| String autoUpdateTarget = container.getAutoUpdateTargetExdr(context); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| String autoUpdateLink = ""; |
| if (UtilValidate.isNotEmpty(autoUpdateTarget) && UtilHttp.isJavaScriptEnabled(request)) { |
| if (UtilValidate.isEmpty(containerId)) { |
| containerId = getNextElementId(); |
| } |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| autoUpdateLink = rh.makeLink(request, response, autoUpdateTarget); |
| } |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("id", containerId); |
| parameters.put("style", container.getStyle(context)); |
| parameters.put("autoUpdateLink", autoUpdateLink); |
| parameters.put("autoUpdateInterval", container.getAutoUpdateInterval(context)); |
| executeMacro(writer, "renderContainerBegin", parameters); |
| } |
| |
| public void renderContainerEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Container container) throws IOException { |
| executeMacro(writer, "renderContainerEnd", null); |
| } |
| |
| public void renderLabel(Appendable writer, Map<String, Object> context, ModelScreenWidget.Label label) throws IOException { |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("text", label.getText(context)); |
| parameters.put("id", label.getId(context)); |
| parameters.put("style", label.getStyle(context)); |
| executeMacro(writer, "renderLabel", parameters); |
| } |
| |
| public void renderHorizontalSeparator(Appendable writer, Map<String, Object> context, ModelScreenWidget.HorizontalSeparator separator) throws IOException { |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("id", separator.getId(context)); |
| parameters.put("style", separator.getStyle(context)); |
| executeMacro(writer, "renderHorizontalSeparator", parameters); |
| } |
| |
| public void renderLink(Appendable writer, Map<String, Object> context, ModelScreenWidget.ScreenLink link) throws IOException { |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| |
| String targetWindow = link.getTargetWindow(context); |
| String target = link.getTarget(context); |
| |
| String uniqueItemName = link.getModelScreen().getName() + "_LF_" + UtilMisc.<String>addToBigDecimalInMap(context, "screenUniqueItemIndex", BigDecimal.ONE); |
| |
| String linkType = WidgetWorker.determineAutoLinkType(link.getLinkType(), target, link.getUrlMode(), request); |
| String linkUrl = ""; |
| String actionUrl = ""; |
| StringBuilder parameters = new StringBuilder(); |
| String width = link.getWidth(); |
| if (UtilValidate.isEmpty(width)) { |
| width = String.valueOf(UtilProperties.getPropertyValue("widget", "widget.link.default.layered-modal.width", "800")); |
| } |
| String height = link.getHeight(); |
| if (UtilValidate.isEmpty(height)) { |
| height = String.valueOf(UtilProperties.getPropertyValue("widget", "widget.link.default.layered-modal.height", "600")); |
| } |
| if ("hidden-form".equals(linkType) || "layered-modal".equals(linkType)) { |
| StringBuilder sb = new StringBuilder(); |
| WidgetWorker.buildHyperlinkUrl(sb, target, link.getUrlMode(), null, link.getPrefix(context), |
| link.getFullPath(), link.getSecure(), link.getEncode(), request, response, context); |
| actionUrl = sb.toString(); |
| parameters.append("["); |
| for (Map.Entry<String, String> parameter: link.getParameterMap(context).entrySet()) { |
| if (parameters.length() >1) { |
| parameters.append(","); |
| } |
| parameters.append("{'name':'"); |
| parameters.append(parameter.getKey()); |
| parameters.append("'"); |
| parameters.append(",'value':'"); |
| parameters.append(parameter.getValue()); |
| parameters.append("'}"); |
| } |
| parameters.append("]"); |
| } |
| String id = link.getId(context); |
| String style = link.getStyle(context); |
| String name = link.getName(context); |
| String text = link.getText(context); |
| if (UtilValidate.isNotEmpty(target)) { |
| if (!"hidden-form".equals(linkType)) { |
| StringBuilder sb = new StringBuilder(); |
| WidgetWorker.buildHyperlinkUrl(sb, target, link.getUrlMode(), link.getParameterMap(context), link.getPrefix(context), |
| link.getFullPath(), link.getSecure(), link.getEncode(), request, response, context); |
| linkUrl = sb.toString(); |
| } |
| } |
| String imgStr = ""; |
| ModelScreenWidget.ScreenImage img = link.getImage(); |
| if (img != null) { |
| StringWriter sw = new StringWriter(); |
| renderImage(sw, context, img); |
| imgStr = sw.toString(); |
| } |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderLink "); |
| sr.append("parameterList="); |
| sr.append(parameters.length()==0?"\"\"":parameters.toString()); |
| sr.append(" targetWindow=\""); |
| sr.append(targetWindow); |
| sr.append("\" target=\""); |
| sr.append(target); |
| sr.append("\" uniqueItemName=\""); |
| sr.append(uniqueItemName); |
| sr.append("\" linkType=\""); |
| sr.append(linkType); |
| sr.append("\" actionUrl=\""); |
| sr.append(actionUrl); |
| sr.append("\" id=\""); |
| sr.append(id); |
| sr.append("\" style=\""); |
| sr.append(style); |
| sr.append("\" name=\""); |
| sr.append(name); |
| sr.append("\" width=\""); |
| sr.append(width); |
| sr.append("\" height=\""); |
| sr.append(height); |
| sr.append("\" linkUrl=\""); |
| sr.append(linkUrl); |
| sr.append("\" text=\""); |
| sr.append(text); |
| sr.append("\" imgStr=\""); |
| sr.append(imgStr.replaceAll("\"", "\\\\\"")); |
| sr.append("\" />"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderImage(Appendable writer, Map<String, Object> context, ModelScreenWidget.ScreenImage image) throws IOException { |
| if (image == null) |
| return ; |
| String src = image.getSrc(context); |
| |
| String urlMode = image.getUrlMode(); |
| boolean fullPath = false; |
| boolean secure = false; |
| boolean encode = false; |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| String urlString = ""; |
| if (urlMode != null && urlMode.equalsIgnoreCase("intra-app")) { |
| if (request != null && response != null) { |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| urlString = rh.makeLink(request, response, src, fullPath, secure, encode); |
| } else { |
| urlString = src; |
| } |
| } else if (urlMode != null && urlMode.equalsIgnoreCase("content")) { |
| if (request != null && response != null) { |
| StringBuilder newURL = new StringBuilder(); |
| ContentUrlTag.appendContentPrefix(request, newURL); |
| newURL.append(src); |
| urlString = newURL.toString(); |
| } |
| } else { |
| urlString = src; |
| } |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("src", src); |
| parameters.put("id", image.getId(context)); |
| parameters.put("style", image.getStyle(context)); |
| parameters.put("wid", image.getWidth(context)); |
| parameters.put("hgt", image.getHeight(context)); |
| parameters.put("border", image.getBorder(context)); |
| parameters.put("alt", image.getAlt(context)); |
| parameters.put("urlString", urlString); |
| executeMacro(writer, "renderImage", parameters); |
| } |
| |
| public void renderContentBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Content content) throws IOException { |
| String editRequest = content.getEditRequest(context); |
| String enableEditName = content.getEnableEditName(context); |
| String enableEditValue = (String)context.get(enableEditName); |
| |
| if (Debug.verboseOn()) Debug.logVerbose("directEditRequest:" + editRequest, module); |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("editRequest", editRequest); |
| parameters.put("enableEditValue", enableEditValue == null ? "" : enableEditValue); |
| parameters.put("editContainerStyle", content.getEditContainerStyle(context)); |
| executeMacro(writer, "renderContentBegin", parameters); |
| } |
| |
| public void renderContentBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.Content content) throws IOException { |
| Locale locale = UtilMisc.ensureLocale(context.get("locale")); |
| //Boolean nullThruDatesOnly = Boolean.valueOf(false); |
| String mimeTypeId = "text/html"; |
| String expandedContentId = content.getContentId(context); |
| String expandedDataResourceId = content.getDataResourceId(context); |
| String renderedContent = null; |
| LocalDispatcher dispatcher = (LocalDispatcher) context.get("dispatcher"); |
| Delegator delegator = (Delegator) context.get("delegator"); |
| |
| // make a new map for content rendering; so our current map does not get clobbered |
| Map<String, Object> contentContext = new HashMap<String, Object>(); |
| contentContext.putAll(context); |
| String dataResourceId = (String)contentContext.get("dataResourceId"); |
| if (Debug.verboseOn()) Debug.logVerbose("expandedContentId:" + expandedContentId, module); |
| |
| try { |
| if (UtilValidate.isNotEmpty(dataResourceId)) { |
| if (WidgetDataResourceWorker.getDataresourceWorker() != null) { |
| renderedContent = WidgetDataResourceWorker.getDataresourceWorker().renderDataResourceAsTextExt(delegator, dataResourceId, contentContext, locale, mimeTypeId, false); |
| } else { |
| Debug.logError("Not rendering content, WidgetDataResourceWorker.dataresourceWorker not found.", module); |
| } |
| } else if (UtilValidate.isNotEmpty(expandedContentId)) { |
| if (WidgetContentWorker.getContentWorker() != null) { |
| renderedContent = WidgetContentWorker.getContentWorker().renderContentAsTextExt(dispatcher, delegator, expandedContentId, contentContext, locale, mimeTypeId, true); |
| } else { |
| Debug.logError("Not rendering content, WidgetContentWorker.contentWorker not found.", module); |
| } |
| } else if (UtilValidate.isNotEmpty(expandedDataResourceId)) { |
| if (WidgetDataResourceWorker.getDataresourceWorker() != null) { |
| renderedContent = WidgetDataResourceWorker.getDataresourceWorker().renderDataResourceAsTextExt(delegator, expandedDataResourceId, contentContext, locale, mimeTypeId, false); |
| } else { |
| Debug.logError("Not rendering content, WidgetDataResourceWorker.dataresourceWorker not found.", module); |
| } |
| } |
| if (UtilValidate.isEmpty(renderedContent)) { |
| String editRequest = content.getEditRequest(context); |
| if (UtilValidate.isNotEmpty(editRequest)) { |
| if (WidgetContentWorker.getContentWorker() != null) { |
| WidgetContentWorker.getContentWorker().renderContentAsTextExt(dispatcher, delegator, "NOCONTENTFOUND", writer, contentContext, locale, mimeTypeId, true); |
| } else { |
| Debug.logError("Not rendering content, WidgetContentWorker.contentWorker not found.", module); |
| } |
| } |
| } else { |
| if (content.xmlEscape()) { |
| renderedContent = UtilFormatOut.encodeXmlValue(renderedContent); |
| } |
| |
| writer.append(renderedContent); |
| } |
| |
| } catch (GeneralException e) { |
| String errMsg = "Error rendering included content with id [" + expandedContentId + "] : " + e.toString(); |
| Debug.logError(e, errMsg, module); |
| //throw new RuntimeException(errMsg); |
| } catch (IOException e2) { |
| String errMsg = "Error rendering included content with id [" + expandedContentId + "] : " + e2.toString(); |
| Debug.logError(e2, errMsg, module); |
| //throw new RuntimeException(errMsg); |
| } |
| } |
| |
| public void renderContentEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Content content) throws IOException { |
| String expandedContentId = content.getContentId(context); |
| String editMode = "Edit"; |
| String editRequest = content.getEditRequest(context); |
| String enableEditName = content.getEnableEditName(context); |
| String enableEditValue = (String)context.get(enableEditName); |
| String urlString = ""; |
| if (editRequest != null && editRequest.toUpperCase().indexOf("IMAGE") > 0) { |
| editMode += " Image"; |
| } |
| |
| if (UtilValidate.isNotEmpty(editRequest) && "true".equals(enableEditValue)) { |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| if (request != null && response != null) { |
| if (editRequest.indexOf("?") < 0) editRequest += "?"; |
| else editRequest += "&"; |
| editRequest += "contentId=" + expandedContentId; |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| urlString = rh.makeLink(request, response, editRequest, false, false, false); |
| } |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("urlString", urlString); |
| parameters.put("editMode", editMode); |
| parameters.put("editContainerStyle", content.getEditContainerStyle(context)); |
| parameters.put("editRequest", editRequest); |
| parameters.put("enableEditValue", enableEditValue); |
| executeMacro(writer, "renderContentEnd", parameters); |
| } |
| } |
| |
| public void renderContentFrame(Appendable writer, Map<String, Object> context, ModelScreenWidget.Content content) throws IOException { |
| String dataResourceId = content.getDataResourceId(context); |
| String urlString = "/ViewSimpleContent?dataResourceId=" + dataResourceId; |
| String fullUrlString = ""; |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| if (request != null && response != null) { |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| fullUrlString = rh.makeLink(request, response, urlString, true, false, false); |
| } |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("fullUrl", fullUrlString); |
| parameters.put("width", content.getWidth()); |
| parameters.put("height", content.getHeight()); |
| parameters.put("border", content.getBorder()); |
| executeMacro(writer, "renderContentFrame", parameters); |
| } |
| |
| public void renderSubContentBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.SubContent content) throws IOException { |
| String enableEditName = content.getEnableEditName(context); |
| String enableEditValue = (String)context.get(enableEditName); |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("editContainerStyle", content.getEditContainerStyle(context)); |
| parameters.put("editRequest", content.getEditRequest(context)); |
| parameters.put("enableEditValue", enableEditValue == null ? "" : enableEditValue); |
| executeMacro(writer, "renderSubContentBegin", parameters); |
| } |
| |
| public void renderSubContentBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.SubContent content) throws IOException { |
| Locale locale = UtilMisc.ensureLocale(context.get("locale")); |
| String mimeTypeId = "text/html"; |
| String expandedContentId = content.getContentId(context); |
| String expandedMapKey = content.getMapKey(context); |
| String renderedContent = ""; |
| LocalDispatcher dispatcher = (LocalDispatcher) context.get("dispatcher"); |
| Delegator delegator = (Delegator) context.get("delegator"); |
| |
| // create a new map for the content rendering; so our current context does not get overwritten! |
| Map<String, Object> contentContext = new HashMap<String, Object>(); |
| contentContext.putAll(context); |
| |
| try { |
| if (WidgetContentWorker.getContentWorker() != null) { |
| renderedContent = WidgetContentWorker.getContentWorker().renderSubContentAsTextExt(dispatcher, delegator, expandedContentId, expandedMapKey, contentContext, locale, mimeTypeId, true); |
| //Debug.logInfo("renderedContent=" + renderedContent, module); |
| } else { |
| Debug.logError("Not rendering content, WidgetContentWorker.contentWorker not found.", module); |
| } |
| if (UtilValidate.isEmpty(renderedContent)) { |
| String editRequest = content.getEditRequest(context); |
| if (UtilValidate.isNotEmpty(editRequest)) { |
| if (WidgetContentWorker.getContentWorker() != null) { |
| WidgetContentWorker.getContentWorker().renderContentAsTextExt(dispatcher, delegator, "NOCONTENTFOUND", writer, contentContext, locale, mimeTypeId, true); |
| } else { |
| Debug.logError("Not rendering content, WidgetContentWorker.contentWorker not found.", module); |
| } |
| } |
| } else { |
| if (content.xmlEscape()) { |
| renderedContent = UtilFormatOut.encodeXmlValue(renderedContent); |
| } |
| |
| writer.append(renderedContent); |
| } |
| |
| } catch (GeneralException e) { |
| String errMsg = "Error rendering included content with id [" + expandedContentId + "] : " + e.toString(); |
| Debug.logError(e, errMsg, module); |
| //throw new RuntimeException(errMsg); |
| } catch (IOException e2) { |
| String errMsg = "Error rendering included content with id [" + expandedContentId + "] : " + e2.toString(); |
| Debug.logError(e2, errMsg, module); |
| //throw new RuntimeException(errMsg); |
| } |
| } |
| |
| public void renderSubContentEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.SubContent content) throws IOException { |
| String editMode = "Edit"; |
| String editRequest = content.getEditRequest(context); |
| String enableEditName = content.getEnableEditName(context); |
| String enableEditValue = (String)context.get(enableEditName); |
| String expandedContentId = content.getContentId(context); |
| String expandedMapKey = content.getMapKey(context); |
| String urlString = ""; |
| if (editRequest != null && editRequest.toUpperCase().indexOf("IMAGE") > 0) { |
| editMode += " Image"; |
| } |
| if (UtilValidate.isNotEmpty(editRequest) && "true".equals(enableEditValue)) { |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| if (request != null && response != null) { |
| if (editRequest.indexOf("?") < 0) editRequest += "?"; |
| else editRequest += "&"; |
| editRequest += "contentId=" + expandedContentId; |
| if (UtilValidate.isNotEmpty(expandedMapKey)) { |
| editRequest += "&mapKey=" + expandedMapKey; |
| } |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| urlString = rh.makeLink(request, response, editRequest, false, false, false); |
| } |
| } |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("urlString", urlString); |
| parameters.put("editMode", editMode); |
| parameters.put("editContainerStyle", content.getEditContainerStyle(context)); |
| parameters.put("editRequest", editRequest); |
| parameters.put("enableEditValue", enableEditValue == null ? "" : enableEditValue); |
| executeMacro(writer, "renderSubContentEnd", parameters); |
| } |
| |
| |
| public void renderScreenletBegin(Appendable writer, Map<String, Object> context, boolean collapsed, ModelScreenWidget.Screenlet screenlet) throws IOException { |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| boolean javaScriptEnabled = UtilHttp.isJavaScriptEnabled(request); |
| ModelScreenWidget.Menu tabMenu = screenlet.getTabMenu(); |
| if (tabMenu != null) { |
| tabMenu.renderWidgetString(writer, context, this); |
| } |
| |
| String title = screenlet.getTitle(context); |
| boolean collapsible = screenlet.collapsible(); |
| ModelScreenWidget.Menu navMenu = screenlet.getNavigationMenu(); |
| ModelScreenWidget.Form navForm = screenlet.getNavigationForm(); |
| String expandToolTip = ""; |
| String collapseToolTip = ""; |
| String fullUrlString = ""; |
| String menuString = ""; |
| boolean showMore = false; |
| if (UtilValidate.isNotEmpty(title) || navMenu != null || navForm != null || collapsible) { |
| showMore = true; |
| if (collapsible) { |
| this.getNextElementId(); |
| Map<String, Object> uiLabelMap = UtilGenerics.checkMap(context.get("uiLabelMap")); |
| Map<String, Object> paramMap = UtilGenerics.checkMap(context.get("requestParameters")); |
| Map<String, Object> requestParameters = new HashMap<String, Object>(paramMap); |
| if (uiLabelMap != null) { |
| expandToolTip = (String) uiLabelMap.get("CommonExpand"); |
| collapseToolTip = (String) uiLabelMap.get("CommonCollapse"); |
| } |
| if (!javaScriptEnabled) { |
| requestParameters.put(screenlet.getPreferenceKey(context) + "_collapsed", collapsed ? "false" : "true"); |
| String queryString = UtilHttp.urlEncodeArgs(requestParameters); |
| fullUrlString = request.getRequestURI() + "?" + queryString; |
| } |
| } |
| StringWriter sb = new StringWriter(); |
| if (navMenu != null) { |
| MenuStringRenderer savedRenderer = (MenuStringRenderer) context.get("menuStringRenderer"); |
| MenuStringRenderer renderer; |
| try { |
| renderer = new MacroMenuRenderer(EntityUtilProperties.getPropertyValue("widget", "screen.menurenderer", (Delegator) request.getAttribute("delegator")), |
| request, response); |
| context.put("menuStringRenderer", renderer); |
| navMenu.renderWidgetString(sb, context, this); |
| context.put("menuStringRenderer", savedRenderer); |
| } catch (TemplateException e) { |
| Debug.logError(e, module); |
| } |
| } else if (navForm != null) { |
| renderScreenletPaginateMenu(sb, context, navForm); |
| } |
| menuString = sb.toString(); |
| } |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("title", title); |
| parameters.put("collapsible", collapsible); |
| parameters.put("saveCollapsed", screenlet.saveCollapsed()); |
| if (UtilValidate.isNotEmpty (screenlet.getId(context))) { |
| parameters.put("id", screenlet.getId(context)); |
| parameters.put("collapsibleAreaId", screenlet.getId(context) + "_col"); |
| } else { |
| parameters.put("id", "screenlet_" + screenLetsIdCounter); |
| parameters.put("collapsibleAreaId","screenlet_" + screenLetsIdCounter + "_col"); |
| screenLetsIdCounter++; |
| } |
| parameters.put("expandToolTip", expandToolTip); |
| parameters.put("collapseToolTip", collapseToolTip); |
| parameters.put("fullUrlString", fullUrlString); |
| parameters.put("padded", screenlet.padded()); |
| parameters.put("menuString", menuString); |
| parameters.put("showMore", showMore); |
| parameters.put("collapsed", collapsed); |
| parameters.put("javaScriptEnabled", javaScriptEnabled); |
| executeMacro(writer, "renderScreenletBegin", parameters); |
| } |
| |
| public void renderScreenletSubWidget(Appendable writer, Map<String, Object> context, ModelScreenWidget subWidget, ModelScreenWidget.Screenlet screenlet) throws GeneralException, IOException { |
| if (subWidget.equals(screenlet.getNavigationForm())) { |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| if (request != null && response != null) { |
| Map<String, Object> globalCtx = UtilGenerics.checkMap(context.get("globalContext")); |
| globalCtx.put("NO_PAGINATOR", true); |
| FormStringRenderer savedRenderer = (FormStringRenderer) context.get("formStringRenderer"); |
| MacroFormRenderer renderer = null; |
| try { |
| renderer = new MacroFormRenderer(formrenderer, request, response); |
| } catch (TemplateException e) { |
| Debug.logError("Not rendering content, error on MacroFormRenderer creation.", module); |
| } |
| renderer.setRenderPagination(false); |
| context.put("formStringRenderer", renderer); |
| subWidget.renderWidgetString(writer, context, this); |
| context.put("formStringRenderer", savedRenderer); |
| } |
| } else { |
| subWidget.renderWidgetString(writer, context, this); |
| } |
| } |
| public void renderScreenletEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Screenlet screenlet) throws IOException { |
| executeMacro(writer, "renderScreenletEnd", null); |
| } |
| |
| protected void renderScreenletPaginateMenu(Appendable writer, Map<String, Object> context, ModelScreenWidget.Form form) throws IOException { |
| HttpServletResponse response = (HttpServletResponse) context.get("response"); |
| HttpServletRequest request = (HttpServletRequest) context.get("request"); |
| ModelForm modelForm; |
| try { |
| modelForm = form.getModelForm(context); |
| } catch (Exception e) { |
| throw new IOException(e); |
| } |
| modelForm.runFormActions(context); |
| Paginator.preparePager(modelForm, context); |
| String targetService = modelForm.getPaginateTarget(context); |
| if (targetService == null) { |
| targetService = "${targetService}"; |
| } |
| |
| // get the parametrized pagination index and size fields |
| int paginatorNumber = WidgetWorker.getPaginatorNumber(context); |
| String viewIndexParam = modelForm.getMultiPaginateIndexField(context); |
| String viewSizeParam = modelForm.getMultiPaginateSizeField(context); |
| |
| int viewIndex = Paginator.getViewIndex(modelForm, context); |
| int viewSize = Paginator.getViewSize(modelForm, context); |
| int listSize = Paginator.getListSize(context); |
| |
| int highIndex = Paginator.getHighIndex(context); |
| int actualPageSize = Paginator.getActualPageSize(context); |
| |
| // if this is all there seems to be (if listSize < 0, then size is unknown) |
| if (actualPageSize >= listSize && listSize >= 0) return; |
| |
| // needed for the "Page" and "rows" labels |
| Map<String, String> uiLabelMap = UtilGenerics.cast(context.get("uiLabelMap")); |
| String ofLabel = ""; |
| if (uiLabelMap == null) { |
| Debug.logWarning("Could not find uiLabelMap in context", module); |
| } else { |
| ofLabel = uiLabelMap.get("CommonOf"); |
| ofLabel = ofLabel.toLowerCase(); |
| } |
| |
| // for legacy support, the viewSizeParam is VIEW_SIZE and viewIndexParam is VIEW_INDEX when the fields are "viewSize" and "viewIndex" |
| if (viewIndexParam.equals("viewIndex" + "_" + paginatorNumber)) viewIndexParam = "VIEW_INDEX" + "_" + paginatorNumber; |
| if (viewSizeParam.equals("viewSize" + "_" + paginatorNumber)) viewSizeParam = "VIEW_SIZE" + "_" + paginatorNumber; |
| |
| ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); |
| RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); |
| |
| Map<String, Object> inputFields = UtilGenerics.toMap(context.get("requestParameters")); |
| // strip out any multi form fields if the form is of type multi |
| if (modelForm.getType().equals("multi")) { |
| inputFields = UtilHttp.removeMultiFormParameters(inputFields); |
| } |
| String queryString = UtilHttp.urlEncodeArgs(inputFields); |
| // strip legacy viewIndex/viewSize params from the query string |
| queryString = UtilHttp.stripViewParamsFromQueryString(queryString, "" + paginatorNumber); |
| // strip parametrized index/size params from the query string |
| HashSet<String> paramNames = new HashSet<String>(); |
| paramNames.add(viewIndexParam); |
| paramNames.add(viewSizeParam); |
| queryString = UtilHttp.stripNamedParamsFromQueryString(queryString, paramNames); |
| |
| String anchor = ""; |
| String paginateAnchor = modelForm.getPaginateTargetAnchor(); |
| if (paginateAnchor != null) anchor = "#" + paginateAnchor; |
| |
| // preparing the link text, so that later in the code we can reuse this and just add the viewIndex |
| String prepLinkText = ""; |
| prepLinkText = targetService; |
| if (prepLinkText.indexOf("?") < 0) { |
| prepLinkText += "?"; |
| } else if (!prepLinkText.endsWith("?")) { |
| prepLinkText += "&"; |
| } |
| if (UtilValidate.isNotEmpty(queryString) && !queryString.equals("null")) { |
| prepLinkText += queryString + "&"; |
| } |
| prepLinkText += viewSizeParam + "=" + viewSize + "&" + viewIndexParam + "="; |
| |
| String linkText; |
| |
| |
| // The current screenlet title bar navigation syling requires rendering |
| // these links in reverse order |
| // Last button |
| String lastLinkUrl = ""; |
| if (highIndex < listSize) { |
| int lastIndex = UtilMisc.getViewLastIndex(listSize, viewSize); |
| linkText = prepLinkText + lastIndex + anchor; |
| lastLinkUrl = rh.makeLink(request, response, linkText); |
| } |
| String nextLinkUrl = ""; |
| if (highIndex < listSize) { |
| linkText = prepLinkText + (viewIndex + 1) + anchor; |
| // - make the link |
| nextLinkUrl = rh.makeLink(request, response, linkText); |
| } |
| String previousLinkUrl = ""; |
| if (viewIndex > 0) { |
| linkText = prepLinkText + (viewIndex - 1) + anchor; |
| previousLinkUrl = rh.makeLink(request, response, linkText); |
| } |
| String firstLinkUrl = ""; |
| if (viewIndex > 0) { |
| linkText = prepLinkText + 0 + anchor; |
| firstLinkUrl = rh.makeLink(request, response, linkText); |
| } |
| |
| Map<String, Object> parameters = new HashMap<String, Object>(); |
| parameters.put("lowIndex", Paginator.getLowIndex(context)); |
| parameters.put("actualPageSize", actualPageSize); |
| parameters.put("ofLabel", ofLabel); |
| parameters.put("listSize", listSize); |
| parameters.put("paginateLastStyle", modelForm.getPaginateLastStyle()); |
| parameters.put("lastLinkUrl", lastLinkUrl); |
| parameters.put("paginateLastLabel", modelForm.getPaginateLastLabel(context)); |
| parameters.put("paginateNextStyle", modelForm.getPaginateNextStyle()); |
| parameters.put("nextLinkUrl", nextLinkUrl); |
| parameters.put("paginateNextLabel", modelForm.getPaginateNextLabel(context)); |
| parameters.put("paginatePreviousStyle", modelForm.getPaginatePreviousStyle()); |
| parameters.put("paginatePreviousLabel", modelForm.getPaginatePreviousLabel(context)); |
| parameters.put("previousLinkUrl", previousLinkUrl); |
| parameters.put("paginateFirstStyle", modelForm.getPaginateFirstStyle()); |
| parameters.put("paginateFirstLabel", modelForm.getPaginateFirstLabel(context)); |
| parameters.put("firstLinkUrl", firstLinkUrl); |
| executeMacro(writer, "renderScreenletPaginateMenu", parameters); |
| } |
| |
| public void renderPortalPageBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage) throws GeneralException, IOException { |
| String portalPageId = portalPage.getActualPortalPageId(context); |
| String originalPortalPageId = portalPage.getOriginalPortalPageId(context); |
| String confMode = portalPage.getConfMode(context); |
| |
| Map<String, String> uiLabelMap = UtilGenerics.cast(context.get("uiLabelMap")); |
| String addColumnLabel = ""; |
| String addColumnHint = ""; |
| if (uiLabelMap == null) { |
| Debug.logWarning("Could not find uiLabelMap in context", module); |
| } else { |
| addColumnLabel = uiLabelMap.get("CommonAddColumn"); |
| addColumnHint = uiLabelMap.get("CommonAddAColumnToThisPortalPage"); |
| } |
| |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPageBegin "); |
| sr.append("originalPortalPageId=\""); |
| sr.append(originalPortalPageId); |
| sr.append("\" portalPageId=\""); |
| sr.append(portalPageId); |
| sr.append("\" confMode=\""); |
| sr.append(confMode); |
| sr.append("\" addColumnLabel=\""); |
| sr.append(addColumnLabel); |
| sr.append("\" addColumnHint=\""); |
| sr.append(addColumnHint); |
| sr.append("\" />"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPageEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage) throws GeneralException, IOException { |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPageEnd/>"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPageColumnBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPageColumn) throws GeneralException, IOException { |
| String portalPageId = portalPage.getActualPortalPageId(context); |
| String originalPortalPageId = portalPage.getOriginalPortalPageId(context); |
| String columnSeqId = portalPageColumn.getString("columnSeqId"); |
| String columnWidthPercentage = portalPageColumn.getString("columnWidthPercentage"); |
| String columnWidthPixels = portalPageColumn.getString("columnWidthPixels"); |
| String confMode = portalPage.getConfMode(context); |
| |
| Map<String, String> uiLabelMap = UtilGenerics.cast(context.get("uiLabelMap")); |
| String delColumnLabel = ""; |
| String delColumnHint = ""; |
| String addPortletLabel = ""; |
| String addPortletHint = ""; |
| String colWidthLabel = ""; |
| String setColumnSizeHint = ""; |
| |
| if (uiLabelMap == null) { |
| Debug.logWarning("Could not find uiLabelMap in context", module); |
| } else { |
| delColumnLabel = uiLabelMap.get("CommonDeleteColumn"); |
| delColumnHint = uiLabelMap.get("CommonDeleteThisColumn"); |
| |
| addPortletLabel = uiLabelMap.get("CommonAddAPortlet"); |
| addPortletHint = uiLabelMap.get("CommonAddPortletToPage"); |
| colWidthLabel = uiLabelMap.get("CommonWidth"); |
| setColumnSizeHint = uiLabelMap.get("CommonSetColumnWidth"); |
| } |
| |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPageColumnBegin "); |
| sr.append("originalPortalPageId=\""); |
| sr.append(originalPortalPageId); |
| sr.append("\" portalPageId=\""); |
| sr.append(portalPageId); |
| sr.append("\" columnSeqId=\""); |
| sr.append(columnSeqId); |
| sr.append("\" "); |
| if (UtilValidate.isNotEmpty(columnWidthPixels)) { |
| sr.append("width=\""); |
| sr.append(columnWidthPixels); |
| sr.append("px\""); |
| } else if (UtilValidate.isNotEmpty(columnWidthPercentage)) { |
| sr.append("width=\""); |
| sr.append(columnWidthPercentage); |
| sr.append("%\""); |
| } |
| sr.append(" confMode=\""); |
| sr.append(confMode); |
| sr.append("\" delColumnLabel=\""); |
| sr.append(delColumnLabel); |
| sr.append("\" delColumnHint=\""); |
| sr.append(delColumnHint); |
| sr.append("\" addPortletLabel=\""); |
| sr.append(addPortletLabel); |
| sr.append("\" addPortletHint=\""); |
| sr.append(addPortletHint); |
| sr.append("\" colWidthLabel=\""); |
| sr.append(colWidthLabel); |
| sr.append("\" setColumnSizeHint=\""); |
| sr.append(setColumnSizeHint); |
| sr.append("\" />"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPageColumnEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPageColumn) throws GeneralException, IOException { |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPageColumnEnd/>"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPagePortletBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException { |
| String portalPageId = portalPage.getActualPortalPageId(context); |
| String originalPortalPageId = portalPage.getOriginalPortalPageId(context); |
| String portalPortletId = portalPortlet.getString("portalPortletId"); |
| String portletSeqId = portalPortlet.getString("portletSeqId"); |
| String columnSeqId = portalPortlet.getString("columnSeqId"); |
| String confMode = portalPage.getConfMode(context); |
| String editFormName = portalPortlet.getString("editFormName"); |
| String editFormLocation = portalPortlet.getString("editFormLocation"); |
| |
| String prevPortletId = (String) context.get("prevPortletId"); |
| String prevPortletSeqId = (String) context.get("prevPortletSeqId"); |
| String nextPortletId = (String) context.get("nextPortletId"); |
| String nextPortletSeqId = (String) context.get("nextPortletSeqId"); |
| String prevColumnSeqId = (String) context.get("prevColumnSeqId"); |
| String nextColumnSeqId = (String) context.get("nextColumnSeqId"); |
| |
| Map<String, String> uiLabelMap = UtilGenerics.cast(context.get("uiLabelMap")); |
| String delPortletHint = ""; |
| String editAttributeHint = ""; |
| if (uiLabelMap == null) { |
| Debug.logWarning("Could not find uiLabelMap in context", module); |
| } else { |
| delPortletHint = uiLabelMap.get("CommonDeleteThisPortlet"); |
| editAttributeHint = uiLabelMap.get("CommonEditPortletAttributes"); |
| } |
| |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPagePortletBegin "); |
| sr.append("originalPortalPageId=\""); |
| sr.append(originalPortalPageId); |
| sr.append("\" portalPageId=\""); |
| sr.append(portalPageId); |
| sr.append("\" portalPortletId=\""); |
| sr.append(portalPortletId); |
| sr.append("\" portletSeqId=\""); |
| sr.append(portletSeqId); |
| sr.append("\" prevPortletId=\""); |
| sr.append(prevPortletId); |
| sr.append("\" prevPortletSeqId=\""); |
| sr.append(prevPortletSeqId); |
| sr.append("\" nextPortletId=\""); |
| sr.append(nextPortletId); |
| sr.append("\" nextPortletSeqId=\""); |
| sr.append(nextPortletSeqId); |
| sr.append("\" columnSeqId=\""); |
| sr.append(columnSeqId); |
| sr.append("\" prevColumnSeqId=\""); |
| sr.append(prevColumnSeqId); |
| sr.append("\" nextColumnSeqId=\""); |
| sr.append(nextColumnSeqId); |
| sr.append("\" delPortletHint=\""); |
| sr.append(delPortletHint); |
| sr.append("\" editAttributeHint=\""); |
| sr.append(editAttributeHint); |
| sr.append("\" confMode=\""); |
| sr.append(confMode); |
| sr.append("\""); |
| if (UtilValidate.isNotEmpty(editFormName) && UtilValidate.isNotEmpty(editFormLocation)) { |
| sr.append(" editAttribute=\"true\""); |
| } |
| sr.append("/>"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPagePortletEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException { |
| String confMode = portalPage.getConfMode(context); |
| |
| StringWriter sr = new StringWriter(); |
| sr.append("<@renderPortalPagePortletEnd "); |
| sr.append(" confMode=\""); |
| sr.append(confMode); |
| sr.append("\" />"); |
| executeMacro(writer, sr.toString()); |
| } |
| |
| public void renderPortalPagePortletBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException { |
| String portalPortletId = portalPortlet.getString("portalPortletId"); |
| String screenName = portalPortlet.getString("screenName"); |
| String screenLocation = portalPortlet.getString("screenLocation"); |
| |
| ModelScreen modelScreen = null; |
| if (UtilValidate.isNotEmpty(screenName) && UtilValidate.isNotEmpty(screenLocation)) { |
| try { |
| modelScreen = ScreenFactory.getScreenFromLocation(screenLocation, screenName); |
| } catch (IOException e) { |
| String errMsg = "Error rendering portlet ID [" + portalPortletId + "]: " + e.toString(); |
| Debug.logError(e, errMsg, module); |
| throw new RuntimeException(errMsg); |
| } catch (SAXException e) { |
| String errMsg = "Error rendering portlet ID [" + portalPortletId + "]: " + e.toString(); |
| Debug.logError(e, errMsg, module); |
| throw new RuntimeException(errMsg); |
| } catch (ParserConfigurationException e) { |
| String errMsg = "Error rendering portlet ID [" + portalPortletId + "]: " + e.toString(); |
| Debug.logError(e, errMsg, module); |
| throw new RuntimeException(errMsg); |
| } |
| } |
| modelScreen.renderScreenString(writer, context, this); |
| } |
| |
| @Override |
| public void renderColumnContainer(Appendable writer, Map<String, Object> context, ColumnContainer columnContainer) throws IOException { |
| String id = columnContainer.getId(context); |
| String style = columnContainer.getStyle(context); |
| StringBuilder sb = new StringBuilder("<@renderColumnContainerBegin"); |
| sb.append(" id=\""); |
| sb.append(id); |
| sb.append("\" style=\""); |
| sb.append(style); |
| sb.append("\" />"); |
| executeMacro(writer, sb.toString()); |
| for (Column column : columnContainer.getColumns()) { |
| id = column.getId(context); |
| style = column.getStyle(context); |
| sb = new StringBuilder("<@renderColumnBegin"); |
| sb.append(" id=\""); |
| sb.append(id); |
| sb.append("\" style=\""); |
| sb.append(style); |
| sb.append("\" />"); |
| executeMacro(writer, sb.toString()); |
| for (ModelScreenWidget subWidget : column.getSubWidgets()) { |
| try { |
| subWidget.renderWidgetString(writer, context, this); |
| } catch (GeneralException e) { |
| throw new IOException(e); |
| } |
| } |
| executeMacro(writer, "<@renderColumnEnd />"); |
| } |
| executeMacro(writer, "<@renderColumnContainerEnd />"); |
| } |
| |
| // This is a util method to get the style from a property file |
| public static String getFoStyle(String styleName) { |
| String value = UtilProperties.getPropertyValue("fo-styles", styleName); |
| if (value.equals(styleName)) { |
| return ""; |
| } |
| return value; |
| } |
| } |