Index: maven-commandline-plugin/src/java/org/codelutin/option/def/loader/OptionLoader.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/def/loader/OptionLoader.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/def/loader/OptionLoader.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/def/loader/OptionLoader.java:1.1 Sun Mar 23 00:22:36 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/def/loader/OptionLoader.java Sun Mar 23 23:48:46 2008 @@ -28,6 +28,11 @@ protected String categoriesStr; private List options; + public OptionLoader() { + super(OPTION_PATTERN, OptionLoaderEntry.class); + this.defaultOptions = DefaultOptionAction.getConfigKeys(); + } + public OptionLoader(String categoriesStr) { super(OPTION_PATTERN, OptionLoaderEntry.class); this.defaultOptions = DefaultOptionAction.getConfigKeys(); Index: maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoader.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoader.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoader.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoader.java:1.1 Sun Mar 23 00:22:36 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoader.java Sun Mar 23 23:48:46 2008 @@ -14,13 +14,32 @@ */ package org.codelutin.option.def.loader; +import org.codelutin.option.Config; + +import java.util.List; +import java.util.Properties; + /** @author chemit */ public class ConfigPropertyLoader extends Loader { public static final String CONFIG_DEFINITION_PATTERN = "\\.config\\.definition\\.(\\w+)"; + protected List defaultProperties; - public ConfigPropertyLoader(String category) { + public ConfigPropertyLoader(String category, List defaultProperties) { super(category + CONFIG_DEFINITION_PATTERN, ConfigPropertyLoaderEntry.class); + this.defaultProperties = defaultProperties; } + @Override + protected boolean needLoad(String key, String value, List result, Properties source) { + if (pattern.toString().startsWith(Config.MAIN_CATEGORY) && defaultProperties.contains(key)) { + // this is a default commandline config property, do no take this one + log.warn("detected generic config property key " + key + ", will use the generic one..."); + // clean source + source.remove(key); + source.remove("main.config.modifiers."+value); + return false; + } + return true; + } } \ No newline at end of file Index: maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigLoader.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigLoader.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigLoader.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigLoader.java:1.1 Sun Mar 23 00:22:36 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigLoader.java Sun Mar 23 23:48:46 2008 @@ -14,7 +14,12 @@ */ package org.codelutin.option.def.loader; +import org.codelutin.option.Config; +import org.codelutin.option.def.MandatoryConfigProperty; + +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Properties; /** @author chemit */ @@ -26,17 +31,45 @@ protected List configs; - public ConfigLoader() { + protected List defaultProperties; + + protected ConfigLoaderEntry detectMainConfig; + + private Map injects; + + public ConfigLoader(Map injects) { super(CONFIG_DEFINITION_PATTERN, ConfigLoaderEntry.class); + this.injects=injects; + + this.defaultProperties = MandatoryConfigProperty.getConfigPropertyKeys(); } public void doLoad(Properties source) throws Exception { - + detectMainConfig = null; // get configs configs = load(source); - //TODO Check we have mandatories config properties... + if (detectMainConfig == null) { + log.warn("could not found main config, create it"); + detectMainConfig = new ConfigLoaderEntry(Config.MAIN_CATEGORY, Config.MAIN_CATEGORY); + configs.add(detectMainConfig); + } + for (MandatoryConfigProperty configProperty : MandatoryConfigProperty.values()) { + ConfigPropertyLoaderEntry loaderEntry = new ConfigPropertyLoaderEntry(configProperty.getEntryKey(), configProperty.name()); + loaderEntry.setModifiers("final mandatory static"); + // inject default value + loaderEntry.setDefinition(configProperty.type() + ':' + injects.get(configProperty.name())); + if (log.isDebugEnabled()) { + log.debug("load default config property " + loaderEntry); + } + detectMainConfig.getProperties().add(loaderEntry); + } + + // sort configs + for (ConfigLoaderEntry config : configs) { + Collections.sort(config.getProperties()); + } // build @catagories@ var categoriesStr = categories(); } @@ -61,8 +94,11 @@ @Override protected void postLoad(ConfigLoaderEntry entry, Properties source) throws Exception { - ConfigPropertyLoader loader = new ConfigPropertyLoader(entry.getName()); + ConfigPropertyLoader loader = new ConfigPropertyLoader(entry.getName(), defaultProperties); entry.setProperties(loader.load(source)); + if (entry.getName().equals(Config.MAIN_CATEGORY)) { + detectMainConfig = entry; + } } @@ -77,4 +113,5 @@ } return str; } + } \ No newline at end of file Index: maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoaderEntry.java diff -u maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoaderEntry.java:1.1 maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoaderEntry.java:1.2 --- maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoaderEntry.java:1.1 Sun Mar 23 00:22:36 2008 +++ maven-commandline-plugin/src/java/org/codelutin/option/def/loader/ConfigPropertyLoaderEntry.java Sun Mar 23 23:48:46 2008 @@ -32,9 +32,9 @@ } public void load(Properties source, List result) { - definition = source.get(getFullKey())+"";; + definition = source.get(getFullKey())+""; source.remove(getFullKey()); - String modifiersKey = category + CMODIFIERS_KEY_FACTOR + name; + String modifiersKey = getModifierFullKey(); Object cv = source.get(modifiersKey); if (cv == null) { //TODO treate missing modifiers entry @@ -44,10 +44,22 @@ } } + public String getModifierFullKey() { + return category + CMODIFIERS_KEY_FACTOR + name; + } + public String getDefinition() { return definition; } + public void setDefinition(String definition) { + this.definition = definition; + } + + public void setModifiers(String modifiers) { + this.modifiers = modifiers; + } + @Override public String toString() { return super.toString() + " ( category:" + category + ", def: " + definition + ", modifiers:" + modifiers + " )";