package com.technophobia.substeps.ant; import java.util.ArrayList; import java.util.List; import com.google.common.collect.Lists; import com.technophobia.substeps.runner.SubstepsExecutionConfig; public class AntExecutionConfig extends SubstepsExecutionConfig { private static final long serialVersionUID = 1L; private List<StepImplementationClassNames> stepImplementationClassNames = new ArrayList<StepImplementationClassNames>(); private List<InitialisationClass> initialisationClasses = new ArrayList<InitialisationClass>(); private String outputDirectory = ""; @Override public List<Class<?>> getStepImplementationClasses() { ClassLoader loader = this.getClass().getClassLoader(); List<Class<?>> classes = new ArrayList<Class<?>>(); try { StepImplementationClassNames theStepImplementationClassNames = this.stepImplementationClassNames.get(0); for (Param clazz : theStepImplementationClassNames.getParams()) { classes.add(loader.loadClass(clazz.toString())); } } catch (ClassNotFoundException e) { e.printStackTrace(); } return classes; } @Override public Class<?>[] getInitialisationClasses() { ClassLoader loader = this.getClass().getClassLoader(); List<Class<?>> classes = Lists.newArrayList(); if (!this.initialisationClasses.isEmpty()) { try { InitialisationClass theInitialisationClassList = this.initialisationClasses.get(0); for (Param clazz : theInitialisationClassList.getParams()) { classes.add(loader.loadClass(clazz.toString())); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } for (Class<?> initClassFromSuper : super.getInitialisationClasses()) { classes.add(initClassFromSuper); } return classes.toArray(new Class[] {}); } public void addConfiguredStepImplementationClassNames(StepImplementationClassNames s) { this.stepImplementationClassNames.add(s); } public void addConfiguredInitialisationClass(InitialisationClass ic) { this.initialisationClasses.add(ic); } // // Nested simple types // public String getOutputDirectory() { return outputDirectory; } public void setOutputDirectory(String outputDirectory) { this.outputDirectory = outputDirectory; } public static class ListOfClasses { private List<Param> params = new ArrayList<Param>(); public void addConfiguredParam(Param param) { this.params.add(param); } public List<Param> getParams() { return this.params; } } public static class StepImplementationClassNames extends ListOfClasses { // } public static class InitialisationClass extends ListOfClasses { // } public static class Param { private String value; public String getText() { return value; } public void addText(String value) { this.value = value; } @Override public String toString() { return this.value; } } }