/* * 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.util.*; import edu.isi.pegasus.common.util.Version; import org.griphyn.vdl.dax.*; import org.griphyn.vdl.classes.LFN; import org.griphyn.vdl.parser.DAXParser; import org.griphyn.vdl.util.Logging; import org.griphyn.vdl.directive.Derive; import gnu.getopt.*; /** * The shell planner. This class is the command-line tool for * generating shell scripts from a DAX. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ * */ public class Planner extends Toolkit { /** * Constructs a new instance object with the given application name. */ public Planner( String appName ) { super(appName); } /** * Prints the usage string onto stdout. */ public void showUsage() { String linefeed = System.getProperty( "line.separator", "\r\n" ); System.out.println( "$Id$" + linefeed + "VDS version " + Version.instance().toString() + linefeed ); System.out.println( "Usage: " + this.m_application + " [general] [-o dir] [-k fn] [-b] [-n] dax" ); System.out.println( linefeed + " -V|--version print version information and exit." + linefeed + " -v|--verbose increases the verbosity level." + linefeed + " -o|--output dir directory where scripts are created, defaults to test." + linefeed + " -b|--build enters build mode, default is make mode." + linefeed + " -n|--no-register does not register produced files at all." + linefeed + " -k|--kickstart fn uses kickstart from the specified location fn." + linefeed ); } /** * Creates a set of commandline options. */ protected LongOpt[] generateValidOptions() { LongOpt[] lo = new LongOpt[7]; lo[0] = new LongOpt( "help", LongOpt.NO_ARGUMENT, null, 'h' ); lo[1] = new LongOpt( "version", LongOpt.NO_ARGUMENT, null, 'V' ); lo[2] = new LongOpt( "verbose", LongOpt.NO_ARGUMENT, null, 'v' ); lo[3] = new LongOpt( "build", LongOpt.NO_ARGUMENT, null, 'b' ); lo[4] = new LongOpt( "output", LongOpt.REQUIRED_ARGUMENT, null, 'o' ); lo[5] = new LongOpt( "no-register", LongOpt.NO_ARGUMENT, null, 'n' ); lo[6] = new LongOpt( "kickstart", LongOpt.REQUIRED_ARGUMENT, null, 'k' ); return lo; } /** * Get the DAX and generate shell scripts in the designated directory. * It also decides whether to run in a 'make' or 'build' mode */ public static void main(String[] args) { int result = 0; // register the logger for search try { Planner me = new Planner("shplanner"); // get the commandline options Getopt opts = new Getopt( me.m_application, args, "hbk:no:Vv", me.generateValidOptions() ); opts.setOpterr(false); String dir = "test"; // where to produce files, default is "test" boolean build = false; boolean register = true; String kickstart = null; int verbosity = 0; int option = 0; while ( (option = opts.getopt()) != -1 ) { switch ( option ) { case 'v': verbosity = me.increaseVerbosity(); break; case 'V': System.out.println( "$Id$" ); System.out.println( "Pegasus version " + Version.instance().toString() ); return; case 'b': build = true; break; case 'k': kickstart = opts.getOptarg(); break; case 'o': dir = opts.getOptarg(); break; case 'n': register = false; break; case 'h': default: me.showUsage(); return; } } // did the user specify exactly one DAX file? String daxfn = null; if ( opts.getOptind() >= args.length || opts.getOptind() < args.length-1 ) throw new RuntimeException( "You must specify exactly one (1) input file" ); else daxfn = args[opts.getOptind()]; // do something about verbosity if ( verbosity > 0 ) me.m_logger.register( "planner", System.out, verbosity ); // the directory name to hold shell scripts if ( dir == null || dir.length() == 0 ) { me.m_logger.log( "planner", 0, "Output directory not specified, using default: test" ); dir = "test"; } // check the dax file FileInputStream fs = new FileInputStream(daxfn); Derive derive = new Derive(); if ( ! derive.genShellScripts( fs, dir, build, register, kickstart ) ) { me.m_logger.log("default", 0, "ERROR: Failed to generate shell scripts!"); result = 1; } } catch ( RuntimeException rte ) { System.err.println( rte.getMessage() ); result = 1; } catch ( Exception e ) { e.printStackTrace(); result = 2; } if ( result != 0 ) System.exit(result); } }