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>