You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/10/15 01:01:29 UTC
svn commit: r1022754 - in /shindig/trunk/java:
common/src/main/java/org/apache/shindig/protocol/conversion/
common/src/test/java/org/apache/shindig/protocol/conversion/
gadgets/src/main/java/org/apache/shindig/gadgets/servlet/
Author: zhoresh
Date: Thu Oct 14 23:01:28 2010
New Revision: 1022754
URL: http://svn.apache.org/viewvc?rev=1022754&view=rev
Log:
Ref http://codereview.appspot.com/2479042/
Fix enum support in GadgetHandlerService and add default locale
Also support wrong case for added fields
Modified:
shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java
shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java?rev=1022754&r1=1022753&r2=1022754&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java Thu Oct 14 23:01:28 2010
@@ -58,7 +58,25 @@ public class BeanDelegator {
return (o != null ? o : NULL);
}
- private static final Map<String, Object> EMPTY_FIELDS = ImmutableMap.of();
+ /**
+ * Convert field names to common name - no underscore and lower case
+ */
+ public static String normalizeName(String name) {
+ return name.replaceAll("_", "").toLowerCase();
+ }
+
+ /**
+ * Convert map of fields to common names and nullable values
+ */
+ public static Map<String, Object> normalizeFields(Map<String, Object> original) {
+ ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
+ if (original != null) {
+ for (Map.Entry<String, Object> entry : original.entrySet()) {
+ builder.put(normalizeName(entry.getKey()), nullable(entry.getValue()));
+ }
+ }
+ return builder.build();
+ }
/** List of Classes that are considered primitives and are not proxied **/
public static final ImmutableSet<Class<?>> PRIMITIVE_TYPE_CLASSES = ImmutableSet.of(
@@ -100,14 +118,15 @@ public class BeanDelegator {
@SuppressWarnings("unchecked")
public <T> T createDelegator(Object source, Class<T> apiInterface) {
- return createDelegator(source, apiInterface, EMPTY_FIELDS);
+ return createDelegator(source, apiInterface, null);
}
@SuppressWarnings("unchecked")
public <T> T createDelegator(Object source, Class<T> apiInterface,
Map<String, Object> extraFields) {
- if (source == null && extraFields != null && extraFields.size() > 0) {
+ extraFields = normalizeFields(extraFields);
+ if (source == null && extraFields.size() > 0) {
// Create delegator that is based only on fields, so use dummy object
source = new NullClass();
}
@@ -164,7 +183,7 @@ public class BeanDelegator {
if (enumConvertionMap.containsKey(value)) {
return enumConvertionMap.get(value);
}
- throw new UnsupportedOperationException("Unknown enum value " + value.toString());
+ throw new UnsupportedOperationException("Unknown enum value " + value.name());
}
protected class DelegateInvocationHandler implements InvocationHandler {
@@ -181,7 +200,7 @@ public class BeanDelegator {
Preconditions.checkNotNull(source);
this.source = source;
- this.extraFields = (extraFields == null ? EMPTY_FIELDS : extraFields);
+ this.extraFields = extraFields;
}
/**
@@ -334,23 +353,23 @@ public class BeanDelegator {
}
/**
- * Utility function to auto generate mapping between two enums that have same values (toString)
+ * Utility function to auto generate mapping between two enums that have same values (name)
* All values in the sourceEnum must have values in targetEnum,
* otherwise {@link RuntimeException} is thrown
*/
public static Map<Enum<?>, Enum<?>> createDefaultEnumMap(
Class<? extends Enum<?>> sourceEnum, Class<? extends Enum<?>> targetEnum) {
Map<String, Enum<?>> values2Map = Maps.newHashMap();
- for (Object val2 : targetEnum.getEnumConstants()) {
- values2Map.put(val2.toString(), (Enum<?>) val2);
+ for (Enum<?> val2 : targetEnum.getEnumConstants()) {
+ values2Map.put(val2.name(), val2);
}
Enum<?>[] values1 = sourceEnum.getEnumConstants();
ImmutableMap.Builder<Enum<?>, Enum<?>> mapBuilder = ImmutableMap.builder();
for (Enum<?> val1 : sourceEnum.getEnumConstants()) {
- if (values2Map.containsKey(val1.toString())) {
- mapBuilder.put(val1, values2Map.get(val1.toString()));
+ if (values2Map.containsKey(val1.name())) {
+ mapBuilder.put(val1, values2Map.get(val1.name()));
} else {
- throw new RuntimeException("Missing enum value " + val1.toString()
+ throw new RuntimeException("Missing enum value " + val1.name()
+ " for enum " + targetEnum.getName());
}
}
@@ -358,5 +377,5 @@ public class BeanDelegator {
}
/** Fake class that does not have fields or method for field base delegator */
- static class NullClass {}
+ public static class NullClass {}
}
Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java?rev=1022754&r1=1022753&r2=1022754&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java Thu Oct 14 23:01:28 2010
@@ -218,6 +218,17 @@ public class BeanDelegatorTest extends A
assertSame(container, p.getContainer());
}
+ @Test
+ public void testExtraFieldsBadCase() {
+ TokenData data = new TokenData();
+ String container = "data";
+ TokenInter p = beanDelegator.createDelegator(data, TokenInter.class,
+ ImmutableMap.<String, Object>of("Cont_Ainer", container));
+
+ assertSame(data.getId(), p.getId());
+ assertSame(container, p.getContainer());
+ }
+
// Make sure validate will actually fail
@Test(expected = NoSuchMethodException.class)
public void tesValidate() throws Exception {
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java?rev=1022754&r1=1022753&r2=1022754&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java Thu Oct 14 23:01:28 2010
@@ -58,6 +58,8 @@ import javax.servlet.http.HttpServletRes
*/
public class GadgetsHandlerService {
+ private static final Locale DEFAULT_LOCALE = new Locale("all", "all");
+
// Map shindig data class to API interfaces
@VisibleForTesting
static final Map<Class<?>, Class<?>> apiClasses =
@@ -204,7 +206,7 @@ public class GadgetsHandlerService {
@Override
public Locale getLocale() {
- return request.getLocale();
+ return (request.getLocale() == null ? DEFAULT_LOCALE : request.getLocale());
}
@Override