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]

Reply via email to