001: package net.myvietnam.mvncore.configuration;
002:
003: /* ====================================================================
004: * The Apache Software License, Version 1.1
005: *
006: * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
007: * reserved.
008: *
009: * Redistribution and use in source and binary forms, with or without
010: * modification, are permitted provided that the following conditions
011: * are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution, if
022: * any, must include the following acknowledgement:
023: * "This product includes software developed by the
024: * Apache Software Foundation (http://www.apache.org/)."
025: * Alternately, this acknowledgement may appear in the software itself,
026: * if and wherever such third-party acknowledgements normally appear.
027: *
028: * 4. The names "The Jakarta Project", "Commons", and "Apache Software
029: * Foundation" must not be used to endorse or promote products derived
030: * from this software without prior written permission. For written
031: * permission, please contact apache@apache.org.
032: *
033: * 5. Products derived from this software may not be called "Apache"
034: * nor may "Apache" appear in their names without prior written
035: * permission of the Apache Software Foundation.
036: *
037: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
038: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
039: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
040: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
041: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
042: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
043: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
044: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
045: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
046: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
047: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
048: * SUCH DAMAGE.
049: * ====================================================================
050: *
051: * This software consists of voluntary contributions made by many
052: * individuals on behalf of the Apache Software Foundation. For more
053: * information on the Apache Software Foundation, please see
054: * <http://www.apache.org/>.
055: */
056:
057: import java.io.File;
058: import java.io.PrintStream;
059: import java.io.PrintWriter;
060: import java.io.StringWriter;
061: import java.net.MalformedURLException;
062: import java.net.URL;
063: import java.util.Iterator;
064:
065: import org.apache.commons.lang.StringUtils;
066:
067: /**
068: * Miscellaneous utility methods for configurations.
069: *
070: * @author <a href="mailto:herve.quiroz@esil.univ-mrs.fr">Herve Quiroz</a>
071: * @author <a href="mailto:oliver.heger@t-online.de">Oliver Heger</a>
072: */
073: public class ConfigurationUtils {
074: /** File separator. */
075: protected static String fileSeparator = System
076: .getProperty("file.separator");
077:
078: private ConfigurationUtils() {
079: // to prevent instanciation...
080: }
081:
082: /**
083: * Dump the configuration key/value mappings to some ouput stream.
084: *
085: * @param configuration the configuration
086: * @param out the output stream to dump the configuration to
087: */
088: public static void dump(Configuration configuration, PrintStream out) {
089: for (Iterator i = configuration.getKeys(); i.hasNext();) {
090: String key = (String) i.next();
091: Object value = configuration.getProperty(key);
092: out.print(key);
093: out.print("=");
094: out.print(value);
095: if (i.hasNext()) {
096: out.println();
097: }
098: }
099: }
100:
101: /**
102: * Dump the configuration key/value mappings to some writer.
103: *
104: * @param configuration the configuration
105: * @param out the writer to dump the configuration to
106: */
107: public static void dump(Configuration configuration, PrintWriter out) {
108: for (Iterator i = configuration.getKeys(); i.hasNext();) {
109: String key = (String) i.next();
110: Object value = configuration.getProperty(key);
111: out.print(key);
112: out.print("=");
113: out.print(value);
114:
115: if (i.hasNext()) {
116: out.println();
117: }
118: }
119: }
120:
121: /**
122: * Get a string representation of the key/value mappings of a
123: * configuration.
124: *
125: * @param configuration the configuration
126: * @return a string representation of the configuration
127: */
128: public static String toString(Configuration configuration) {
129: StringWriter writer = new StringWriter();
130: dump(configuration, new PrintWriter(writer));
131: return writer.toString();
132: }
133:
134: /**
135: * Constructs a URL from a base path and a file name. The file name can
136: * be absolute, relative or a full URL. If necessary the base path URL is
137: * applied.
138: * @param basePath the base path URL (can be <b>null</b>)
139: * @param file the file name
140: * @return the resulting URL
141: * @throws MalformedURLException if URLs are invalid
142: */
143: public static URL getURL(String basePath, String file)
144: throws MalformedURLException {
145: File f = new File(file);
146: if (f.isAbsolute()) // already absolute?
147: {
148: return f.toURL();
149: } /* if */
150:
151: try {
152: if (basePath == null) {
153: return new URL(file);
154: } /* if */
155: else {
156: URL base = new URL(basePath);
157: return new URL(base, file);
158: } /* else */
159: } /* try */
160: catch (MalformedURLException uex) {
161: return constructFile(basePath, file).toURL();
162: } /* catch */
163: }
164:
165: /**
166: * Helper method for constructing a file object from a base path and a
167: * file name. This method is called if the base path passed to
168: * <code>getURL()</code> does not seem to be a valid URL.
169: * @param basePath the base path
170: * @param fileName the file name
171: * @return the resulting file
172: */
173: static File constructFile(String basePath, String fileName) {
174: // code from DOM4JConfiguration
175: File file = null;
176: if (StringUtils.isEmpty(basePath)) {
177: // Good luck... This will fail 99 out of 100 times.
178: file = new File(fileName);
179: } else {
180: StringBuffer fName = new StringBuffer();
181: fName.append(basePath);
182:
183: // My best friend. Paranoia.
184: if (!basePath.endsWith(fileSeparator)) {
185: fName.append(fileSeparator);
186: }
187:
188: //
189: // We have a relative path, and we have
190: // two possible forms here. If we have the
191: // "./" form then just strip that off first
192: // before continuing.
193: //
194: if (fileName.startsWith("." + fileSeparator)) {
195: fName.append(fileName.substring(2));
196: } else {
197: fName.append(fileName);
198: }
199:
200: file = new File(fName.toString());
201: }
202: return file;
203: }
204: }
|