Author: simoneg
Date: Mon Oct 19 23:19:52 2009
New Revision: 826873
URL: http://svn.apache.org/viewvc?rev=826873&view=rev
Log:
LABS-482 contributed component website-feed
Added:
labs/magma/trunk/website-feed/pom.xml
labs/magma/trunk/website-feed/src/
labs/magma/trunk/website-feed/src/main/
labs/magma/trunk/website-feed/src/main/java/
labs/magma/trunk/website-feed/src/main/java/org/
labs/magma/trunk/website-feed/src/main/java/org/apache/
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/AddRssTypeToDispatch.aj
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/FeedableItem.java
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/RssFeedProducer.java
Added: labs/magma/trunk/website-feed/pom.xml
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-feed/pom.xml?rev=826873&view=auto
==============================================================================
--- labs/magma/trunk/website-feed/pom.xml (added)
+++ labs/magma/trunk/website-feed/pom.xml Mon Oct 19 23:19:52 2009
@@ -0,0 +1,33 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>magma-parent</artifactId>
+ <groupId>org.apache.magma</groupId>
+ <version>2</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.magma</groupId>
+ <artifactId>website-feed</artifactId>
+ <packaging>magma</packaging>
+ <version>0.0.2-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.magma</groupId>
+ <artifactId>foundation-website</artifactId>
+ <version>0.0.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>rome</groupId>
+ <artifactId>rome</artifactId>
+ <version>1.0</version>
+ </dependency>
+ </dependencies>
+ <repositories>
+ <repository>
+ <id>maven2-repository.dev.java.net</id>
+ <name>Java.net Repository for Maven</name>
+ <url>http://download.java.net/maven/2/</url>
+ <layout>default</layout>
+ </repository>
+ </repositories>
+
+</project>
Added:
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/AddRssTypeToDispatch.aj
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/AddRssTypeToDispatch.aj?rev=826873&view=auto
==============================================================================
---
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/AddRssTypeToDispatch.aj
(added)
+++
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/AddRssTypeToDispatch.aj
Mon Oct 19 23:19:52 2009
@@ -0,0 +1,21 @@
+package org.apache.magma.website.feed;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.magma.basics.startup.Cycle;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.utils.URLRewritingStream;
+import org.apache.magma.website.Dispatch;
+
+
+public aspect AddRssTypeToDispatch {
+
+ public void Dispatch.handleRSS(RssFeedProducer producer,
HttpServletRequest req, HttpServletResponse resp) {
+ URLRewritingStream stream = Cycle.get().getRewriting();
+ stream.changeKeys('<', '>', "<link>","<link *>", "about=");
+ stream.setAlwaysAbsolute(true);
+ this.handleAJAX(producer, req, resp);
+ }
+
+}
Added:
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/FeedableItem.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/FeedableItem.java?rev=826873&view=auto
==============================================================================
---
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/FeedableItem.java
(added)
+++
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/FeedableItem.java
Mon Oct 19 23:19:52 2009
@@ -0,0 +1,6 @@
+package org.apache.magma.website.feed;
+
+public interface FeedableItem {
+ public String getTitleForFeed();
+ public String getContentForFeed();
+}
Added:
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/RssFeedProducer.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/RssFeedProducer.java?rev=826873&view=auto
==============================================================================
---
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/RssFeedProducer.java
(added)
+++
labs/magma/trunk/website-feed/src/main/java/org/apache/magma/website/feed/RssFeedProducer.java
Mon Oct 19 23:19:52 2009
@@ -0,0 +1,127 @@
+package org.apache.magma.website.feed;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.utils.GenericClass;
+import org.apache.magma.basics.utils.GenericClass.MethodDef;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.Converters;
+import org.apache.magma.website.Producer;
+import org.apache.magma.website.WebHandler;
+
+import com.sun.syndication.feed.WireFeed;
+import com.sun.syndication.feed.rss.Content;
+import com.sun.syndication.feed.rss.Channel;
+import com.sun.syndication.feed.rss.Item;
+import com.sun.syndication.io.FeedException;
+import com.sun.syndication.io.WireFeedOutput;
+
+public class RssFeedProducer extends Producer{
+ private List<? extends FeedableItem> items;
+ private String feedTitle = "RSS Feed";
+ private String feedDescription = "";
+ private String link;
+ private Class<? extends FeedableItem> myclass;
+
+ public RssFeedProducer(Class<? extends FeedableItem> clazz, List<?
extends FeedableItem> items, String link) {
+ this.link = link;
+ this.myclass = clazz;
+ this.items = items;
+ }
+
+ public String getFeedDescription() {
+ return feedDescription;
+ }
+
+ public void setFeedDescription(String feedDescription) {
+ this.feedDescription = feedDescription;
+ }
+
+ public List<? extends FeedableItem> getItems() {
+ return items;
+ }
+
+ public void setItems(List<? extends FeedableItem> items) {
+ this.items = items;
+ }
+
+ public String getFeedTitle() {
+ return feedTitle;
+ }
+
+ public void setFeedTitle(String feedTitle) {
+ this.feedTitle = feedTitle;
+ }
+
+ @Override
+ public String getMimeType() {
+ return "application/rss+xml";
+ }
+
+ @Override
+ public void produce(OutputStream stream) {
+ String linkUrl = null;
+ if (this.link != null) {
+ GenericClass gc =
GenericClass.forClass(getCreatingHandler().getClass());
+ List<MethodDef> methods = gc.findMethods(this.link, new
Class<?>[] { this.myclass });
+ if (methods.size() == 0) {
+ methods = gc.findMethods(this.link, new
Class<?>[] { null });
+ if (methods.size() == 0) {
+ throw new MagmaException("Cannot find
method {0}.{1}({2}) to make the link", getCreatingHandler(), this.link,
this.myclass);
+ } else if (methods.size() > 1) {
+ throw new MagmaException("There is more
than one method {0}.{1}(), and no one is accepting explicitly {2} as a
parameter. Cannot not make the link", getCreatingHandler(), this.link,
this.myclass);
+ }
+ }
+ linkUrl = this.link;
+ if (linkUrl.startsWith("do")) {
+ linkUrl = linkUrl.substring(2);
+ } else if (linkUrl.startsWith("handle")){
+ linkUrl = linkUrl.substring(6);
+ } else {
+ throw new MagmaException("The link {0} is not
valid : it should refer a doMethod or handleMethod", this.link);
+ }
+ }
+ Converter converter = null;
+ if (linkUrl != null) {
+ converter = Converters.getConverterFor(this.myclass);
+ if (converter == null) throw new MagmaException("Cannot
find converter for {0}, cannot make link!", this.myclass);
+ }
+
+
+ Channel ch = new Channel("rss_1.0");
+ ch.setTitle(this.getFeedTitle());
+ ch.setLink("magma:/");
+ ch.setDescription(this.getFeedDescription());
+ for (FeedableItem fi : this.items) {
+ Item item = new Item();
+ //item.setAuthor("Pinco Palla");
+ item.setTitle(fi.getTitleForFeed());
+ Content content = new Content();
+ content.setValue(fi.getContentForFeed());
+ item.setContent(content);
+ item.setLink(linkUrl + WebHandler.paramSeparator +
converter.to(fi));
+ ch.getItems().add(item);
+ }
+
+ WireFeedOutput out = new WireFeedOutput();
+ OutputStreamWriter writer = null;
+ try {
+ writer = new OutputStreamWriter(stream, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ // should never happen
+ e.printStackTrace();
+ }
+ try {
+ out.output(ch, writer);
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error sending feed");
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]