r2602 - trunk/src/main/java/org/nuiton/config
Author: bpoussin Date: 2014-06-30 19:03:47 +0200 (Mon, 30 Jun 2014) New Revision: 2602 Url: http://forge.nuiton.org/projects/nuiton-config/repository/revisions/2602 Log: - extract class SubApplicationConfig from ApplicationConfig. - add new methode ApplicationConfig.getConfig(Map) to permit to overwrite config value with value in map Added: trunk/src/main/java/org/nuiton/config/OverwriteApplicationConfig.java trunk/src/main/java/org/nuiton/config/SubApplicationConfig.java Modified: trunk/src/main/java/org/nuiton/config/ApplicationConfig.java Modified: trunk/src/main/java/org/nuiton/config/ApplicationConfig.java =================================================================== --- trunk/src/main/java/org/nuiton/config/ApplicationConfig.java 2014-02-04 09:54:14 UTC (rev 2601) +++ trunk/src/main/java/org/nuiton/config/ApplicationConfig.java 2014-06-30 17:03:47 UTC (rev 2602) @@ -1351,6 +1351,17 @@ } /** + * Return new ApplicationConfig with overwrite use as value for option + * if found in it. Otherwise return value found in this config + * + * @param overwrite + * @return + */ + public ApplicationConfig getConfig(Map<String, String> overwrite) { + return new OverwriteApplicationConfig(this, overwrite); + } + + /** * Returns a sub config that encapsulate this ApplicationConfig. * * @param prefix prefix to put automaticaly at beginning of all key @@ -2241,174 +2252,7 @@ } }; - /** - * Permet de masquer un prefix. Il est possible d'avoir des valeurs par - * defaut. Par exemple: - * <pre> - * monOption=toto - * monPrefix.monOption=titi - * </pre> - * <p/> - * <li>Si on cree le subApp avec le prefix "monPrefix." et qu'on demande la valeur - * de "monOption", la valeur retournee est "titi". - * <li>Si on cree le subApp avec le prefix "monAutrePrefix." et qu'on demande la valeur - * de "monOption", la valeur retournee est "toto" (valeur par defaut de monOption. - * <p/> - * Certaines methodes retournees ne sont pas - * surchargee et ne masque pas le prefix: - * <li>getOptions() - * - * @since 2.4.9 - */ - public static class SubApplicationConfig extends ApplicationConfig { - protected ApplicationConfig parent; - - protected String prefix; - - public SubApplicationConfig(ApplicationConfig parent, String prefix) { - this.parent = parent; - this.prefix = prefix; - } - - @Override - protected void init(Properties defaults, String configFilename) { - // do nothing - } - - public ApplicationConfig getParent() { - return parent; - } - - public String getPrefix() { - return prefix; - } - - @Override - public Properties getOptions() { - return getParent().getOptions(); - } - - @Override - public void setDefaultOption(String key, String value) { - getParent().setDefaultOption(getPrefix() + key, value); - } - - @Override - public boolean hasOption(String key) { - boolean result = getOption(key) != null; - return result; - } - - @Override - public void setOption(String key, String value) { - getParent().setOption(getPrefix() + key, value); - } - - /** - * Surcharge pour recherche la cle avec le prefix. Si on ne la retrouve - * pas, on recherche sans le prefix pour permettre d'avoir des valeurs - * par defaut. - * - * @param key La cle de l'option - * @return l'option trouvé avec le prefix ou sinon celle sans le prefix - * si pas trouvé. - */ - @Override - public String getOption(String key) { - String result = getParent().getOption(getPrefix() + key); - if (result == null) { - result = getParent().getOption(key); - } - return result; - } - - /** - * Surcharge de la methode pour que les options commencant par le prefix - * soit modifiee pour qu'elle est la meme cle sans le prefix. Le but - * est de garder les autres options et si une option avait le meme nom - * qu'elle soit effacee par celle dont on a supprime le prefix - * - * @param replaceInner le prefix à remplacer - * @return les options commencant par le prefix - * soit modifiee pour qu'elle est la meme cle sans le prefix. Le but - * est de garder les autres options et si une option avait le meme nom - * qu'elle soit effacee par celle dont on a supprime le prefix - */ - @Override - public Properties getFlatOptions(boolean replaceInner) { - Properties result = getParent().getFlatOptions(replaceInner); - Properties tmp = new Properties(); - int lenght = getPrefix().length(); - for (Map.Entry e : result.entrySet()) { - String k = (String) e.getKey(); - if (k.startsWith(getPrefix())) { - k = k.substring(lenght); - String v = (String) e.getValue(); - tmp.setProperty(k, v); - } - } - result.putAll(tmp); - return result; - } - - /** - * Surcharge pour recupere les valeurs commencant par le prefix demande - * en plus du prefix 'sub'. Les options sont ensuite fusionnee pour - * permettre aussi les valeurs par defaut - * - * @param prefix prefix to use - * @return les valeurs commençant par le prefix demandé en plus du - * prefix 'sub'. - */ - @Override - public Properties getOptionStartsWith(String prefix) { - Properties result = getParent().getOptionStartsWith(prefix); - Properties tmp = getParent().getOptionStartsWith(getPrefix() + prefix); - int lenght = getPrefix().length(); - for (Map.Entry e : tmp.entrySet()) { - String k = (String) e.getKey(); - k = k.substring(lenght); - String v = (String) e.getValue(); - // on ajout/ecrase les valeurs de result - result.setProperty(k, v); - } - return result; - } - - @Override - protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - if (propertyName.startsWith(getPrefix())) { - propertyName = propertyName.substring(getPrefix().length()); - getParent().firePropertyChange(propertyName, oldValue, newValue); - } // else not fire event - } - - @Override - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - getParent().addPropertyChangeListener(getPrefix() + propertyName, listener); - } - - @Override - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - getParent().removePropertyChangeListener(getPrefix() + propertyName, listener); - } - - @Override - public boolean hasListeners(String propertyName) { - return getParent().hasListeners(getPrefix() + propertyName); - } - - // methode interdite dans le sub - - @Override - public ApplicationConfig parse(String... args) throws ArgumentsParserException { - throw new UnsupportedOperationException("This method is not supported in SubApplicationConfig"); - } - - - } - /** * Defines a runtime action to be launched via the {@link #doAction()} * method. Added: trunk/src/main/java/org/nuiton/config/OverwriteApplicationConfig.java =================================================================== --- trunk/src/main/java/org/nuiton/config/OverwriteApplicationConfig.java (rev 0) +++ trunk/src/main/java/org/nuiton/config/OverwriteApplicationConfig.java 2014-06-30 17:03:47 UTC (rev 2602) @@ -0,0 +1,72 @@ +package org.nuiton.config; + + +import java.util.Map; +import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Permet d'avoir une liste de configuration dans lequel on va chercher les valeurs + * avant de regarder dans les valeurs de la configuration + * + * @see ApplicationConfig#getConfig(Map) + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class OverwriteApplicationConfig extends ApplicationConfig { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(OverwriteApplicationConfig.class); + + protected ApplicationConfig parent; + protected Map<String, String> overwrite; + + public OverwriteApplicationConfig(ApplicationConfig parent, Map<String, String> overwrite) { + this.parent = parent; + this.overwrite = overwrite; + } + + @Override + protected void init(Properties defaults, String configFilename) { + // do nothing + } + + public ApplicationConfig getParent() { + return parent; + } + + @Override + public String getOption(String key) { + String value = overwrite.get(key); + // on est oblige de faire un get, car le containsKey n'est pas recursif + // sur tous les properties si Map est un Properties + + if (value != null) { + value = overwrite.get(key); + // replace ${xxx} + value = replaceRecursiveOptions(value); + } else { + value = parent.getOption(key); + } + + return value; + } + + @Override + public boolean hasOption(String key) { + boolean result = getOption(key) != null; + return result; + } + + // methode interdite dans le sub + @Override + public ApplicationConfig parse(String... args) throws ArgumentsParserException { + throw new UnsupportedOperationException("This method is not supported in OverwriteApplicationConfig"); + } + +} Property changes on: trunk/src/main/java/org/nuiton/config/OverwriteApplicationConfig.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/src/main/java/org/nuiton/config/SubApplicationConfig.java =================================================================== --- trunk/src/main/java/org/nuiton/config/SubApplicationConfig.java (rev 0) +++ trunk/src/main/java/org/nuiton/config/SubApplicationConfig.java 2014-06-30 17:03:47 UTC (rev 2602) @@ -0,0 +1,171 @@ +package org.nuiton.config; + + +import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.Properties; + +/** + * Permet de masquer un prefix. Il est possible d'avoir des valeurs par + * defaut. Par exemple: + * <pre> + * monOption=toto + * monPrefix.monOption=titi + * </pre> + * <p/> + * <li>Si on cree le subApp avec le prefix "monPrefix." et qu'on demande la valeur + * de "monOption", la valeur retournee est "titi". + * <li>Si on cree le subApp avec le prefix "monAutrePrefix." et qu'on demande la valeur + * de "monOption", la valeur retournee est "toto" (valeur par defaut de monOption. + * <p/> + * Certaines methodes retournees ne sont pas + * surchargee et ne masque pas le prefix: + * <li>getOptions() + * + * @since 2.4.9 + */ +public class SubApplicationConfig extends ApplicationConfig { + + protected ApplicationConfig parent; + protected String prefix; + + public SubApplicationConfig(ApplicationConfig parent, String prefix) { + this.parent = parent; + this.prefix = prefix; + } + + @Override + protected void init(Properties defaults, String configFilename) { + // do nothing + } + + public ApplicationConfig getParent() { + return parent; + } + + public String getPrefix() { + return prefix; + } + + @Override + public Properties getOptions() { + return getParent().getOptions(); + } + + @Override + public void setDefaultOption(String key, String value) { + getParent().setDefaultOption(getPrefix() + key, value); + } + + @Override + public boolean hasOption(String key) { + boolean result = getOption(key) != null; + return result; + } + + @Override + public void setOption(String key, String value) { + getParent().setOption(getPrefix() + key, value); + } + + /** + * Surcharge pour recherche la cle avec le prefix. Si on ne la retrouve + * pas, on recherche sans le prefix pour permettre d'avoir des valeurs + * par defaut. + * + * @param key La cle de l'option + * @return l'option trouvé avec le prefix ou sinon celle sans le prefix + * si pas trouvé. + */ + @Override + public String getOption(String key) { + String result = getParent().getOption(getPrefix() + key); + if (result == null) { + result = getParent().getOption(key); + } + return result; + } + + /** + * Surcharge de la methode pour que les options commencant par le prefix + * soit modifiee pour qu'elle est la meme cle sans le prefix. Le but + * est de garder les autres options et si une option avait le meme nom + * qu'elle soit effacee par celle dont on a supprime le prefix + * + * @param replaceInner le prefix à remplacer + * @return les options commencant par le prefix + * soit modifiee pour qu'elle est la meme cle sans le prefix. Le but + * est de garder les autres options et si une option avait le meme nom + * qu'elle soit effacee par celle dont on a supprime le prefix + */ + @Override + public Properties getFlatOptions(boolean replaceInner) { + Properties result = getParent().getFlatOptions(replaceInner); + Properties tmp = new Properties(); + int lenght = getPrefix().length(); + for (Map.Entry e : result.entrySet()) { + String k = (String) e.getKey(); + if (k.startsWith(getPrefix())) { + k = k.substring(lenght); + String v = (String) e.getValue(); + tmp.setProperty(k, v); + } + } + result.putAll(tmp); + return result; + } + + /** + * Surcharge pour recupere les valeurs commencant par le prefix demande + * en plus du prefix 'sub'. Les options sont ensuite fusionnee pour + * permettre aussi les valeurs par defaut + * + * @param prefix prefix to use + * @return les valeurs commençant par le prefix demandé en plus du + * prefix 'sub'. + */ + @Override + public Properties getOptionStartsWith(String prefix) { + Properties result = getParent().getOptionStartsWith(prefix); + Properties tmp = getParent().getOptionStartsWith(getPrefix() + prefix); + int lenght = getPrefix().length(); + for (Map.Entry e : tmp.entrySet()) { + String k = (String) e.getKey(); + k = k.substring(lenght); + String v = (String) e.getValue(); + // on ajout/ecrase les valeurs de result + result.setProperty(k, v); + } + return result; + } + + @Override + protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + if (propertyName.startsWith(getPrefix())) { + propertyName = propertyName.substring(getPrefix().length()); + getParent().firePropertyChange(propertyName, oldValue, newValue); + } // else not fire event + } + + @Override + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + getParent().addPropertyChangeListener(getPrefix() + propertyName, listener); + } + + @Override + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + getParent().removePropertyChangeListener(getPrefix() + propertyName, listener); + } + + @Override + public boolean hasListeners(String propertyName) { + return getParent().hasListeners(getPrefix() + propertyName); + } + + // methode interdite dans le sub + @Override + public ApplicationConfig parse(String... args) throws ArgumentsParserException { + throw new UnsupportedOperationException("This method is not supported in SubApplicationConfig"); + } + +} Property changes on: trunk/src/main/java/org/nuiton/config/SubApplicationConfig.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL
participants (1)
-
bpoussin@users.nuiton.org