You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2013/01/03 14:18:49 UTC
svn commit: r1428328 - in /sling/trunk/bundles/scripting/jsp-taglib: ./
src/main/java/org/apache/sling/scripting/jsp/taglib/
src/main/resources/META-INF/ src/test/ src/test/java/ src/test/java/org/
src/test/java/org/apache/ src/test/java/org/apache/sli...
Author: bdelacretaz
Date: Thu Jan 3 13:18:49 2013
New Revision: 1428328
URL: http://svn.apache.org/viewvc?rev=1428328&view=rev
Log:
SLING-2648 - new resource access JSP tags, contributed by Dan Klco, thanks!
Added:
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AdaptObjectTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetPropertyTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetResourceTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/ListChildrenTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/SlingFunctions.java
sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/taglib13.tld
sling/trunk/bundles/scripting/jsp-taglib/src/test/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/MockPageContext.java
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestAdaptObjectTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetPropertyTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetResourceTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestListChildrenTag.java
sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestSlingFunctions.java
Modified:
sling/trunk/bundles/scripting/jsp-taglib/pom.xml
Modified: sling/trunk/bundles/scripting/jsp-taglib/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/pom.xml?rev=1428328&r1=1428327&r2=1428328&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/pom.xml (original)
+++ sling/trunk/bundles/scripting/jsp-taglib/pom.xml Thu Jan 3 13:18:49 2013
@@ -98,5 +98,25 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
+
+ <!-- Testing Dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jmock</groupId>
+ <artifactId>jmock-junit4</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.testing</artifactId>
+ <version>2.0.12</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AdaptObjectTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AdaptObjectTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AdaptObjectTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/AdaptObjectTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,145 @@
+/*
+ * 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.servlet.jsp.tagext.TagSupport;
+
+import org.apache.sling.api.adapter.Adaptable;
+import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tag for adapting adaptables to classes.
+ *
+ * @author dklco
+ */
+public class AdaptObjectTag extends TagSupport {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(AdaptObjectTag.class);
+ private static final long serialVersionUID = -1945089681840552408L;
+ private Adaptable adaptable;
+ private String adaptTo;
+ private String var;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
+ */
+ @Override
+ public int doEndTag() {
+ log.trace("doEndTag");
+
+ ClassLoader classLoader = getClassLoader();
+ log.debug("Adapting adaptable " + adaptable + " to class " + adaptTo);
+
+ if (adaptable != null) {
+ Object adapted = null;
+ try {
+ Class<?> adaptToClass = classLoader.loadClass(adaptTo);
+ adapted = adaptable.adaptTo(adaptToClass);
+ } catch (ClassNotFoundException e) {
+ log.warn("Unable to retrieve class " + adaptTo, e);
+ }
+
+ log.debug("Saving " + adapted + " to variable " + var);
+ pageContext.setAttribute(var, adapted);
+ } else {
+ log.warn("Null adaptable specified");
+ }
+
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Get the adaptable object to be adapted.
+ *
+ * @return the adaptable
+ */
+ public Adaptable getAdaptable() {
+ return adaptable;
+ }
+
+ /**
+ * Gets the class name to adapt the adaptable to.
+ *
+ * @return the class to adapt to
+ */
+ public String getAdaptTo() {
+ return adaptTo;
+ }
+
+ /**
+ * Method for retrieving the classloader from the OSGi console.
+ *
+ * @return the classloader
+ */
+ protected ClassLoader getClassLoader() {
+ final SlingBindings bindings = (SlingBindings) pageContext.getRequest()
+ .getAttribute(SlingBindings.class.getName());
+ final SlingScriptHelper scriptHelper = bindings.getSling();
+ final DynamicClassLoaderManager dynamicClassLoaderManager = scriptHelper
+ .getService(DynamicClassLoaderManager.class);
+ final ClassLoader classLoader = dynamicClassLoaderManager
+ .getDynamicClassLoader();
+ return classLoader;
+ }
+
+ /**
+ * Gets the variable name to save the resulting object to.
+ *
+ * @return the variable name
+ */
+ public String getVar() {
+ return var;
+ }
+
+ /**
+ * Sets the adaptable object to be adapted.
+ *
+ * @param adaptable
+ * the object to adapt
+ */
+ public void setAdaptable(Adaptable adaptable) {
+ this.adaptable = adaptable;
+ }
+
+ /**
+ * Sets the class name to adapt the adaptable to.
+ *
+ * @param adaptTo
+ * the class to adapt to
+ */
+ public void setAdaptTo(String adaptTo) {
+ this.adaptTo = adaptTo;
+ }
+
+ /**
+ * Gets the variable name to save the resulting object to.
+ *
+ * @param var
+ * the variable name
+ */
+ public void setVar(String var) {
+ this.var = var;
+ }
+
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetPropertyTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetPropertyTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetPropertyTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetPropertyTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,194 @@
+/*
+ * 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.servlet.jsp.tagext.TagSupport;
+
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tag for retrieving a property from a ValueMap.
+ *
+ * @author dklco
+ */
+public class GetPropertyTag extends TagSupport {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(GetPropertyTag.class);
+ private static final long serialVersionUID = -1945089681840552408L;
+ private ValueMap properties;
+ private String key;
+ private Object defaultValue;
+ private String returnClass;
+ private String var;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
+ */
+ @Override
+ public int doEndTag() {
+ log.trace("doEndTag");
+
+ Object value = null;
+ if(properties != null){
+ if (this.defaultValue != null) {
+ value = properties.get(key, defaultValue);
+ } else if (returnClass != null && returnClass.trim().length() != 0) {
+ ClassLoader classLoader = getClassLoader();
+
+ log.debug("Returning value as type: " + returnClass);
+ try {
+ Class<?> clazz = classLoader.loadClass(returnClass);
+ value = properties.get(key, clazz);
+ } catch (ClassNotFoundException cnfe) {
+ log.warn("Unable to find class: " + returnClass, cnfe);
+ }
+ } else {
+ value = properties.get(key);
+ }
+ }else{
+ if (this.defaultValue != null) {
+ value = defaultValue;
+ }
+ }
+
+ log.debug("Saving " + value + " to variable " + var);
+ pageContext.setAttribute(var, value);
+
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Method for retrieving the classloader from the OSGi console.
+ *
+ * @return the classloader
+ */
+ protected ClassLoader getClassLoader() {
+ final SlingBindings bindings = (SlingBindings) pageContext.getRequest()
+ .getAttribute(SlingBindings.class.getName());
+ final SlingScriptHelper scriptHelper = bindings.getSling();
+ final DynamicClassLoaderManager dynamicClassLoaderManager = scriptHelper
+ .getService(DynamicClassLoaderManager.class);
+ final ClassLoader classLoader = dynamicClassLoaderManager
+ .getDynamicClassLoader();
+ return classLoader;
+ }
+
+ /**
+ * Gets the default value to return if no value exists for the key. If
+ * specified, this takes precedence over returnClass.
+ *
+ * @return the default value
+ */
+ public Object getDefaultValue() {
+ return defaultValue;
+ }
+
+ /**
+ * Gets key to retrieve the value from from the ValueMap.
+ *
+ * @return the key
+ */
+ public String getKey() {
+ return key;
+ }
+
+ /**
+ * Gets the ValueMap from which to retrieve the value.
+ *
+ * @return the ValueMap of properties
+ */
+ public ValueMap getProperties() {
+ return properties;
+ }
+
+ /**
+ * Gets the name of class into which to coerce the returned value.
+ *
+ * @return the class name
+ */
+ public String getReturnClass() {
+ return returnClass;
+ }
+
+ /**
+ * Gets the variable name to which to save the value
+ *
+ * @return the variable name
+ */
+ public String getVar() {
+ return var;
+ }
+
+ /**
+ * Sets the default value to return if no value exists for the key. If
+ * specified, this takes precedence over returnClass.
+ *
+ * @param defaultValue
+ * the default value
+ */
+ public void setDefaultValue(Object defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ /**
+ * Sets the key to retrieve the value from from the ValueMap.
+ *
+ * @param key
+ * the key
+ */
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ /**
+ * Sets the ValueMap from which to retrieve the value.
+ *
+ * @param properties
+ * the ValueMap of properties
+ */
+ public void setProperties(ValueMap properties) {
+ this.properties = properties;
+ }
+
+ /**
+ * Sets the name of class into which to coerce the returned value.
+ *
+ * @param returnClass
+ * the class name
+ */
+ public void setReturnClass(String returnClass) {
+ this.returnClass = returnClass;
+ }
+
+ /**
+ * Sets the variable name to which to save the value.
+ *
+ * @param var
+ * the variable name
+ */
+ public void setVar(String var) {
+ this.var = var;
+ }
+}
\ No newline at end of file
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetResourceTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetResourceTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetResourceTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/GetResourceTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,112 @@
+/*
+ * 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.servlet.jsp.tagext.TagSupport;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tag for retrieving a resource based a path.
+ *
+ * @author dklco
+ */
+public class GetResourceTag extends TagSupport {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(GetResourceTag.class);
+ private static final long serialVersionUID = -1945089681840552408L;
+ private String path;
+ private String var;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
+ */
+ @Override
+ public int doEndTag() {
+ log.trace("doEndTag");
+
+ log.debug("Retrieving resource at path: " + path);
+
+ ResourceResolver resolver = getResourceResolver();
+ final Resource resource = resolver.getResource(path);
+
+ log.debug("Saving " + resource + " to variable " + var);
+ pageContext.setAttribute(var, resource);
+
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Method for retrieving the ResourceResolver from the page context.
+ *
+ * @return the resource resolver
+ */
+ protected ResourceResolver getResourceResolver() {
+ final SlingBindings bindings = (SlingBindings) pageContext.getRequest()
+ .getAttribute(SlingBindings.class.getName());
+ final SlingScriptHelper scriptHelper = bindings.getSling();
+ final ResourceResolver resolver = scriptHelper.getRequest()
+ .getResourceResolver();
+ return resolver;
+ }
+
+ /**
+ * Get the path of the resource to retrieve.
+ *
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * Gets the variable name to which to save the list of children.
+ *
+ * @return the variable name
+ */
+ public String getVar() {
+ return var;
+ }
+
+ /**
+ * Set the path of the resource to retrieve.
+ *
+ * @param path
+ * the path
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ /**
+ * Sets the variable name to which to save the list of children.
+ *
+ * @param var
+ * the variable name
+ */
+ public void setVar(String var) {
+ this.var = var;
+ }
+}
\ No newline at end of file
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/ListChildrenTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/ListChildrenTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/ListChildrenTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/ListChildrenTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,100 @@
+/*
+ * 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 java.util.Iterator;
+
+import javax.servlet.jsp.tagext.TagSupport;
+
+import org.apache.sling.api.resource.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tag for listing the children of a Resource. The children will be returned as
+ * an Iterator<Resource> in the specified variable.
+ *
+ * @author dklco
+ */
+public class ListChildrenTag extends TagSupport {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(ListChildrenTag.class);
+ private static final long serialVersionUID = -1945089681840552408L;
+ private Resource resource;
+ private String var;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
+ */
+ @Override
+ public int doEndTag() {
+ log.trace("doEndTag");
+
+ log.debug("Listing the children of resource: " + resource);
+
+ Iterator<Resource> children = null;
+ if (resource != null) {
+ children = resource.listChildren();
+ }
+
+ log.debug("Saving to variable " + var);
+ pageContext.setAttribute(var, children);
+
+ return EVAL_PAGE;
+ }
+
+ /**
+ * Gets the resource of which to list the children.
+ *
+ * @return the Sling Resource
+ */
+ public Resource getResource() {
+ return resource;
+ }
+
+ /**
+ * Gets the variable name to which to save the list of children.
+ *
+ * @return the variable name
+ */
+ public String getVar() {
+ return var;
+ }
+
+ /**
+ * Sets the resource of which to list the children.
+ *
+ * @param resource
+ * the Sling Resource
+ */
+ public void setResource(Resource resource) {
+ this.resource = resource;
+ }
+
+ /**
+ * Sets the variable name to which to save the list of children.
+ *
+ * @param var
+ * the variable name
+ */
+ public void setVar(String var) {
+ this.var = var;
+ }
+}
\ No newline at end of file
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/SlingFunctions.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/SlingFunctions.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/SlingFunctions.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/SlingFunctions.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,69 @@
+/*
+ * 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 java.util.Iterator;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class containing the TagLib Functions for Sling.
+ *
+ * @author dklco
+ */
+public class SlingFunctions {
+
+ /**
+ * The SLF4J Logger.
+ */
+ private static final Logger log = LoggerFactory
+ .getLogger(SlingFunctions.class);
+
+ /**
+ * Method allow for the retrieval of resources.
+ *
+ * @param resolver
+ * the current resource resolver
+ * @param path
+ * the path of the resource to retrieve
+ * @return
+ */
+ public static final Resource getResource(ResourceResolver resolver, String path) {
+ return resolver.getResource(path);
+ }
+
+ /**
+ * Method for allowing the invocation of the Sling Resource listChildren
+ * method.
+ *
+ * @param resource
+ * the resource of which to list the children
+ * @return the children of the resource
+ * @see org.apache.sling.api.resource.Resource#listChildren()
+ */
+ public static final Iterator<Resource> listChildResources(Resource resource) {
+ log.trace("listChildren");
+ if (resource != null) {
+ return resource.listChildren();
+ } else {
+ return null;
+ }
+ }
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/taglib13.tld
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/taglib13.tld?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/taglib13.tld (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/resources/META-INF/taglib13.tld Thu Jan 3 13:18:49 2013
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ 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.
+-->
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
+ version="2.0">
+
+ <description>A supporting tab library for Apache Sling</description>
+ <tlib-version>1.3</tlib-version>
+ <short-name>sling</short-name>
+ <uri>http://sling.apache.org/taglibs/sling/1.3</uri>
+
+ <function>
+ <name>getResource</name>
+ <function-class>org.apache.sling.scripting.jsp.taglib.SlingFunctions</function-class>
+ <function-signature>org.apache.sling.api.resource.Resource getResource(org.apache.sling.api.resource.ResourceResolver, java.lang.String)</function-signature>
+ </function>
+
+ <function>
+ <name>listChildResources</name>
+ <function-class>org.apache.sling.scripting.jsp.taglib.SlingFunctions</function-class>
+ <function-signature>java.util.Iterator listChildResources(org.apache.sling.api.resource.Resource)</function-signature>
+ </function>
+
+ <tag>
+ <description>
+ Execute a script.
+ </description>
+ <name>call</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.CallTag
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ Whether to flush the output before including the target
+ </description>
+ <name>flush</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ <attribute>
+ <description>
+ The script to include.
+ </description>
+ <name>script</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ Controls if the component hierarchy should be ignored for script
+ resolution. If true, only the search paths are respected.
+ </description>
+ <name>ignoreComponentHierarchy</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Includes a resource rendering into the current page
+ </description>
+ <name>include</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.IncludeTagHandler
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ Whether to flush the output before including the target
+ </description>
+ <name>flush</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ <attribute>
+ <description>
+ The resource object to include in the current request
+ processing. Either resource or path must be specified. If
+ both are specified, the resource takes precedences.
+ </description>
+ <name>resource</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>org.apache.sling.api.resource.Resource</type>
+ </attribute>
+ <attribute>
+ <description>
+ The path to the resource object to include in the current
+ request processing. If this path is relative it is
+ appended to the path of the current resource whose
+ script is including the given resource. Either resource
+ or path must be specified. If both are specified, the
+ resource takes precedences.
+ </description>
+ <name>path</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The resource type of a resource to include. If the resource
+ to be included is specified with the path attribute,
+ which cannot be resolved to a resource, the tag may
+ create a synthetic resource object out of the path and
+ this resource type. If the resource type is set the path
+ must be the exact path to a resource object. That is,
+ adding parameters, selectors and extensions to the path
+ is not supported if the resource type is set.
+ </description>
+ <name>resourceType</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, replace selectors by the value
+ provided by this option.
+ </description>
+ <name>replaceSelectors</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, add the value provided by this option to the selectors.
+ </description>
+ <name>addSelectors</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, replace the suffix by the value
+ provided by this option.
+ </description>
+ <name>replaceSuffix</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Forwards a request to a resource rendering the current page
+ </description>
+ <name>forward</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.ForwardTagHandler
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ The resource object to forward the request to. Either
+ resource or path must be specified. If both are
+ specified, the resource takes precedences.
+ </description>
+ <name>resource</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>org.apache.sling.api.resource.Resource</type>
+ </attribute>
+ <attribute>
+ <description>
+ The path to the resource object to forward the request
+ to. If this path is relative it is appended to the path
+ of the current resource whose script is forwarding the
+ given resource. Either resource or path must be specified.
+ If both are specified, the resource takes precedences.
+ </description>
+ <name>path</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The resource type of a resource to forward. If the resource
+ to be forwarded is specified with the path attribute,
+ which cannot be resolved to a resource, the tag may
+ create a synthetic resource object out of the path and
+ this resource type. If the resource type is set the path
+ must be the exact path to a resource object. That is,
+ adding parameters, selectors and extensions to the path
+ is not supported if the resource type is set.
+ </description>
+ <name>resourceType</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, replace selectors by the value
+ provided by this option.
+ </description>
+ <name>replaceSelectors</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, add the value provided by this option to the selectors.
+ </description>
+ <name>addSelectors</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ When dispatching, replace the suffix by the value
+ provided by this option.
+ </description>
+ <name>replaceSuffix</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Defines regularly used scripting variables
+ </description>
+ <name>defineObjects</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.DefineObjectsTag
+ </tag-class>
+ <tei-class>
+ org.apache.sling.scripting.jsp.taglib.DefineObjectsTEI
+ </tei-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>requestName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>responseName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>resourceName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>nodeName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>logName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>resourceResolverName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>slingName</name>
+ <required>false</required>
+ <rtexprvalue>false</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Evaluates a script invocation and includes the result
+ in the current page.
+ </description>
+ <name>eval</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.EvalTagHandler
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ Whether to flush the output before including the target
+ </description>
+ <name>flush</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ <attribute>
+ <description>
+ The path to the script object to include in the current
+ request processing. By default, the current resource
+ is used for script resolving. This behaviour can
+ be changed by specifying either resource, resourceType
+ or ignoreResourceTypeHierarchy.
+ </description>
+ <name>script</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The resource object to include in the current request
+ processing. This attribute is optional. If it is
+ specified, resourceType should not be used. If both
+ are used, resource takes precedence.
+ </description>
+ <name>resource</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>org.apache.sling.api.resource.Resource</type>
+ </attribute>
+ <attribute>
+ <description>
+ The resource type of a resource to include. This
+ attribute is optional. If it is specified, resource
+ should not be used. If bot are used, resource
+ takes precedence.
+ </description>
+ <name>resourceType</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ Prevents using the resource type hierarchy for searching
+ a script.
+ </description>
+ <name>ignoreResourceTypeHierarchy</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>boolean</type>
+ </attribute>
+ </tag>
+ <tag>
+ <description>
+ Adapts adaptables to objects of other types.
+ </description>
+ <name>adapt</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.AdaptObjectTag
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ The adaptable object to adapt.
+ </description>
+ <name>adaptable</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>org.apache.sling.api.adapter.Adaptable</type>
+ </attribute>
+ <attribute>
+ <description>
+ The class name to which to adapt the adaptable.
+ </description>
+ <name>adaptTo</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The name of the variable to which to save the adapted object.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+ <tag>
+ <description>
+ Lists the children of a Sling Resource.
+ </description>
+ <name>listChildren</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.ListChildrenTag
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ The resource for which to retrieve the children.
+ </description>
+ <name>resource</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>org.apache.sling.api.resource.Resource</type>
+ </attribute>
+ <attribute>
+ <description>
+ The name of the variable to which to save the child resources.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+ <tag>
+ <description>
+ Retrieves the resource at the specified path.
+ </description>
+ <name>getResource</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.GetResourceTag
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ The path of the resource to retrieve.
+ </description>
+ <name>path</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The name of the variable to which to save the resource.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+ <tag>
+ <description>
+ Retrieves the value from the ValueMap, allowing for a default value or coercing the return value.
+ </description>
+ <name>getProperty</name>
+ <tag-class>
+ org.apache.sling.scripting.jsp.taglib.GetPropertyTag
+ </tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <description>
+ The name of the variable to which to save the resource.
+ </description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The ValueMap from which to retrieve the value.
+ </description>
+ <name>properties</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The key to retrieve the value from from the ValueMap.
+ </description>
+ <name>key</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The default value to return if no value exists for the key.
+ If specified, this takes precedence over returnClass.
+ </description>
+ <name>defaultValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>
+ The class into which to coerce the returned value.
+ </description>
+ <name>returnClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+</taglib>
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/MockPageContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/MockPageContext.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/MockPageContext.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/MockPageContext.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,161 @@
+package org.apache.sling.scripting.jsp.taglib;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.el.ExpressionEvaluator;
+import javax.servlet.jsp.el.VariableResolver;
+
+public class MockPageContext extends PageContext {
+
+ private Map<String, Object> attributes = new HashMap<String, Object>();
+
+ @Override
+ public void forward(String arg0) throws ServletException, IOException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public Exception getException() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public Object getPage() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public ServletRequest getRequest() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public ServletResponse getResponse() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public ServletConfig getServletConfig() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public HttpSession getSession() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void handlePageException(Exception arg0) throws ServletException,
+ IOException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void handlePageException(Throwable arg0) throws ServletException,
+ IOException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void include(String arg0) throws ServletException, IOException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void include(String arg0, boolean arg1) throws ServletException,
+ IOException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void initialize(Servlet arg0, ServletRequest arg1,
+ ServletResponse arg2, String arg3, boolean arg4, int arg5,
+ boolean arg6) throws IOException, IllegalStateException,
+ IllegalArgumentException {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void release() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public Object findAttribute(String key) {
+ return attributes.get(key);
+ }
+
+ @Override
+ public Object getAttribute(String key) {
+ return attributes.get(key);
+ }
+
+ @Override
+ public Object getAttribute(String key, int arg1) {
+ return attributes.get(key);
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Enumeration getAttributeNamesInScope(int arg0) {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public int getAttributesScope(String arg0) {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public ExpressionEvaluator getExpressionEvaluator() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public JspWriter getOut() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public VariableResolver getVariableResolver() {
+ throw new java.lang.UnsupportedOperationException();
+ }
+
+ @Override
+ public void removeAttribute(String arg0) {
+ attributes.remove(arg0);
+ }
+
+ @Override
+ public void removeAttribute(String arg0, int arg1) {
+ attributes.remove(arg0);
+ }
+
+ @Override
+ public void setAttribute(String arg0, Object arg1) {
+ attributes.put(arg0, arg1);
+ }
+
+ @Override
+ public void setAttribute(String arg0, Object arg1, int arg2) {
+ attributes.put(arg0, arg1);
+ }
+
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestAdaptObjectTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestAdaptObjectTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestAdaptObjectTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestAdaptObjectTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,109 @@
+/*
+ * 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 static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.commons.testing.sling.MockResource;
+import org.apache.sling.commons.testing.sling.MockResourceResolver;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Unit Tests for the Class AdaptObject.
+ *
+ * @author dklco
+ * @see org.apache.sling.scripting.jsp.taglib.AdaptObjectTag
+ */
+public class TestAdaptObjectTag {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(TestAdaptObjectTag.class);
+ private AdaptObjectTag adaptObjectTag;
+ private MockResource resource;
+ private MockPageContext pageContext;
+ private static final String VAR_KEY = "properties";
+
+ /**
+ * Initializes the fields for this test.
+ */
+ @SuppressWarnings("serial")
+ @Before
+ public void init() {
+ log.info("init");
+ adaptObjectTag = new AdaptObjectTag() {
+ protected ClassLoader getClassLoader() {
+ return TestAdaptObjectTag.class.getClassLoader();
+ }
+ };
+
+ pageContext = new MockPageContext();
+ adaptObjectTag.setPageContext(pageContext);
+
+ ResourceResolver resolver = new MockResourceResolver();
+ resource = new MockResource(resolver, "/", "test");
+ log.info("init Complete");
+ }
+
+ /**
+ * Tests the adapt object Tag functionality.
+ */
+ @Test
+ public void testAdaptObject() {
+ log.info("testAdaptObject");
+
+ log.info("Setting up tests");
+ adaptObjectTag.setAdaptable(resource);
+ adaptObjectTag.setAdaptTo(ValueMap.class.getCanonicalName());
+ adaptObjectTag.setVar(VAR_KEY);
+ adaptObjectTag.doEndTag();
+
+ log.info("Checking result");
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(result);
+ assertTrue(result instanceof ValueMap);
+
+ log.info("Test successful!");
+ }
+
+ /**
+ * Tests to ensure that a null result is returned if the class to adapt does
+ * not exist.
+ */
+ @Test
+ public void testMissingClass() {
+ log.info("testMissingClass");
+
+ log.info("Setting up tests");
+ adaptObjectTag.setAdaptable(resource);
+ adaptObjectTag.setAdaptTo("com.bad.class");
+ adaptObjectTag.setVar(VAR_KEY);
+ adaptObjectTag.doEndTag();
+
+ log.info("Checking result");
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNull(result);
+
+ log.info("Test successful!");
+ }
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetPropertyTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetPropertyTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetPropertyTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetPropertyTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,106 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.HashMap;
+
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Unit Tests for the Class GetPropertyTag.
+ *
+ * @author dklco
+ * @see org.apache.sling.scripting.jsp.taglib.GetPropertyTag
+ */
+public class TestGetPropertyTag {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(TestGetPropertyTag.class);
+ private GetPropertyTag getPropertyTag;
+ private MockPageContext pageContext;
+ private static final String VAR_KEY = "value";
+ private static final String TEST_KEY = "key";
+ private static final String TEST_EMPTY_KEY = "key2";
+ private static final String TEST_VALUE = "Sling";
+
+ /**
+ * Initializes the fields for this test.
+ */
+ @SuppressWarnings("serial")
+ @Before
+ public void init() {
+ log.info("init");
+ getPropertyTag = new GetPropertyTag() {
+ protected ClassLoader getClassLoader() {
+ return TestGetPropertyTag.class.getClassLoader();
+ }
+ };
+
+ pageContext = new MockPageContext();
+ getPropertyTag.setPageContext(pageContext);
+ }
+
+ /**
+ * Tests the adapt object Tag functionality.
+ */
+ @Test
+ public void testAdaptObject() {
+ log.info("testAdaptObject");
+
+ log.info("Setting up tests");
+ ValueMap properties = new ValueMapDecorator(
+ new HashMap<String, Object>());
+ properties.put(TEST_KEY, TEST_VALUE);
+ getPropertyTag.setProperties(properties);
+ getPropertyTag.setVar(VAR_KEY);
+
+ log.info("Testing retrieving value with default value");
+ getPropertyTag.setDefaultValue(TEST_VALUE);
+ getPropertyTag.setKey(TEST_KEY);
+ getPropertyTag.doEndTag();
+ Object value = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(value);
+ assertEquals(TEST_VALUE, value);
+
+ log.info("Testing retrieving default value");
+ getPropertyTag.setDefaultValue(TEST_VALUE);
+ getPropertyTag.setKey(TEST_EMPTY_KEY);
+ getPropertyTag.doEndTag();
+ value = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(value);
+ assertEquals(TEST_VALUE, value);
+
+ log.info("Testing retrieving value");
+ getPropertyTag.setDefaultValue(null);
+ getPropertyTag.setReturnClass(String.class.getCanonicalName());
+ getPropertyTag.setKey(TEST_KEY);
+ getPropertyTag.doEndTag();
+ value = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(value);
+ assertEquals(TEST_VALUE, value);
+
+ log.info("Test successful!");
+ }
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetResourceTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetResourceTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetResourceTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestGetResourceTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,108 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.testing.sling.MockResource;
+import org.apache.sling.commons.testing.sling.MockResourceResolver;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Unit Tests for the Class GetResourceTag.
+ *
+ * @author dklco
+ * @see org.apache.sling.scripting.jsp.taglib.GetResourceTag
+ */
+public class TestGetResourceTag {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(TestGetResourceTag.class);
+ private GetResourceTag getResourceTag;
+ private MockResource resource;
+ private MockPageContext pageContext;
+ private static final String VAR_KEY = "resource";
+ private static final String TEST_PATH = "/content";
+ private static final String TEST_NON_PATH = "/content/page";
+
+ /**
+ * Initializes the fields for this test.
+ */
+ @SuppressWarnings("serial")
+ @Before
+ public void init() {
+ log.info("init");
+
+ final MockResourceResolver resolver = new MockResourceResolver();
+ resource = new MockResource(resolver, TEST_PATH, "test");
+ resolver.addResource(resource);
+
+ getResourceTag = new GetResourceTag() {
+ protected ResourceResolver getResourceResolver() {
+ return resolver;
+ }
+ };
+
+ pageContext = new MockPageContext();
+ getResourceTag.setPageContext(pageContext);
+
+ log.info("init Complete");
+ }
+
+ /**
+ * Tests using a 'good' path.
+ */
+ @Test
+ public void testGoodPath() {
+ log.info("testGoodPath");
+
+ getResourceTag.setVar(VAR_KEY);
+ getResourceTag.setPath(TEST_PATH);
+ getResourceTag.doEndTag();
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(result);
+ assertTrue(result instanceof Resource);
+ assertEquals(TEST_PATH, ((Resource) result).getPath());
+
+ log.info("Test successful!");
+ }
+
+ /**
+ * Tests to see what happens if a bad path is specified, this should just
+ * return a null value instead of a resource.
+ */
+ @Test
+ public void testBadPath() {
+ log.info("testBadPath");
+
+ getResourceTag.setVar(VAR_KEY);
+ getResourceTag.setPath(TEST_NON_PATH);
+ getResourceTag.doEndTag();
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNull(result);
+
+ log.info("Test successful!");
+ }
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestListChildrenTag.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestListChildrenTag.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestListChildrenTag.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestListChildrenTag.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,108 @@
+/*
+ * 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 static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.commons.testing.sling.MockResource;
+import org.apache.sling.commons.testing.sling.MockResourceResolver;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Unit Tests for the Class ListChildrenTag.
+ *
+ * @author dklco
+ * @see org.apache.sling.scripting.jsp.taglib.ListChildrenTag
+ */
+public class TestListChildrenTag {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(TestListChildrenTag.class);
+ private ListChildrenTag listChildrenTag = new ListChildrenTag();
+ private MockResource resource;
+ private MockPageContext pageContext;
+ private static final String TEST_PATH = "/content";
+ private static final String VAR_KEY = "children";
+
+ /**
+ * Initializes the fields for this test.
+ */
+ @Before
+ public void init() {
+ log.info("init");
+
+ log.info("Creating Resource Structure");
+ final MockResourceResolver resolver = new MockResourceResolver();
+ resource = new MockResource(resolver, TEST_PATH, "test");
+ resolver.addResource(resource);
+ MockResource child1 = new MockResource(resolver, TEST_PATH + "/child1",
+ "test");
+ resolver.addResource(child1);
+ MockResource child2 = new MockResource(resolver, TEST_PATH + "/child2",
+ "test");
+ resolver.addResource(child2);
+
+ log.info("Adding page context");
+ pageContext = new MockPageContext();
+ listChildrenTag.setPageContext(pageContext);
+
+ log.info("init Complete");
+ }
+
+ /**
+ * Tests to ensure the base ListChildren functionality works.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testListChildren() {
+ log.info("testGoodPath");
+
+ listChildrenTag.setResource(resource);
+ listChildrenTag.setVar(VAR_KEY);
+ listChildrenTag.doEndTag();
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNotNull(result);
+ assertTrue(result instanceof Iterator);
+ assertTrue(((Iterator<Resource>) result).hasNext());
+
+ log.info("Test successful!");
+ }
+
+ /**
+ * Tests to see what happens if a null Resource is provided
+ */
+ @Test
+ public void testNullResource() {
+ log.info("testNullResource");
+
+ listChildrenTag.setVar(VAR_KEY);
+ listChildrenTag.setResource(null);
+ listChildrenTag.doEndTag();
+ Object result = pageContext.getAttribute(VAR_KEY);
+ assertNull(result);
+
+ log.info("Test successful!");
+ }
+}
Added: sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestSlingFunctions.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestSlingFunctions.java?rev=1428328&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestSlingFunctions.java (added)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/test/java/org/apache/sling/scripting/jsp/taglib/TestSlingFunctions.java Thu Jan 3 13:18:49 2013
@@ -0,0 +1,81 @@
+/*
+ * 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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.commons.testing.sling.MockResource;
+import org.apache.sling.commons.testing.sling.MockResourceResolver;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestSlingFunctions {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(TestGetResourceTag.class);
+ private MockResource resource;
+ private MockResourceResolver resolver;
+ private static final String TEST_PATH = "/content";
+
+ /**
+ * Initializes the fields for this test.
+ */
+ @Before
+ public void init() {
+ log.info("init");
+
+ resolver = new MockResourceResolver();
+ resource = new MockResource(resolver, TEST_PATH, "test");
+ resolver.addResource(resource);
+ MockResource child1 = new MockResource(resolver, TEST_PATH + "/child1",
+ "test");
+ resolver.addResource(child1);
+ MockResource child2 = new MockResource(resolver, TEST_PATH + "/child2",
+ "test");
+ resolver.addResource(child2);
+
+ log.info("init Complete");
+ }
+
+ @Test
+ public void testGetResource() {
+ log.info("testGetResource");
+ Resource resource = SlingFunctions.getResource(resolver, TEST_PATH);
+ assertNotNull(resource);
+ assertEquals(TEST_PATH, resource.getPath());
+
+ log.info("Tests successful!");
+ }
+
+ @Test
+ public void testListChildResources() {
+ log.info("testListChildResources");
+ Iterator<Resource> children = SlingFunctions
+ .listChildResources(resource);
+ assertNotNull(children);
+ assertTrue(children.hasNext());
+
+ log.info("Tests successful!");
+ }
+}