Author: fmeschbe
Date: Thu Nov 29 12:53:51 2007
New Revision: 599570

URL: http://svn.apache.org/viewvc?rev=599570&view=rev
Log:
SLING-115 provide node and mapped object of the Resource using 
sling:defineObjects

Modified:
    
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTEI.java
    
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
    
incubator/sling/trunk/scripting/jsp-taglib/src/main/resources/META-INF/taglib.tld

Modified: 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTEI.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTEI.java?rev=599570&r1=599569&r2=599570&view=diff
==============================================================================
--- 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTEI.java
 (original)
+++ 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTEI.java
 Thu Nov 29 12:53:51 2007
@@ -16,6 +16,19 @@
  */
 package org.apache.sling.scripting.jsp.taglib;
 
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_MAPPED_OBJECT_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_NODE_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_REQUEST_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_RESOURCE_MANAGER_CLASS;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_RESOURCE_MANAGER_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_RESOURCE_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_RESPONSE_NAME;
+import static 
org.apache.sling.scripting.jsp.taglib.DefineObjectsTag.DEFAULT_SERVICE_LOCATOR_NAME;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
 import javax.servlet.jsp.tagext.TagData;
 import javax.servlet.jsp.tagext.TagExtraInfo;
 import javax.servlet.jsp.tagext.VariableInfo;
@@ -50,8 +63,26 @@
     public static final String ATTR_RESOURCE_NAME = "resourceName";
 
     /**
-     * The name of the tag attribute used to define the name of the 
ServiceLocator
-     * scripting variable (value is "serviceLocatorName").
+     * The name of the tag attribute used to define the name of the Node
+     * scripting variable (value is "nodeName").
+     */
+    public static final String ATTR_NODE_NAME = "resourceName";
+
+    /**
+     * The name of the tag attribute used to define the name of the mapped
+     * object scripting variable (value is "mappedObjectName").
+     */
+    public static final String ATTR_MAPPED_OBJECT_NAME = "mappedObjectName";
+
+    /**
+     * The name of the tag attribute used to define the type of the scripting
+     * variable to take for the mapped object (value is "mappedObjectClass").
+     */
+    public static final String ATTR_MAPPED_OBJECT_CLASS = "mappedObjectClass";
+
+    /**
+     * The name of the tag attribute used to define the name of the
+     * ServiceLocator scripting variable (value is "serviceLocatorName").
      */
     public static final String ATTR_SERVICE_LOCATOR_NAME = 
"serviceLocatorName";
 
@@ -73,6 +104,8 @@
 
     private static final String RESOURCE_CLASS = Resource.class.getName();
 
+    private static final String NODE_CLASS = Node.class.getName();
+
     private static final String SERVICE_LOCATOR_CLASS = 
