You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/07/09 20:00:22 UTC

git commit: WW-4255 restores TagLibrary interface and marks it as deprecated

Repository: struts
Updated Branches:
  refs/heads/develop cc89601b6 -> 9aedd857a


WW-4255 restores TagLibrary interface and marks it as deprecated


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/9aedd857
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/9aedd857
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/9aedd857

Branch: refs/heads/develop
Commit: 9aedd857a4294a5091bce6abcdcb183f83833cb6
Parents: cc89601
Author: Lukasz Lenart <lu...@apache.org>
Authored: Wed Jul 9 20:00:08 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Wed Jul 9 20:00:08 2014 +0200

----------------------------------------------------------------------
 .../apache/struts2/views/DefaultTagLibrary.java | 10 +++-
 .../org/apache/struts2/views/TagLibrary.java    | 57 ++++++++++++++++++++
 .../views/freemarker/FreemarkerManager.java     | 15 ++++++
 .../struts2/views/velocity/VelocityManager.java | 16 ++++++
 4 files changed, 97 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/9aedd857/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
----------------------------------------------------------------------
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 b5d9049..4ed6bc3 100644
--- a/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
+++ b/core/src/main/java/org/apache/struts2/views/DefaultTagLibrary.java
@@ -70,7 +70,7 @@ import com.opensymphony.xwork2.util.ValueStack;
 /**
  * The default Struts tag library
  */
-public class DefaultTagLibrary implements TagLibraryDirectiveProvider, TagLibraryModelProvider {
+public class DefaultTagLibrary implements TagLibraryDirectiveProvider, TagLibraryModelProvider, TagLibrary {
 
     public Object getModels(ValueStack stack, HttpServletRequest req,
                             HttpServletResponse res) {
@@ -120,4 +120,12 @@ public class DefaultTagLibrary implements TagLibraryDirectiveProvider, TagLibrar
         return Arrays.asList(directives);
     }
 
+    public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
+        return getModels(stack, req, res);
+    }
+
+    public List<Class> getVelocityDirectiveClasses() {
+        return getDirectiveClasses();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/9aedd857/core/src/main/java/org/apache/struts2/views/TagLibrary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/views/TagLibrary.java b/core/src/main/java/org/apache/struts2/views/TagLibrary.java
new file mode 100644
index 0000000..b4c36d7
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/views/TagLibrary.java
@@ -0,0 +1,57 @@
+/*
+ * $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 and Freemarker implementation classes for a tag library
+ *
+ * @deprecated use two other interfaces: {@link TagLibraryDirectiveProvider}, {@link TagLibraryModelProvider}
+ */
+@Deprecated
+public interface TagLibrary {
+
+    /**
+     * 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<Class> getVelocityDirectiveClasses();
+}

http://git-wip-us.apache.org/repos/asf/struts/blob/9aedd857/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerManager.java
----------------------------------------------------------------------
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 39b7fe6..2a16689 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,6 +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;
 
@@ -177,6 +178,7 @@ public class FreemarkerManager {
     protected int mruMaxStrongSize;
     protected String templateUpdateDelay;
     protected Map<String,TagLibraryModelProvider> tagLibraries;
+    protected Map<String, TagLibrary> oldTagLibraries;
 
     private FileManager fileManager;
     private FreemarkerThemeTemplateLoader themeTemplateLoader;
@@ -214,6 +216,13 @@ public class FreemarkerManager {
             map.put(prefix, container.getInstance(TagLibraryModelProvider.class, prefix));
         }
         this.tagLibraries = Collections.unmodifiableMap(map);
+
+        Map<String, TagLibrary> oldMap = new HashMap<String, TagLibrary>();
+        Set<String> oldPrefixes = container.getInstanceNames(TagLibrary.class);
+        for (String prefix : oldPrefixes) {
+            oldMap.put(prefix, container.getInstance(TagLibrary.class, prefix));
+        }
+        this.oldTagLibraries = Collections.unmodifiableMap(oldMap);
     }
 
     @Inject
@@ -534,6 +543,12 @@ public class FreemarkerManager {
             }
         }
 
+        if (oldTagLibraries != null) {
+            for (String prefix : oldTagLibraries.keySet()) {
+                model.put(prefix, oldTagLibraries.get(prefix).getFreemarkerModels(stack, request, response));
+            }
+        }
+
         //place the model in the request using the special parameter.  This can be retrieved for freemarker and velocity.
         request.setAttribute(ATTR_TEMPLATE_MODEL, model);
 

http://git-wip-us.apache.org/repos/asf/struts/blob/9aedd857/core/src/main/java/org/apache/struts2/views/velocity/VelocityManager.java
----------------------------------------------------------------------
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 1e159b8..e026a2c 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,6 +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;
@@ -100,6 +101,7 @@ public class VelocityManager {
     private String customConfigFile;
 
     private List<TagLibraryDirectiveProvider> tagLibraries;
+    private List<TagLibrary> oldTagLibraries;
 
     @Inject
     public void setObjectFactory(ObjectFactory fac) {
@@ -114,6 +116,13 @@ public class VelocityManager {
             list.add(container.getInstance(TagLibraryDirectiveProvider.class, prefix));
         }
         this.tagLibraries = Collections.unmodifiableList(list);
+
+        List<TagLibrary> oldList = new ArrayList<TagLibrary>();
+        Set<String> oldPrefixes = container.getInstanceNames(TagLibrary.class);
+        for (String prefix : oldPrefixes) {
+            oldList.add(container.getInstance(TagLibrary.class, prefix));
+        }
+        this.oldTagLibraries = Collections.unmodifiableList(oldList);
     }
 
     /**
@@ -531,6 +540,13 @@ public class VelocityManager {
             }
         }
 
+        for (TagLibrary tagLibrary : oldTagLibraries) {
+            List<Class> directives = tagLibrary.getVelocityDirectiveClasses();
+            for (Class directive : directives) {
+                addDirective(sb, directive);
+            }
+        }
+
         String directives = sb.toString();
 
         String userdirective = p.getProperty("userdirective");