/** * Reads a run from a DOM node representing an XML parameter file. * * @param n the DOM node to read the run from */ public void readFromNode(Element e) { String mclass = null, expRunnerClass = null; mclass = e.getAttribute("model"); expRunnerClass = e.getAttribute("expRunner"); if (mclass == "") mclass = null; if (expRunnerClass == "") expRunnerClass = null; try { if (mclass != null) model = (Model) Class.forName(mclass).newInstance(); if (expRunnerClass != null) { expRunner = (ExperimentRunner) Class.forName(expRunnerClass).newInstance(); } else if (expRunner == null) { expRunner = createDefaultExperimentRunner(); System.out.println( "** WARNING: No ExperimentRunner specified. Using desmoj.util.ExperimentRunner"); } } catch (Exception ex) { ex.printStackTrace(); model = null; expRunner = null; } Node settings = null, params = null; NodeList nl = e.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); if (n.getNodeName().equals("exp")) settings = n; if (n.getNodeName().equals("model")) params = n; } if (settings != null) readParamList(settings, expSettings); if (params != null) readParamList(params, modelParams); }
/** * Runs batch specified in the given DOM node * * @param a DOM node representing an xml batch file */ void runBatch(final Node batch) { final Map defaultExpSettings = new HashMap(); final Map defaultModelParams = new HashMap(); Node settings = DOMUtil.getFirstChildElement(batch, "exp"); Node params = DOMUtil.getFirstChildElement(batch, "model"); if (settings != null) Run.readParamList(settings, defaultExpSettings); if (params != null) Run.readParamList(params, defaultModelParams); // Getting default model factory from node <modelfactory class=.../> String defaultModelN = DOMUtil.getAttrValue((Element) batch, "model"); if (defaultModelN.equals("")) defaultModelN = null; String defaultExpRunnerN = DOMUtil.getAttrValue((Element) batch, "expRunner"); if (defaultExpRunnerN == null || defaultExpRunnerN.equals("")) defaultExpRunnerN = "desmoj.extensions.experimentation.util.ExperimentRunner"; final String defaultModelName = defaultModelN; final String defaultExpRunnerName = defaultExpRunnerN; // Create the default model System.out.println("* Processing batch...\n"); Runnable r = new Runnable() { public void run() { // Read list of runs int count = 0; NodeList runs = batch.getChildNodes(); for (int i = 0; i < runs.getLength(); i++) { HashMap expSettings = new HashMap(defaultExpSettings); HashMap modelParams = new HashMap(defaultModelParams); Node nextDesc = runs.item(i); if (nextDesc.getNodeName().equals("run")) { count++; System.out.println("* Initializing run no " + count); try { if (defaultModelName != null) modelClass = Class.forName(defaultModelName); if (defaultExpRunnerName != null) expRunnerClass = Class.forName(defaultExpRunnerName); model = (Model) modelClass.newInstance(); expRunner = (ExperimentRunner) expRunnerClass.newInstance(); } catch (Exception e) { e.printStackTrace(); } Run run = new Run(model, expRunner, expSettings, modelParams, count); run.readFromNode((Element) nextDesc); expRunner = run.getExperimentRunner(); model = run.getModel(); expRunnerClass = expRunner.getClass(); modelClass = model.getClass(); expAccessPoints = new AccessPointTableModel(expRunner.getExperimentSettings()); modelAccessPoints = new AccessPointTableModel(expRunner.getModelParameters()); startExperiment(); try { expRunner.getThread().join(); } catch (InterruptedException ex) { ex.printStackTrace(); } if (i < runs.getLength() - 1) experimentGUI.resetGUI( filename, runsBatch, modelAccessPoints, expAccessPoints, model.getName()); } } System.out.println("* Batch completed."); } }; new Thread(r).start(); }