ServiceLocator.class.getName();
 
     /**
@@ -82,30 +115,43 @@
      * @see javax.servlet.jsp.tagext.TagExtraInfo#getVariableInfo(TagData)
      */
     public VariableInfo[] getVariableInfo(TagData data) {
-        String requestName = getValue(data, ATTR_REQUEST_NAME,
-            DefineObjectsTag.DEFAULT_REQUEST_NAME);
-        String responseName = getValue(data, ATTR_RESPONSE_NAME,
-            DefineObjectsTag.DEFAULT_RESPONSE_NAME);
-        String resourceName = getValue(data, ATTR_RESOURCE_NAME,
-            DefineObjectsTag.DEFAULT_RESOURCE_NAME);
-        String resourceManagerName = getValue(data, ATTR_RESOURCE_MANAGER_NAME,
-            DefineObjectsTag.DEFAULT_RESOURCE_MANAGER_NAME);
-        String resourceManagerClass = getValue(data, 
ATTR_RESOURCE_MANAGER_CLASS,
-            DefineObjectsTag.DEFAULT_RESOURCE_MANAGER_CLASS);
-        String serviceLocatorName = getValue(data, ATTR_SERVICE_LOCATOR_NAME,
-            DefineObjectsTag.DEFAULT_SERVICE_LOCATOR_NAME);
-
-        return new VariableInfo[] {
-            new VariableInfo(requestName, RENDER_REQUEST_CLASS, true,
-                VariableInfo.AT_END),
-            new VariableInfo(responseName, RENDER_RESPONSE_CLASS, true,
-                VariableInfo.AT_END),
-            new VariableInfo(resourceName, RESOURCE_CLASS, true,
-                VariableInfo.AT_END),
-            new VariableInfo(resourceManagerName, resourceManagerClass, true,
-                VariableInfo.AT_END),
-            new VariableInfo(serviceLocatorName, SERVICE_LOCATOR_CLASS, true,
-                VariableInfo.AT_END) };
+
+        List<VariableInfo> varInfos = new ArrayList<VariableInfo>();
+
+        addVar(varInfos, data, ATTR_REQUEST_NAME, DEFAULT_REQUEST_NAME,
+            RENDER_REQUEST_CLASS);
+        addVar(varInfos, data, ATTR_RESPONSE_NAME, DEFAULT_RESPONSE_NAME,
+            RENDER_RESPONSE_CLASS);
+
+        addVar(varInfos, data, ATTR_RESOURCE_NAME, DEFAULT_RESOURCE_NAME,
+            RESOURCE_CLASS);
+        addVar(varInfos, data, ATTR_NODE_NAME, DEFAULT_NODE_NAME, NODE_CLASS);
+
+        String mappedObjectClass = getValue(data, ATTR_MAPPED_OBJECT_CLASS,
+            null);
+        addVar(varInfos, data, ATTR_MAPPED_OBJECT_NAME,
+            DEFAULT_MAPPED_OBJECT_NAME, mappedObjectClass);
+
+        String resourceManagerClass = getValue(data,
+            ATTR_RESOURCE_MANAGER_CLASS, DEFAULT_RESOURCE_MANAGER_CLASS);
+        addVar(varInfos, data, ATTR_RESOURCE_MANAGER_NAME,
+            DEFAULT_RESOURCE_MANAGER_NAME, resourceManagerClass);
+
+        addVar(varInfos, data, ATTR_SERVICE_LOCATOR_NAME,
+            DEFAULT_SERVICE_LOCATOR_NAME, SERVICE_LOCATOR_CLASS);
+
+        return varInfos.toArray(new VariableInfo[varInfos.size()]);
+
+    }
+
+    private void addVar(List<VariableInfo> varInfos, TagData data,
+            String attrName, String defaultValue, String varClass) {
+        String value = getValue(data, attrName, defaultValue);
+
+        if (value != null && varClass != null) {
+            varInfos.add(new VariableInfo(value, varClass, true,
+                VariableInfo.AT_END));
+        }
     }
 
     private String getValue(TagData data, String name, String defaultValue) {

Modified: 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java?rev=599570&r1=599569&r2=599570&view=diff
==============================================================================
--- 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
 (original)
+++ 
incubator/sling/trunk/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/DefineObjectsTag.java
 Thu Nov 29 12:53:51 2007
@@ -20,19 +20,16 @@
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.NodeProvider;
+import org.apache.sling.api.resource.ObjectProvider;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceManager;
 import org.apache.sling.scripting.jsp.util.TagUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  */
 public class DefineObjectsTag extends TagSupport {
 
-    /** default log */
-    private static final Logger log = 
LoggerFactory.getLogger(DefineObjectsTag.class);
-
     private static final long serialVersionUID = -1858674361149195892L;
 
     /**
@@ -43,7 +40,8 @@
 
     /**
      * Default name for the scripting variable referencing the
-     * <code>SlingHttpServletResponse</code> object (value is "slingResponse").
+     * <code>SlingHttpServletResponse</code> object (value is
+     * "slingResponse").
      */
     public static final String DEFAULT_RESPONSE_NAME = "slingResponse";
 
@@ -54,6 +52,20 @@
     public static final String DEFAULT_RESOURCE_NAME = "resource";
 
     /**
+     * Default name for the scripting variable referencing the JCR node
+     * underlying the current <code>Resource</code> object if it is based on a
+     * JCR node (value is "node").
+     */
+    public static final String DEFAULT_NODE_NAME = "node";
+
+    /**
+     * Default name for the scripting variable referencing the mapped object
+     * underlying the current <code>Resource</code> object (value is
+     * "mappedObject").
+     */
+    public static final String DEFAULT_MAPPED_OBJECT_NAME = "object";
+
+    /**
      * Default name for the scripting variable referencing the current
      * <code>ResourceManager</code> (value is "resourceManager").
      */
@@ -78,6 +90,12 @@
 
     private String resourceName = DEFAULT_RESOURCE_NAME;
 
+    private String nodeName = DEFAULT_NODE_NAME;
+
+    private String mappedObjectName = DEFAULT_MAPPED_OBJECT_NAME;
+
+    private String mappedObjectClass = null;
+
     private String resourceManagerName = DEFAULT_RESOURCE_MANAGER_NAME;
 
     private String resourceManagerClass = DEFAULT_RESOURCE_MANAGER_CLASS;
@@ -96,6 +114,7 @@
      * <li><code>SlingHttpServletRequest</code>
      * <li><code>SlingHttpServletResponse</code>
      * <li>current <code>Resource</code>
+     * <li>current <code>Node</code> (if resource is a NodeProvider)
      * <li>current <code>ResourcManager</code>
      * <li>current <code>ServiceLocator</code>
      * </ul>
@@ -111,18 +130,23 @@
 
         pageContext.setAttribute(requestName, req);
         pageContext.setAttribute(responseName, res);
+        pageContext.setAttribute(resourceName, resource);
         pageContext.setAttribute(resourceManagerName, resourceManager);
-        pageContext.setAttribute(resourceManagerClass, 
resourceManager.getClass().getName());
+        pageContext.setAttribute(resourceManagerClass,
+            resourceManager.getClass().getName());
+        pageContext.setAttribute(serviceLocatorName, req.getServiceLocator());
 
-        // content may be null
-        if (resource != null) {
-            pageContext.setAttribute(resourceName, resource);
-        } else {
-            TagUtil.log(log, pageContext, "RenderRequest has no Content !",
-                null);
+        if (resource instanceof NodeProvider) {
+            pageContext.setAttribute(nodeName,
+                ((NodeProvider) resource).getNode());
         }
 
-        pageContext.setAttribute(serviceLocatorName, req.getServiceLocator());
+        if (mappedObjectClass != null && resource instanceof ObjectProvider) {
+            Object mappedObject = ((ObjectProvider) resource).getObject();
+            pageContext.setAttribute(mappedObjectName, mappedObject);
+            pageContext.setAttribute(mappedObjectClass,
+                mappedObject.getClass().getName());
+        }
 
         return EVAL_PAGE;
     }
@@ -139,6 +163,18 @@
 
     public void setResourceName(String name) {
         this.resourceName = name;
+    }
+
+    public void setNodeName(String name) {
+        this.nodeName = name;
+    }
+
+    public void setMappedObjectName(String name) {
+        this.mappedObjectName = name;
+    }
+
+    public void setMappedObjectClass(String name) {
+        this.mappedObjectClass = name;
     }
 
     public void setResourceManagerName(String name) {

Modified: 
incubator/sling/trunk/scripting/jsp-taglib/src/main/resources/META-INF/taglib.tld
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/jsp-taglib/src/main/resources/META-INF/taglib.tld?rev=599570&r1=599569&r2=599570&view=diff
==============================================================================
--- 
incubator/sling/trunk/scripting/jsp-taglib/src/main/resources/META-INF/taglib.tld
 (original)
+++ 
incubator/sling/trunk/scripting/jsp-taglib/src/main/resources/META-INF/taglib.tld
 Thu Nov 29 12:53:51 2007
@@ -114,6 +114,21 @@
             <rtexprvalue>false</rtexprvalue>
         </attribute>
         <attribute>
+            <name>nodeName</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+        </attribute>
+        <attribute>
+            <name>mappedObjectName</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+        </attribute>
+        <attribute>
+            <name>mappedObjectClass</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+        </attribute>
+        <attribute>
             <name>resourceManagerName</name>
             <required>false</required>
             <rtexprvalue>false</rtexprvalue>


Reply via email to