You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2008/07/03 23:20:24 UTC
svn commit: r673815 - in /incubator/shindig/trunk/java/social-api/src:
main/java/org/apache/shindig/social/
main/java/org/apache/shindig/social/canonical/
main/java/org/apache/shindig/social/opensocial/
main/java/org/apache/shindig/social/opensocial/mo...
Author: lryan
Date: Thu Jul 3 14:20:23 2008
New Revision: 673815
URL: http://svn.apache.org/viewvc?rev=673815&view=rev
Log:
lots of misc fixes to the Bean<->JSON binder including full roundtrip support for all model objects.
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/canonical/
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/DefaultModelGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/EnumUtil.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/canonical/
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/AddressImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EmailImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Enum.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EnumImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/MessageImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/NameImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PersonImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PhoneImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/UrlImpl.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanJsonConverter.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonConverterTest.java
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java Thu Jul 3 14:20:23 2008
@@ -18,6 +18,12 @@
*/
package org.apache.shindig.social;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
import org.apache.shindig.common.servlet.ParameterFetcher;
import org.apache.shindig.social.abdera.SocialRouteManager;
import org.apache.shindig.social.dataservice.ActivityService;
@@ -26,31 +32,21 @@
import org.apache.shindig.social.dataservice.PersonService;
import org.apache.shindig.social.opensocial.ActivitiesService;
import org.apache.shindig.social.opensocial.DataService;
+import org.apache.shindig.social.opensocial.DefaultModelGuiceModule;
import org.apache.shindig.social.opensocial.OpenSocialDataHandler;
import org.apache.shindig.social.opensocial.PeopleService;
-import org.apache.shindig.social.opensocial.model.Activity;
-import org.apache.shindig.social.opensocial.model.ActivityImpl;
-import org.apache.shindig.social.opensocial.model.MediaItem;
-import org.apache.shindig.social.opensocial.model.MediaItemImpl;
import org.apache.shindig.social.samplecontainer.BasicActivitiesService;
import org.apache.shindig.social.samplecontainer.BasicDataService;
import org.apache.shindig.social.samplecontainer.BasicPeopleService;
import org.apache.shindig.social.samplecontainer.SampleContainerRouteManager;
import org.apache.shindig.social.samplecontainer.StateFileDataHandler;
-import com.google.common.collect.Lists;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.TypeLiteral;
-import com.google.inject.name.Names;
-
import java.util.List;
/**
* Provides social api component injection
*/
-public class SocialApiGuiceModule extends AbstractModule {
+public class SocialApiGuiceModule extends DefaultModelGuiceModule {
/** {@inheritDoc} */
@Override
@@ -70,9 +66,6 @@
bind(ParameterFetcher.class).annotatedWith(Names.named("GadgetDataServlet")).to(GadgetDataServletFetcher.class);
bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet")).to(DataServiceServletFetcher.class);
-
- bind(Activity.class).to(ActivityImpl.class);
- bind(MediaItem.class).to(MediaItemImpl.class);
}
public static class GadgetDataHandlersProvider
Added: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/DefaultModelGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/DefaultModelGuiceModule.java?rev=673815&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/DefaultModelGuiceModule.java (added)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/DefaultModelGuiceModule.java Thu Jul 3 14:20:23 2008
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.social.opensocial;
+
+import com.google.inject.AbstractModule;
+
+import org.apache.shindig.social.opensocial.model.Activity;
+import org.apache.shindig.social.opensocial.model.ActivityImpl;
+import org.apache.shindig.social.opensocial.model.Address;
+import org.apache.shindig.social.opensocial.model.AddressImpl;
+import org.apache.shindig.social.opensocial.model.BodyType;
+import org.apache.shindig.social.opensocial.model.BodyTypeImpl;
+import org.apache.shindig.social.opensocial.model.Email;
+import org.apache.shindig.social.opensocial.model.EmailImpl;
+import org.apache.shindig.social.opensocial.model.MediaItem;
+import org.apache.shindig.social.opensocial.model.MediaItemImpl;
+import org.apache.shindig.social.opensocial.model.Message;
+import org.apache.shindig.social.opensocial.model.MessageImpl;
+import org.apache.shindig.social.opensocial.model.Name;
+import org.apache.shindig.social.opensocial.model.NameImpl;
+import org.apache.shindig.social.opensocial.model.Organization;
+import org.apache.shindig.social.opensocial.model.OrganizationImpl;
+import org.apache.shindig.social.opensocial.model.Person;
+import org.apache.shindig.social.opensocial.model.PersonImpl;
+import org.apache.shindig.social.opensocial.model.Phone;
+import org.apache.shindig.social.opensocial.model.PhoneImpl;
+import org.apache.shindig.social.opensocial.model.Url;
+import org.apache.shindig.social.opensocial.model.UrlImpl;
+
+/**
+ * Module for binding standard model implementations
+ */
+public class DefaultModelGuiceModule extends AbstractModule {
+
+ protected void configure() {
+ bind(Activity.class).to(ActivityImpl.class);
+ bind(Address.class).to(AddressImpl.class);
+ bind(BodyType.class).to(BodyTypeImpl.class);
+ bind(Email.class).to(EmailImpl.class);
+ bind(MediaItem.class).to(MediaItemImpl.class);
+ bind(Message.class).to(MessageImpl.class);
+ bind(Name.class).to(NameImpl.class);
+ bind(Organization.class).to(OrganizationImpl.class);
+ bind(Person.class).to(PersonImpl.class);
+ bind(Phone.class).to(PhoneImpl.class);
+ bind(Url.class).to(UrlImpl.class);
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/AddressImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/AddressImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/AddressImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/AddressImpl.java Thu Jul 3 14:20:23 2008
@@ -31,6 +31,9 @@
private String type;
private String unstructuredAddress;
+ public AddressImpl() {
+ }
+
public AddressImpl(String unstructuredAddress) {
this.unstructuredAddress = unstructuredAddress;
}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EmailImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EmailImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EmailImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EmailImpl.java Thu Jul 3 14:20:23 2008
@@ -22,6 +22,9 @@
private String address;
private String type;
+ public EmailImpl() {
+ }
+
public EmailImpl(String address, String type) {
this.address = address;
this.type = type;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Enum.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Enum.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Enum.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/Enum.java Thu Jul 3 14:20:23 2008
@@ -27,6 +27,26 @@
*/
public interface Enum<E extends Enum.EnumKey> {
+ /**
+ * Set of fields associated with an Enum object
+ */
+ public static enum Field {
+ KEY("key"),
+ // TODO Shouldnt this be 'displayValue'
+ DISPLAY_VALUE("displayvalue");
+
+ private final String jsonString;
+
+ private Field(String jsonString) {
+ this.jsonString = jsonString;
+ }
+
+ @Override
+ public String toString() {
+ return this.jsonString;
+ }
+ }
+
public interface EnumKey {
String getDisplayValue();
}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EnumImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EnumImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EnumImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/EnumImpl.java Thu Jul 3 14:20:23 2008
@@ -17,7 +17,7 @@
*/
package org.apache.shindig.social.opensocial.model;
-public final class EnumImpl<E extends EnumImpl.EnumKey> implements Enum<E> {
+public final class EnumImpl<E extends Enum.EnumKey> implements Enum<E> {
private String displayValue;
private E key = null;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/MessageImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/MessageImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/MessageImpl.java Thu Jul 3 14:20:23 2008
@@ -23,6 +23,9 @@
private String title;
private Type type;
+ public MessageImpl() {
+ }
+
public MessageImpl(String initBody, String initTitle, Type initType) {
this.body = initBody;
this.title = initTitle;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/NameImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/NameImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/NameImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/NameImpl.java Thu Jul 3 14:20:23 2008
@@ -26,6 +26,9 @@
private String honorificSuffix;
private String unstructured;
+ public NameImpl() {
+ }
+
public NameImpl(String unstructured) {
this.unstructured = unstructured;
}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PersonImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PersonImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PersonImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PersonImpl.java Thu Jul 3 14:20:23 2008
@@ -82,6 +82,9 @@
private boolean isOwner = false;
private boolean isViewer = false;
+ public PersonImpl() {
+ }
+
public PersonImpl(String id, Name name) {
this.id = id;
this.name = name;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PhoneImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PhoneImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PhoneImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/PhoneImpl.java Thu Jul 3 14:20:23 2008
@@ -22,6 +22,9 @@
private String number;
private String type;
+ public PhoneImpl() {
+ }
+
public PhoneImpl(String number, String type) {
super();
this.number = number;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/UrlImpl.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/UrlImpl.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/UrlImpl.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/model/UrlImpl.java Thu Jul 3 14:20:23 2008
@@ -27,6 +27,9 @@
private String linkText;
private String type;
+ public UrlImpl() {
+ }
+
public UrlImpl(String address, String linkText, String type) {
this.address = address;
this.linkText = linkText;
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanJsonConverter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanJsonConverter.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanJsonConverter.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanJsonConverter.java Thu Jul 3 14:20:23 2008
@@ -19,9 +19,13 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Injector;
+import org.apache.shindig.social.opensocial.model.Enum;
+import org.apache.shindig.social.opensocial.model.EnumImpl;
+import org.joda.time.DateTime;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -34,6 +38,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -44,7 +49,7 @@
public class BeanJsonConverter implements BeanConverter {
private static final Object[] EMPTY_OBJECT = {};
- private static final String EXCLUDED_FIELDS = "class";
+ private static final Set<String> EXCLUDED_FIELDS = Sets.newHashSet("class", "declaringclass");
private static final Pattern GETTER = Pattern.compile("^get([a-zA-Z]+)$");
private static final Pattern SETTER = Pattern.compile("^set([a-zA-Z]+)$");
private Injector injector;
@@ -102,12 +107,13 @@
}
return map;
+ } else if (val != null && val.getClass().isEnum()) {
+ return val.toString();
} else if (val instanceof String
|| val instanceof Boolean
|| val instanceof Integer
|| val instanceof Date
|| val instanceof Long
- || val instanceof Enum
|| val instanceof Float
|| val instanceof JSONObject
|| val instanceof JSONArray
@@ -129,17 +135,20 @@
JSONObject toReturn = new JSONObject();
for (MethodPair getter : availableGetters) {
- String errorMessage = "Could not encode the " + getter.method + " method.";
+ String errorMessage = "Could not encode the " + getter.method + " method on " +
+ pojo.getClass().getName();
try {
Object val = getter.method.invoke(pojo, EMPTY_OBJECT);
if (val != null) {
toReturn.put(getter.fieldName, translateObjectToJson(val));
}
- } catch(JSONException e) {
+ } catch (JSONException e) {
throw new RuntimeException(errorMessage, e);
- } catch(IllegalAccessException e) {
+ } catch (IllegalAccessException e) {
throw new RuntimeException(errorMessage, e);
- } catch(InvocationTargetException e) {
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(errorMessage, e);
+ } catch (IllegalArgumentException e) {
throw new RuntimeException(errorMessage, e);
}
}
@@ -168,7 +177,7 @@
String name = matcher.group();
String fieldName = name.substring(3, 4).toLowerCase() + name.substring(4);
- if (fieldName.equalsIgnoreCase(EXCLUDED_FIELDS)) {
+ if (EXCLUDED_FIELDS.contains(fieldName.toLowerCase())) {
continue;
}
availableGetters.add(new MethodPair(method, fieldName));
@@ -190,12 +199,14 @@
throw new RuntimeException(errorMessage, e);
} catch (InstantiationException e) {
throw new RuntimeException(errorMessage, e);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(errorMessage, e);
}
}
private <T> T convertToObject(String json, T pojo)
throws JSONException, InvocationTargetException, IllegalAccessException,
- InstantiationException {
+ InstantiationException, NoSuchFieldException {
if (pojo instanceof String) {
pojo = (T) json; // This is a weird cast...
@@ -233,7 +244,8 @@
private <T> void callSetterWithValue(T pojo, Method method,
JSONObject jsonObject, String fieldName)
- throws IllegalAccessException, InvocationTargetException, JSONException {
+ throws IllegalAccessException, InvocationTargetException, NoSuchFieldException,
+ JSONException {
Class<?> expectedType = method.getParameterTypes()[0];
Object value = null;
@@ -272,20 +284,50 @@
value = map;
- } else if (Enum.class.isAssignableFrom(expectedType)) {
- String enumString = jsonObject.getString(fieldName);
- value = Enum.valueOf((Class<? extends Enum>) expectedType, enumString);
-
+ } else if (org.apache.shindig.social.opensocial.model.Enum.class
+ .isAssignableFrom(expectedType)) {
+ // TODO Need to stop using Enum as a class name :(
+ Class enumType = (Class) ((ParameterizedType) method.getGenericParameterTypes()[0])
+ .getActualTypeArguments()[0];
+ // TODO This isnt injector friendly but perhaps implementors dont need it. If they do a
+ // refactoring of the Enum handling in general is needed.
+ if (jsonObject.has(fieldName)) {
+ JSONObject jsonEnum = jsonObject.getJSONObject(fieldName);
+ if (jsonEnum.has(Enum.Field.KEY.toString())) {
+ Enum.EnumKey enumKey = (Enum.EnumKey) enumType
+ .getField(jsonEnum.getString(Enum.Field.KEY.toString())).get(null);
+ value = new EnumImpl<Enum.EnumKey>(enumKey,
+ jsonEnum.getString(Enum.Field.DISPLAY_VALUE.toString()));
+ } else {
+ value = new EnumImpl<Enum.EnumKey>(null,
+ jsonEnum.getString(Enum.Field.DISPLAY_VALUE.toString()));
+ }
+ }
+ } else if (expectedType.isEnum()) {
+ if (jsonObject.has(fieldName)) {
+ for (Object v : expectedType.getEnumConstants()) {
+ if (v.toString().equals(jsonObject.getString(fieldName))) {
+ value = v;
+ break;
+ }
+ }
+ if (value == null) {
+ throw new IllegalArgumentException(
+ "No enum value '" + jsonObject.getString(fieldName) +
+ "' in " + expectedType.getName());
+ }
+ }
} else if (expectedType.equals(String.class)) {
value = jsonObject.getString(fieldName);
-
} else if (expectedType.equals(Date.class)) {
- Long time = jsonObject.getLong(fieldName);
- value = new Date(time);
-
+ // Use JODA ISO parsing for the conversion
+ value = new DateTime(jsonObject.getString(fieldName)).toDate();
} else if (expectedType.equals(Long.class)) {
value = jsonObject.getLong(fieldName);
-
+ } else if (expectedType.equals(Integer.class)) {
+ value = jsonObject.getInt(fieldName);
+ } else if (expectedType.equals(Boolean.class)) {
+ value = jsonObject.getBoolean(fieldName);
} else if (expectedType.equals(Float.class)) {
String stringFloat = jsonObject.getString(fieldName);
value = new Float(stringFloat);
Added: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/EnumUtil.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/EnumUtil.java?rev=673815&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/EnumUtil.java (added)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/EnumUtil.java Thu Jul 3 14:20:23 2008
@@ -0,0 +1,27 @@
+package org.apache.shindig.social.opensocial.util;
+
+import com.google.common.collect.Sets;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * Utility class for OpenSocial enums
+ */
+public class EnumUtil {
+
+ /**
+ * @param vals array of enums
+ * @return a set of the names for a list of Enum values defined by toString
+ */
+ public static Set<String> getEnumStrings(Enum... vals) {
+ Set<String> result = Sets.newHashSet();
+ for (Enum v : vals) {
+ result.add(v.toString());
+ }
+ if (result.size() != vals.length) {
+ throw new IllegalArgumentException("Enum names are not disjoint set");
+ }
+ return Collections.unmodifiableSet(result);
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java Thu Jul 3 14:20:23 2008
@@ -18,6 +18,11 @@
*/
package org.apache.shindig.social;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Singleton;
+import com.google.inject.name.Names;
+
import org.apache.shindig.common.BasicSecurityTokenDecoder;
import org.apache.shindig.common.SecurityTokenDecoder;
import org.apache.shindig.common.servlet.ParameterFetcher;
@@ -28,6 +33,7 @@
import org.apache.shindig.social.dataservice.PersonService;
import org.apache.shindig.social.opensocial.ActivitiesService;
import org.apache.shindig.social.opensocial.DataService;
+import org.apache.shindig.social.opensocial.DefaultModelGuiceModule;
import org.apache.shindig.social.opensocial.PeopleService;
import org.apache.shindig.social.opensocial.model.Activity;
import org.apache.shindig.social.opensocial.model.ActivityImpl;
@@ -39,8 +45,6 @@
import org.apache.shindig.social.opensocial.model.EmailImpl;
import org.apache.shindig.social.opensocial.model.Enum;
import org.apache.shindig.social.opensocial.model.EnumImpl;
-import org.apache.shindig.social.opensocial.model.MediaItem;
-import org.apache.shindig.social.opensocial.model.MediaItemImpl;
import org.apache.shindig.social.opensocial.model.NameImpl;
import org.apache.shindig.social.opensocial.model.Organization;
import org.apache.shindig.social.opensocial.model.OrganizationImpl;
@@ -55,12 +59,6 @@
import org.apache.shindig.social.samplecontainer.SampleContainerRouteManager;
import org.apache.shindig.social.samplecontainer.XmlStateFileFetcher;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.inject.AbstractModule;
-import com.google.inject.Singleton;
-import com.google.inject.name.Names;
-
import java.net.URI;
import java.util.Date;
import java.util.HashMap;
@@ -71,12 +69,13 @@
/**
* Provides social api component injection for all large tests
*/
-public class SocialApiTestsGuiceModule extends AbstractModule {
+public class SocialApiTestsGuiceModule extends DefaultModelGuiceModule {
private static Logger logger =
Logger.getLogger(SocialApiTestsGuiceModule.class.getName());
@Override
protected void configure() {
+ super.configure();
bind(PeopleService.class).to(BasicPeopleService.class);
bind(DataService.class).to(BasicDataService.class);
bind(ActivitiesService.class).to(BasicActivitiesService.class);
@@ -92,9 +91,6 @@
bind(ParameterFetcher.class).annotatedWith(Names.named("GadgetDataServlet")).to(GadgetDataServletFetcher.class);
bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet")).to(DataServiceServletFetcher.class);
-
- bind(Activity.class).to(ActivityImpl.class);
- bind(MediaItem.class).to(MediaItemImpl.class);
}
@Singleton
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonConverterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonConverterTest.java?rev=673815&r1=673814&r2=673815&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonConverterTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonConverterTest.java Thu Jul 3 14:20:23 2008
@@ -17,26 +17,27 @@
*/
package org.apache.shindig.social.opensocial.util;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Guice;
+
+import junit.framework.TestCase;
+
+import org.apache.shindig.social.SocialApiTestsGuiceModule;
import org.apache.shindig.social.opensocial.model.Activity;
-import org.apache.shindig.social.opensocial.model.Email;
-import org.apache.shindig.social.opensocial.model.MediaItem;
-import org.apache.shindig.social.opensocial.model.Person;
-import org.apache.shindig.social.opensocial.model.Phone;
-import org.apache.shindig.social.opensocial.model.DataCollection;
import org.apache.shindig.social.opensocial.model.ActivityImpl;
+import org.apache.shindig.social.opensocial.model.Address;
import org.apache.shindig.social.opensocial.model.AddressImpl;
+import org.apache.shindig.social.opensocial.model.DataCollection;
+import org.apache.shindig.social.opensocial.model.Email;
import org.apache.shindig.social.opensocial.model.EmailImpl;
+import org.apache.shindig.social.opensocial.model.MediaItem;
import org.apache.shindig.social.opensocial.model.MediaItemImpl;
import org.apache.shindig.social.opensocial.model.NameImpl;
+import org.apache.shindig.social.opensocial.model.Person;
import org.apache.shindig.social.opensocial.model.PersonImpl;
+import org.apache.shindig.social.opensocial.model.Phone;
import org.apache.shindig.social.opensocial.model.PhoneImpl;
-import org.apache.shindig.social.opensocial.model.Address;
-import org.apache.shindig.social.SocialApiTestsGuiceModule;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.inject.Guice;
-import junit.framework.TestCase;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -189,7 +190,7 @@
public void testJsonToActivity() throws Exception {
String jsonActivity = "{userId : 5, id : 6, mediaItems : [" +
- "{url : 'hello', mimeType : 'mimey', type : 'VIDEO'}" +
+ "{url : 'hello', mimeType : 'mimey', type : 'video'}" +
"]}";
// TODO: rename the enums to be lowercase
Activity result = beanJsonConverter.convertToObject(jsonActivity,