/* * 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)); } }