Thread: [Jukebox-cvs] CVS update: J4/src/java/gnu/j4/config Configuration.java
Brought to you by:
vtt
From: CVS B. <vt...@fr...> - 2000-03-08 07:25:56
|
User: vt Date: 00/03/08 00:21:32 Modified: src/java/gnu/j4/config Configuration.java Log: Fixed the platform dependency, except for the one derived from gnu.j4.LocalConfig. Revision Changes Path 1.24 +74 -70 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.24&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.24&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.24&r2=1.23&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- Configuration.java 1999/09/29 04:31:59 1.23 +++ Configuration.java 2000/03/08 07:21:32 1.24 @@ -31,7 +31,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.23 1999/09/29 04:31:59 vt Exp $ + * @version $Id: Configuration.java,v 1.24 2000/03/08 07:21:32 vt Exp $ */ public class Configuration extends Hashtable { @@ -100,35 +100,39 @@ * (previous is used as {@link #defaultCfg default configuration} for * it). */ - public static Configuration createChain( String confName,Configuration defaultCfg ) { - File target = new File( confName ), - base = new File( target.getName() ); + public static Configuration createChain(String confName, Configuration defaultCfg) { + + File target = new File(confName), + base = new File(target.getName()); Vector path = new Vector(); String jukebox = "jukebox"; // Read @prefix@/etc/ ... first - path.addElement( new File( gnu.j4.LocalConfig.prefix+"/etc",base.toString() ) ); + path.addElement(new File(gnu.j4.LocalConfig.prefix + + File.separatorChar + + "etc", + base.toString())); // Read $HOME/.jukebox/... second - File home = new File( System.getProperty( "user.home" ),"."+jukebox ); + File home = new File(System.getProperty("user.home"), "."+jukebox); - path.addElement( new File( home,base.toString() ) ); + path.addElement(new File(home, base.toString())); // If the configuration name is absolute, use it as is, otherwise // prepend "./etc/" and make it absolute. if ( !target.isAbsolute() ) { - target = new File( System.getProperty( "user.dir" ),"etc/"+base.toString() ); + target = new File(System.getProperty("user.dir"), "." + base.toString()); } - path.addElement( target ); + path.addElement(target); - return createChain( path,defaultCfg ); + return createChain(path, defaultCfg); } - public static Configuration createChain( Vector path,Configuration defaultCfg ) { + public static Configuration createChain(Vector path, Configuration defaultCfg) { Configuration last = null; for ( Enumeration e = path.elements(); e.hasMoreElements(); ) { @@ -140,21 +144,21 @@ // default. try { - PropertiesReader pr = new PropertiesReader( nextFile.toString() ); + PropertiesReader pr = new PropertiesReader(nextFile.toString()); Configuration next = (last==null) - ? new Configuration( defaultCfg ) - : new Configuration( last ); + ? new Configuration(defaultCfg) + : new Configuration(last); - pr.load( next ); + pr.load(next); last = next; } catch ( IOException ioex ) { - throw new Error( "Not Implemented: "+ioex.toString() ); + throw new Error("Not Implemented: " + ioex.toString()); } } } if ( last == null ) { - last = new Configuration( defaultCfg ); + last = new Configuration(defaultCfg); } return last; @@ -167,8 +171,8 @@ * @return Value as a <code>String</code>, regardless of intended type, * <code>null</code> if not found. */ - public String getString( String key ) { - return getString( key,null ); + public String getString(String key) { + return getString(key, null); } /** @@ -178,8 +182,8 @@ * @return Value as a <code>boolean</code>, <code>false</code> if not * found. */ - public boolean getBoolean( String key ) { - return getBoolean( key,false ); + public boolean getBoolean(String key) { + return getBoolean(key, false); } /** @@ -188,8 +192,8 @@ * @param Keyword to look up. * @return Value as an <code>int</code>, <code>0</code> if not found. */ - public int getInteger( String key ) { - return getInteger( key,0 ); + public int getInteger(String key) { + return getInteger(key, 0); } /** @@ -198,8 +202,8 @@ * @param Keyword to look up. * @return Value as a <code>long</code>, <code>0</code> if not found. */ - public long getLong( String key ) { - return getLong( key,0 ); + public long getLong(String key) { + return getLong(key, 0); } /** @@ -209,8 +213,8 @@ * @return Value as a <code>Vector</code>, <code>null</code> if not * found. */ - public Vector getVector( String key ) { - return getVector( key,null ); + public Vector getVector(String key) { + return getVector(key, null); } /** @@ -222,11 +226,11 @@ * @exception IllegalArgumentException when the object contained here is * neither String nor Vector. */ - public String getString( String key,String defaultValue ) { - Object found = super.get( key ); + public String getString(String key, String defaultValue) { + Object found = super.get(key); if ( found == null && defaultCfg != null ) { - return defaultCfg.getString( key,defaultValue ); + return defaultCfg.getString(key, defaultValue); } if ( found == null ) { @@ -245,31 +249,31 @@ String next = e.nextElement().toString(); if ( result.length() != 0 ) { - result.append( "," ); + result.append(","); } - result.append( next ); + result.append(next); } return result.toString(); } - throw new IllegalArgumentException( key + throw new IllegalArgumentException(key + " expects to see String or Vector, found " - + found.getClass().getName() ); + + found.getClass().getName()); } - public Vector getVector( String key,Vector defaultValue ) { + public Vector getVector(String key, Vector defaultValue) { if ( defaultValue == null ) { defaultValue = new Vector(); } - Object found = super.get( key ); + Object found = super.get(key); if ( found == null && defaultCfg != null ) { - return defaultCfg.getVector( key,defaultValue ); + return defaultCfg.getVector(key, defaultValue); } if ( found == null ) { @@ -282,7 +286,7 @@ Vector dummy = new Vector(); - dummy.addElement( found ); + dummy.addElement(found); return dummy; } @@ -300,18 +304,18 @@ String found = null; try { - found = (String)super.get( key ); + found = (String)super.get(key); } catch ( ClassCastException ccex ) { duplicateKeyword(key); } if ( found == null && defaultCfg != null ) { - return defaultCfg.getBoolean( key,defaultValue ); + return defaultCfg.getBoolean(key, defaultValue); } if ( found != null ) { - return parseBoolean( found ); + return parseBoolean(found); } return defaultValue; @@ -326,7 +330,7 @@ * @exception IllegalArgumentException when the object contained here is * not Integer. */ - public int getInteger( String key,int defaultValue ) { + public int getInteger(String key, int defaultValue) { String found = null; @@ -338,13 +342,13 @@ if ( found == null && defaultCfg != null ) { - return defaultCfg.getInteger( key,defaultValue ); + return defaultCfg.getInteger(key, defaultValue); } if ( found != null ) { try { - return Integer.parseInt( found ); + return Integer.parseInt(found); } catch ( NumberFormatException nfex ) { return defaultValue; } @@ -362,7 +366,7 @@ * @exception IllegalArgumentException when the object contained here is * not Long. */ - public long getLong( String key,long defaultValue ) { + public long getLong(String key, long defaultValue) { String found = null; @@ -374,13 +378,13 @@ if ( found == null && defaultCfg != null ) { - return defaultCfg.getLong( key,defaultValue ); + return defaultCfg.getLong(key, defaultValue); } if ( found != null ) { try { - return Long.parseLong( found ); + return Long.parseLong(found); } catch ( NumberFormatException nfex ) { return defaultValue; } @@ -397,19 +401,19 @@ * @param key The key. * @param value The value. */ - public void put( String key, String value ) { - Object found = super.get( key ); + public void put(String key, String value) { + Object found = super.get(key); if ( found == null ) { - super.put( key,value ); + super.put(key, value); return; } if ( found instanceof Vector ) { Vector vFound = (Vector)found; - if ( vFound.indexOf( value ) == -1 ) { - vFound.addElement( value ); + if ( vFound.indexOf(value) == -1 ) { + vFound.addElement(value); } return; @@ -417,18 +421,18 @@ if ( found instanceof String ) { String first = (String)found; - super.remove( key ); + super.remove(key); Vector set = new Vector(); - set.addElement( first ); - set.addElement( value ); - super.put( key,set ); + set.addElement(first); + set.addElement(value); + super.put(key, set); return; } - throw new IllegalArgumentException( key + throw new IllegalArgumentException(key + " maps to " + found.getClass().getName() - + ", String/Vector expected" ); + + ", String/Vector expected"); } /** @@ -443,34 +447,34 @@ * @param value Value to parse. * @return Boolean value of the string. */ - public static boolean parseBoolean( String value ) { + public static boolean parseBoolean(String value) { String source = value.toLowerCase(); - if ( source.equals( "on" ) - || source.equals( "true" ) - || source.equals( "1" ) - || source.equals( "yes" ) ) { + if ( source.equals("on") + || source.equals("true") + || source.equals("1") + || source.equals("yes") ) { return true; } - if ( source.equals( "off" ) - || source.equals( "false" ) - || source.equals( "0" ) - || source.equals( "no" ) ) { + if ( source.equals("off") + || source.equals("false") + || source.equals("0") + || source.equals("no") ) { return false; } - throw new IllegalArgumentException( "Not boolean: '"+value+"'" ); + throw new IllegalArgumentException("Not boolean: '" + value + "'"); } public String toString() { - String result = "("+super.toString()+")"; + String result = "(" + super.toString() + ")"; if ( defaultCfg == null ) { return result; } - return "(Default: "+defaultCfg.toString()+result+")"; + return "(Default: " + defaultCfg.toString() + result + ")"; } /** |
From: CVS B. <vt...@fr...> - 2000-05-13 00:20:34
|
User: vt Date: 00/05/12 17:20:31 Modified: src/java/gnu/j4/config Configuration.java Log: Fixed (or, should I say, closed) bug #102384 Revision Changes Path 1.26 +44 -8 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.26&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.26&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.26&r2=1.25&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- Configuration.java 2000/05/12 22:44:32 1.25 +++ Configuration.java 2000/05/13 00:20:31 1.26 @@ -4,19 +4,28 @@ import java.io.IOException; import java.util.Enumeration; import java.util.Hashtable; +import java.util.StringTokenizer; import java.util.Vector; /** * This object holds the configuration in a way similar to - * <code>Hashtable</code>, but provides a convenient way to load it. + * <code>Hashtable</code>, but provides a convenient way to load and extract + * it. + * + * <p> + * + * The basic concept is a {@link #createChain configuration chain}: first, + * the system-wide configuration is read, then the user defaults are read, + * then the application configuration, and then the configuration settings + * from the current directory. * - * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 1998 + * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 1998-2000 * * @author Significant influence from <a href="http://java.apache.org/" * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.25 2000/05/12 22:44:32 vt Exp $ + * @version $Id: Configuration.java,v 1.26 2000/05/13 00:20:31 vt Exp $ */ public class Configuration extends Hashtable { @@ -31,6 +40,10 @@ /** * Default configuration, if any. * + * If the value for the requested configuration keyword is not found, + * the result is sought from the default configuration. Note that + * multiple levels of default configurations are available. + * * @serial Default configuration, if any. */ protected Configuration defaultCfg = null; @@ -54,6 +67,7 @@ * Create a configuration chain from the file with a given name. * * @param confName Base name of the file to read the configuration from. + * * @return Configuration chain. */ public static Configuration createChain(String confName) { @@ -65,18 +79,24 @@ * configuration. * * <p> - + * * Configuration file with the given name is created with defaults read * as follows: - + * * <ol> * * <li><code>${prefix}/etc/`basename <confName>`</code> (see * {@link gnu.j4.LocalConfig LocalConfig} for exact prefix). * + * <li><code>${jukebox.confpath}/`basename <confName>`</code>, + * where <code>jukebox.confpath</code> is the environment property + * (<strong>not variable!</strong>). Multiple values can be present + * here, divided by the platform dependent path separator + * (<code>File.pathSeparatorChar</code>). + * * <li><code>$HOME/.jukebox/`basename <confName>`</code> * - * <li><code>./etc/`basename <confName>`</code> (if the name is relative) + * <li><code>./.`basename <confName>`</code> (if the name is relative) * * <br><code><confName></code> (if the name is absolute) * @@ -99,15 +119,31 @@ + File.separatorChar + "etc", base.toString())); + + // Read ${jukebox.confpath}/ ... second + + String confPath = System.getProperty("jukebox.confpath"); + + StringTokenizer st = new StringTokenizer(confPath, File.pathSeparator); - // Read $HOME/.jukebox/... second + while ( st.hasMoreTokens() ) { + + String item = st.nextToken(); + + File confFile = new File(item, base.toString()); + + path.addElement(confFile); + } + + + // Read $HOME/.jukebox/... third File home = new File(System.getProperty("user.home"), "."+jukebox); path.addElement(new File(home, base.toString())); // If the configuration name is absolute, use it as is, otherwise - // prepend "./etc/" and make it absolute. + // prepend "." and make it absolute. if ( !target.isAbsolute() ) { target = new File(System.getProperty("user.dir"), "." + base.toString()); |
From: CVS B. <vt...@fr...> - 2000-05-15 02:16:13
|
User: vt Date: 00/05/14 19:16:10 Modified: src/java/gnu/j4/config Configuration.java Log: But of course! If the confpath is not set, I get NullPointerException... Fixed. Revision Changes Path 1.27 +11 -9 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.27&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.27&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.27&r2=1.26&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- Configuration.java 2000/05/13 00:20:31 1.26 +++ Configuration.java 2000/05/15 02:16:10 1.27 @@ -25,7 +25,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.26 2000/05/13 00:20:31 vt Exp $ + * @version $Id: Configuration.java,v 1.27 2000/05/15 02:16:10 vt Exp $ */ public class Configuration extends Hashtable { @@ -124,17 +124,19 @@ String confPath = System.getProperty("jukebox.confpath"); - StringTokenizer st = new StringTokenizer(confPath, File.pathSeparator); - - while ( st.hasMoreTokens() ) { - - String item = st.nextToken(); + if ( confPath != null ) { + + StringTokenizer st = new StringTokenizer(confPath, File.pathSeparator); - File confFile = new File(item, base.toString()); + while ( st.hasMoreTokens() ) { - path.addElement(confFile); + String item = st.nextToken(); + + File confFile = new File(item, base.toString()); + + path.addElement(confFile); + } } - // Read $HOME/.jukebox/... third |
From: CVS B. <vt...@fr...> - 2000-05-26 19:35:02
|
User: vt Date: 00/05/26 12:34:16 Modified: src/java/gnu/j4/config Configuration.java Log: Checkpoint Revision Changes Path 1.28 +50 -1 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.28&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.28&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.28&r2=1.27&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- Configuration.java 2000/05/15 02:16:10 1.27 +++ Configuration.java 2000/05/26 19:34:16 1.28 @@ -25,7 +25,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.27 2000/05/15 02:16:10 vt Exp $ + * @version $Id: Configuration.java,v 1.28 2000/05/26 19:34:16 vt Exp $ */ public class Configuration extends Hashtable { @@ -72,6 +72,55 @@ */ public static Configuration createChain(String confName) { return createChain(confName, null); + } + + /** + * Set the default configuration. + * + * @param The default configuration. Becomes new top-priority default, + * shifting the rest of the default configuration chain to the back of + * this object's default chain. + * + * @exception <code>IllegalArgumentException</code> if the value of the + * new default configuration is <code>null</code>. To disable the + * defaults, use {@link #clearDefaults clearDefaults()}. + */ + public void setDefaultConfiguration(Configuration conf) { + + // Save the old value + + Configuration oldDefault = this.defaultCfg; + + // Set the new value + + this.defaultCfg = conf; + + if ( oldDefault == null ) { + + // No actions necessary, there were no defaults + return; + } + + // Traverse the defaults of the new default until the end is found + // and append the old default chain to the new one + + Configuration tail = this.defaultCfg; + Configuration cursor = tail.defaultCfg; + + while ( cursor != null ) { + + tail = cursor; + cursor = tail.defaultCfg; + } + + tail.defaultCfg = oldDefault; + } + + /** + * Clear all the default configurations. + */ + public void clearDefaults() { + defaultCfg = null; } /** |
From: CVS B. <vt...@fr...> - 2000-07-10 21:25:55
|
User: vt Date: 00/07/10 14:20:12 Modified: src/java/gnu/j4/config Configuration.java Log: Made the getVector behavior consistent. Both invocations (with and without default) now return the empty Vector in case no values were found. And now it is documented. Revision Changes Path 1.29 +10 -4 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.29&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.29&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.29&r2=1.28&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- Configuration.java 2000/05/26 19:34:16 1.28 +++ Configuration.java 2000/07/10 21:20:11 1.29 @@ -25,7 +25,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.28 2000/05/26 19:34:16 vt Exp $ + * @version $Id: Configuration.java,v 1.29 2000/07/10 21:20:11 vt Exp $ */ public class Configuration extends Hashtable { @@ -291,11 +291,13 @@ * Get the configuration value as a <code>Vector</code>. * * @param Keyword to look up. - * @return Value as a <code>Vector</code>, <code>null</code> if not - * found. + * + * @return The vector with the values found. In case there were no + * values, return an empty vector, <strong>not + * <code>null</code></strong>! */ public Vector getVector(String key) { - return getVector(key, null); + return getVector(key, new Vector()); } /** @@ -351,6 +353,10 @@ * * @param defaultValue The default returned in the case there's no * configuration value for the given key. + * + * @return The vector with the values found. In case there were no + * values, return an empty vector, <strong>not + * <code>null</code></strong>! */ public Vector getVector(String key, Vector defaultValue) { |
From: CVS B. <vt...@fr...> - 2000-07-25 17:42:31
|
User: vt Date: 00/07/25 10:42:28 Modified: src/java/gnu/j4/config Configuration.java Log: Now the request for the vector will return the comma separated values as different elements, not as a single string. Revision Changes Path 1.30 +19 -2 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.30&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.30&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.30&r2=1.29&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- Configuration.java 2000/07/10 21:20:11 1.29 +++ Configuration.java 2000/07/25 17:42:28 1.30 @@ -25,7 +25,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.29 2000/07/10 21:20:11 vt Exp $ + * @version $Id: Configuration.java,v 1.30 2000/07/25 17:42:28 vt Exp $ */ public class Configuration extends Hashtable { @@ -381,7 +381,24 @@ Vector dummy = new Vector(); - dummy.addElement(found); + if ( found instanceof String ) { + + for ( StringTokenizer st = new StringTokenizer((String)found, ",; "); st.hasMoreTokens(); ) { + + String token = st.nextToken(); + + // VT: FIXME: Analyze the previous token for the escape + // symbols so we can include the separators into values as + // well + + dummy.addElement(token); + } + + } else { + + dummy.addElement(found); + } + return dummy; } |
From: CVS B. <vt...@fr...> - 2000-11-02 08:48:31
|
User: vt Date: 00/11/02 01:48:25 Modified: src/java/gnu/j4/config Configuration.java Log: Updated the test case and fixed the bug. Not completely, though: the commas cannot be used in the values for now, until I get time to fix it. Revision Changes Path 1.32 +52 -2 J4/src/java/gnu/j4/config/Configuration.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?annotate=1.32&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java?rev=1.32&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 CVSWeb: Diff to previous version: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/config/Configuration.java.diff?r1=1.32&r2=1.31&cvsroot=jukebox4 ----------------------------------- Index: Configuration.java =================================================================== RCS file: /usr/local/cvs/J4/src/java/gnu/j4/config/Configuration.java,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- Configuration.java 2000/08/24 20:35:49 1.31 +++ Configuration.java 2000/11/02 08:48:25 1.32 @@ -25,7 +25,7 @@ * target=_top>Java-Apache Project</a> in general and code written by <a * href="mailto:st...@ap...">Stefano Mazzocchi</a> in particular. * - * @version $Id: Configuration.java,v 1.31 2000/08/24 20:35:49 vt Exp $ + * @version $Id: Configuration.java,v 1.32 2000/11/02 08:48:25 vt Exp $ */ public class Configuration extends Hashtable { @@ -532,6 +532,34 @@ */ public void put(String key, Object value) { + // Preprocess the value. It may turn out that the value is a comma + // separated string, which will embarrass us a little. + + boolean split = false; + + if ( value instanceof String && ((String)value).indexOf(",") != -1 ) { + + split = true; + + //System.err.println(key + " split: '" + value + "'"); + + String valueAsString = (String)value; + Vector valueAsVector = new Vector(); + + // VT: FIXME: This way, it's impossible to have a comma in the + // value. Have to process the escape with a backslash. + + for ( StringTokenizer st = new StringTokenizer(valueAsString, ","); st.hasMoreTokens(); ) { + + String element = st.nextToken().trim(); + + //System.err.println(key + " element: '" + element + "'"); + valueAsVector.addElement(element); + } + + value = valueAsVector; + } + Object found = super.get(key); if ( found == null ) { @@ -543,6 +571,18 @@ } + if ( found instanceof String ) { + + //System.err.println(key + " restructure: '" + found + "'"); + Object first = found; + Vector set = new Vector(); + + super.remove(key); + set.addElement(first); + super.put(key, set); + found = set; + } + if ( found instanceof Vector ) { // OK, there's existing sequence already. @@ -551,7 +591,17 @@ if ( vFound.indexOf(value) == -1 ) { - vFound.addElement(value); + if ( split ) { + + for ( Enumeration e = ((Vector)value).elements(); e.hasMoreElements(); ) { + + vFound.addElement(e.nextElement()); + } + + } else { + + vFound.addElement(value); + } return; } else { |