blob: 095d22dcbc3b7935b15feb9181a80ac02e6fa575 [file] [log] [blame]
/*
* 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.sling.scripting.jsp.taglib;
import javax.jcr.Node;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScriptHelper;
/**
*/
public class DefineObjectsTag extends TagSupport {
private static final long serialVersionUID = -1858674361149195892L;
/**
* Default name for the scripting variable referencing the
* <code>SlingHttpServletRequest</code> object (value is "slingRequest").
*/
public static final String DEFAULT_REQUEST_NAME = "slingRequest";
/**
* Default name for the scripting variable referencing the
* <code>SlingHttpServletResponse</code> object (value is
* "slingResponse").
*/
public static final String DEFAULT_RESPONSE_NAME = "slingResponse";
/**
* Default name for the scripting variable referencing the current
* <code>Resource</code> object (value is "resource").
*/
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 "currentNode").
*/
public static final String DEFAULT_NODE_NAME = "currentNode";
/**
* Default name for the scripting variable referencing the log
* <code>org.slf4j.Logger</code> (value is "log").
*/
public static final String DEFAULT_LOG_NAME = "log";
/**
* Default name for the scripting variable referencing the current
* <code>SlingScriptHelper</code> (value is "sling").
*/
public static final String DEFAULT_SLING_NAME = "sling";
/**
* Default name for the scripting variable referencing the current
* <code>ResourceResolver</code> (value is "resourceResolver").
*/
public static final String DEFAULT_RESOURCE_RESOLVER_NAME = "resourceResolver";
private String requestName = DEFAULT_REQUEST_NAME;
private String responseName = DEFAULT_RESPONSE_NAME;
private String resourceName = DEFAULT_RESOURCE_NAME;
private String nodeName = DEFAULT_NODE_NAME;
private String slingName = DEFAULT_SLING_NAME;
private String logName = DEFAULT_LOG_NAME;
private String resourceResolverName = DEFAULT_RESOURCE_RESOLVER_NAME;
/**
* Default constructor.
*/
public DefineObjectsTag() {
}
/**
* Creates Scripting variables for:
* <ul>
* <li><code>SlingHttpServletRequest</code>
* <li><code>SlingHttpServletResponse</code>
* <li>current <code>Resource</code>
* <li>current <code>Node</code> (if resource is adaptable to a node)
* <li>current <code>Logger</code>
* <li>current <code>SlingScriptHelper</code>
* </ul>
*
* @return always {@link #EVAL_PAGE}.
*/
public int doEndTag() {
final SlingBindings bindings = (SlingBindings)pageContext.getRequest().getAttribute(SlingBindings.class.getName());
final SlingScriptHelper scriptHelper = bindings.getSling();
pageContext.setAttribute(requestName, scriptHelper.getRequest());
pageContext.setAttribute(responseName, scriptHelper.getResponse());
final Resource resource = scriptHelper.getRequest().getResource();
pageContext.setAttribute(resourceName, resource);
pageContext.setAttribute(resourceResolverName, scriptHelper.getRequest().getResourceResolver());
pageContext.setAttribute(slingName, scriptHelper);
pageContext.setAttribute(logName, bindings.getLog());
final Node node = resource.adaptTo(Node.class);
if (node != null) {
pageContext.setAttribute(nodeName, node);
}
return EVAL_PAGE;
}
// --------------------------< setter methonds >----------------------------
public void setRequestName(String requestName) {
this.requestName = requestName;
}
public void setResponseName(String responseName) {
this.responseName = responseName;
}
public void setResourceName(String name) {
this.resourceName = name;
}
public void setNodeName(String name) {
this.nodeName = name;
}
public void setLogName(String name) {
this.logName = name;
}
public void setSlingName(String name) {
this.slingName = name;
}
public void setResourceResolverName(String name) {
this.resourceResolverName = name;
}
}