You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2011/04/01 09:54:37 UTC

svn commit: r1087616 - in /shindig/trunk/java: common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java

Author: lindner
Date: Fri Apr  1 07:54:37 2011
New Revision: 1087616

URL: http://svn.apache.org/viewvc?rev=1087616&view=rev
Log:
SHINDIG-1520 | Patch from Igor Belakovskiy | Feature Parameters are not returned as part of the metadata response to the container

Modified:
    shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.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=1087616&r1=1087615&r2=1087616&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 Fri Apr  1 07:54:37 2011
@@ -21,8 +21,10 @@ package org.apache.shindig.protocol.conv
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
@@ -161,6 +163,21 @@ public class BeanDelegator {
       }
     }
 
+    // Proxy each item in a map (map key is not proxied)
+    if (source instanceof Multimap<?, ?>) {
+      Multimap<?, ?> mapSource = (Multimap<?, ?>) source;
+      if (!mapSource.isEmpty() && delegatedClasses.containsKey(
+          mapSource.values().iterator().next().getClass())) {
+        // Convert Map:
+        ImmutableMultimap.Builder<Object, Object> mapBuilder = ImmutableMultimap.builder();
+        for (Map.Entry<?, ?> entry : mapSource.entries()) {
+          mapBuilder.put(entry.getKey(), createDelegator(entry.getValue(), apiInterface));
+        }
+        return (T) mapBuilder.build();
+      } else {
+        return (T) source;
+      }
+    }
     // Proxy each item in a list
     if (source instanceof List<?>) {
       List<?> listSource = (List<?>) source;
@@ -250,6 +267,8 @@ public class BeanDelegator {
         type = paramType.getActualTypeArguments()[0];
       } else if (Map.class.isAssignableFrom((Class<?>) paramType.getRawType())) {
         type = paramType.getActualTypeArguments()[1];
+      } else if (Multimap.class.isAssignableFrom((Class<?>) paramType.getRawType())) {
+        type = paramType.getActualTypeArguments()[1];
       }
     }
     return (Class<?>) type;
@@ -313,7 +332,19 @@ public class BeanDelegator {
         interfaceType = interfaceParamType.getActualTypeArguments()[1];
         return validateTypes(dataType, interfaceType);
       }
-      // Only support Map and List generics
+      
+      if (Multimap.class.isAssignableFrom((Class<?>) dataParamType.getRawType()) &&
+          Multimap.class.isAssignableFrom((Class<?>) interfaceParamType.getRawType())) {
+        Type dataKeyType = dataParamType.getActualTypeArguments()[0];
+        Type interfaceKeyType = interfaceParamType.getActualTypeArguments()[0];
+        if (dataKeyType != interfaceKeyType || !PRIMITIVE_TYPE_CLASSES.contains(dataKeyType)) {
+          return false;
+        }
+        dataType = dataParamType.getActualTypeArguments()[1];
+        interfaceType = interfaceParamType.getActualTypeArguments()[1];
+        return validateTypes(dataType, interfaceType);
+      }
+      // Only support Multimap, Map and List generics
       return false;
     }
 

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java?rev=1087616&r1=1087615&r2=1087616&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java Fri Apr  1 07:54:37 2011
@@ -18,8 +18,11 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
+import com.google.common.collect.Multimap;
+
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.protocol.conversion.BeanFilter.Unfiltered;
+
 // Keep imports clean, so it is clear what is used by API
 
 import java.util.List;
@@ -162,6 +165,7 @@ public class GadgetsHandlerApi {
   public interface Feature {
     public String getName();
     public boolean getRequired();
+    public Multimap<String, String> getParams();
   }
 
   public interface LinkSpec {