You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:55:01 UTC

[sling-org-apache-sling-models-impl] 08/10: SLING-3455 - fixing issue with injection adaption in classes

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 <ju...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.