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