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/07/02 15:55:42 UTC
svn commit: r1498941 - in
/sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src:
main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java
test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java
Author: bdelacretaz
Date: Tue Jul 2 13:55:42 2013
New Revision: 1498941
URL: http://svn.apache.org/r1498941
Log:
SLING-2938 - support adapting from child classes
Modified:
sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java
sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java
Modified: sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java?rev=1498941&r1=1498940&r2=1498941&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java (original)
+++ sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/main/java/org/apache/sling/adapter/internal/AdapterMethodsManagerImpl.java Tue Jul 2 13:55:42 2013
@@ -128,7 +128,7 @@ public class AdapterMethodsManagerImpl {
final AdapterFactory factory = new AdapterFactory() {
@SuppressWarnings("unchecked")
public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
- if(adaptable.getClass().equals(fromClass) && type.equals(toClass)) {
+ if(fromClass.isAssignableFrom(adaptable.getClass()) && toClass.equals(type)) {
try {
log.debug("Adapting using method {} from {}", method, provider);
return (AdapterType)method.invoke(provider, adaptable);
Modified: sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java?rev=1498941&r1=1498940&r2=1498941&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java (original)
+++ sling/whiteboard/bdelacretaz/adapter-methods/extensions-adapter/src/test/java/org/apache/sling/adapter/internal/AdapterMethodManagerIT.java Tue Jul 2 13:55:42 2013
@@ -56,6 +56,8 @@ public class AdapterMethodManagerIT {
BundleContext bundleContext;
private List<ServiceRegistration> registeredServices;
+ final TestAdaptable parent = new TestAdaptable(System.currentTimeMillis());
+ final TestAdaptableChild child = new TestAdaptableChild(System.currentTimeMillis() + 1);
static class TestAdaptable extends SlingAdaptable {
final long value;
@@ -65,6 +67,14 @@ public class AdapterMethodManagerIT {
}
}
+ static class TestAdaptableChild extends TestAdaptable {
+ final String someAdditionalField = "FOO";
+
+ TestAdaptableChild(long value) {
+ super(value);
+ }
+ }
+
/** Example/test AdapterMethodsProvider that converts TestAdaptable to Long */
public static class SingleMethodProvider implements AdapterMethodsProvider {
@@ -184,15 +194,9 @@ public class AdapterMethodManagerIT {
public void testInvalidMethodsIgnored() {
registerProvider(new ProviderWithInvalidMethods());
-
- final long value = System.currentTimeMillis();
- final TestAdaptable t = new TestAdaptable(value);
- final Long result = t.adaptTo(Long.class);
-
- assertNotNull("Expecting non-null adapted Long", result);
- assertEquals("Expecting correct adapted value", value + 1, result.longValue());
- assertNull("Expecting no Integer adaptation", t.adaptTo(Integer.class));
- assertNull("Expecting no URL adaptation", t.adaptTo(URL.class));
+ assertAdapted(parent);
+ assertNull("Expecting no Integer adaptation", parent.adaptTo(Integer.class));
+ assertNull("Expecting no URL adaptation", parent.adaptTo(URL.class));
}
@Test
@@ -200,26 +204,37 @@ public class AdapterMethodManagerIT {
registerProvider(new SingleMethodProvider());
registerProvider(new MultipleMethodsProvider());
- final int value = (int)System.currentTimeMillis();
- final TestAdaptable ta = new TestAdaptable(value);
+ assertAdapted(parent);
{
- final Long result = ta.adaptTo(Long.class);
- assertNotNull("Expecting non-null adapted Long", result);
- assertEquals("Expecting correct Long adapted value", value, result.longValue());
- }
-
- {
- final Integer result = ta.adaptTo(Integer.class);
+ final Integer result = parent.adaptTo(Integer.class);
assertNotNull("Expecting non-null adapted Integer", result);
- assertEquals("Expecting correct Integer adapted value", value, result.intValue());
+ assertEquals("Expecting correct Integer adapted value", (int)parent.value, result.intValue());
}
{
- final URL result = ta.adaptTo(URL.class);
- final URL expected = new URL("http://example.com/" + value);
+ final URL result = parent.adaptTo(URL.class);
+ final URL expected = new URL("http://example.com/" + parent.value);
assertNotNull("Expecting non-null adapted URL", result);
assertEquals("Expecting correctly adapted URL", expected, result);
}
}
-}
\ No newline at end of file
+
+ private void assertAdapted(TestAdaptable src) {
+ final Long result = src.adaptTo(Long.class);
+ assertNotNull("Expecting non-null result", result);
+ assertEquals("Expecting correct value", src.value, result.longValue());
+ }
+
+ @Test
+ public void testParentToLong() {
+ registerProvider(new SingleMethodProvider());
+ assertAdapted(parent);
+ }
+
+ @Test
+ public void testChildToLong() {
+ registerProvider(new SingleMethodProvider());
+ assertAdapted(parent);
+ }
+ }
\ No newline at end of file