You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/09/24 18:33:42 UTC

svn commit: r698636 - in /incubator/shindig/trunk/java: server/src/test/java/org/apache/shindig/server/endtoend/ social-api/src/main/java/org/apache/shindig/social/core/config/ social-api/src/main/java/org/apache/shindig/social/core/util/ social-api/sr...

Author: doll
Date: Wed Sep 24 09:33:41 2008
New Revision: 698636

URL: http://svn.apache.org/viewvc?rev=698636&view=rev
Log:
SHINDIG-611
Patch from impetus technologies. Adds a new BeanAtomConverter so that the java code has support for atom, xml and json formats. 

Note: This new converter does not produce proper atom code yet. It produces basic xml.



Added:
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java
Modified:
    incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java

Modified: incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java (original)
+++ incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java Wed Sep 24 09:33:41 2008
@@ -23,6 +23,7 @@
 import org.apache.shindig.social.core.oauth.AuthenticationHandlerProvider;
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.core.util.BeanXmlConverter;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.opensocial.service.BeanConverter;
 import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
 
@@ -43,10 +44,13 @@
         .toInstance("sampledata/canonicaldb.json");
     bind(ParameterFetcher.class).annotatedWith(Names.named("DataServiceServlet"))
         .to(DataServiceServletFetcher.class);
+
     bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.xml"))
         .to(BeanXmlConverter.class);
     bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json"))
         .to(BeanJsonConverter.class);
+    bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.atom"))
+        .to(BeanAtomConverter.class);
 
     bind(Boolean.class)
         .annotatedWith(Names.named(AnonymousAuthenticationHandler.ALLOW_UNAUTHENTICATED))

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/config/SocialApiGuiceModule.java Wed Sep 24 09:33:41 2008
@@ -22,6 +22,7 @@
 import org.apache.shindig.auth.AuthenticationHandler;
 import org.apache.shindig.common.servlet.ParameterFetcher;
 import org.apache.shindig.social.core.oauth.AuthenticationHandlerProvider;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.core.util.BeanXmlConverter;
 import org.apache.shindig.social.opensocial.service.BeanConverter;
@@ -62,6 +63,8 @@
         BeanXmlConverter.class);
     bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json")).to(
         BeanJsonConverter.class);
+    bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.atom")).to(
+        BeanAtomConverter.class);
 
     bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider(
         AuthenticationHandlerProvider.class);

