From 48f58b47cfe77f3a42043b59a95aefa1233a40af Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Mon, 22 Aug 2016 20:24:33 +0530 Subject: [PATCH 01/10] SLICE-128 making SliceLookUpTag type attribute value String --- slice-core-api/pom.xml | 5 +++++ .../com/cognifide/slice/api/tag/SliceLookupTag.java | 9 ++++++--- .../com/cognifide/slice/api/tag/SliceTagUtils.java | 11 +++++++++++ .../com/cognifide/slice/api/tag/package-info.java | 2 +- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/slice-core-api/pom.xml b/slice-core-api/pom.xml index 433fe26e..b692b292 100644 --- a/slice-core-api/pom.xml +++ b/slice-core-api/pom.xml @@ -72,6 +72,11 @@ org.osgi.core + + org.apache.sling + org.apache.sling.commons.classloader + + javax.servlet diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java index 2bbc20b3..1d518422 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java @@ -33,7 +33,7 @@ public class SliceLookupTag extends SimpleTagSupport { private String appName; // auto-detected when null - private Class type; + private String type; private void clean() { type = null; @@ -49,14 +49,17 @@ public void doTag() throws JspException { } final PageContext pageContext = (PageContext) getJspContext(); - final Object model = SliceTagUtils.getFromCurrentPath(pageContext, type, appName); + final Class typeClass = SliceTagUtils.getClassFromType(pageContext, type); + final Object model = SliceTagUtils.getFromCurrentPath(pageContext, typeClass, appName); pageContext.setAttribute(var, model, PageContext.PAGE_SCOPE); + } catch (ClassNotFoundException e) { + throw new JspTagException("Could not get class for " + type); } finally { clean(); } } - public void setType(Class type) { + public void setType(String type) { this.type = type; } diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index 4bcc0c6a..2496173c 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -35,6 +35,7 @@ import com.cognifide.slice.api.injector.InjectorWithContext; import com.cognifide.slice.api.injector.InjectorsRepository; import com.cognifide.slice.api.provider.ModelProvider; +import org.apache.sling.commons.classloader.DynamicClassLoaderManager; public final class SliceTagUtils { @@ -73,6 +74,16 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas return getFromCurrentPath(request, injectorsRepository, requestContextProvider, type, appName); } + public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { + 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.loadClass(type); + } + /** * A helper method that returns a model of the Sling resource related to given request * diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/package-info.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/package-info.java index b4155f5d..5513196b 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/package-info.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/package-info.java @@ -17,7 +17,7 @@ * limitations under the License. * #L% */ -@Version("4.3.0") +@Version("5.0.0") package com.cognifide.slice.api.tag; import aQute.bnd.annotation.Version; From ee07da0152bb807d9f0a626a407eed495dc73ad5 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Mon, 22 Aug 2016 21:19:54 +0530 Subject: [PATCH 02/10] Read Me changes --- README.md | 2 +- .../java/com/cognifide/slice/api/tag/SliceTagUtils.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb16a9b8..e5d527ea 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ Add dependencies to your POM file: com.cognifide.slice slice-core-api - 4.3.0 + 5.0.0 com.cognifide.slice diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index 2496173c..e7804829 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -74,6 +74,14 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas return getFromCurrentPath(request, injectorsRepository, requestContextProvider, type, appName); } + /** + * A helper method that returns the {@link Class} object, resolving it via it's Canonical Name. + * + * @param pageContext allows to access request context + * @param type canonical name of the modal object, whose {@link Class} object needs to be returned + * @return {@link Class} object pertaining to {@code type} as it's canonical name + * @throws ClassNotFoundException if the class was not found + */ public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { final SlingBindings bindings = (SlingBindings) pageContext.getRequest().getAttribute( SlingBindings.class.getName()); From 314679a2e006e22722c2ead62783d6205f9ceec2 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Tue, 23 Aug 2016 09:59:42 +0530 Subject: [PATCH 03/10] Minor ReadMe documentation change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5d527ea..5cc386ff 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ No more business logic in your view (JSP, Sightly scripts) - business logic's pl **JSPs made clean and tidy** - no more these ugly scriptlets. ```jsp - +

${model.text}

``` From 4b910c0eadda11428acbf05bc7ab69d765d2d932 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Tue, 23 Aug 2016 15:08:43 +0530 Subject: [PATCH 04/10] using getSlingScriptHelper method --- .../main/java/com/cognifide/slice/api/tag/SliceTagUtils.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index e7804829..54ea9cd6 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -83,9 +83,7 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas * @throws ClassNotFoundException if the class was not found */ public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { - final SlingBindings bindings = (SlingBindings) pageContext.getRequest().getAttribute( - SlingBindings.class.getName()); - final SlingScriptHelper scriptHelper = bindings.getSling(); + final SlingScriptHelper scriptHelper = getSlingScriptHelper(pageContext); final DynamicClassLoaderManager dynamicClassLoaderManager = scriptHelper .getService(DynamicClassLoaderManager.class); final ClassLoader classLoader = dynamicClassLoaderManager.getDynamicClassLoader(); From 46e22c6af7710d195e08b89acdbb65b95416b6d0 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Tue, 23 Aug 2016 15:46:53 +0530 Subject: [PATCH 05/10] Spec Added --- .../slice/api/tag/SliceTagUtilsTest.groovy | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy diff --git a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy new file mode 100644 index 00000000..9786f0d8 --- /dev/null +++ b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy @@ -0,0 +1,62 @@ +/*- + * #%L + * Slice - Core Tests + * %% + * Copyright (C) 2012 Cognifide Limited + * %% + * Licensed 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. + * #L% + */ + +package com.cognifide.slice.api.tag + +import com.cognifide.slice.test.setup.BaseSetup +import org.apache.sling.api.scripting.SlingBindings +import org.apache.sling.api.scripting.SlingScriptHelper +import org.apache.sling.commons.classloader.DynamicClassLoaderManager +import org.junit.Assert + +import javax.servlet.ServletRequest +import javax.servlet.jsp.PageContext +import java.lang.reflect.Method + +/** + * @author Shashi Bhushan + * Date: 23.08.16 + */ +class SliceTagUtilsTest extends BaseSetup { + + def "Get Class object, given the String type"() { + given: + final PageContext pageContext = Mock(PageContext){ + getRequest()>> Mock(ServletRequest){ + getAttribute(_ as String) >> Mock(SlingBindings) { + getSling() >> Mock(SlingScriptHelper) { + getService(_ as Class) >> Mock(DynamicClassLoaderManager) { + getDynamicClassLoader() >> Mock(ClassLoader) { + loadClass(_ as String) >> SliceTagUtils.class + } + } + } + } + } + } + + when: + Class aClass = SliceTagUtils.getClassFromType(pageContext, "com.cognifide.slice.api.tag.SliceTagUtils"); + + then: "aClass object should not be null and should be equal to expected Class" + Assert.assertNotNull(aClass) + Assert.assertEquals(SliceTagUtils.class, aClass); + } +} From 572e3330b071078294c08dd5f586666aa48b683c Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Tue, 23 Aug 2016 20:10:22 +0530 Subject: [PATCH 06/10] Minor changes in Spec --- .../slice/api/tag/SliceLookupTag.java | 6 +++--- .../slice/api/tag/SliceTagUtilsTest.groovy | 19 ++++++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java index 1d518422..471c8657 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java @@ -49,10 +49,10 @@ public void doTag() throws JspException { } final PageContext pageContext = (PageContext) getJspContext(); - final Class typeClass = SliceTagUtils.getClassFromType(pageContext, type); - final Object model = SliceTagUtils.getFromCurrentPath(pageContext, typeClass, appName); + final Class classObject = SliceTagUtils.getClassFromType(pageContext, type); + final Object model = SliceTagUtils.getFromCurrentPath(pageContext, classObject, appName); pageContext.setAttribute(var, model, PageContext.PAGE_SCOPE); - } catch (ClassNotFoundException e) { + } catch (ClassNotFoundException cause) { throw new JspTagException("Could not get class for " + type); } finally { clean(); diff --git a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy index 9786f0d8..5957301e 100644 --- a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy +++ b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy @@ -37,6 +37,7 @@ import java.lang.reflect.Method class SliceTagUtilsTest extends BaseSetup { def "Get Class object, given the String type"() { + given: final PageContext pageContext = Mock(PageContext){ getRequest()>> Mock(ServletRequest){ @@ -44,7 +45,7 @@ class SliceTagUtilsTest extends BaseSetup { getSling() >> Mock(SlingScriptHelper) { getService(_ as Class) >> Mock(DynamicClassLoaderManager) { getDynamicClassLoader() >> Mock(ClassLoader) { - loadClass(_ as String) >> SliceTagUtils.class + loadClass(_ as String) >> Class.forName(classList.className) } } } @@ -53,10 +54,18 @@ class SliceTagUtilsTest extends BaseSetup { } when: - Class aClass = SliceTagUtils.getClassFromType(pageContext, "com.cognifide.slice.api.tag.SliceTagUtils"); + Class classObject = SliceTagUtils.getClassFromType(pageContext, classList.className); + + then: "classObject should not be null and should be equal to expected Class" + Assert.assertNotNull(classObject) + Assert.assertEquals(classList.classObject, classObject); - then: "aClass object should not be null and should be equal to expected Class" - Assert.assertNotNull(aClass) - Assert.assertEquals(SliceTagUtils.class, aClass); + where: + classList << [ + [ + className : "com.cognifide.slice.api.tag.SliceTagUtils", + classObject : SliceTagUtils.class + ] + ] } } From 0c74dd908075e95b9b74817ab9a6707fbe4b0762 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Tue, 23 Aug 2016 23:27:51 +0530 Subject: [PATCH 07/10] using modelProvider to get Class object --- slice-core-api/pom.xml | 5 ---- .../slice/api/tag/SliceTagUtils.java | 24 ++++++++++++++----- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/slice-core-api/pom.xml b/slice-core-api/pom.xml index b692b292..433fe26e 100644 --- a/slice-core-api/pom.xml +++ b/slice-core-api/pom.xml @@ -72,11 +72,6 @@ org.osgi.core
- - org.apache.sling - org.apache.sling.commons.classloader - - javax.servlet diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index 54ea9cd6..36712b8b 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -35,7 +35,6 @@ import com.cognifide.slice.api.injector.InjectorWithContext; import com.cognifide.slice.api.injector.InjectorsRepository; import com.cognifide.slice.api.provider.ModelProvider; -import org.apache.sling.commons.classloader.DynamicClassLoaderManager; public final class SliceTagUtils { @@ -83,11 +82,24 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas * @throws ClassNotFoundException if the class was not found */ public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { - final SlingScriptHelper scriptHelper = getSlingScriptHelper(pageContext); - final DynamicClassLoaderManager dynamicClassLoaderManager = scriptHelper - .getService(DynamicClassLoaderManager.class); - final ClassLoader classLoader = dynamicClassLoaderManager.getDynamicClassLoader(); - return classLoader.loadClass(type); + final SlingHttpServletRequest request = SliceTagUtils.slingRequestFrom(pageContext); + final InjectorsRepository injectorsRepository = SliceTagUtils.injectorsRepositoryFrom(pageContext); + + final String injectorName = getInjectorName(request, null, injectorsRepository); + + final InjectorWithContext injector = injectorsRepository.getInjector(injectorName); + if (injector == null) { + throw new IllegalStateException("Guice injector not found: " + injectorName); + } + injector.pushContextProvider(contextProviderFrom(pageContext)); + + final ModelProvider modelProvider = injector.getInstance(ModelProvider.class); + + try { + return modelProvider.get(type, request.getResource()).getClass(); + } finally { + injector.popContextProvider(); + } } /** From 391e3d08220940cc02a03233fc897285ebc5ac98 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Wed, 24 Aug 2016 17:37:43 +0530 Subject: [PATCH 08/10] SLICE-128 changes in SliceTagUtils#getFromCurrentPath(PageContext, String, String) and commented Test Case --- .../slice/api/tag/SliceLookupTag.java | 3 +- .../slice/api/tag/SliceTagUtils.java | 36 ++++++++++++------- .../slice/api/tag/SliceTagUtilsTest.groovy | 6 +++- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java index 471c8657..bdda7cc3 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java @@ -49,8 +49,7 @@ public void doTag() throws JspException { } final PageContext pageContext = (PageContext) getJspContext(); - final Class classObject = SliceTagUtils.getClassFromType(pageContext, type); - final Object model = SliceTagUtils.getFromCurrentPath(pageContext, classObject, appName); + final Object model = SliceTagUtils.getFromCurrentPath(pageContext, type, appName); pageContext.setAttribute(var, model, PageContext.PAGE_SCOPE); } catch (ClassNotFoundException cause) { throw new JspTagException("Could not get class for " + type); diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java index 36712b8b..99b0a1b3 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceTagUtils.java @@ -74,34 +74,44 @@ public static T getFromCurrentPath(final PageContext pageContext, final Clas } /** - * A helper method that returns the {@link Class} object, resolving it via it's Canonical Name. + * A helper method that returns the model of {@code type} * * @param pageContext allows to access request context - * @param type canonical name of the modal object, whose {@link Class} object needs to be returned - * @return {@link Class} object pertaining to {@code type} as it's canonical name + * @param type canonical name of the class, whose model object needs to be returned + * @return Model object pertaining to {@code type} as it's canonical name * @throws ClassNotFoundException if the class was not found */ - public static Class getClassFromType(final PageContext pageContext, final String type) throws ClassNotFoundException { - final SlingHttpServletRequest request = SliceTagUtils.slingRequestFrom(pageContext); - final InjectorsRepository injectorsRepository = SliceTagUtils.injectorsRepositoryFrom(pageContext); + public static Object getFromCurrentPath(final PageContext pageContext, final String type, + final String appName) throws ClassNotFoundException { + final SlingHttpServletRequest request = slingRequestFrom(pageContext); + final InjectorWithContext injector = getInjectorWithContext(pageContext, request, appName); - final String injectorName = getInjectorName(request, null, injectorsRepository); - - final InjectorWithContext injector = injectorsRepository.getInjector(injectorName); - if (injector == null) { - throw new IllegalStateException("Guice injector not found: " + injectorName); - } injector.pushContextProvider(contextProviderFrom(pageContext)); final ModelProvider modelProvider = injector.getInstance(ModelProvider.class); try { - return modelProvider.get(type, request.getResource()).getClass(); + return modelProvider.get(type, request.getResource()); } finally { injector.popContextProvider(); } } + private static InjectorWithContext getInjectorWithContext(final PageContext pageContext, + final SlingHttpServletRequest request, final String appName){ + final InjectorsRepository injectorsRepository = injectorsRepositoryFrom(pageContext); + + final String injectorName = getInjectorName(request, appName, injectorsRepository); + + InjectorWithContext injector = injectorsRepository.getInjector(injectorName); + + if (injector == null) { + throw new IllegalStateException("Guice injector not found for app: " + appName); + } else { + return injector; + } + } + /** * A helper method that returns a model of the Sling resource related to given request * diff --git a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy index 5957301e..e659a708 100644 --- a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy +++ b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy @@ -36,6 +36,9 @@ import java.lang.reflect.Method */ class SliceTagUtilsTest extends BaseSetup { +/* +// Commenting for now because it's a failing test, will write test case once the implementation of getClassFromType is finalized. + def "Get Class object, given the String type"() { given: @@ -68,4 +71,5 @@ class SliceTagUtilsTest extends BaseSetup { ] ] } -} + */ +} \ No newline at end of file From c676d8b091771230c9613bf5130395cee8bac671 Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Fri, 26 Aug 2016 15:00:12 +0530 Subject: [PATCH 09/10] SLICE-128 changes in SliceLookUpTag - backward compatible --- .../slice/api/tag/SliceLookupTag.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java index bdda7cc3..c2af3284 100644 --- a/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java +++ b/slice-core-api/src/main/java/com/cognifide/slice/api/tag/SliceLookupTag.java @@ -33,33 +33,40 @@ public class SliceLookupTag extends SimpleTagSupport { private String appName; // auto-detected when null - private String type; + private String name; + + private Class type; private void clean() { type = null; var = null; appName = null; + name = null; } @Override public void doTag() throws JspException { try { - if (StringUtils.isBlank(var) || (type == null)) { + if (StringUtils.isBlank(var) || (type == null && StringUtils.isEmpty(name))) { throw new JspTagException("Var and Type must be set " + appName); } final PageContext pageContext = (PageContext) getJspContext(); - final Object model = SliceTagUtils.getFromCurrentPath(pageContext, type, appName); + final Object model = StringUtils.isEmpty(name) ? SliceTagUtils.getFromCurrentPath(pageContext, type, appName) : SliceTagUtils.getFromCurrentPath(pageContext, name, appName); pageContext.setAttribute(var, model, PageContext.PAGE_SCOPE); } catch (ClassNotFoundException cause) { - throw new JspTagException("Could not get class for " + type); + throw new JspTagException("Could not get class for " + name + cause.getMessage()); } finally { clean(); } } - public void setType(String type) { - this.type = type; + public void setType(Object type) { + if(type instanceof Class){ + this.type = (Class)type; + }else if(type instanceof String){ + this.name = (String)type; + } } public void setVar(String var) { From 3b39c6f7c1426cd85db72166b1da3408eed7b1fc Mon Sep 17 00:00:00 2001 From: Shashi Bhushan Date: Mon, 29 Aug 2016 12:12:14 +0530 Subject: [PATCH 10/10] SLICE-128 ReadMe update and removing unused TestCase --- README.md | 5 ++ .../slice/api/tag/SliceTagUtilsTest.groovy | 75 ------------------- 2 files changed, 5 insertions(+), 75 deletions(-) delete mode 100644 slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy diff --git a/README.md b/README.md index 5cc386ff..e30049cc 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,11 @@ No more business logic in your view (JSP, Sightly scripts) - business logic's pl **JSPs made clean and tidy** - no more these ugly scriptlets. ```jsp + +

${model.text}

+``` +or it can be +```jsp

${model.text}

``` diff --git a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy b/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy deleted file mode 100644 index e659a708..00000000 --- a/slice-test/slice-core-test/src/test/groovy/com/cognifide/slice/api/tag/SliceTagUtilsTest.groovy +++ /dev/null @@ -1,75 +0,0 @@ -/*- - * #%L - * Slice - Core Tests - * %% - * Copyright (C) 2012 Cognifide Limited - * %% - * Licensed 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. - * #L% - */ - -package com.cognifide.slice.api.tag - -import com.cognifide.slice.test.setup.BaseSetup -import org.apache.sling.api.scripting.SlingBindings -import org.apache.sling.api.scripting.SlingScriptHelper -import org.apache.sling.commons.classloader.DynamicClassLoaderManager -import org.junit.Assert - -import javax.servlet.ServletRequest -import javax.servlet.jsp.PageContext -import java.lang.reflect.Method - -/** - * @author Shashi Bhushan - * Date: 23.08.16 - */ -class SliceTagUtilsTest extends BaseSetup { - -/* -// Commenting for now because it's a failing test, will write test case once the implementation of getClassFromType is finalized. - - def "Get Class object, given the String type"() { - - given: - final PageContext pageContext = Mock(PageContext){ - getRequest()>> Mock(ServletRequest){ - getAttribute(_ as String) >> Mock(SlingBindings) { - getSling() >> Mock(SlingScriptHelper) { - getService(_ as Class) >> Mock(DynamicClassLoaderManager) { - getDynamicClassLoader() >> Mock(ClassLoader) { - loadClass(_ as String) >> Class.forName(classList.className) - } - } - } - } - } - } - - when: - Class classObject = SliceTagUtils.getClassFromType(pageContext, classList.className); - - then: "classObject should not be null and should be equal to expected Class" - Assert.assertNotNull(classObject) - Assert.assertEquals(classList.classObject, classObject); - - where: - classList << [ - [ - className : "com.cognifide.slice.api.tag.SliceTagUtils", - classObject : SliceTagUtils.class - ] - ] - } - */ -} \ No newline at end of file