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