This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.models.impl-1.0.2
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-models-impl.git

commit f9c661982d80203d06f9a64bb5cfe7612612116d
Author: Justin Edelson <[email protected]>
AuthorDate: Fri Mar 14 13:54:27 2014 +0000

    SLING-3455 - fixing issue with injection adaption in classes
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/models/impl@1577534
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../sling/models/impl/ModelAdapterFactory.java     |  4 +-
 .../models/impl/ResourceModelClassesTest.java      |  6 +-
 .../models/impl/ResourceModelInterfacesTest.java   | 68 +++++++++++++++++++++-
 .../ChildResourceModel.java}                       | 12 ++--
 .../ChildValueMapModel.java}                       | 13 +++--
 .../{interfaces => classes}/ParentModel.java       | 11 ++--
 .../{ParentModel.java => ChildModel.java}          |  5 +-
 .../models/testmodels/interfaces/ParentModel.java  |  1 -
 8 files changed, 98 insertions(+), 22 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java 
b/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java
index caf88a6..6fe7868 100644
--- a/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java
+++ b/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java
@@ -571,8 +571,8 @@ public class ModelAdapterFactory implements AdapterFactory, 
Runnable {
 
     private boolean setField(Field field, Object createdObject, Object value) {
         if (value != null) {
-            if (!isAcceptableType(field.getClass(), value) && value instanceof 
Adaptable) {
-                value = ((Adaptable) value).adaptTo(field.getClass());
+            if (!isAcceptableType(field.getType(), value) && value instanceof 
Adaptable) {
+                value = ((Adaptable) value).adaptTo(field.getType());
                 if (value == null) {
                     return false;
                 }
diff --git 
a/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java 
b/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java
index 552f142..8f6aaf7 100644
--- a/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java
+++ b/src/test/java/org/apache/sling/models/impl/ResourceModelClassesTest.java
@@ -30,11 +30,11 @@ import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.models.impl.injectors.ChildResourceInjector;
 import org.apache.sling.models.impl.injectors.ValueMapInjector;
 import org.apache.sling.models.testmodels.classes.ChildModel;
+import org.apache.sling.models.testmodels.classes.ChildResourceModel;
+import org.apache.sling.models.testmodels.classes.ChildValueMapModel;
+import org.apache.sling.models.testmodels.classes.ParentModel;
 import 
org.apache.sling.models.testmodels.classes.ResourceModelWithRequiredField;
 import org.apache.sling.models.testmodels.classes.SimplePropertyModel;
-import org.apache.sling.models.testmodels.interfaces.ChildResourceModel;
-import org.apache.sling.models.testmodels.interfaces.ChildValueMapModel;
-import org.apache.sling.models.testmodels.interfaces.ParentModel;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git 
a/src/test/java/org/apache/sling/models/impl/ResourceModelInterfacesTest.java 
b/src/test/java/org/apache/sling/models/impl/ResourceModelInterfacesTest.java
index 6d1b0c8..663d653 100644
--- 
a/src/test/java/org/apache/sling/models/impl/ResourceModelInterfacesTest.java
+++ 
b/src/test/java/org/apache/sling/models/impl/ResourceModelInterfacesTest.java
@@ -16,24 +16,32 @@
  */
 package org.apache.sling.models.impl;
 
-import static org.mockito.Mockito.*;
 import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
 
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.lang.RandomStringUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.apache.sling.models.impl.injectors.ChildResourceInjector;
 import org.apache.sling.models.impl.injectors.ValueMapInjector;
 import 
org.apache.sling.models.testmodels.classes.ResourceModelWithRequiredField;
+import org.apache.sling.models.testmodels.interfaces.ChildModel;
+import org.apache.sling.models.testmodels.interfaces.ChildResourceModel;
+import org.apache.sling.models.testmodels.interfaces.ChildValueMapModel;
+import org.apache.sling.models.testmodels.interfaces.ParentModel;
 import org.apache.sling.models.testmodels.interfaces.SimplePropertyModel;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.service.component.ComponentContext;
@@ -55,6 +63,8 @@ public class ResourceModelInterfacesTest {
         factory = new ModelAdapterFactory();
         factory.activate(componentCtx);
         factory.bindInjector(new ValueMapInjector(),
+                Collections.<String, Object> 
singletonMap(Constants.SERVICE_ID, 1L));
+        factory.bindInjector(new ChildResourceInjector(),
                 Collections.<String, Object> 
singletonMap(Constants.SERVICE_ID, 0L));
     }
 
@@ -92,5 +102,61 @@ public class ResourceModelInterfacesTest {
 
         verify(vm).get("required", String.class);
     }
+    
+    @Test
+    public void testChildResource() {
+        Resource child = mock(Resource.class);
+
+        Resource res = mock(Resource.class);
+        when(res.getChild("firstChild")).thenReturn(child);
+
+        ChildResourceModel model = factory.getAdapter(res, 
ChildResourceModel.class);
+        assertNotNull(model);
+        assertEquals(child, model.getFirstChild());
+    }
+
+    @Test
+    public void testChildValueMap() {
+        ValueMap map = ValueMapDecorator.EMPTY;
+
+        Resource child = mock(Resource.class);
+        when(child.adaptTo(ValueMap.class)).thenReturn(map);
+
+        Resource res = mock(Resource.class);
+        when(res.getChild("firstChild")).thenReturn(child);
+
+        ChildValueMapModel model = factory.getAdapter(res, 
ChildValueMapModel.class);
+        assertNotNull(model);
+        assertEquals(map, model.getFirstChild());
+    }
+
+    @Test
+    public void testChildModel() {
+        Object value = RandomStringUtils.randomAlphabetic(10);
+        Map<String, Object> props = Collections.singletonMap("property", 
value);
+        ValueMap map = new ValueMapDecorator(props);
+
+        final Resource child = mock(Resource.class);
+        when(child.adaptTo(ValueMap.class)).thenReturn(map);
+        when(child.adaptTo(ChildModel.class)).thenAnswer(new 
Answer<ChildModel>() {
+
+            @Override
+            public ChildModel answer(InvocationOnMock invocation) throws 
Throwable {
+                return factory.getAdapter(child, ChildModel.class);
+            }
+
+        });
+
+        Resource res = mock(Resource.class);
+        when(res.getChild("firstChild")).thenReturn(child);
+
+        ParentModel model = factory.getAdapter(res, ParentModel.class);
+        assertNotNull(model);
+
+        ChildModel childModel = model.getFirstChild();
+        assertNotNull(childModel);
+        assertEquals(value, childModel.getProperty());
+    }
+
 
 }
diff --git 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java 
b/src/test/java/org/apache/sling/models/testmodels/classes/ChildResourceModel.java
similarity index 83%
copy from 
src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
copy to 
src/test/java/org/apache/sling/models/testmodels/classes/ChildResourceModel.java
index e0ec29d..0bca5ec 100644
--- 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
+++ 
b/src/test/java/org/apache/sling/models/testmodels/classes/ChildResourceModel.java
@@ -14,17 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.models.testmodels.interfaces;
+package org.apache.sling.models.testmodels.classes;
 
 import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.testmodels.classes.ChildModel;
 
 @Model(adaptables = Resource.class)
-public interface ParentModel {
+public class ChildResourceModel {
 
     @Inject
-    public ChildModel getFirstChild();
+    private Resource firstChild;
+    
+    public Resource getFirstChild() {
+        return firstChild;
+    }
+
 }
diff --git 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java 
b/src/test/java/org/apache/sling/models/testmodels/classes/ChildValueMapModel.java
similarity index 80%
copy from 
src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
copy to 
src/test/java/org/apache/sling/models/testmodels/classes/ChildValueMapModel.java
index e0ec29d..01d1aea 100644
--- 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
+++ 
b/src/test/java/org/apache/sling/models/testmodels/classes/ChildValueMapModel.java
@@ -14,17 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.models.testmodels.interfaces;
+package org.apache.sling.models.testmodels.classes;
 
 import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.testmodels.classes.ChildModel;
 
 @Model(adaptables = Resource.class)
-public interface ParentModel {
+public class ChildValueMapModel {
 
     @Inject
-    public ChildModel getFirstChild();
+    private ValueMap firstChild;
+    
+    public ValueMap getFirstChild() {
+        return firstChild;
+    }
+
 }
diff --git 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java 
b/src/test/java/org/apache/sling/models/testmodels/classes/ParentModel.java
similarity index 83%
copy from 
src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
copy to 
src/test/java/org/apache/sling/models/testmodels/classes/ParentModel.java
index e0ec29d..c0da400 100644
--- 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
+++ b/src/test/java/org/apache/sling/models/testmodels/classes/ParentModel.java
@@ -14,17 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.models.testmodels.interfaces;
+package org.apache.sling.models.testmodels.classes;
 
 import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.testmodels.classes.ChildModel;
 
 @Model(adaptables = Resource.class)
-public interface ParentModel {
+public class ParentModel {
 
     @Inject
-    public ChildModel getFirstChild();
+    private ChildModel firstChild;
+
+    public ChildModel getFirstChild() {
+        return firstChild;
+    }
 }
diff --git 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java 
b/src/test/java/org/apache/sling/models/testmodels/interfaces/ChildModel.java
similarity index 88%
copy from 
src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
copy to 
src/test/java/org/apache/sling/models/testmodels/interfaces/ChildModel.java
index e0ec29d..d74d550 100644
--- 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
+++ 
b/src/test/java/org/apache/sling/models/testmodels/interfaces/ChildModel.java
@@ -20,11 +20,10 @@ import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.testmodels.classes.ChildModel;
 
 @Model(adaptables = Resource.class)
-public interface ParentModel {
+public interface ChildModel {
 
     @Inject
-    public ChildModel getFirstChild();
+    public String getProperty();
 }
diff --git 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java 
b/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
index e0ec29d..5dceeb5 100644
--- 
a/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
+++ 
b/src/test/java/org/apache/sling/models/testmodels/interfaces/ParentModel.java
@@ -20,7 +20,6 @@ import javax.inject.Inject;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.models.annotations.Model;
-import org.apache.sling.models.testmodels.classes.ChildModel;
 
 @Model(adaptables = Resource.class)
 public interface ParentModel {

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to