/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" */ package key; import key.*; import key.util.Trie; import java.io.*; import java.util.StringTokenizer; import java.util.Vector; import java.util.Enumeration; import java.lang.reflect.*; /** */ public class StartDaemon extends Daemon { public static final AtomicElement[] ELEMENTS = { AtomicElement.construct( StartDaemon.class, String.class, "commandLine", AtomicElement.PUBLIC_FIELD, "the java class to run" ) }; String commandLine = ""; public static final AtomicStructure STRUCTURE = new AtomicStructure( Daemon.STRUCTURE, ELEMENTS ); public AtomicStructure getDeclaredStructure() { return( STRUCTURE ); } public StartDaemon() { } public void argument( String args ) { if( args != null && args.length() > 0 ) { commandLine = args; } else throw new IllegalArgumentException( "You must specify the java class to start" ); } static Class[] mainArgTypes = new Class[] { ((new String[0]).getClass()) }; public void run() { StringTokenizer args = new StringTokenizer( commandLine ); if( !args.hasMoreTokens() ) { System.err.println( "No arguments to StartDaemon" ); return; } String cname = args.nextToken(); Vector params = new Vector( 20, 20 ); Class fn = null; try { fn = Class.forName( cname ); } catch( Exception e ) { e.printStackTrace(); return; } while( args.hasMoreTokens() ) params.addElement( args.nextToken() ); String[] sub_args = new String[ params.size() ]; params.copyInto( sub_args ); try { Method main = fn.getMethod( "main", mainArgTypes ); Object[] a = new Object[1]; a[0] = sub_args; try { main.invoke( null, a ); } catch( Exception t ) { Log.error( t ); if( t instanceof RuntimeException ) { throw ((RuntimeException)t); } } main = null; } catch( Exception e ) { e.printStackTrace(); return; } fn = null; } }