Added: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java?rev=698636&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java (added)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/util/BeanAtomConverter.java Wed Sep 24 09:33:41 2008
@@ -0,0 +1,105 @@
+/*
+ * 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.core.util;
+
+import org.apache.shindig.social.opensocial.service.BeanConverter;
+
+import org.apache.commons.betwixt.IntrospectionConfiguration;
+import org.apache.commons.betwixt.io.BeanReader;
+import org.apache.commons.betwixt.io.BeanWriter;
+import org.xml.sax.SAXException;
+
+import java.beans.IntrospectionException;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+// TODO: This does not produce valid atom sytnax yet
+public class BeanAtomConverter implements BeanConverter {
+  private static Logger logger =
+      Logger.getLogger(BeanXmlConverter.class.getName());
+
+  public String convertToString(Object pojo) {
+    return convertToXml(pojo);
+  }
+
+  public String convertToXml(Object obj) {
+    String xmlHead="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+    StringWriter outputWriter = new StringWriter();
+    BeanWriter writer = new BeanWriter(outputWriter);
+    IntrospectionConfiguration configuration = writer.getXMLIntrospector().getConfiguration();
+    configuration.setAttributesForPrimitives(false);
+    configuration.setWrapCollectionsInElement(true);
+
+    writer.getBindingConfiguration().setMapIDs(false);
+    // Print no line endings
+    writer.setEndOfLine("");
+    writer.setWriteEmptyElements(false);
+
+    // Still left to do:
+    //
+    // Fix map output with custom outputter:
+    // for a map with {key : value, key2 : value2} we need:
+    // <key>value</key> <key2>value2</key2>
+
+    // Supress empty lists
+
+    // Within a list the items need to be renamed - this probably means with need a .betwixt file
+
+    String toReturn = xmlHead;
+    try {
+      writer.write("response", obj);
+      toReturn =toReturn+ outputWriter.toString();
+      logger.finest("XML is: " + toReturn + "\n **** \n\n");
+
+    } catch (SAXException e) {
+      logger.log(Level.SEVERE, e.getMessage(), e);
+    } catch (IOException e) {
+      logger.log(Level.SEVERE, e.getMessage(), e);
+    } catch (IntrospectionException e) {
+      logger.log(Level.SEVERE, e.getMessage(), e);
+    } finally {
+      try {
+        writer.close();
+      } catch (IOException e) {
+        logger.log(Level.FINEST, e.getMessage(), e);
+      }
+    }
+
+    return toReturn;
+  }
+
+  public <T> T convertToObject(String xml, Class<T> className) {
+    String errorMessage = "Could not convert " + xml + " to " + className;
+    xml=xml.substring(xml.indexOf("?>") + 2);
+    BeanReader reader = new BeanReader();
+    try {
+      reader.registerBeanClass("activity", className);
+      StringReader rd = new StringReader(xml);
+      return (T) reader.parse(rd);
+    } catch (IntrospectionException e) {
+      throw new RuntimeException(errorMessage, e);
+    } catch (IOException e) {
+      throw new RuntimeException(errorMessage, e);
+    } catch (SAXException e) {
+      throw new RuntimeException(errorMessage, e);
+    }
+  }
+}

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/ApiServlet.java Wed Sep 24 09:33:41 2008
@@ -46,6 +46,7 @@
   private Map<String, Class<? extends DataRequestHandler>> handlers;
   protected BeanJsonConverter jsonConverter;
   protected BeanConverter xmlConverter;
+  protected BeanConverter atomConverter;
 
   @Inject
   public void setHandlers(HandlerProvider handlers) {
@@ -54,11 +55,13 @@
 
   @Inject
   public void setBeanConverters(
-      @Named("shindig.bean.converter.json")BeanConverter jsonConverter,
-      @Named("shindig.bean.converter.xml")BeanConverter xmlConverter) {
+      @Named("shindig.bean.converter.json") BeanConverter jsonConverter,
+      @Named("shindig.bean.converter.xml") BeanConverter xmlConverter,
+      @Named("shindig.bean.converter.atom") BeanConverter atomConverter) {
     // fix this
     this.jsonConverter = (BeanJsonConverter) jsonConverter;
     this.xmlConverter = xmlConverter;
+    this.atomConverter = atomConverter;
   }
 
   // Only for testing use. Do not override the injector.

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java Wed Sep 24 09:33:41 2008
@@ -34,6 +34,7 @@
 
   protected static final String FORMAT_PARAM = "format";
   protected static final String ATOM_FORMAT = "atom";
+  protected static final String XML_FORMAT = "xml";
 
   public static final String PEOPLE_ROUTE = "people";
   public static final String ACTIVITY_ROUTE = "activities";
@@ -116,8 +117,13 @@
   BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {
     String formatString = servletRequest.getParameter(FORMAT_PARAM);
     if (ATOM_FORMAT.equals(formatString)) {
+      return atomConverter;
+    }
+
+    else if (XML_FORMAT.equals(formatString)) {
       return xmlConverter;
     }
+
     return jsonConverter;
   }
 }

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java Wed Sep 24 09:33:41 2008
@@ -19,6 +19,7 @@
 
 import org.apache.shindig.common.testing.FakeGadgetToken;
 import org.apache.shindig.social.SocialApiTestsGuiceModule;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.core.util.BeanXmlConverter;
 import org.apache.shindig.social.opensocial.service.ActivityHandler;
@@ -30,12 +31,10 @@
 
 import com.google.common.collect.Maps;
 import com.google.inject.Guice;
-
+import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 import org.json.JSONObject;
 
-import junit.framework.TestCase;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -43,7 +42,6 @@
 import java.io.PrintWriter;
 import java.util.Map;
 import java.util.Vector;
-
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -74,7 +72,8 @@
     servlet.setHandlers(new HandlerProvider(handlers));
     servlet.setInjector(Guice.createInjector(new SocialApiTestsGuiceModule()));
     servlet.setBeanConverters(new BeanJsonConverter(
-        Guice.createInjector(new SocialApiTestsGuiceModule())), new BeanXmlConverter());
+        Guice.createInjector(new SocialApiTestsGuiceModule())), new BeanXmlConverter(),
+        new BeanAtomConverter());
 
     req = EasyMock.createMock(HttpServletRequest.class);
     res = EasyMock.createMock(HttpServletResponse.class);
@@ -178,4 +177,4 @@
     return columns;
   }
 
-}
\ No newline at end of file
+}

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java Wed Sep 24 09:33:41 2008
@@ -22,14 +22,14 @@
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.social.ResponseError;
 import org.apache.shindig.social.SocialApiTestsGuiceModule;
-import org.apache.shindig.social.opensocial.spi.SocialSpiException;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.core.util.BeanXmlConverter;
+import org.apache.shindig.social.opensocial.spi.SocialSpiException;
 
+import com.google.common.collect.Maps;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.common.collect.Maps;
-
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
@@ -67,7 +67,7 @@
     res = EasyMock.createMock(HttpServletResponse.class);
     jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
     BeanXmlConverter xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
-
+    BeanAtomConverter atomConverter = EasyMock.createMock(BeanAtomConverter.class);
     peopleHandler = EasyMock.createMock(PersonHandler.class);
     activityHandler = EasyMock.createMock(ActivityHandler.class);
     appDataHandler = EasyMock.createMock(AppDataHandler.class);
@@ -78,7 +78,7 @@
     servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new ActivityHandler(null),
         new AppDataHandler(null)));
 
-    servlet.setBeanConverters(jsonConverter, xmlConverter);
+    servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
   }
 
   private void setupInjector() {
@@ -195,9 +195,11 @@
     BeanJsonConverter json = new BeanJsonConverter(
         Guice.createInjector(new SocialApiTestsGuiceModule()));
     BeanXmlConverter xml = new BeanXmlConverter();
-    servlet.setBeanConverters(json, xml);
+    BeanAtomConverter atom = new BeanAtomConverter();
+    servlet.setBeanConverters(json, xml, atom);
 
-    assertConverter(xml, "atom");
+    assertConverter(atom, "atom");
+    assertConverter(xml, "xml");
     assertConverter(json, "");
     assertConverter(json, null);
     assertConverter(json, "ahhhh!");

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java?rev=698636&r1=698635&r2=698636&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java Wed Sep 24 09:33:41 2008
@@ -19,6 +19,7 @@
 
 import org.apache.shindig.common.testing.FakeGadgetToken;
 import org.apache.shindig.common.util.ImmediateFuture;
+import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.core.util.BeanJsonConverter;
 import org.apache.shindig.social.core.util.BeanXmlConverter;
 
@@ -29,10 +30,10 @@
 import org.json.JSONArray;
 import org.json.JSONObject;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.io.InputStream;
-import java.io.ByteArrayInputStream;
+import java.io.PrintWriter;
 import java.util.concurrent.Future;
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
@@ -65,6 +66,7 @@
     res = EasyMock.createMock(HttpServletResponse.class);
     jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
     xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
+    BeanAtomConverter atomConverter = EasyMock.createMock(BeanAtomConverter.class);
 
     peopleHandler = EasyMock.createMock(PersonHandler.class);
     activityHandler = EasyMock.createMock(ActivityHandler.class);
@@ -76,7 +78,7 @@
     servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new ActivityHandler(null),
         new AppDataHandler(null)));
 
-    servlet.setBeanConverters(jsonConverter, xmlConverter);
+    servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
   }
 
   private void setupInjector() {