Author: bpoussin Date: 2008-04-22 13:18:07 +0000 (Tue, 22 Apr 2008) New Revision: 4 Modified: trunk/lutinrss/ trunk/lutinrss/src/main/java/org/codelutin/rss/FeedData.java trunk/lutinrss/src/main/java/org/codelutin/rss/FeedHTMLRenderer.java trunk/lutinrss/src/main/java/org/codelutin/rss/FeedURLResolver.java trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java trunk/lutinrss/src/main/java/org/codelutin/rss/SimpleFeedURLResolver.java trunk/lutinrss/src/test/java/org/codelutin/rss/RSSTest.java Log: - ajout la possibilite de configurer la servlet dans le web.xml - choix des differentes class (renderer, resolver, ...) - le resolver permet maintenant de retourner un objet avec les configuration par defaut le nombre d'item et le renderer Property changes on: trunk/lutinrss ___________________________________________________________________ Name: svn:ignore + target Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/FeedData.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/FeedData.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/FeedData.java 2008-04-22 13:18:07 UTC (rev 4) @@ -30,18 +30,43 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ private static final Log log = LogFactory.getLog(FeedData.class); + /** url du feed */ protected URL url = null; + /** les champs que l'on souhaite visualiser pour le feed */ + protected FeedRendererConfig rendererConfig = null; + /** Le nombre d'item que l'on souhaite visualiser pour le feed */ + protected int nbItem = -1; + protected SyndFeed feed = null; protected long lastRetrived = 0; public FeedData(URL url) { this.url = url; } + + public URL getUrl() { + return url; + } + + public FeedRendererConfig getRendererConfig() { + return rendererConfig; + } + + public void setRendererConfig(FeedRendererConfig rendererConfig) { + this.rendererConfig = rendererConfig; + } + + public int getNbItem() { + return nbItem; + } + + public void setNbItem(int nbItem) { + this.nbItem = nbItem; + } /** * Retourne la representation HTML du RSS * - * @param nbItem le nombre d'item souhaite, si inferieur a 0, alors tous * @return */ public SyndFeed getFeed() { Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/FeedHTMLRenderer.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/FeedHTMLRenderer.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/FeedHTMLRenderer.java 2008-04-22 13:18:07 UTC (rev 4) @@ -31,7 +31,16 @@ protected EnumMap<Field, String> feedProperties = new EnumMap<Field, String>(Field.class); protected EnumMap<Field, String> itemProperties = new EnumMap<Field, String>(Field.class); + /** + * + * @param cleaners La liste des cleaners a utiliser par defaut. Si aucun + * cleaner n'est passer en argument HTMLScriptCleaner est automatiquement + * ajoute + */ public FeedHTMLRenderer(HTMLCleaner ... cleaners) { + if (cleaners.length == 0) { + addHTMLCleaner(new HTMLScriptCleaner()); + } for (HTMLCleaner cleaner : cleaners) { addHTMLCleaner(cleaner); } @@ -60,7 +69,19 @@ itemProperties.put(Field.AUTHOR, "author"); itemProperties.put(Field.TIME, "publishedDate"); } - + + /** + * Supprime tous les cleaners de code html + */ + public FeedHTMLRenderer() { + } + /** + * Ajoute un nouveau cleaner de code HTML + */ + public void clearCleaners() { + this.cleaners.clear(); + } + public void addHTMLCleaner(HTMLCleaner cleaner) { cleaners.add(cleaner); } Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/FeedURLResolver.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/FeedURLResolver.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/FeedURLResolver.java 2008-04-22 13:18:07 UTC (rev 4) @@ -17,5 +17,5 @@ */ public interface FeedURLResolver { - public URL resolv(String ask) throws MalformedURLException; + public FeedData resolv(String ask) throws MalformedURLException; } Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-04-22 13:18:07 UTC (rev 4) @@ -7,5 +7,31 @@ public class RSSConfig { /** Temps a partir duquel on reforce une recuperation */ - public static long TIME_FORCE_RETRIEVED = 1000; // 5 * 60 * 1000; + public static long TIME_FORCE_RETRIEVED = 5 * 60 * 1000; + public static FeedRendererConfig DEFAULT_RENDERER_CONFIG = new FeedRendererConfig("n-natd"); + public static int DEFAULT_NBITEM = -1; + + public static Class DEFAULT_RENDERER_CLASS = FeedHTMLRenderer.class; + public static Class DEFAULT_RESOLVER_CLASS = SimpleFeedURLResolver.class; + + public void setTIME_FORCE_RETRIEVED(long TIME_FORCE_RETRIEVED) { + RSSConfig.TIME_FORCE_RETRIEVED = TIME_FORCE_RETRIEVED; + } + + public void setDEFAULT_RENDERER_CONFIG(String DEFAULT_RENDERER_CONFIG) { + RSSConfig.DEFAULT_RENDERER_CONFIG = new FeedRendererConfig(DEFAULT_RENDERER_CONFIG); + } + + public void setDEFAULT_NBITEM(int DEFAULT_NBITEM) { + RSSConfig.DEFAULT_NBITEM = DEFAULT_NBITEM; + } + + public void setDEFAULT_RENDERER_CLASS(Class DEFAULT_RENDERER_CLASS) { + RSSConfig.DEFAULT_RENDERER_CLASS = DEFAULT_RENDERER_CLASS; + } + + public void setDEFAULT_RESOLVER_CLASS(Class DEFAULT_RESOLVER_CLASS) { + RSSConfig.DEFAULT_RESOLVER_CLASS = DEFAULT_RESOLVER_CLASS; + } + } Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java 2008-04-22 13:18:07 UTC (rev 4) @@ -59,24 +59,35 @@ * @param nbItem le nombre d'item du feed souhaite * @return le code html representant le feed */ - public String getHTML(String feedName, String representation, int nbItem) { + public String getHTML(String feedName, String representation, Integer nbItem) { try { FeedData feed = (FeedData) feeds.get(feedName); if (feed == null) { - URL url = resolver.resolv(feedName); - feed = new FeedData(url); + feed = resolver.resolv(feedName); feeds.put(feedName, feed); } - + + FeedRendererConfig c = null; + if (representation != null) { + c = new FeedRendererConfig(representation); + } else { + c = feed.getRendererConfig(); + } + + int nb = -1; + if (nbItem != null) { + nb = nbItem.intValue(); + } else { + nb = feed.getNbItem(); + } + SyndFeed sf = feed.getFeed(); List syndEntries = sf.getEntries(); - if (nbItem >= 0 && syndEntries.size() >= nbItem) { - syndEntries = syndEntries.subList(syndEntries.size() - nbItem, syndEntries.size()); + if (nb >= 0 && syndEntries.size() >= nb) { + syndEntries = syndEntries.subList(syndEntries.size() - nb, syndEntries.size()); } SyndEntry [] items = (SyndEntry[])syndEntries.toArray(new SyndEntry[syndEntries.size()]); - FeedRendererConfig c = new FeedRendererConfig(representation); - String result = renderer.render(c, sf, items); return result; } catch (MalformedURLException eee) { Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-04-22 13:18:07 UTC (rev 4) @@ -5,6 +5,7 @@ import javax.servlet.*; import javax.servlet.http.*; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -75,10 +76,29 @@ @Override public void init(ServletConfig config) throws ServletException { - super.init(config); - rss = new RSSHelper(); + try { + super.init(config); + loadConfig(config, "TIME_FORCE_RETRIEVED"); + loadConfig(config, "DEFAULT_RENDERER_CONFIG"); + loadConfig(config, "DEFAULT_NBITEM"); + loadConfig(config, "DEFAULT_RENDERER_CLASS"); + loadConfig(config, "DEFAULT_RESOLVER_CLASS"); + rss = new RSSHelper( + (FeedURLResolver) RSSConfig.DEFAULT_RESOLVER_CLASS.newInstance(), + (FeedRenderer) RSSConfig.DEFAULT_RENDERER_CLASS.newInstance()); + } catch (Exception eee) { + log.warn("Can't configure Servlet", eee); + throw new ServletException("Can't configure Servlet", eee); + } } + protected void loadConfig(ServletConfig config, String configName) throws Exception { + String value = config.getInitParameter(configName); + if (value != null && !"".equals(value)) { + BeanUtils.setProperty(new RSSConfig(), configName, value); + } + } + /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/SimpleFeedURLResolver.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/SimpleFeedURLResolver.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/SimpleFeedURLResolver.java 2008-04-22 13:18:07 UTC (rev 4) @@ -9,13 +9,17 @@ import java.net.URL; /** - * + * Par defaut retourne un FeedData ou la chaine passer est convertie en URL, + * le nombre d'item est positionne a -1 et le renderer a n-natd * @author poussin */ public class SimpleFeedURLResolver implements FeedURLResolver { - public URL resolv(String ask) throws MalformedURLException { - URL result = new URL(ask); + public FeedData resolv(String ask) throws MalformedURLException { + URL url = new URL(ask); + FeedData result = new FeedData(url); + result.setNbItem(RSSConfig.DEFAULT_NBITEM); + result.setRendererConfig(RSSConfig.DEFAULT_RENDERER_CONFIG); return result; } Modified: trunk/lutinrss/src/test/java/org/codelutin/rss/RSSTest.java =================================================================== --- trunk/lutinrss/src/test/java/org/codelutin/rss/RSSTest.java 2008-04-21 06:58:10 UTC (rev 3) +++ trunk/lutinrss/src/test/java/org/codelutin/rss/RSSTest.java 2008-04-22 13:18:07 UTC (rev 4) @@ -21,6 +21,13 @@ } public void testBeanUtils() throws Exception { +// RSSConfig.class.getField("TIME_FORCE_RETRIEVED").set(null, 10); + System.out.println("TIME:" + RSSConfig.TIME_FORCE_RETRIEVED); + System.out.println("RENDER:" + RSSConfig.DEFAULT_RENDERER_CLASS); + BeanUtils.setProperty(new RSSConfig(), "TIME_FORCE_RETRIEVED", "10"); + BeanUtils.setProperty(new RSSConfig(), "DEFAULT_RENDERER_CLASS", FeedRenderer.class.getName()); + System.out.println("TIME:" + RSSConfig.TIME_FORCE_RETRIEVED); + System.out.println("RENDER:" + RSSConfig.DEFAULT_RENDERER_CLASS); assertEquals("java.lang.String", BeanUtils.getProperty("Object", "class.name")); }