/*
* 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.parser.DAXParser;
import org.griphyn.vdl.util.Logging;
import org.griphyn.vdl.directive.Display;
import gnu.getopt.*;
/**
* This class generates GraphViz dot format from a DAX
*
* @author Jens-S. Vöckler
* @author Yong Zhao
* @version $Revision$
*
*/
public class VizDAX extends Toolkit
{
/**
* ctor: Constructs a new instance object with the given application name.
*/
public VizDAX( String appName )
{
super(appName);
}
/**
* Implements printing 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] [-f] [-o dot] [dax]" );
System.out.println( linefeed +
" -V|--version print version information and exit." + linefeed +
" -v|--verbose increases the verbosity level." + linefeed +
" -f|--files if present, show input and output files in graph." + linefeed +
" -d|--dv if present, also show the DV names in graph." + linefeed +
" -o|--output dot put the output into the file dot, defaults to stdout." + linefeed +
" dax reads the specified dax file; if absent, uses stdin." + linefeed );
}
/**
* Creates a set of options.
*/
protected LongOpt[] generateValidOptions()
{
LongOpt[] lo = new LongOpt[6];
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( "files", LongOpt.NO_ARGUMENT, null, 'f' );
lo[4] = new LongOpt( "output", LongOpt.REQUIRED_ARGUMENT, null, 'o' );
lo[5] = new LongOpt( "dv", LongOpt.NO_ARGUMENT, null, 'd' );
return lo;
}
/**
* Get the DAX and generate GraphViz dot representation.
*/
public static void main(String[] args)
{
int result = 0;
try {
VizDAX me = new VizDAX("dax2dot");
// get the commandline options
Getopt opts = new Getopt( me.m_application, args,
"hdfo:V",
me.generateValidOptions() );
opts.setOpterr(false);
boolean files = false;
boolean showDV = false;
String arg = null;
String dot = null;
int option = 0;
while ( (option = opts.getopt()) != -1 ) {
switch ( option ) {
case 'V':
System.out.println( "$Id$" );
System.out.println( "VDS version " + Version.instance().toString() );
return;
case 'd':
showDV = true;
break;
case 'f':
files = true;
break;
case 'o':
arg = opts.getOptarg();
if ( arg != null && arg.length() > 0 ) dot = arg;
break;
case 'v':
me.increaseVerbosity();
break;
case 'h':
default:
me.showUsage();
return;
}
}
Display display = new Display();
String daxfn = ( opts.getOptind() < args.length ?
args[opts.getOptind()] :
null );
BufferedInputStream input = null;
if ( daxfn == null || daxfn.equals("-") ) {
input = new BufferedInputStream( System.in );
System.err.println( "# reminder: reading from stdin" );
} else {
input = new BufferedInputStream( new FileInputStream(daxfn) );
}
BufferedWriter output =
new BufferedWriter( ( dot == null || dot.equals("-") ) ?
new OutputStreamWriter(System.out) : // convert stream to writer
new FileWriter(dot) );
display.setShowDV(showDV);
display.DAX2DOT( input, output, files );
output.flush();
if ( dot != null ) output.close();
} catch ( RuntimeException rte ) {
System.err.println( "ERROR: " + rte.getMessage() );
result = 1;
} catch ( IOException ioe ) {
System.err.println( "ERROR: " + ioe.getMessage() );
result = 1;
} catch ( Exception e ) {
e.printStackTrace();
System.err.println( "FATAL: " + e.getMessage() );
result = 2;
}
if ( result != 0 ) System.exit(result);
}
}