You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/11/12 02:25:33 UTC
svn commit: r1034231 - in /shindig/trunk/java/common/src:
main/java/org/apache/shindig/config/ test/java/org/apache/shindig/config/
Author: johnh
Date: Fri Nov 12 01:25:32 2010
New Revision: 1034231
URL: http://svn.apache.org/viewvc?rev=1034231&view=rev
Log:
Reinstate allowance for null values in ContainerConfig children to delete values from the parent.
Modified:
shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java
shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java
shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfigLoader.java
shindig/trunk/java/common/src/test/java/org/apache/shindig/config/BasicContainerConfigTest.java
shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigLoaderTest.java
Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java?rev=1034231&r1=1034230&r2=1034231&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/BasicContainerConfig.java Fri Nov 12 01:25:32 2010
@@ -242,11 +242,13 @@ public class BasicContainerConfig implem
* { 'gadgets.container': ['default'],
* 'base': '/gadgets/foo',
* 'user': 'peter',
- * 'map': { 'latitude': 42, 'longitude': -8 } }
+ * 'map': { 'latitude': 42, 'longitude': -8 },
+ * 'data': [ 'foo', 'bar' ] }
* { 'gadgets.container': ['new'],
* 'user': 'anne',
* 'colour': 'green',
- * 'map': { 'longitude': 130 } }
+ * 'map': { 'longitude': 130 },
+ * 'data': null }
*
* It would result in a merged "new" container that looks like this:
* { 'gadgets.container': ['new'],
@@ -298,7 +300,11 @@ public class BasicContainerConfig implem
(Map<String, Object>) fromParents, (Map<String, Object>) fromContainer));
} else {
// Otherwise we just overwrite it.
- clone.put(field, fromContainer);
+ if (fromContainer == null) {
+ clone.remove(field);
+ } else {
+ clone.put(field, fromContainer);
+ }
}
}
return clone;
Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java?rev=1034231&r1=1034230&r2=1034231&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/ExpressionContainerConfig.java Fri Nov 12 01:25:32 2010
@@ -19,13 +19,13 @@
package org.apache.shindig.config;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.inject.Singleton;
import org.apache.shindig.expressions.Expressions;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -139,17 +139,17 @@ public class ExpressionContainerConfig e
return new DynamicConfigProperty((String) value, expressions, context);
} else if (value instanceof Map<?, ?>) {
Map<?, ?> mapValue = (Map<?, ?>) value;
- ImmutableMap.Builder<Object, Object> newMap = ImmutableMap.builder();
+ Map<Object, Object> newMap = Maps.newHashMap();
for (Map.Entry<?, ?> entry : mapValue.entrySet()) {
newMap.put(entry.getKey(), parseAll(entry.getValue(), context));
}
- return newMap.build();
+ return Collections.unmodifiableMap(newMap);
} else if (value instanceof List<?>) {
- ImmutableList.Builder<Object> newList = ImmutableList.builder();
+ List<Object> newList = Lists.newArrayList();
for (Object entry : (List<?>) value) {
newList.add(parseAll(entry, context));
}
- return newList.build();
+ return Collections.unmodifiableList(newList);
} else {
return value;
}
@@ -160,17 +160,17 @@ public class ExpressionContainerConfig e
return value.toString();
} else if (value instanceof Map<?, ?>) {
Map<?, ?> mapValue = (Map<?, ?>) value;
- ImmutableMap.Builder<Object, Object> newMap = ImmutableMap.builder();
+ Map<Object, Object> newMap = Maps.newHashMap();
for (Map.Entry<?, ?> entry : mapValue.entrySet()) {
newMap.put(entry.getKey(), evaluateAll(entry.getValue()));
}
- return newMap.build();
+ return Collections.unmodifiableMap(newMap);
} else if (value instanceof List<?>) {
- ImmutableList.Builder<Object> newList = ImmutableList.builder();
+ List<Object> newList = Lists.newArrayList();
for (Object entry : (List<?>) value) {
newList.add(evaluateAll(entry));
}
- return newList.build();
+ return Collections.unmodifiableList(newList);
} else {
return value;
}
Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfigLoader.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfigLoader.java?rev=1034231&r1=1034230&r2=1034231&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfigLoader.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfigLoader.java Fri Nov 12 01:25:32 2010
@@ -19,8 +19,8 @@
package org.apache.shindig.config;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.apache.shindig.common.util.ResourceLoader;
@@ -255,9 +255,7 @@ public class JsonContainerConfigLoader {
Map<String, Object> values = new HashMap<String, Object>(json.length(), 1);
for (String key : JSONObject.getNames(json)) {
Object val = jsonToConfig(json.opt(key));
- if (val != null) {
- values.put(key, val);
- }
+ values.put(key, val);
}
return Collections.unmodifiableMap(values);
}
@@ -269,13 +267,11 @@ public class JsonContainerConfigLoader {
@SuppressWarnings("unchecked")
List<String> names = (List<String>) container.get(ContainerConfig.CONTAINER_KEY);
if (names != null && names.contains(ContainerConfig.DEFAULT_CONTAINER)) {
- container = ImmutableMap
- .<String, Object>builder()
- .putAll(container)
- .put(SERVER_PORT, port)
- .put(SERVER_HOST, host)
- .build();
- config.set(i, container);
+ Map<String, Object> newContainer = Maps.newHashMap();
+ newContainer.putAll(container);
+ newContainer.put(SERVER_PORT, port);
+ newContainer.put(SERVER_HOST, host);
+ config.set(i, Collections.unmodifiableMap(newContainer));
}
}
}
Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/config/BasicContainerConfigTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/BasicContainerConfigTest.java?rev=1034231&r1=1034230&r2=1034231&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/config/BasicContainerConfigTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/config/BasicContainerConfigTest.java Fri Nov 12 01:25:32 2010
@@ -23,14 +23,15 @@ import static org.junit.Assert.*;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
import org.apache.shindig.config.ContainerConfig.ConfigObserver;
import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -50,21 +51,23 @@ public class BasicContainerConfigTest {
protected ContainerConfig config;
protected static Map<String, Object> makeContainer(String name, Object... values) {
- Builder<String, Object> newCtr = ImmutableMap.builder();
+ // Not using ImmutableMap to allow null values
+ Map<String, Object> newCtr = Maps.newHashMap();
newCtr.put("gadgets.container", ImmutableList.of(name));
for (int i = 0; i < values.length / 2; ++i) {
newCtr.put(values[i * 2].toString(), values[i * 2 + 1]);
}
- return newCtr.build();
+ return Collections.unmodifiableMap(newCtr);
}
protected static Map<String, Object> makeContainer(List<String> name, Object... values) {
- Builder<String, Object> newCtr = ImmutableMap.builder();
+ // Not using ImmutableMap to allow null values
+ Map<String, Object> newCtr = Maps.newHashMap();
newCtr.put("gadgets.container", name);
for (int i = 0; i < values.length / 2; ++i) {
newCtr.put(values[i * 2].toString(), values[i * 2 + 1]);
}
- return newCtr.build();
+ return Collections.unmodifiableMap(newCtr);
}
@Before
@@ -122,11 +125,13 @@ public class BasicContainerConfigTest {
Map<String, Object> defaultContainer = makeContainer("default",
"base", "/gadgets/foo",
"user", "peter",
- "map", ImmutableMap.of("latitude", 42, "longitude", -8));
+ "map", ImmutableMap.of("latitude", 42, "longitude", -8),
+ "data", ImmutableList.of("foo", "bar"));
Map<String, Object> newContainer = makeContainer("new",
"user", "anne",
"colour", "green",
- "map", ImmutableMap.of("longitude", 130));
+ "map", ImmutableMap.of("longitude", 130),
+ "data", null);
Map<String, Object> expectedContainer = makeContainer("new",
"base", "/gadgets/foo",
"user", "anne",
Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigLoaderTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigLoaderTest.java?rev=1034231&r1=1034230&r2=1034231&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigLoaderTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigLoaderTest.java Fri Nov 12 01:25:32 2010
@@ -254,4 +254,15 @@ public class JsonContainerConfigLoaderTe
createConfigForTest(createContainer(json).getAbsolutePath());
assertNull(config.getMap("default", "features").get("osapi"));
}
+
+ @Test
+ public void testNullEntriesOverrideEntriesInParent() throws Exception {
+ // We use JSON Objects here to guarantee that we're well formed up front.
+ JSONObject parent = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : 'foo' }}");
+ JSONObject child = new JSONObject("{ 'gadgets.container' : ['child'], features : null}");
+ createConfigForTest(createContainer(parent).getAbsolutePath());
+ createConfigForTest(createContainer(child).getAbsolutePath());
+ assertEquals("foo", config.getMap("default", "features").get("osapi"));
+ assertNull(config.getProperty("child", "features"));
+ }
}