/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file ../GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package org.griphyn.vdl.toolkit; import java.io.*; import java.sql.SQLException; import java.util.Collection; import java.util.MissingResourceException; import org.griphyn.vdl.util.Logging; import org.griphyn.vdl.util.ChimeraProperties; import org.griphyn.vdl.dbschema.*; /** * This class is the base class for other toolkits. It provides * basical common functions, to be extended, used or restricted * by siblings as necessary. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ * * @see org.griphyn.vdl.util.Logging * @see org.griphyn.vdl.util.ChimeraProperties * @see org.griphyn.vdl.dbschema.DatabaseSchema */ public abstract class Toolkit { /** * Maintains an application specific set of properties */ protected ChimeraProperties m_props; /** * Stores the name of the application as which this one was run */ protected String m_application; /** * Stores the name of the home directory for the Chimera system. */ protected String m_home; /** * Stores the logging instance */ protected Logging m_logger; /** * Stores the verbosity level of the app logging queue. */ protected int m_verbosity; /** * Helper for the constructors * * @param self is the reference to self (the unit to be constructed) */ private static void setup( Toolkit self ) { // set up logger self.m_logger = Logging.instance(); // setting up properties -- might throw things at us try { self.m_props = ChimeraProperties.instance(); } catch ( IOException e ) { Logging.instance().log( "default", 0, "error while reading properties file: " + e.getMessage() ); } catch ( MissingResourceException e ) { Logging.instance().log( "default", 0, "You probably forgot to set -Dvds.home=$PEGASUS_HOME" ); System.exit(1); } self.m_props.setupLogging(self.m_logger); } /** * Default ctor: Sets up the system * * @param appName is the name of the shell wrapper with which to report. */ public Toolkit( String appName ) { m_application = appName; setup( this ); // Register app by default, but only with level 0 // jsv: 20050815, bugzilla#79 if ( m_logger.isUnset("app") ) { m_verbosity = 0; m_logger.register( "app", System.out, m_verbosity ); } else { m_verbosity = m_logger.getLevel("app"); if ( m_verbosity == Integer.MAX_VALUE || m_verbosity < 0 ) { m_verbosity = 0; m_logger.setLevel( "app", m_verbosity ); } } } /** * Default ctor: Sets up the system * * @param appName is the name of the shell wrapper with which to report. * @param verbosity sets the verbosity level of the "app" logging queue. */ public Toolkit( String appName, int verbosity ) { m_application = appName; setup( this ); // Register app by default, but only with level 0 // jsv: 20050815, bugzilla#79 if ( m_logger.isUnset("app") ) { m_verbosity = verbosity; m_logger.register( "app", System.out, m_verbosity ); } else { m_verbosity = m_logger.getLevel("app"); if ( m_verbosity == Integer.MAX_VALUE || m_verbosity < 0 ) { m_verbosity = 0; m_logger.setLevel( "app", m_verbosity ); } } } /** * Helper function to set the verbosity level of the app logging * queue. * * @param verbosity is the new verbosity level * @see #getVerbosity() * @see #increaseVerbosity() */ public void setVerbosity( int verbosity ) { this.m_verbosity = verbosity; this.m_logger.setLevel("app",verbosity); } /** * Helper function to obtain the verbosity level of the app logging * queue. * * @return the verbosity level as non-negative integer, or -1 for * error. * @see #setVerbosity( int ) * @see #increaseVerbosity() */ public int getVerbosity() { int result = this.m_logger.getLevel("app"); this.m_verbosity = result; return result; } /** * Helper function to increase the verbosity level of the app logging * queue using the internal verbosity state. * * @return the new verbosity level * @see #setVerbosity( int ) * @see #getVerbosity() */ public int increaseVerbosity() { this.m_logger.setLevel( "app", ++this.m_verbosity ); return this.m_verbosity; } /** * Prints the short usage string onto stdout. No exiting. * The application name is maintained by the c'tor. */ public abstract void showUsage(); /** * This helper method reads lines from a file and add non-empty, * no-comment lines to a collection of lines. Invoke with a set to * prohibit duplicates, or with a list to permit duplicates. * * @param fn is the name of the file to read. * @param list is the container to add lines to * @return number of items read. * @throws IOException if any file operation failed. */ protected int readFile( String fn, Collection list ) throws IOException { String line; int count = 0; LineNumberReader in = null; if ( fn == null ) return 0; in = new LineNumberReader( new FileReader(fn) ); while ( (line=in.readLine()) != null ) { // remove comments int p = line.indexOf( '#' ); if ( p != -1 ) line = line.substring( 0, p ); // remove superflous whitespace line = line.trim(); // add anything non-empty if ( line.length() >= 1 ) { list.add( line ); count++; } } in.close(); return count; } }