Author: tchemit Date: 2008-04-24 12:59:01 +0000 (Thu, 24 Apr 2008) New Revision: 13 Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java Log: permettre de configurer le prefix des clef de configuration. suppression des traitements des cas limites sur les param?\195?\168tres, ce n'est pas de la responsabilit?\195?\169 de la servlet Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-04-24 12:48:52 UTC (rev 12) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-04-24 12:59:01 UTC (rev 13) @@ -1,8 +1,9 @@ package org.codelutin.rss; import java.io.*; -import java.net.*; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.beanutils.BeanUtils; @@ -38,9 +39,13 @@ private static final Log log = LogFactory.getLog(RSSServlet.class); /** + * la propriete de configuration qui definit le prefix a jouter pour scruter la configuration + */ + protected static final String CONFIGURATION_PREFIX_PROPERTY= RSSServlet.class.getSimpleName()+"_configuration_prefix"; + /** * L'objet permettant de recupérer la representation HTML d'un feed */ - protected RSSHelper rss; + protected transient RSSHelper rss; /** * Le code JavaScript a utilise dans les pages clientes */ @@ -57,14 +62,17 @@ " div.innerHTML = \"<span class='feed-error'>Votre navigateur ne supporte pas les objets XMLHTTPRequest...</span>\";\n" + " return;\n" + " }\n" + - " if (!nbItem) {\n" + - " nbItem = -1;\n" + - " }\n" + - " if (!feedRepr) {\n" + - " feedRepr = \"\";\n" + - " }\n" + - " var param = \"feedName=\" + escape(feedName) + \"&nbItem=\" + escape(nbItem) + \"&feedRepr=\" + escape(feedRepr);\n" + - " var url = serlvetUrl + \"?\" + param;\n" + + //" if (!nbItem) {\n" + + //" nbItem = null;\n" + + //" }\n" + + //" if (!feedRepr) {\n" + + //" feedRepr = \"\";\n" + + //" }\n" + + //" var param = \"feedName=\" + escape(feedName) + \"&nbItem=\" + escape(nbItem) + \"&feedRepr=\" + escape(feedRepr);\n" + + //" var url = serlvetUrl + \"?\" + param;\n" + + " var url = serlvetUrl + \"?feedName=\" + escape(feedName);"+ + " if (!!nbItem) {url += \"&nbItem=\" + escape(nbItem);}"+ + " if (!!feedRepr) {url += \"&feedRepr=\" + escape(feedRepr);}"+ " xhr.open(\"GET\", url, true);\n" + " xhr.onreadystatechange = function() {\n" + " if(xhr.readyState == 4) {\n" + @@ -73,38 +81,42 @@ " }\n" + " xhr.send(null);\n" + "}\n"; + 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); - 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()); + if (initRssConfig) { + + // init depuis la config de servlet + initRssConfig(config); + + // instanciate rss avec les implanatation par defaut + initDefaultRssHelper(); + } } 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); } } - - 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 * @param response servlet response + * @throws java.io.IOException TODO + * @throws ServletException TODO */ - protected void processRequest(HttpServletRequest request, HttpServletResponse response) + public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String feedName = request.getParameter("feedName"); if (feedName == null || "".equals(feedName)) { @@ -121,22 +133,54 @@ response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { - String feedRepr = request.getParameter("feedRepr"); - if (null == feedRepr || "".equals(feedRepr)) { - feedRepr = "n-ndat"; - } - int nbItem = convertToInt(request.getParameter("nbItem")); - - out.println(rss.getHTML(feedName, feedRepr, nbItem)); - + String feedRepr = request.getParameter("feedRepr"); + Integer nbItem = convertToInt(request.getParameter("nbItem")); + out.println(getHTML(feedName, feedRepr, nbItem)); } finally { out.close(); } } } + + protected void initDefaultRssHelper() throws ServletException { + try { + rss = new RSSHelper(RSSConfig.DEFAULT_RESOLVER_CLASS.newInstance(), + RSSConfig.DEFAULT_RENDERER_CLASS.newInstance()); + } catch (Exception ex) { + log.warn("Can't configure rsshelper", ex); + throw new ServletException("Can't configure rsshelper", ex); + } + } + + protected void initRssConfig(ServletConfig config) throws Exception { + // recherche de la propriete RSSServlet_configuration_prefix + String prefixConfig = config.getInitParameter(CONFIGURATION_PREFIX_PROPERTY); + prefixConfig = prefixConfig==null?"":prefixConfig.trim(); + loadConfig(config, prefixConfig,"TIME_FORCE_RETRIEVED"); + loadConfig(config, prefixConfig,"DEFAULT_RENDERER_CONFIG"); + loadConfig(config, prefixConfig,"DEFAULT_NB_ITEM"); + loadConfig(config, prefixConfig,"DEFAULT_RENDERER_CLASS"); + loadConfig(config, prefixConfig,"DEFAULT_RESOLVER_CLASS"); + } - protected int convertToInt(String parameter) { - int result = -1; + protected void loadConfig(ServletConfig config,String prefix, String configName) throws Exception { + String value = config.getInitParameter(prefix+configName); + loadConfig(configName,value); + } + + protected void loadConfig(String configName,String value ) throws Exception { + if (value != null && !"".equals(value)) { + log.info("key: "+configName+", value:"+value); + BeanUtils.setProperty(new RSSConfig(), configName, value); + } + } + + protected String getHTML(String feedName,String feedRepr,Integer nbItems) { + return rss.getHTML(feedName, feedRepr, nbItems); + } + + protected Integer convertToInt(String parameter) { + Integer result = null; try { result = Integer.parseInt(parameter); } catch(Exception eee) {