Author: tchemit Date: 2008-04-25 07:31:11 +0000 (Fri, 25 Apr 2008) New Revision: 18 Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java Log: ajout de la class RSSConfigInitializer qui permet d'initialiser RSSConfig de mani?\195?\168re dynamique Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-04-25 07:30:28 UTC (rev 17) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-04-25 07:31:11 UTC (rev 18) @@ -1,17 +1,27 @@ package org.codelutin.rss; +import org.apache.commons.beanutils.BeanUtils; + /** * * @author poussin */ public class RSSConfig { + /** + * 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"; + /** Temps a partir duquel on reforce une recuperation */ public static long TIME_FORCE_RETRIEVED = 5 * 60 * 1000; + public static FeedRendererConfig DEFAULT_RENDERER_CONFIG = new FeedRendererConfig("n-natd"); - public static int DEFAULT_NB_ITEM = -1; + public static int DEFAULT_NB_ITEM = 7; + public static Class<? extends FeedRenderer> DEFAULT_RENDERER_CLASS = FeedHTMLRenderer.class; + public static Class<? extends FeedURLResolver> DEFAULT_RESOLVER_CLASS = SimpleFeedURLResolver.class; public void setTIME_FORCE_RETRIEVED(long TIME_FORCE_RETRIEVED) { @@ -34,4 +44,44 @@ RSSConfig.DEFAULT_RESOLVER_CLASS = DEFAULT_RESOLVER_CLASS; } + /** + * + * @param T la classe sources de la configuration + */ + public static abstract class RSSConfigInitializer<T> { + + /** + * + * @param config l'object source contenant les configs + * @param fullConfigName le nom complet de la propriete recherchee + * @return la valeur de la propriete ou null si non trouve + */ + protected abstract String getConfigValue(T config, String fullConfigName); + + /** + * Initialise RSSConfig. + * @param config l'object de configuration + */ + public void init(T config) { + String prefixConfig = getConfigValue(config, CONFIGURATION_PREFIX_PROPERTY); + prefixConfig = prefixConfig == null ? "" : prefixConfig.trim(); + RSSConfig instance = new RSSConfig(); + loadConfig(config, instance, prefixConfig, "TIME_FORCE_RETRIEVED"); + loadConfig(config, instance, prefixConfig, "DEFAULT_RENDERER_CONFIG"); + loadConfig(config, instance, prefixConfig, "DEFAULT_NB_ITEM"); + loadConfig(config, instance, prefixConfig, "DEFAULT_RENDERER_CLASS"); + loadConfig(config, instance, prefixConfig, "DEFAULT_RESOLVER_CLASS"); + } + + protected void loadConfig(T config, RSSConfig instance, String prefix, String configName) { + String value = getConfigValue(config, prefix + configName); + if (value != null && !"".equals(value)) { + try { + BeanUtils.setProperty(instance, configName, value); + } catch (Exception ex) { + throw new IllegalStateException("could not load property " + configName + " from config " + config + " for reason : " + ex.getMessage()); + } + } + } + } }