Administrator
|
Thanks Jacopo for all this good work and especially detailed report.
I only think about one thing which is not new but I never noticed before. in build.gradle we load freemarker 2.3.24 with compile 'org.freemarker:freemarker:2.3.24-incubating' And in the FreeMarkerWorkerclass we have this line public static final Version version = Configuration.VERSION_2_3_24; So I suggest to add this comment compile 'org.freemarker:freemarker:2.3.24-incubating' // Remember to change the version number in FreeMarkerWorker class when upgrading Jacques Le 25/09/2016 à 19:20, [hidden email] a écrit : > Author: jacopoc > Date: Sun Sep 25 17:20:58 2016 > New Revision: 1762227 > > URL: http://svn.apache.org/viewvc?rev=1762227&view=rev > Log: > Improved: cleanups and enhancements in the FreeMarkerWorker class, and client > code using it, that wraps most of the OFBiz integration with FreeMarker. > > This is the list of the main modifications: > * simplified and cleaned up the public methods of FreeMarkerWorker, used to > retrieve and render Freemarker templates and changed client code accordingly to > use them > * removed unused methods in FreeMarkerWorker and made some others private > * improved the integration code in FreeMarkerWorker to better use the Freemarker > API and specifically to leverage the various TemplateLoaders and the Freemarker > caching mechanism; it is now possible to switch the OFBiz legacy template > caching mechanism to use the Freemarker one instead > * improved the implementation of Freemarker template rendering from strings > (used by DataResourceWorker): it now leverages the Freemarker's > StringTemplateLoader that provides the ability to cache the strings, retrieved > from DataResources records, based on the timestamp of the last modification > * moved freemarkerImports.properties from "widget" to "base" component, and > changed its content (and the content of the associated templates > AutoImportTemplate.ftl and HtmlTemplate.ftl) to remove the dependency from base > to widget&common; some resources of "widget" and "common" are still referenced > from AutoImportTemplate.ftl (that is in "base") but even if they are soft > dependencies: if they are missing the system will load properly without any > error or warning; before this change it was impossible to use, or unit test, > FreeMarkerWorker before the "widget" and "common" components were loaded by the > system, now it is possible > * created a new class for unit tests for FreeMarkerWorker, named > FreeMarkerWorkerTests: at the moment it contains just one simple unit test but > more should be implemented > * refactored WebToolsServices.entityImport(...) to leverage the > FreeMarkerWorker.renderTemplate(...) method to run the Freemarker template, > rather than dealing with the Freemarker API directly; this is now possible > thanks to the cleanups and improvements done in the FreeMarkerWorker class; this > same approach should be implemented for a few other similar integration points > (mostly in the "content" component); this is a TODO item > * moved the encodeDoubleQuotes(...) method from FreeMarkerWorker to > MacroFormRenderer and made it private since this is the only calss using it and > its logic is not related to FreeMarker > > > Added: > ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl (with props) > ofbiz/trunk/framework/base/config/freemarkerImports.properties > - copied, changed from r1762109, ofbiz/trunk/framework/widget/config/freemarkerImports.properties > ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/ > ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java (with props) > Removed: > ofbiz/trunk/framework/widget/config/freemarkerImports.properties > Modified: > ofbiz/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java > ofbiz/trunk/applications/product/src/main/java/org/apache/ofbiz/shipment/thirdparty/fedex/FedexServices.java > ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/template/FreeMarkerWorker.java > ofbiz/trunk/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFileMappingCreator.java > ofbiz/trunk/framework/common/template/includes/HtmlTemplate.ftl > ofbiz/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/DelegatorUnitTests.java > ofbiz/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/FreeMarkerViewHandler.java > ofbiz/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsServices.java > ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java > ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java > > Modified: ofbiz/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java (original) > +++ ofbiz/trunk/applications/content/src/main/java/org/apache/ofbiz/content/data/DataResourceWorker.java Sun Sep 25 17:20:58 2016 > @@ -29,6 +29,7 @@ import java.io.Writer; > import java.net.URL; > import java.net.URLConnection; > import java.nio.ByteBuffer; > +import java.sql.Timestamp; > import java.util.Comparator; > import java.util.HashMap; > import java.util.LinkedList; > @@ -578,7 +579,7 @@ public class DataResourceWorker impleme > if (dataResource != null) { > String dataTemplateTypeId = dataResource.getString("dataTemplateTypeId"); > if ("FTL".equals(dataTemplateTypeId)) { > - FreeMarkerWorker.clearTemplateFromCache(delegator.getDelegatorName() + ":DataResource:" + dataResourceId); > + FreeMarkerWorker.clearTemplateFromCache("delegator:" + delegator.getDelegatorName() + ":DataResource:" + dataResourceId); > } > } > } > @@ -656,7 +657,8 @@ public class DataResourceWorker impleme > > // render the FTL template > boolean useTemplateCache = cache && !UtilProperties.getPropertyAsBoolean("content", "disable.ftl.template.cache", false); > - FreeMarkerWorker.renderTemplate(delegator.getDelegatorName() + ":DataResource:" + dataResourceId, templateText, templateContext, out, useTemplateCache); > + Timestamp lastUpdatedStamp = dataResource.getTimestamp("lastUpdatedStamp"); > + FreeMarkerWorker.renderTemplateFromString("delegator:" + delegator.getDelegatorName() + ":DataResource:" + dataResourceId, templateText, templateContext, out, lastUpdatedStamp.getTime(), useTemplateCache); > } catch (TemplateException e) { > throw new GeneralException("Error rendering FTL template", e); > } > @@ -899,7 +901,7 @@ public class DataResourceWorker impleme > String location = mimeTypeTemplate.getString("templateLocation"); > StringWriter writer = new StringWriter(); > try { > - FreeMarkerWorker.renderTemplateAtLocation(location, context, writer); > + FreeMarkerWorker.renderTemplate(location, context, writer); > } catch (TemplateException e) { > throw new GeneralException(e.getMessage(), e); > } > > Modified: ofbiz/trunk/applications/product/src/main/java/org/apache/ofbiz/shipment/thirdparty/fedex/FedexServices.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/main/java/org/apache/ofbiz/shipment/thirdparty/fedex/FedexServices.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/applications/product/src/main/java/org/apache/ofbiz/shipment/thirdparty/fedex/FedexServices.java (original) > +++ ofbiz/trunk/applications/product/src/main/java/org/apache/ofbiz/shipment/thirdparty/fedex/FedexServices.java Sun Sep 25 17:20:58 2016 > @@ -334,7 +334,7 @@ public class FedexServices { > > StringWriter outWriter = new StringWriter(); > try { > - FreeMarkerWorker.renderTemplateAtLocation(templateLocation, subscriptionRequestContext, outWriter); > + FreeMarkerWorker.renderTemplate(templateLocation, subscriptionRequestContext, outWriter); > } catch (Exception e) { > String errorMessage = "Cannot send Fedex subscription request: Failed to render Fedex XML Subscription Request Template [" + templateLocation + "]."; > Debug.logError(e, errorMessage, module); > @@ -925,7 +925,7 @@ public class FedexServices { > > StringWriter outWriter = new StringWriter(); > try { > - FreeMarkerWorker.renderTemplateAtLocation(templateLocation, shipRequestContext, outWriter); > + FreeMarkerWorker.renderTemplate(templateLocation, shipRequestContext, outWriter); > } catch (Exception e) { > String errorMessage = "Cannot confirm Fedex shipment: Failed to render Fedex XML Ship Request Template [" + templateLocation + "]."; > Debug.logError(e, errorMessage, module); > > Added: ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl?rev=1762227&view=auto > ============================================================================== > --- ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl (added) > +++ ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl Sun Sep 25 17:20:58 2016 > @@ -0,0 +1,21 @@ > +<#-- > +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. > +--> > + > +<#include "component://widget/templates/HtmlFormMacroLibrary.ftl" ignore_missing=true /> > +<#include "component://common/template/includes/HtmlTemplate.ftl" ignore_missing=true /> > > Propchange: ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl > ------------------------------------------------------------------------------ > svn:keywords = Date Rev Author URL Id > > Propchange: ofbiz/trunk/framework/base/config/AutoImportTemplate.ftl > ------------------------------------------------------------------------------ > svn:mime-type = text/plain > > Copied: ofbiz/trunk/framework/base/config/freemarkerImports.properties (from r1762109, ofbiz/trunk/framework/widget/config/freemarkerImports.properties) > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/config/freemarkerImports.properties?p2=ofbiz/trunk/framework/base/config/freemarkerImports.properties&p1=ofbiz/trunk/framework/widget/config/freemarkerImports.properties&r1=1762109&r2=1762227&rev=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/widget/config/freemarkerImports.properties (original) > +++ ofbiz/trunk/framework/base/config/freemarkerImports.properties Sun Sep 25 17:20:58 2016 > @@ -17,4 +17,4 @@ > # under the License. > ############################################################################### > > -htmlTemplate=component://common/template/includes/HtmlTemplate.ftl > +htmlTemplate=ofbizhome://framework/base/config/AutoImportTemplate.ftl > > Modified: ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/template/FreeMarkerWorker.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/template/FreeMarkerWorker.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/template/FreeMarkerWorker.java (original) > +++ ofbiz/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/template/FreeMarkerWorker.java Sun Sep 25 17:20:58 2016 > @@ -20,10 +20,7 @@ package org.apache.ofbiz.base.util.templ > > import java.io.File; > import java.io.IOException; > -import java.io.Reader; > -import java.io.StringReader; > import java.io.Writer; > -import java.net.MalformedURLException; > import java.net.URL; > import java.util.ArrayList; > import java.util.Enumeration; > @@ -39,6 +36,9 @@ import java.util.TimeZone; > import javax.servlet.ServletContext; > import javax.servlet.http.HttpServletRequest; > > +import freemarker.cache.MultiTemplateLoader; > +import freemarker.cache.StringTemplateLoader; > +import freemarker.cache.TemplateLoader; > import org.apache.ofbiz.base.location.FlexibleLocation; > import org.apache.ofbiz.base.util.Debug; > import org.apache.ofbiz.base.util.StringUtil; > @@ -101,8 +101,13 @@ public final class FreeMarkerWorker { > } > newConfig.setLocalizedLookup(false); > newConfig.setSharedVariable("StringUtil", new BeanModel(StringUtil.INSTANCE, wrapper)); > - newConfig.setTemplateLoader(new FlexibleTemplateLoader()); > - newConfig.setAutoImports(UtilProperties.getProperties("freemarkerImports")); > + TemplateLoader[] templateLoaders = {new FlexibleTemplateLoader(), new StringTemplateLoader()}; > + MultiTemplateLoader multiTemplateLoader = new MultiTemplateLoader(templateLoaders); > + newConfig.setTemplateLoader(multiTemplateLoader); > + Map freemarkerImports = UtilProperties.getProperties("freemarkerImports"); > + if (freemarkerImports != null) { > + newConfig.setAutoImports(freemarkerImports); > + } > newConfig.setLogTemplateExceptions(false); > newConfig.setTemplateExceptionHandler(new FreeMarkerWorker.OFBizTemplateExceptionHandler()); > try { > @@ -115,7 +120,7 @@ public final class FreeMarkerWorker { > ClassLoader loader = Thread.currentThread().getContextClassLoader(); > Enumeration<URL> resources; > try { > - resources = loader.getResources("freemarkerTransforms.properties"); > + resources = loader.getResources("freemarkerTransforms.properties"); > } catch (IOException e) { > Debug.logError(e, "Could not load list of freemarkerTransforms.properties", module); > throw UtilMisc.initCause(new InternalError(e.getMessage()), e); > @@ -134,10 +139,7 @@ public final class FreeMarkerWorker { > return newConfig; > } > > - /** > - * Public helper method. > - */ > - public static void loadTransforms(ClassLoader loader, Properties props, Configuration config) { > + private static void loadTransforms(ClassLoader loader, Properties props, Configuration config) { > for (Iterator<Object> i = props.keySet().iterator(); i.hasNext();) { > String key = (String) i.next(); > String className = props.getProperty(key); > @@ -153,43 +155,6 @@ public final class FreeMarkerWorker { > } > > /** > - * Renders a template at the specified location. > - * @param templateLocation Location of the template - file path or URL > - * @param context The context Map > - * @param outWriter The Writer to render to > - */ > - public static void renderTemplateAtLocation(String templateLocation, Map<String, Object> context, Appendable outWriter) throws MalformedURLException, TemplateException, IOException { > - renderTemplate(templateLocation, context, outWriter); > - } > - > - /** > - * Renders a template contained in a String. > - * @param templateLocation A unique ID for this template - used for caching > - * @param templateString The String containing the template > - * @param context The context Map > - * @param outWriter The Writer to render to > - */ > - public static void renderTemplate(String templateLocation, String templateString, Map<String, Object> context, Appendable outWriter) throws TemplateException, IOException { > - renderTemplate(templateLocation, templateString, context, outWriter, true); > - } > - > - /** > - * Renders a template contained in a String. > - * @param templateLocation A unique ID for this template - used for caching > - * @param templateString The String containing the template > - * @param context The context Map > - * @param outWriter The Writer to render to > - * @param useCache try to get template from cache > - */ > - public static void renderTemplate(String templateLocation, String templateString, Map<String, Object> context, Appendable outWriter, boolean useCache) throws TemplateException, IOException { > - if (templateString == null) { > - renderTemplate(templateLocation, context, outWriter); > - } else { > - renderTemplateFromString(templateString, templateLocation, context, outWriter, useCache); > - } > - } > - > - /** > * Renders a template from a Reader. > * @param templateLocation A unique ID for this template - used for caching > * @param context The context Map > @@ -200,26 +165,30 @@ public final class FreeMarkerWorker { > renderTemplate(template, context, outWriter); > } > > - public static Environment renderTemplateFromString(String templateString, String templateLocation, Map<String, Object> context, Appendable outWriter, boolean useCache) throws TemplateException, IOException { > + public static void renderTemplateFromString(String templateName, String templateString, Map<String, Object> context, Appendable outWriter, long lastModificationTime, boolean useCache) throws TemplateException, IOException { > Template template = null; > if (useCache) { > - template = cachedTemplates.get(templateLocation); > - if (template == null) { > - Reader templateReader = new StringReader(templateString); > - template = new Template(templateLocation, templateReader, defaultOfbizConfig); > - templateReader.close(); > - template = cachedTemplates.putIfAbsentAndGet(templateLocation, template); > - } > - } else { > - Reader templateReader = new StringReader(templateString); > - template = new Template(templateLocation, templateReader, defaultOfbizConfig); > - templateReader.close(); > + template = cachedTemplates.get(templateName); > } > - return renderTemplate(template, context, outWriter); > + if (template == null) { > + StringTemplateLoader stringTemplateLoader = (StringTemplateLoader)((MultiTemplateLoader)defaultOfbizConfig.getTemplateLoader()).getTemplateLoader(1); > + Object templateSource = stringTemplateLoader.findTemplateSource(templateName); > + if (templateSource == null || stringTemplateLoader.getLastModified(templateSource) < lastModificationTime) { > + stringTemplateLoader.putTemplate(templateName, templateString, lastModificationTime); > + } > + } > + > + template = getTemplate(templateName); > + renderTemplate(template, context, outWriter); > } > > public static void clearTemplateFromCache(String templateLocation) { > cachedTemplates.remove(templateLocation); > + try { > + defaultOfbizConfig.removeTemplateFromCache(templateLocation); > + } catch(Exception e) { > + Debug.logInfo("Template not found in Fremarker cache with name: " + templateLocation, module); > + } > } > > /** > @@ -249,7 +218,7 @@ public final class FreeMarkerWorker { > * @param env An Environment instance > * @param context The context Map containing the user settings > */ > - public static void applyUserSettings(Environment env, Map<String, Object> context) throws TemplateException { > + private static void applyUserSettings(Environment env, Map<String, Object> context) throws TemplateException { > Locale locale = (Locale) context.get("locale"); > if (locale == null) { > locale = Locale.getDefault(); > @@ -509,6 +478,7 @@ public final class FreeMarkerWorker { > static class FlexibleTemplateLoader extends URLTemplateLoader { > @Override > protected URL getURL(String name) { > + if (name != null && name.startsWith("delegator:")) return null; // this is a template stored in the database > URL locationUrl = null; > try { > locationUrl = FlexibleLocation.resolveLocation(name); > @@ -520,8 +490,7 @@ public final class FreeMarkerWorker { > } > > /** > - * OFBiz specific TemplateExceptionHandler. Sanitizes any error messages present in > - * the stack trace prior to printing to the output writer. > + * OFBiz specific TemplateExceptionHandler. > */ > static class OFBizTemplateExceptionHandler implements TemplateExceptionHandler { > public void handleTemplateException(TemplateException te, Environment env, Writer out) throws TemplateException { > @@ -533,8 +502,4 @@ public final class FreeMarkerWorker { > } > } > } > - > - public static String encodeDoubleQuotes(String htmlString) { > - return htmlString.replaceAll("\"", "\\\\\""); > - } > } > > Added: ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java?rev=1762227&view=auto > ============================================================================== > --- ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java (added) > +++ ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java Sun Sep 25 17:20:58 2016 > @@ -0,0 +1,43 @@ > +/******************************************************************************* > + * 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.base.util.template; > + > +import java.io.StringWriter; > +import java.util.HashMap; > +import java.util.Map; > + > +import org.junit.Before; > +import org.junit.Test; > +import static org.junit.Assert.*; > + > +public class FreeMarkerWorkerTests { > + @Before > + public void initialize() { > + System.setProperty("ofbiz.home", System.getProperty("user.dir")); > + } > + > + @Test > + public void renderTemplateFromString() throws Exception { > + StringWriter out = new StringWriter(); > + Map<String, Object> context = new HashMap<>(); > + context.put("name", "World!"); > + FreeMarkerWorker.renderTemplateFromString("template1", "Hello ${name}", context, out, 0, false); > + assertEquals("Hello World!", out.toString()); > + } > +} > > Propchange: ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java > ------------------------------------------------------------------------------ > svn:keywords = Date Rev Author URL Id > > Propchange: ofbiz/trunk/framework/base/src/test/java/org/apache/ofbiz/base/util/template/FreeMarkerWorkerTests.java > ------------------------------------------------------------------------------ > svn:mime-type = text/plain > > Modified: ofbiz/trunk/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFileMappingCreator.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFileMappingCreator.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFileMappingCreator.java (original) > +++ ofbiz/trunk/framework/common/src/main/java/org/apache/ofbiz/common/JsLanguageFileMappingCreator.java Sun Sep 25 17:20:58 2016 > @@ -190,7 +190,7 @@ public class JsLanguageFileMappingCreato > // some magic to create a new java file: render it as FTL > Writer writer = new StringWriter(); > try { > - FreeMarkerWorker.renderTemplateAtLocation(template, mapWrapper, writer); > + FreeMarkerWorker.renderTemplate(template, mapWrapper, writer); > // write it as a Java file > File file = new File(output); > FileUtils.writeStringToFile(file, writer.toString(), encoding); > > Modified: ofbiz/trunk/framework/common/template/includes/HtmlTemplate.ftl > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/template/includes/HtmlTemplate.ftl?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/common/template/includes/HtmlTemplate.ftl (original) > +++ ofbiz/trunk/framework/common/template/includes/HtmlTemplate.ftl Sun Sep 25 17:20:58 2016 > @@ -17,8 +17,6 @@ specific language governing permissions > under the License. > --> > > -<#include "component://widget/templates/HtmlFormMacroLibrary.ftl"/> > - > <#macro lookupField className="" alert="" name="" value="" size="20" maxlength="20" id="" event="" action="" readonly="" autocomplete="" descriptionFieldName="" formName="" fieldFormName="" targetParameterIter="" imgSrc="" ajaxUrl="" ajaxEnabled="" presentation="layer" width="" height="" position="topleft" fadeBackground="true" clearText="" showDescription="" initiallyCollapsed="" tabindex=""> > <#if (!ajaxEnabled?has_content)> > <#assign javascriptEnabled = Static["org.apache.ofbiz.base.util.UtilHttp"].isJavaScriptEnabled(request) /> > > Modified: ofbiz/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/DelegatorUnitTests.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/DelegatorUnitTests.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/DelegatorUnitTests.java (original) > +++ ofbiz/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/DelegatorUnitTests.java Sun Sep 25 17:20:58 2016 > @@ -32,7 +32,7 @@ public class DelegatorUnitTests { > > @Before > public void initialize() { > - System.setProperty("ofbiz.home", "."); > + System.setProperty("ofbiz.home", System.getProperty("user.dir")); > System.setProperty("derby.system.home", "./runtime/data/derby"); > } > > > Modified: ofbiz/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/FreeMarkerViewHandler.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/FreeMarkerViewHandler.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/FreeMarkerViewHandler.java (original) > +++ ofbiz/trunk/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/FreeMarkerViewHandler.java Sun Sep 25 17:20:58 2016 > @@ -64,7 +64,7 @@ public class FreeMarkerViewHandler exten > // process the template & flush the output > try { > if (page.startsWith("component://")) { > - FreeMarkerWorker.renderTemplateAtLocation(page, context, response.getWriter()); > + FreeMarkerWorker.renderTemplate(page, context, response.getWriter()); > } else { > // backwards compatibility > Template template = config.getTemplate(page); > > Modified: ofbiz/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsServices.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsServices.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsServices.java (original) > +++ ofbiz/trunk/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsServices.java Sun Sep 25 17:20:58 2016 > @@ -22,7 +22,6 @@ import java.io.BufferedWriter; > import java.io.File; > import java.io.FileNotFoundException; > import java.io.FileOutputStream; > -import java.io.FileReader; > import java.io.IOException; > import java.io.OutputStreamWriter; > import java.io.PrintWriter; > @@ -45,6 +44,8 @@ import java.util.ResourceBundle; > import java.util.Set; > import java.util.TreeSet; > > +import javax.xml.parsers.DocumentBuilder; > +import javax.xml.parsers.DocumentBuilderFactory; > import javax.xml.parsers.ParserConfigurationException; > > import org.apache.ofbiz.base.location.FlexibleLocation; > @@ -88,14 +89,10 @@ import org.apache.ofbiz.service.LocalDis > import org.apache.ofbiz.service.ServiceUtil; > import org.apache.ofbiz.webtools.artifactinfo.ArtifactInfoFactory; > import org.apache.ofbiz.webtools.artifactinfo.ServiceArtifactInfo; > +import org.w3c.dom.Document; > import org.xml.sax.InputSource; > import org.xml.sax.SAXException; > > -import freemarker.ext.dom.NodeModel; > -import freemarker.template.Configuration; > -import freemarker.template.Template; > -import freemarker.template.TemplateHashModel; > - > /** > * WebTools Services > */ > @@ -144,25 +141,16 @@ public class WebToolsServices { > // FM Template > // ############################# > if (UtilValidate.isNotEmpty(fmfilename) && (UtilValidate.isNotEmpty(fulltext) || url != null)) { > - FileReader templateReader = null; > - try { > - templateReader = new FileReader(fmfilename); > - } catch (FileNotFoundException e) { > - return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsErrorReadingTemplateFile", UtilMisc.toMap("filename", fmfilename, "errorString", e.getMessage()), locale)); > + File fmFile = new File(fmfilename); > + if (!fmFile.exists()) { > + return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsErrorReadingTemplateFile", UtilMisc.toMap("filename", fmfilename, "errorString", "Template file not found."), locale)); > } > - > - StringWriter outWriter = new StringWriter(); > - > - Template template = null; > try { > - Configuration conf = org.apache.ofbiz.base.util.template.FreeMarkerWorker.getDefaultOfbizConfig(); > - template = new Template("FMImportFilter", templateReader, conf); > - Map<String, Object> fmcontext = new HashMap<String, Object>(); > - > + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); > InputSource ins = url != null ? new InputSource(url.openStream()) : new InputSource(new StringReader(fulltext)); > - NodeModel nodeModel; > + Document doc; > try { > - nodeModel = NodeModel.parse(ins); > + doc = documentBuilder.parse(ins); > } finally { > if (ins.getByteStream() != null) { > ins.getByteStream().close(); > @@ -171,11 +159,10 @@ public class WebToolsServices { > ins.getCharacterStream().close(); > } > } > - fmcontext.put("doc", nodeModel); > - TemplateHashModel staticModels = FreeMarkerWorker.getDefaultOfbizWrapper().getStaticModels(); > - fmcontext.put("Static", staticModels); > - > - template.process(fmcontext, outWriter); > + StringWriter outWriter = new StringWriter(); > + Map<String, Object> fmcontext = new HashMap<>(); > + fmcontext.put("doc", doc); > + FreeMarkerWorker.renderTemplate(fmFile.toURI().toURL().toString(), fmcontext, outWriter); > fulltext = outWriter.toString(); > } catch (Exception ex) { > return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsErrorProcessingTemplateFile", UtilMisc.toMap("filename", fmfilename, "errorString", ex.getMessage()), locale)); > > Modified: ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java (original) > +++ ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java Sun Sep 25 17:20:58 2016 > @@ -157,7 +157,6 @@ public class HtmlWidget extends ModelScr > writer.append(HtmlWidgetRenderer.formatBoundaryComment("Begin", "Template", location)); > } > > - //FreeMarkerWorker.renderTemplateAtLocation(location, context, writer); > Template template = null; > if (location.endsWith(".fo.ftl")) { // FOP can't render correctly escaped characters > template = FreeMarkerWorker.getTemplate(location); > > Modified: ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java > URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java?rev=1762227&r1=1762226&r2=1762227&view=diff > ============================================================================== > --- ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java (original) > +++ ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java Sun Sep 25 17:20:58 2016 > @@ -173,6 +173,10 @@ public final class MacroFormRenderer imp > return value; > } > > + private static String encodeDoubleQuotes(String htmlString) { > + return htmlString.replaceAll("\"", "\\\\\""); > + } > + > public void renderLabel(Appendable writer, Map<String, Object> context, ModelScreenWidget.Label label) throws IOException { > String labelText = label.getText(context); > if (UtilValidate.isEmpty(labelText)) { > @@ -218,7 +222,7 @@ public final class MacroFormRenderer imp > sr.append("\" idName=\""); > sr.append(idName); > sr.append("\" description=\""); > - sr.append(FreeMarkerWorker.encodeDoubleQuotes(description)); > + sr.append(encodeDoubleQuotes(description)); > sr.append("\" title=\""); > sr.append(title); > sr.append("\" class=\""); > @@ -1276,7 +1280,7 @@ public final class MacroFormRenderer imp > sr.append(" name=\""); > sr.append(modelFormField.getModelForm().getName()); > sr.append("\" title=\""); > - sr.append(FreeMarkerWorker.encodeDoubleQuotes(title)); > + sr.append(encodeDoubleQuotes(title)); > sr.append("\" />"); > executeMacro(writer, sr.toString()); > } else if (modelFormField.isSortField()) { > @@ -1316,7 +1320,7 @@ public final class MacroFormRenderer imp > String helpText = UtilHelpText.getEntityFieldDescription(entityName, fieldName, delegator, locale); > > sr.append("\" fieldHelpText=\""); > - sr.append(FreeMarkerWorker.encodeDoubleQuotes(helpText)); > + sr.append(encodeDoubleQuotes(helpText)); > } > sr.append("\" title=\""); > sr.append(sb.toString()); > @@ -3005,7 +3009,7 @@ public final class MacroFormRenderer imp > StringWriter sr = new StringWriter(); > sr.append("<@renderTooltip "); > sr.append("tooltip=\""); > - sr.append(FreeMarkerWorker.encodeDoubleQuotes(tooltip)); > + sr.append(encodeDoubleQuotes(tooltip)); > sr.append("\" tooltipStyle=\""); > sr.append(modelFormField.getTooltipStyle()); > sr.append("\" />"); > > > |
Free forum by Nabble | Edit this page |