[Lutinweb-commits] r75 - in trunk/lutinrss: . src/main/java/org/codelutin/rss src/main/webapp src/main/webapp/WEB-INF
Author: tchemit Date: 2008-05-30 20:39:08 +0000 (Fri, 30 May 2008) New Revision: 75 Added: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java trunk/lutinrss/src/main/webapp/rssgenerator.js trunk/lutinrss/src/main/webapp/testGenerator.html Modified: trunk/lutinrss/pom.xml trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java trunk/lutinrss/src/main/webapp/WEB-INF/web.xml Log: create RSSGeneratorServlet to perform generator actions + publication of feed add test for generator to be finish :) Modified: trunk/lutinrss/pom.xml =================================================================== --- trunk/lutinrss/pom.xml 2008-05-30 17:56:57 UTC (rev 74) +++ trunk/lutinrss/pom.xml 2008-05-30 20:39:08 UTC (rev 75) @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> +<?xml version="1.0" encoding="UTF-8"?> <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"> <!--The version of maven's project object model--> @@ -160,6 +160,6 @@ </profiles> <properties> <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server> - <netbeans.hint.useExternalMaven>true</netbeans.hint.useExternalMaven> + <netbeans.hint.useExternalMaven>false</netbeans.hint.useExternalMaven> </properties> </project> Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-30 17:56:57 UTC (rev 74) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-30 20:39:08 UTC (rev 75) @@ -1,5 +1,6 @@ package org.codelutin.rss; +import java.io.File; import org.apache.commons.beanutils.BeanUtils; /** @@ -22,8 +23,10 @@ public static int DEFAULT_GENERATOR_NB_ITEM = 100; - public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0; + public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0; + public static String GENERATOR_DIRECTORY = "/tmp/rssinclude"; + public static Class<? extends FeedRenderer> DEFAULT_RENDERER_CLASS = FeedHTMLRenderer.class; public static Class<? extends FeedURLResolver> DEFAULT_RESOLVER_CLASS = SimpleFeedURLResolver.class; @@ -55,7 +58,12 @@ public static void setDEFAULT_GENERATOR_FORMAT(FeedType DEFAULT_GENERATOR_FORMAT) { RSSConfig.DEFAULT_GENERATOR_FORMAT = DEFAULT_GENERATOR_FORMAT; } - + + public static void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) { + RSSConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY; + } + + /** * * @param T la classe sources de la configuration @@ -85,6 +93,10 @@ loadConfig(config, instance, prefixConfig, "DEFAULT_RESOLVER_CLASS"); loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_NB_ITEM"); loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_FORMAT"); + loadConfig(config, instance, prefixConfig, "GENERATOR_DIRECTORY"); + + // create generator directory + new File(GENERATOR_DIRECTORY).mkdirs(); } protected void loadConfig(T config, RSSConfig instance, String prefix, String configName) { Added: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java (rev 0) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-05-30 20:39:08 UTC (rev 75) @@ -0,0 +1,208 @@ +package org.codelutin.rss; + +import com.sun.syndication.io.FeedException; +import java.io.*; + +import java.rmi.ServerException; +import java.text.ParseException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.servlet.*; +import javax.servlet.http.*; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * <p> + * Servlet permettant de generer des flux generes par RSSGeneratorHelper et de + * les publier. + * + * @author chemit + */ +public class RSSGeneratorServlet extends HttpServlet { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static final Log log = LogFactory.getLog(RSSGeneratorServlet.class); + protected transient RSSGeneratorHelper generator; + /** directory where feeds are stored */ + protected transient File generatorDirector; + private static final long serialVersionUID = 1L; + + @Override + public void init(ServletConfig config) throws ServletException { + init(config, true); + } + + public void init(ServletConfig config, boolean initRssConfig) throws ServletException { + try { + super.init(config); + if (initRssConfig) { + // init depuis la config de servlet + new RSSConfig.RSSConfigInitializer<ServletConfig>() { + + @Override + protected String getConfigValue(ServletConfig config, String fullConfigName) { + return config.getInitParameter(fullConfigName); + } + }.init(config); + + // instanciate rss generaotr avec les implantation par default + generator = RSSGeneratorHelper.getInstance(); + } + } catch (Exception eee) { + log.warn("Can't configure Servlet", eee); + if (eee instanceof ServletException) { + throw (ServletException) eee; + } + throw new ServletException("Can't configure Servlet", eee); + } + } + + /** + * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. + * @param request servlet request + * @param response servlet response + * @throws java.io.IOException TODO + * @throws ServletException TODO + */ + public void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + String action = request.getParameter("action"); + if (action==null) action=""; + action = action.trim().toLowerCase(); + if ("list".equals(action)) { + // obtain the list of known feeds + File[] files = getGeneratorDirector().listFiles(new FilenameFilter() { + + public boolean accept(File dir, String name) { + return name.endsWith(".xml"); + } + }); + response.setContentType("text/xml;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + try { + if (files.length > 0) { + String format = "<option value=\"%1$s\">%1$s</option>"; + for (File f : files) { + String name = f.getName(); + out.println(String.format(format, name.substring(0, name.length() - 4))); + } + } else { + out.println("no feed generated"); + } + } finally { + out.close(); + } + return; + } + String feedName = request.getParameter("feedName"); + if (feedName == null || "".equals(feedName)) { + throw new ServerException("could not find feedName parameter"); + } + + File file = new File(getGeneratorDirector(), feedName + ".xml"); + + if ("".equals(action)) { + // no action, just publication + if (!file.exists()) { + throw new ServletException("could not find feed to publish " + feedName); + } + response.setContentType("text/xml;charset=UTF-8"); + PrintWriter out = response.getWriter(); + try { + StringBuffer sb = new StringBuffer(); + + FileReader reader = new FileReader(file); + BufferedReader breader = new BufferedReader(reader); + String line = null; + while ((line = breader.readLine()) != null) { + sb.append(line).append('\n'); + } + out.println(sb.toString()); + return; + } finally { + out.close(); + } + } + + if ("create".equals(action)) { + String type = request.getParameter("feedType"); + FeedType feedType = type != null ? FeedType.valueOf(type) : RSSConfig.DEFAULT_GENERATOR_FORMAT; + String description = request.getParameter("feedDescription"); + String link = request.getParameter("feedLink"); + + Map<Field, Object> values = new HashMap<Field, Object>(); + values.put(Field.NAME, feedName); + values.put(Field.DESCRIPTION, description); + values.put(Field.LINK, link); + values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date())); + try { + + generator.createFeedFile(file.toURI().toURL(), feedType, values); + } catch (Exception ex) { + throw new ServletException(ex); + } + + String redirect = request.getParameter("from"); + if (redirect != null) { + response.sendRedirect(redirect); + } + return; + } + + if ("additem".equals(action)) { + + String redirect = request.getParameter("from"); + if (redirect != null) { + response.sendRedirect(redirect); + } + return; + } + + throw new ServletException("action " + action + "is unknown "); + + } + + public File getGeneratorDirector() { + if (generatorDirector == null) { + generatorDirector = new File(RSSConfig.GENERATOR_DIRECTORY); + } + return generatorDirector; + } + // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> + /** + * Handles the HTTP <code>GET</code> method. + * @param request servlet request + * @param response servlet response + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Handles the HTTP <code>POST</code> method. + * @param request servlet request + * @param response servlet response + */ + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** + * Returns a short description of the servlet. + */ + @Override + public String getServletInfo() { + return "RSS Publication Servlet"; + } + // </editor-fold> +} Modified: trunk/lutinrss/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/lutinrss/src/main/webapp/WEB-INF/web.xml 2008-05-30 17:56:57 UTC (rev 74) +++ trunk/lutinrss/src/main/webapp/WEB-INF/web.xml 2008-05-30 20:39:08 UTC (rev 75) @@ -1,19 +1,27 @@ <?xml version="1.0" encoding="ISO-8859-1"?> -<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee - http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> - +<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee + http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + <display-name>RSSServlet</display-name> - - <servlet> - <servlet-name>RSSServlet</servlet-name> - <servlet-class>org.codelutin.rss.RSSServlet</servlet-class> - </servlet> - <servlet-mapping> - <servlet-name>RSSServlet</servlet-name> - <url-pattern>/RSSServlet</url-pattern> - </servlet-mapping> - + + <servlet> + <servlet-name>RSSServlet</servlet-name> + <servlet-class>org.codelutin.rss.RSSServlet</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>RSSServlet</servlet-name> + <url-pattern>/RSSServlet</url-pattern> + </servlet-mapping> + <servlet> + <servlet-name>RSSGeneratorServlet</servlet-name> + <servlet-class>org.codelutin.rss.RSSGeneratorServlet</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>RSSGeneratorServlet</servlet-name> + <url-pattern>/RSSGeneratorServlet</url-pattern> + </servlet-mapping> + </web-app> Added: trunk/lutinrss/src/main/webapp/rssgenerator.js =================================================================== --- trunk/lutinrss/src/main/webapp/rssgenerator.js (rev 0) +++ trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-30 20:39:08 UTC (rev 75) @@ -0,0 +1,47 @@ +function rssgeneratorUpdateDiv(divs) { + //var serlvetUrl = "%1$1"; + var serlvetUrl = "http://tomcat-test/lutinrss-2.1/RSSGeneratorServlet?action=list"; + win = window; + var xhr = null; + var error=null; + if(win.XMLHttpRequest) // Firefox, Opera detected + xhr = new win.XMLHttpRequest(); + else if(win.ActiveXObject) // Internet Explorer detected + xhr = new win.ActiveXObject("Microsoft.XMLHTTP"); + else // XMLHttpRequest non supporte par le navigateur + error = "<span class='feed-error'>Votre navigateur ne supporte pas les objets XMLHTTPRequest...</span>"; + if (!!error) { updateDiv(divs,false,error); return; } + + xhr.open("GET", serlvetUrl, true); + xhr.onreadystatechange = function() { + if(xhr.readyState == 1) { updateDiv(divs,false,"Chargement de la liste des feeds en cours..."); } + else if(xhr.readyState == 4) { updateDiv(divs,true,xhr.responseText); } + } + xhr.send(null); +} + +var initRssGenerator =function () { + var divs = document.getElementsByTagName("div"); + var i = 0;var max=divs.length; + var toTreate = []; + while (i < max) { + var div = divs[i++]; + if (div.getAttribute('name')=='rssgeneratorlist') toTreate[toTreate.length] = div; + } + rssgeneratorUpdateDiv(toTreate); +} +var updateDiv= function(divs,select,text) { + var i=0; + var max = divs.length; + while (i<max) { + var div = divs[i++]; + if (!!select) { + var name = div.getAttribute("action"); + text = "<select name='"+name+"' length='50'>" + text+"</select>" + } + div.innerHTML =text; + } + +} +if (window.addEventListener) window.addEventListener( 'load', initRssGenerator,false); +else if (window.attachEvent) window.attachEvent( 'onload', initRssGenerator); Added: trunk/lutinrss/src/main/webapp/testGenerator.html =================================================================== --- trunk/lutinrss/src/main/webapp/testGenerator.html (rev 0) +++ trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-30 20:39:08 UTC (rev 75) @@ -0,0 +1,68 @@ +<!-- + Document : test + Created on : 18 avr. 2008, 11:46:56 + Author : poussin +--> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Page de test de génération de flux rss</title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <script src="rssgenerator.js"></script> + </head> + <body> + <h1>Test RSS Generator</h1> + <fieldset style="width:200px"> + <legend>Create new feed</legend> + <form method="post" action="RSSGeneratorServlet?action=create"> + <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html"> + <table> + <tr> + <td>feedName :</td> + <td><input name="feedName" type="text" size="50"></td> + </tr> + <tr> + <td>feedDescription: </td> + <td><input name="feedDescription" type="text" size="50"></td> + </tr> + <tr> + <td>feedLink : </td> + <td><input name="feedLink" type="text" size="50"></td> + </tr> + <tr> + <td colspan="2" align="right"><input type="submit" value="create"></td> + </tr> + </table> + </form> + </fieldset> + <fieldset style="width:200px"> + <legend>Add item to known feed</legend> + <form method="post" action="RSSGeneratorServlet?action=addItem"> + <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html"> + <table> + <tr> + <td>feedName :</td> + <td width="100%"> + <div name="rssgeneratorlist" action="feedName" with="100%"></div> + </td> + </tr> + <tr> + <td>itemName :</td> + <td><input name="itemName" type="text" size="50"></td> + </tr> + <tr> + <td>itemDescription: </td> + <td><input name="itemDescription" type="text" size="50"></td> + </tr> + <tr> + <td>itemLink : </td> + <td><input name="itemLink" type="text" size="50"></td> + </tr> + <tr> + <td colspan="2" align="right"><input type="submit" value="create"></td> + </tr> + </table> + </form> + </fieldset> + </body> +</html>
participants (1)
-
tchemit@users.labs.libre-entreprise.org