package org.dcache.gplazma.loader.cli; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; /** * The main class of a simple CLI for querying about gPlazma plugins */ public class Main { public static void main( String[] args) { if( args.length == 0) { throw new IllegalArgumentException("Need command name"); } Class<?> className; try { className = Class.forName( args[0]); } catch (ClassNotFoundException e) { System.err.println("Unknown command " + args[0] ); System.exit( 1); return; } if( !Command.class.isAssignableFrom( className)) { System.err.println("Command " + args[0] + " is not a command"); System.exit(1); } @SuppressWarnings("unchecked") // we checked Class<? extends Command> commandName = (Class<? extends Command>) className; Constructor<? extends Command> constructor; try { constructor = commandName.getConstructor(); } catch (SecurityException e) { System.err.println( "Cannot run command"); System.exit( 1); return; } catch (NoSuchMethodException e) { System.err.println( "Cannot create command"); System.exit( 1); return; } Command command; try { command = constructor.newInstance(); } catch (IllegalArgumentException | InvocationTargetException | IllegalAccessException | InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } int rc = command.run( Arrays.copyOfRange( args, 1, args.length)); System.exit( rc); } }