Author: byersa
Date: Thu Mar 8 12:32:39 2007 New Revision: 516168 URL: http://svn.apache.org/viewvc?view=rev&rev=516168 Log: Added RenderContentTransform which does both content and subcontent rendering. Linked to it in FreeMarkerWorker, but did not remove other transform defs. This has not been tested - will be doing that now - just making available to other hackathoners. Added: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentTransform.java Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java Added: ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentTransform.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentTransform.java?view=auto&rev=516168 ============================================================================== --- ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentTransform.java (added) +++ ofbiz/trunk/applications/content/src/org/ofbiz/content/webapp/ftl/RenderContentTransform.java Thu Mar 8 12:32:39 2007 @@ -0,0 +1,158 @@ +/******************************************************************************* + * 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.ofbiz.content.webapp.ftl; + +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.GeneralException; +import org.ofbiz.base.util.UtilFormatOut; +import org.ofbiz.base.util.UtilHttp; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.collections.MapStack; +import org.ofbiz.base.util.template.FreeMarkerWorker; +import org.ofbiz.content.content.ContentWorker; +import org.ofbiz.entity.GenericDelegator; +import org.ofbiz.service.LocalDispatcher; +import org.ofbiz.widget.WidgetWorker; + +import freemarker.core.Environment; +import freemarker.template.TemplateTransformModel; + +/** + * RenderContentAsText - Freemarker Transform for Content rendering + * This transform cannot be called recursively (at this time). + */ +public class RenderContentTransform implements TemplateTransformModel { + + public static final String module = RenderContentTransform.class.getName(); + + public Writer getWriter(final Writer out, Map args) { + final Environment env = Environment.getCurrentEnvironment(); + final GenericDelegator delegator = (GenericDelegator) FreeMarkerWorker.getWrappedObject("delegator", env); + final LocalDispatcher dispatcher = (LocalDispatcher) FreeMarkerWorker.getWrappedObject("dispatcher", env); + final HttpServletRequest request = (HttpServletRequest) FreeMarkerWorker.getWrappedObject("request", env); + final HttpServletResponse response = (HttpServletResponse) FreeMarkerWorker.getWrappedObject("response", env); + + final Map templateRoot = MapStack.create(FreeMarkerWorker.createEnvironmentMap(env)); + ((MapStack)templateRoot).push(args); + final String xmlEscape = (String)templateRoot.get("xmlEscape"); + final String thisContentId = (String)templateRoot.get("contentId"); + + return new Writer(out) { + + public void write(char cbuf[], int off, int len) { + } + + public void flush() throws IOException { + out.flush(); + } + + public void close() throws IOException { + renderSubContent(); + } + + public void renderSubContent() throws IOException { + String mimeTypeId = (String) templateRoot.get("mimeTypeId"); + Object localeObject = templateRoot.get("locale"); + Locale locale = null; + if (localeObject == null) { + locale = UtilHttp.getLocale(request); + } else { + locale = UtilMisc.ensureLocale(localeObject); + } + + String editRequestName = (String)templateRoot.get("editRequestName"); + + if (UtilValidate.isNotEmpty(editRequestName)) { + String editStyle = getEditStyle(); + openEditWrap(out, editStyle); + } + + try { + String txt = null; + + String mapKey = (String)templateRoot.get("mapKey"); + if( UtilValidate.isEmpty(mapKey)) { + txt = ContentWorker.renderContentAsText(dispatcher, delegator, thisContentId, templateRoot, locale, mimeTypeId, true); + } else { + txt = ContentWorker.renderSubContentAsText(dispatcher, delegator, thisContentId, mapKey, templateRoot, locale, mimeTypeId, true); + } + if ("true".equals(xmlEscape)) { + txt = UtilFormatOut.encodeXmlValue(txt); + } + + out.write(txt); + + } catch (GeneralException e) { + String errMsg = "Error rendering thisContentId:" + thisContentId + " msg:" + e.toString(); + Debug.logError(e, errMsg, module); + // just log a message and don't return anything: throw new IOException(); + } + if (UtilValidate.isNotEmpty(editRequestName)) { + closeEditWrap(out, editRequestName); + } + + } + + public void openEditWrap(Writer out, String editStyle) throws IOException { + String divStr = "<div class=\"" + editStyle + "\">"; + out.write(divStr); + } + + public void closeEditWrap(Writer out, String editRequestName) throws IOException { + StringBuffer sb = new StringBuffer(); + String fullRequest = editRequestName; + String delim = "?"; + if (UtilValidate.isNotEmpty(thisContentId)) { + fullRequest += delim + "contentId=" + thisContentId; + delim = "&"; + } + + WidgetWorker.appendOfbizUrl(sb, fullRequest, request, response); + String url = sb.toString(); + String link = "<a href=\"" + url + "\">Edit</a>"; + out.write(link); + String divStr = "</div>"; + out.write(divStr); + } + + public String getEditStyle() { + String editStyle = (String)templateRoot.get("editStyle"); + if (UtilValidate.isEmpty(editStyle)) { + editStyle = UtilProperties.getPropertyValue("content", "defaultEditStyle"); + } + if (UtilValidate.isEmpty(editStyle)) { + editStyle = "buttontext"; + } + return editStyle; + } + }; + } +} Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java?view=diff&rev=516168&r1=516167&r2=516168 ============================================================================== --- ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java (original) +++ ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java Thu Mar 8 12:32:39 2007 @@ -115,6 +115,7 @@ ftlTransforms.put("limitedSubContent", loader.loadClass("org.ofbiz.content.webapp.ftl.LimitedSubContentCacheTransform").newInstance()); ftlTransforms.put("renderSubContentAsText", loader.loadClass("org.ofbiz.content.webapp.ftl.RenderSubContentAsText").newInstance()); ftlTransforms.put("renderContentAsText", loader.loadClass("org.ofbiz.content.webapp.ftl.RenderContentAsText").newInstance()); + ftlTransforms.put("renderContent", loader.loadClass("org.ofbiz.content.webapp.ftl.RenderContentTransform").newInstance()); } catch (ClassNotFoundException e) { Debug.logError("Could not pre-initialize dynamically loaded class: " + e.toString(), module); } catch (IllegalAccessException e) { |
Free forum by Nabble | Edit this page |