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>.