You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2017/09/01 11:10:34 UTC
svn commit: r1806931 - in /sling/trunk/bundles/scripting/sightly/engine/src:
main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/
test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/
Author: radu
Date: Fri Sep 1 11:10:34 2017
New Revision: 1806931
URL: http://svn.apache.org/viewvc?rev=1806931&view=rev
Log:
SLING-7097 - The SlingRuntimeObjectModel should adapt a target object to ValueMap as a last resort
* delegate first to the super class in SlingRuntimeObjectModel#getProperty
* added tests for all possible Adaptable interactions
Added:
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java
Modified:
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java
Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java?rev=1806931&r1=1806930&r2=1806931&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModel.java Fri Sep 1 11:10:34 2017
@@ -26,17 +26,14 @@ public class SlingRuntimeObjectModel ext
@Override
protected Object getProperty(Object target, Object propertyObj) {
- Object result = null;
- if (target instanceof Adaptable) {
+ Object result = super.getProperty(target, propertyObj);
+ if (result == null && target instanceof Adaptable) {
ValueMap valueMap = ((Adaptable) target).adaptTo(ValueMap.class);
if (valueMap != null) {
String property = toString(propertyObj);
result = valueMap.get(property);
}
}
- if (result == null) {
- result = super.getProperty(target, propertyObj);
- }
return result;
}
Added: sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java?rev=1806931&view=auto
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java (added)
+++ sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/SlingRuntimeObjectModelTest.java Fri Sep 1 11:10:34 2017
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.sling.scripting.sightly.impl.engine.runtime;
+
+import java.util.HashMap;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.apache.sling.api.adapter.Adaptable;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class SlingRuntimeObjectModelTest {
+
+ private static final String VALUE_MAP_VALUE = "ValueMap value";
+ private static final String METHOD_VALUE = "Method value";
+ private SlingRuntimeObjectModel slingRuntimeObjectModel = new SlingRuntimeObjectModel();
+
+ @Test
+ public void getPropertyFromAdaptableWithField() throws Exception {
+ assertEquals("Expected public fields to have priority over ValueMap adaptable's properties.", FieldTestMockAdaptable.test,
+ slingRuntimeObjectModel.getProperty(new FieldTestMockAdaptable(), "test"));
+ }
+
+ @Test
+ public void getPropertyFromAdaptableWithMethod() throws Exception {
+ assertEquals("Expected public methods to have priority over ValueMap adaptable's properties.", METHOD_VALUE,
+ slingRuntimeObjectModel.getProperty(new MethodTestMockAdaptable(), "test"));
+ }@Test
+ public void getPropertyFromAdaptable() throws Exception {
+ assertEquals("Expected to solve property from ValueMap returned by an adaptable.", VALUE_MAP_VALUE,
+ slingRuntimeObjectModel.getProperty(new AdaptableTestMock(), "test"));
+ }
+
+ private abstract class MockAdaptable implements Adaptable {
+
+ ValueMap getValueMap() {
+ return new ValueMapDecorator(new HashMap<String, Object>() {{
+ put("test", VALUE_MAP_VALUE);
+ }});
+ }
+
+ @CheckForNull
+ @Override
+ public <AdapterType> AdapterType adaptTo(@Nonnull Class<AdapterType> aClass) {
+ if (aClass == ValueMap.class) {
+ return (AdapterType) getValueMap();
+ }
+ return null;
+ }
+ }
+
+ public class FieldTestMockAdaptable extends MockAdaptable {
+
+ public static final String test = "Field value";
+
+ }
+
+ public class MethodTestMockAdaptable extends MockAdaptable {
+ public String getTest() {
+ return METHOD_VALUE;
+ }
+ }
+
+ public class AdaptableTestMock extends MockAdaptable {}
+
+}