Author: lindner
Date: Sat Oct 23 10:23:31 2010
New Revision: 1026594
URL: http://svn.apache.org/viewvc?rev=1026594&view=rev
Log:
SHINDIG-1452 | Patch from Bill Wolcken | Allow FeedProcessor to be swapped out
via Guice injection
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessorImpl.java
- copied, changed from r1026591,
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorImplTest.java
- copied, changed from r1026591,
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorTest.java
Removed:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorTest.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
Sat Oct 23 10:23:31 2010
@@ -18,30 +18,14 @@
*/
package org.apache.shindig.gadgets;
-import java.io.StringReader;
-import java.util.List;
-
-import com.sun.syndication.feed.module.mediarss.types.UrlReference;
-
-import com.sun.syndication.feed.module.mediarss.MediaEntryModule;
-import com.sun.syndication.feed.module.mediarss.MediaModule;
-import com.sun.syndication.feed.module.mediarss.types.MediaContent;
-import com.sun.syndication.feed.module.mediarss.types.Thumbnail;
-import com.sun.syndication.feed.synd.SyndContent;
-import com.sun.syndication.feed.synd.SyndEntry;
-import com.sun.syndication.feed.synd.SyndFeed;
-import com.sun.syndication.feed.synd.SyndPerson;
-import com.sun.syndication.io.FeedException;
-import com.sun.syndication.io.SyndFeedInput;
-import org.apache.shindig.gadgets.http.HttpResponse;
-import org.json.JSONArray;
-import org.json.JSONException;
import org.json.JSONObject;
+import com.google.inject.ImplementedBy;
/**
* Processes RSS & Atom Feeds and converts them into JSON output.
*/
-public class FeedProcessor {
+...@implementedby(FeedProcessorImpl.class)
+public interface FeedProcessor {
/**
* Converts feed XML to JSON.
@@ -56,131 +40,6 @@ public class FeedProcessor {
* Number of entries to return.
* @return The JSON representation of the feed.
*/
- @SuppressWarnings("unchecked")
- public JSONObject process(String feedUrl, String feedXml, boolean
getSummaries, int numEntries)
- throws GadgetException {
- try {
- SyndFeed feed = new SyndFeedInput().build(new StringReader(feedXml));
- JSONObject json = new JSONObject();
- json.put("Title", feed.getTitle());
- json.put("URL", feedUrl);
- json.put("Description", feed.getDescription());
- json.put("Link", feed.getLink());
-
- List<SyndPerson> authors = feed.getAuthors();
- String jsonAuthor = null;
- if (authors != null && !authors.isEmpty()) {
- SyndPerson author = authors.get(0);
- if (author.getName() != null) {
- jsonAuthor = author.getName();
- } else if (author.getEmail() != null) {
- jsonAuthor = author.getEmail();
- }
- }
- JSONArray entries = new JSONArray();
- json.put("Entry", entries);
-
- int entryCnt = 0;
- for (Object obj : feed.getEntries()) {
- SyndEntry e = (SyndEntry) obj;
- if (entryCnt >= numEntries) {
- break;
- }
- entryCnt++;
-
- JSONObject entry = new JSONObject();
- entry.put("Title", e.getTitle());
- entry.put("Link", e.getLink());
- if (getSummaries) {
- if (e.getContents() != null && !e.getContents().isEmpty()) {
- entry.put("Summary", ((SyndContent)
e.getContents().get(0)).getValue());
- } else {
- entry.put("Summary", e.getDescription() != null ?
e.getDescription().getValue() : "");
- }
- }
-
- if (e.getUpdatedDate() != null) {
- entry.put("Date", e.getUpdatedDate().getTime());
- } else if (e.getPublishedDate() != null) {
- entry.put("Date", e.getPublishedDate().getTime());
- } else {
- entry.put("Date", 0);
- }
-
- // if no author at feed level, use the first entry author
- if (jsonAuthor == null) {
- jsonAuthor = e.getAuthor();
- }
-
- JSONObject media = new JSONObject();
- MediaEntryModule mediaModule = (MediaEntryModule)
e.getModule(MediaModule.URI);
- if (mediaModule != null) {
- if (mediaModule.getMediaContents().length > 0) {
- JSONArray contents = new JSONArray();
-
- for (MediaContent c : mediaModule.getMediaContents()) {
- JSONObject content = new JSONObject();
-
- if (c.getReference() instanceof UrlReference) {
- content.put("URL", ((UrlReference)
c.getReference()).getUrl().toString());
- }
-
- if (c.getType() != null) {
- content.put("Type", c.getType());
- }
-
- if (c.getWidth() != null) {
- content.put("Width", c.getWidth());
- }
-
- if (c.getHeight() != null) {
- content.put("Height", c.getHeight());
- }
-
- contents.put(content);
- }
-
- media.put("Contents", contents);
- }
-
- if (mediaModule.getMetadata() != null) {
- if (mediaModule.getMetadata().getThumbnail().length > 0) {
- // "If multiple thumbnails are included, it is assumed that they
are in order of importance"
- // Only use the first thumbnail for simplicity's
- // sake
-
- JSONObject thumbnail = new JSONObject();
-
- Thumbnail t = mediaModule.getMetadata().getThumbnail()[0];
- thumbnail.put("URL", t.getUrl().toString());
-
- if (t.getWidth() != null) {
- thumbnail.put("Width", t.getWidth());
- }
-
- if (t.getHeight() != null) {
- thumbnail.put("Height", t.getHeight());
- }
-
- media.put("Thumbnail", thumbnail);
- }
- }
- }
-
- entry.put("Media", media);
-
- entries.put(entry);
- }
-
- json.put("Author", (jsonAuthor != null) ? jsonAuthor : "");
- return json;
- } catch (JSONException e) {
- // This shouldn't ever happen.
- throw new RuntimeException(e);
- } catch (FeedException e) {
- throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT,
e, HttpResponse.SC_BAD_GATEWAY);
- } catch (IllegalArgumentException e) {
- throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT,
e, HttpResponse.SC_BAD_GATEWAY);
- }
- }
+ JSONObject process(String feedUrl, String feedXml, boolean getSummaries, int
numEntries)
+ throws GadgetException;
}
Copied:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessorImpl.java
(from r1026591,
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java)
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessorImpl.java?p2=shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessorImpl.java&p1=shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java&r1=1026591&r2=1026594&rev=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessorImpl.java
Sat Oct 23 10:23:31 2010
@@ -41,7 +41,7 @@ import org.json.JSONObject;
/**
* Processes RSS & Atom Feeds and converts them into JSON output.
*/
-public class FeedProcessor {
+public class FeedProcessorImpl implements FeedProcessor {
/**
* Converts feed XML to JSON.
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java
Sat Oct 23 10:23:31 2010
@@ -50,6 +50,7 @@ import javax.servlet.http.HttpServletRes
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.inject.Inject;
+import com.google.inject.Provider;
/**
* An alternate implementation of the Http proxy service using the standard
API dispatcher for REST
@@ -98,12 +99,15 @@ public class HttpRequestHandler {
private final RequestPipeline requestPipeline;
private final ResponseRewriterRegistry contentRewriterRegistry;
+ private final Provider<FeedProcessor> feedProcessorProvider;
@Inject
public HttpRequestHandler(RequestPipeline requestPipeline,
- ResponseRewriterRegistry contentRewriterRegistry) {
+ ResponseRewriterRegistry contentRewriterRegistry,
+ Provider<FeedProcessor> feedProcessorProvider) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
+ this.feedProcessorProvider = feedProcessorProvider;
}
@@ -305,7 +309,7 @@ public class HttpRequestHandler {
/** Processes a feed (RSS or Atom) using FeedProcessor. */
protected Object processFeed(HttpApiRequest req, String responseBody)
throws GadgetException {
- return new FeedProcessor().process(req.href.toString(), responseBody,
req.summarize,
+ return feedProcessorProvider.get().process(req.href.toString(),
responseBody, req.summarize,
req.entryCount);
}
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
Sat Oct 23 10:23:31 2010
@@ -19,6 +19,7 @@
package org.apache.shindig.gadgets.servlet;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.apache.commons.lang.StringUtils;
@@ -72,12 +73,15 @@ public class MakeRequestHandler {
private final RequestPipeline requestPipeline;
private final ResponseRewriterRegistry contentRewriterRegistry;
+ private final Provider<FeedProcessor> feedProcessorProvider;
@Inject
public MakeRequestHandler(RequestPipeline requestPipeline,
- ResponseRewriterRegistry contentRewriterRegistry) {
+ ResponseRewriterRegistry contentRewriterRegistry,
+ Provider<FeedProcessor> feedProcessorProvider) {
this.requestPipeline = requestPipeline;
this.contentRewriterRegistry = contentRewriterRegistry;
+ this.feedProcessorProvider = feedProcessorProvider;
}
/**
@@ -273,7 +277,7 @@ public class MakeRequestHandler {
throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
"numEntries paramater is not a number", HttpResponse.SC_BAD_REQUEST);
}
- return new FeedProcessor().process(url, xml, getSummaries,
numEntries).toString();
+ return feedProcessorProvider.get().process(url, xml, getSummaries,
numEntries).toString();
}
/**
Copied:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorImplTest.java
(from r1026591,
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorTest.java)
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorImplTest.java?p2=shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorImplTest.java&p1=shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorTest.java&r1=1026591&r2=1026594&rev=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FeedProcessorImplTest.java
Sat Oct 23 10:23:31 2010
@@ -26,9 +26,9 @@ import org.json.JSONObject;
import org.junit.Test;
/**
- * Tests for FeedProcessor
+ * Tests for FeedProcessorImpl
*/
-public class FeedProcessorTest {
+public class FeedProcessorImplTest {
private final static String FEED_TITLE = "Example Feed";
private final static String FEED_AUTHOR = "John Doe";
@@ -154,8 +154,8 @@ public class FeedProcessorTest {
private final FeedProcessor processor;
- public FeedProcessorTest() {
- processor = new FeedProcessor();
+ public FeedProcessorImplTest() {
+ processor = new FeedProcessorImpl();
}
@Test
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java
Sat Oct 23 10:23:31 2010
@@ -32,6 +32,8 @@ import org.apache.shindig.common.JsonAss
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.AuthType;
+import org.apache.shindig.gadgets.FeedProcessor;
+import org.apache.shindig.gadgets.FeedProcessorImpl;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
@@ -60,6 +62,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.ImmutableSet;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.Provider;
/**
* Has coverage for all tests in MakeRequestHandlerTest and should be
maintained in sync until
@@ -82,6 +85,12 @@ public class HttpRequestHandlerTest exte
private final Map<String,FormDataItem> emptyFormItems =
Collections.emptyMap();
+ private final Provider<FeedProcessor> feedProcessorProvider = new
Provider<FeedProcessor>() {
+ public FeedProcessor get() {
+ return new FeedProcessorImpl();
+ }
+ };
+
@Before
public void setUp() throws Exception {
token = new FakeGadgetToken();
@@ -90,7 +99,7 @@ public class HttpRequestHandlerTest exte
Injector injector = Guice.createInjector();
converter = new BeanJsonConverter(injector);
- HttpRequestHandler handler = new HttpRequestHandler(pipeline,
rewriterRegistry);
+ HttpRequestHandler handler = new HttpRequestHandler(pipeline,
rewriterRegistry, feedProcessorProvider);
registry = new DefaultHandlerRegistry(injector, converter,
new HandlerExecutionListener.NoOpHandler());
registry.addHandlers(ImmutableSet.<Object>of(handler));
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
Sat Oct 23 10:23:31 2010
@@ -63,7 +63,7 @@ public class MakeRequestHandlerTest exte
private static final SecurityToken DUMMY_TOKEN = new FakeGadgetToken();
private final MakeRequestHandler handler
- = new MakeRequestHandler(pipeline, rewriterRegistry);
+ = new MakeRequestHandler(pipeline, rewriterRegistry,
feedProcessorProvider);
private void expectGetAndReturnBody(String response) throws Exception {
expectGetAndReturnBody(AuthType.NONE, response);
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestServletTest.java
Sat Oct 23 10:23:31 2010
@@ -51,7 +51,7 @@ public class MakeRequestServletTest exte
= Collections.enumeration(Collections.<String>emptyList());
private final MakeRequestServlet servlet = new MakeRequestServlet();
- private final MakeRequestHandler handler = new MakeRequestHandler(pipeline,
null);
+ private final MakeRequestHandler handler = new MakeRequestHandler(pipeline,
null, feedProcessorProvider);
private final HttpRequest internalRequest = new HttpRequest(REQUEST_URL);
private final HttpResponse internalResponse = new
HttpResponse(RESPONSE_BODY);
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java?rev=1026594&r1=1026593&r2=1026594&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
Sat Oct 23 10:23:31 2010
@@ -20,6 +20,8 @@ package org.apache.shindig.gadgets.servl
import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.common.servlet.HttpServletResponseRecorder;
+import org.apache.shindig.gadgets.FeedProcessor;
+import org.apache.shindig.gadgets.FeedProcessorImpl;
import org.apache.shindig.gadgets.LockedDomainService;
import org.apache.shindig.gadgets.http.RequestPipeline;
import org.apache.shindig.gadgets.rewrite.CaptureRewriter;
@@ -32,6 +34,8 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import com.google.inject.Provider;
+
/**
* Contains everything needed for making servlet requests, plus a bunch of
stuff that shouldn't be
* here.
@@ -47,4 +51,9 @@ public abstract class ServletTestFixture
public final HttpServletResponse response = mock(HttpServletResponse.class);
public final HttpServletResponseRecorder recorder = new
HttpServletResponseRecorder(response);
public final LockedDomainService lockedDomainService =
mock(LockedDomainService.class);
+ public final Provider<FeedProcessor> feedProcessorProvider = new
Provider<FeedProcessor>() {
+ public FeedProcessor get() {
+ return new FeedProcessorImpl();
+ }
+ };
}