Nuiton-config-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
June 2014
- 1 participants
- 1 discussions
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
1
0