/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.directory; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; /** *
This class encapsulates all the parsing of the OBDA registry * configuration file.
* * @author Brian Gilman * @author Thomas Down * @author Keith James * @version $Revision: 2591 $ */ public class OBDARegistryParser { /** *parseRegistry
parses an Open Bioinformatics Database
* Access (OBDA) configuration file.
*
* @param in a BufferedReader
.
* @param locator a String
a configuration file
* locator.
*
* @return a RegistryConfiguration
.
*
* @exception IOException if an error reading the configuration
* file.
* @exception RegistryException if the configuration setup fails.
*/
public static RegistryConfiguration parseRegistry(BufferedReader in,
String locator)
throws IOException, RegistryException {
String line = "";
String dbName = "";
String key = "";
String value = "";
Map config = new HashMap();
Map currentDB = null;
while ((line = in.readLine()) != null) {
if (line.trim().length() > 0) {
// We currently don't do anything with the version
// number
if (line.startsWith("VERSION=")) {
continue;
}
if (line.indexOf("[") > -1) {
dbName = line.substring(1, line.indexOf("]"));
currentDB = new HashMap();
currentDB.put("dbname", dbName);
// Create a List of Maps through which we can fall
// back if the first does not work
if (config.containsKey(dbName)) {
((List) config.get(dbName)).add(currentDB);
} else {
List fallbacks = new ArrayList();
fallbacks.add(currentDB);
config.put(dbName, fallbacks);
}
} else {
StringTokenizer strTok = new StringTokenizer(line, "=");
// Here we assume that there are only key = value
// pairs in the config file
key = strTok.nextToken();
if (strTok.hasMoreTokens()) {
value = strTok.nextToken();
} else {
value = "";
}
currentDB.put(key.trim(), value.trim());
}
}
}
return new RegistryConfiguration.Impl(locator, Collections.unmodifiableMap(config));
}
}