package plp.sort; import java.lang.reflect.*; public class TestSort { public static void main(String [] args) throws ClassNotFoundException { String [] toSort = new String[args.length - 1]; System.arraycopy(args, 1, toSort, 0, args.length - 1); SortableData data = new SortableArray(toSort); SortableDataTracer tracer = new SortableDataTracer(data); tracer.addObserver(new WinTracer(tracer, data)); tracer.addObserver(new AsciiTracer()); SortableDataStatistic statData = new SortableDataStatistic(tracer); Class sortClass = Class.forName(args[0]); Method getInstance = null; try { getInstance = sortClass.getMethod("getInstance", null); } catch (NoSuchMethodException e) { System.err.println("Your Sort class has no static method getInstance()"); System.exit(1); } try { ((Sort) getInstance.invoke(null, null)).doSort(statData); // First parameter is null because the method Sort.getInstance() is static. } catch (InvocationTargetException e) { throw new Error(e.getMessage()); } catch (IllegalAccessException e) { throw new Error(e.getMessage()); } for (int i = 0; i < toSort.length; ++i) System.out.println(toSort[i]); System.out.println(statData.getAccessStat() + " access, " + statData.getCompareStat() + " compare, " + statData.getSwapStat() + " swap"); System.exit(0); } }