From 0aa0a69068c8dd7c61119f2a5baf8b9ab697c750 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 17 Nov 2013 20:42:46 +0000 Subject: [PATCH] WW-4243 Splits interface in to two to allow using different implementation git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1542808 13f79535-47bb-0310-9956-ffa450edef68 --- .../struts2/views/DefaultTagLibrary.java | 8 ++-- .../views/TagLibraryDirectiveProvider.java | 44 +++++++++++++++++++ ...rary.java => TagLibraryModelProvider.java} | 25 ++++------- .../views/freemarker/FreemarkerManager.java | 12 ++--- .../views/velocity/VelocityManager.java | 14 +++--- core/src/main/resources/struts-default.xml | 3 +- .../struts2/dojo/views/DojoTagLibrary.java | 10 ++--- .../dojo/src/main/resources/struts-plugin.xml | 3 +- 8 files changed, 78 insertions(+), 41 deletions(-) create mode 100644 core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java rename core/src/main/java/org/apache/struts2/views/{TagLibrary.java => TagLibraryModelProvider.java} (70%) diff --git a/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java b/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java index d5661dea6..b5d904963 100644 --- a/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java +++ b/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java @@ -70,15 +70,15 @@ import com.opensymphony.xwork2.util.ValueStack; /** * The default Struts tag library */ -public class DefaultTagLibrary implements TagLibrary { +public class DefaultTagLibrary implements TagLibraryDirectiveProvider, TagLibraryModelProvider { - public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, - HttpServletResponse res) { + public Object getModels(ValueStack stack, HttpServletRequest req, + HttpServletResponse res) { return new StrutsModels(stack, req, res); } - public List getVelocityDirectiveClasses() { + public List getDirectiveClasses() { Class[] directives = new Class[] { ActionDirective.class, BeanDirective.class, diff --git a/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java b/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java new file mode 100644 index 000000000..43e839c14 --- /dev/null +++ b/core/src/main/java/org/apache/struts2/views/TagLibraryDirectiveProvider.java @@ -0,0 +1,44 @@ +/* + * $Id$ + * + * 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.struts2.views; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.opensymphony.xwork2.util.ValueStack; + +/** + * Provides Velocity implementation classes for a tag library + */ +public interface TagLibraryDirectiveProvider { + + /** + * Gets a list of Velocity directive classes for the tag library. Called once on framework + * startup when initializing Velocity. + * + * @return A list of Velocity directive classes + */ + public List getDirectiveClasses(); + +} diff --git a/core/src/main/java/org/apache/struts2/views/TagLibrary.java b/core/src/main/java/org/apache/struts2/views/TagLibraryModelProvider.java similarity index 70% rename from core/src/main/java/org/apache/struts2/views/TagLibrary.java rename to core/src/main/java/org/apache/struts2/views/TagLibraryModelProvider.java index ab8999b69..228b35826 100644 --- a/core/src/main/java/org/apache/struts2/views/TagLibrary.java +++ b/core/src/main/java/org/apache/struts2/views/TagLibraryModelProvider.java @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id: TagLibrary.java 651946 2008-04-27 13:41:38Z apetrelli $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -21,34 +21,25 @@ package org.apache.struts2.views; -import java.util.List; +import com.opensymphony.xwork2.util.ValueStack; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.opensymphony.xwork2.util.ValueStack; - /** - * Provides Velocity and Freemarker implementation classes for a tag library + * Provides Freemarker implementation classes for a tag library */ -public interface TagLibrary { +public interface TagLibraryModelProvider { /** - * Gets a Java object that contains getters for the tag library's Freemarker models. + * Gets a Java object that contains getters for the tag library's Freemarker models. * Called once per Freemarker template processing. - * + * * @param stack The current value stack * @param req The HTTP request * @param res The HTTP response * @return The Java object containing the Freemarker model getter methods */ - public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res); - - /** - * Gets a list of Velocity directive classes for the tag library. Called once on framework - * startup when initializing Velocity. - * - * @return A list of Velocity directive classes - */ - public List getVelocityDirectiveClasses(); + Object getModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res); + } diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java index 4a122ec14..39b7fe6bc 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java @@ -47,7 +47,7 @@ import freemarker.template.TemplateModel; import freemarker.template.utility.StringUtil; import org.apache.struts2.StrutsConstants; import org.apache.struts2.views.JspSupportServlet; -import org.apache.struts2.views.TagLibrary; +import org.apache.struts2.views.TagLibraryModelProvider; import org.apache.struts2.views.util.ContextUtil; import javax.servlet.GenericServlet; @@ -176,7 +176,7 @@ public class FreemarkerManager { protected boolean cacheBeanWrapper; protected int mruMaxStrongSize; protected String templateUpdateDelay; - protected Map tagLibraries; + protected Map tagLibraries; private FileManager fileManager; private FreemarkerThemeTemplateLoader themeTemplateLoader; @@ -208,10 +208,10 @@ public class FreemarkerManager { @Inject public void setContainer(Container container) { - Map map = new HashMap(); - Set prefixes = container.getInstanceNames(TagLibrary.class); + Map map = new HashMap(); + Set prefixes = container.getInstanceNames(TagLibraryModelProvider.class); for (String prefix : prefixes) { - map.put(prefix, container.getInstance(TagLibrary.class, prefix)); + map.put(prefix, container.getInstance(TagLibraryModelProvider.class, prefix)); } this.tagLibraries = Collections.unmodifiableMap(map); } @@ -530,7 +530,7 @@ public class FreemarkerManager { populateContext(model, stack, action, request, response); if (tagLibraries != null) { for (String prefix : tagLibraries.keySet()) { - model.put(prefix, tagLibraries.get(prefix).getFreemarkerModels(stack, request, response)); + model.put(prefix, tagLibraries.get(prefix).getModels(stack, request, response)); } } diff --git a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java b/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java index 31b400d20..1e159b82d 100644 --- a/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java +++ b/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java @@ -32,7 +32,7 @@ import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsConstants; import org.apache.struts2.StrutsException; import org.apache.struts2.util.VelocityStrutsUtil; -import org.apache.struts2.views.TagLibrary; +import org.apache.struts2.views.TagLibraryDirectiveProvider; import org.apache.struts2.views.jsp.ui.OgnlTool; import org.apache.struts2.views.util.ContextUtil; import org.apache.velocity.VelocityContext; @@ -99,7 +99,7 @@ public class VelocityManager { private String customConfigFile; - private List tagLibraries; + private List tagLibraries; @Inject public void setObjectFactory(ObjectFactory fac) { @@ -108,10 +108,10 @@ public class VelocityManager { @Inject public void setContainer(Container container) { - List list = new ArrayList(); - Set prefixes = container.getInstanceNames(TagLibrary.class); + List list = new ArrayList(); + Set prefixes = container.getInstanceNames(TagLibraryDirectiveProvider.class); for (String prefix : prefixes) { - list.add(container.getInstance(TagLibrary.class, prefix)); + list.add(container.getInstance(TagLibraryDirectiveProvider.class, prefix)); } this.tagLibraries = Collections.unmodifiableList(list); } @@ -524,8 +524,8 @@ public class VelocityManager { // components StringBuilder sb = new StringBuilder(); - for (TagLibrary tagLibrary : tagLibraries) { - List directives = tagLibrary.getVelocityDirectiveClasses(); + for (TagLibraryDirectiveProvider tagLibrary : tagLibraries) { + List directives = tagLibrary.getDirectiveClasses(); for (Class directive : directives) { addDirective(sb, directive); } diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml index 6aa418346..dcb92d91b 100644 --- a/core/src/main/resources/struts-default.xml +++ b/core/src/main/resources/struts-default.xml @@ -63,7 +63,8 @@ - + + diff --git a/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java b/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java index ac2f41695..a8439bf61 100644 --- a/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java +++ b/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/DojoTagLibrary.java @@ -39,19 +39,19 @@ import org.apache.struts2.dojo.views.velocity.components.TabbedPanelDirective; import org.apache.struts2.dojo.views.velocity.components.TextAreaDirective; import org.apache.struts2.dojo.views.velocity.components.TreeDirective; import org.apache.struts2.dojo.views.velocity.components.TreeNodeDirective; -import org.apache.struts2.views.TagLibrary; +import org.apache.struts2.views.TagLibraryDirectiveProvider; import com.opensymphony.xwork2.util.ValueStack; +import org.apache.struts2.views.TagLibraryModelProvider; -public class DojoTagLibrary implements TagLibrary { +public class DojoTagLibrary implements TagLibraryDirectiveProvider, TagLibraryModelProvider { - public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, - HttpServletResponse res) { + public Object getModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) { return new DojoModels(stack, req, res); } - public List getVelocityDirectiveClasses() { + public List getDirectiveClasses() { Class[] directives = new Class[] { DateTimePickerDirective.class, DivDirective.class, diff --git a/plugins/dojo/src/main/resources/struts-plugin.xml b/plugins/dojo/src/main/resources/struts-plugin.xml index 799a9d899..9f5a2c85a 100644 --- a/plugins/dojo/src/main/resources/struts-plugin.xml +++ b/plugins/dojo/src/main/resources/struts-plugin.xml @@ -26,5 +26,6 @@ "http://struts.apache.org/dtds/struts-2.3.dtd"> - + + \ No newline at end of file