tslaunch/TSLaunch.java

348 lines
11 KiB
Java

// $RCSfile: TSLaunch.java,v $
// $Revision: 1.4 $
// $Name: $
// $Date: 2002/05/22 10:09:57 $
// $Author: giberta1 $
/*
* TSLauch.java - Time Stamp args program laucher
* Copyright (C) 2002 Arnaud G. Gibert
* arnaud.gibert@misys.com
* www.misys.com
*
* 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; either version 2
* of the License, or any later version.
*
* 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.
*/
import java.util.*;
import java.io.*;
import java.text.*;
public class TSLaunch
{
private String TS_Key = "TIME-STAMP";
private String Sub_Args[];
private String TSLaunch_Revision = "$Revision: 1.4 $";
private String TSLaunch_Tag = "$Name: $";
private String TSLaunch_Date = "$Date: 2002/05/22 10:09:57 $";
private String TSLaunch_Author = "$Author: giberta1 $";
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
public class Stream_Gobbler extends Thread
{
BufferedInputStream BIS;
PrintStream PS;
//-----------------------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------------------
public void run()
{
int out;
try
{
while ( ( out = BIS.read() ) != -1)
{
PS.print( (char)out);
}
}
catch( Exception Expt)
{
System.out.println("Exception: (" + Expt + ") !");
Expt.printStackTrace();
}
}
//-----------------------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------------------
public Stream_Gobbler( InputStream IS, PrintStream PS)
{
this.BIS = new BufferedInputStream( IS);
this.PS = PS;
this.start();
}
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
public static void main( String args[])
{
new TSLaunch( args);
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
private void Arg_Parse( String Args[]) throws Exception
{
int argc = 0;
try
{
while( argc < Args.length)
{
if ( Args[argc].equals( "-k"))
{
if( argc < ( Args.length + 1))
{
TS_Key = Args[++argc];
}
else
{
System.out.println( "Invalid number of command line options...");
throw new Exception();
}
argc++;
}
else
{
if( argc < ( Args.length + 2))
{
Sub_Args = new String[Args.length - argc];
System.arraycopy( Args, argc, Sub_Args, 0, ( Args.length - argc));
break;
}
else
{
System.out.println( "Invalid number of command line options...");
throw new Exception();
}
}
}
}
catch( Exception Expt)
{
throw Expt;
}
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
private String Array_Dump( String Args[], int offset) throws Exception
{
int argc = offset;
String Dump = "";
try
{
while( argc < Args.length)
{
if( argc > offset)
{
Dump += " ";
}
Dump += "\"" + Args[ argc++] + "\"";
}
return( Dump);
}
catch( Exception Expt)
{
throw Expt;
}
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
private String TimeStamp_Get() throws Exception
{
Calendar now = Calendar.getInstance();
NumberFormat nf2 = NumberFormat.getInstance();
NumberFormat nf3 = NumberFormat.getInstance();
try
{
nf2.setMinimumIntegerDigits(2);
nf2.setMaximumIntegerDigits(2);
nf3.setMinimumIntegerDigits(3);
nf3.setMaximumIntegerDigits(3);
return( "" + now.get( Calendar.YEAR) + nf2.format( now.get( Calendar.MONTH) + 1) + nf2.format( now.get( Calendar.DAY_OF_MONTH))
+ nf2.format( now.get( Calendar.HOUR_OF_DAY)) + nf2.format( now.get( Calendar.MINUTE)) + nf2.format( now.get( Calendar.SECOND))
+ nf3.format( now.get( Calendar.MILLISECOND)));
}
catch( Exception Expt)
{
throw Expt;
}
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
private void TS_Replace( String Args[], String TS_Key, String TimeStamp) throws Exception
{
int argc, idx;
String Dump = "";
try
{
for( argc = 1; argc < Args.length; argc++)
{
idx = 0;
while( idx != -1)
{
// System.out.println( "Argc: (" + argc + ") Idx: (" + idx + ")");
idx = Args[argc].indexOf( TS_Key, 0);
if( idx != -1)
{
// System.out.println( "Found: (" + idx + ") End: (" + (idx + TS_Key.length()) + ")");
Args[argc] = Args[argc].substring( 0, idx) + TimeStamp + Args[argc].substring( idx + TS_Key.length());
}
}
}
}
catch( Exception Expt)
{
throw Expt;
}
}
//-------------------------------------------------------------------------------------------------------------------------
//
//-------------------------------------------------------------------------------------------------------------------------
public TSLaunch( String args[])
{
String TimeStamp = "";
long time_begin, time_end;
double time_elapsed, speed;
Process subproc;
Stream_Gobbler sgout, sgerr;
try
{
System.out.println("TSLaunch: " + TSLaunch_Tag + " / " + TSLaunch_Date + " / " + TSLaunch_Author);
if( args.length < 2)
{
System.out.println( "Usage: TSLaunch [-k \"TimeStamp_Key\"] Command_to_Run [...Args...]TimeStamp_Key[...Args...]");
System.out.println( " Default: : TimeStamp_Key: (" + TS_Key + ")");
}
else
{
System.out.println( "TS Lauch Starting...");
Arg_Parse( args);
System.out.println( "Initial: Command_to_Run: (" + Sub_Args[0] + ") Args: (" + Array_Dump( Sub_Args, 1) + ") TimeStamp_Key: (" + TS_Key + ")");
TimeStamp = TimeStamp_Get();
TS_Replace( Sub_Args, TS_Key, TimeStamp);
System.out.println( "Final: Command_to_Run: (" + Sub_Args[0] + ") Args: (" + Array_Dump( Sub_Args, 1) + ") TimeStamp: (" + TimeStamp + ")");
subproc = Runtime.getRuntime().exec( Sub_Args);
sgout = new Stream_Gobbler( subproc.getInputStream(), System.out);
sgerr = new Stream_Gobbler( subproc.getErrorStream(), System.out);
System.out.println( "Wainting...");
subproc.waitFor();
sgout.join();
sgerr.join();
System.out.println( "Exit_Value: (" + subproc.exitValue() + ")");
System.out.println( "TS Lauch Completed !");
System.exit( subproc.exitValue());
}
}
catch( Exception Expt)
{
System.out.println("Exception: (" + Expt + ") !");
Expt.printStackTrace();
}
}
}