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 {