//===================================================================== // File: ProgOptions.java // Class: ProgOptions // Package: AFLPcore // // Author: James J. Benham // Date: August 10, 1998 // Contact: james_benham@hmc.edu // // Genographer v1.0 - Computer assisted scoring of gels. // Copyright (C) 1998 Montana State University // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 // of the License. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // The GNU General Public License is distributed in the file GPL //===================================================================== package AFLPcore; import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; /** * This class contains static methods and variables that provide * several features to the program. It controls most of the options that * the porgram needs. It contains the path that the program is in as well * as the browser that displays the help files. It contains methods to * run the help browser as well as a method to parse the configuration file. * * @author James J. Benham * @version 1.0.0 * @date August 10, 1998 */ public class ProgOptions { private static final String HELP_PATH = "doc" + File.separator; private static final String CONFIG_FILE = "genograph.cfg"; /** * This is the path that points to the program directory. It's used * so other parts of the program can know where to find things, like * standard definition files, images, or help files. */ public static String homePath; private static String browser; private static String optNames[]; private static String optValues[]; /** * This displays the specified helpfile in a web browser. The * browser is defined in the file "genograph.cfg" * * @param helpFile the file name of the help file. It is assumed * that the file is in the "doc" subdirectory. * * @exception IOException occurs if the browser file or help file * contain an error * @excpetion NoBrowserException occurs if the browser is not * set in the configuration file. */ public static void showHelp(String helpFile) throws IOException { String fullName = homePath + HELP_PATH + helpFile; // change it into a file to and then back to let java resolve all // of the system dependent crap. File help = new File(fullName); fullName = help.toString(); // Check for errors. File browserFile = new File(browser); if(browser.equals("")) throw new NoBrowserException("Browser not set! See the file " + homePath + HELP_PATH + "help.html"); // This seems to be false even when the file really does exist. // I don't know why it doesn't works. Still, this would be a nice check // to do. Maybe it's being case sensitive or something, but I don't // know the correct case for win95, since it's case insensitive. // if(!browserFile.exists()) // throw new NoBrowserException("Browser not found! See the file " + // homePath + HELP_PATH + "help.html"); // Start the browser Runtime.getRuntime().exec(browser + " " + fullName); } /** * Reads in the options form the configuration file. Make sure that this * is called before trying to use program options. */ public static void readOptions() { optNames = new String[2]; optNames[0] = "BROWSER"; optNames[1] = "BASE_MIN"; optValues = new String[2]; // Create an input reader try{ BufferedReader in = new BufferedReader(new FileReader(homePath + CONFIG_FILE)); String line = nextLine(in); String name; String value; int spaceIndex; while(line != null) { // get the value spaceIndex = line.indexOf(" "); name = line.substring(0, spaceIndex); value = line.substring(spaceIndex, line.length()); // See if it matches a name. If it does, store it. for(int i=0; i < optNames.length; i++) if(name.equals(optNames[i])) { optValues[i] = value; break; } // Store the browser in a special variable. browser = optValues[0]; line = nextLine(in); } } catch(IOException e) { System.err.println("Unable to read config file. See help." +" Using defaults"); browser = ""; } } /** * Gives the value of a parameter specified in the input file. * * @param param the name of the parameter to retrieve, ie BROWSER * * @return the text on the line immediately following the name. It * will be null if the parameter was not specified. */ public static String retrieve(String param) { String value; for(int i=0; i < optNames.length; i++) if(param.equals(optNames[i])) return optValues[i]; return null; } /** * Gets a line from the specified input stream. It will skip over blank * lines and lines beginning with a '#'. Additionally, white space will * be trimmed from both ends of the string. * * @param inStream the stream to read from * * @return the line that isn't blank or a comment. null * will be returned if the end of the stream is reached. * * @exception IOException if an I/O problem occurs. */ public static String nextLine(BufferedReader inStream) throws IOException { char firstCh = 'a'; String line; do { line = inStream.readLine(); if(line != null) { line.trim(); if(line.length() >= 1) firstCh = line.charAt(0); } // repeat if not the end and the line is blank or a comment } while( (line != null) && ((line.length() == 0) || (firstCh == '#'))); return line; } }