/** Loads a parameter set from an XML file opened by the user */ void loadParameters() { String newFilename = experimentGUI.loadDialog(filename); if (newFilename != null && !newFilename.equals(filename)) { filename = newFilename; filenameChanged = true; loadDocNode(); } }
/** * Creates a new experiment by loading a model and an experiment runner. Called when NEW button is * pressed. */ void createNewExperiment() { experimentGUI.loadModel(); if (model != null) { if (expRunnerClass == null) expRunnerClass = ExperimentRunner.class; filename = null; docNode = null; resetModel(); } }
/** * Resets the currently active model by creating a new model instance of the current model class. * Inits all model- and experiment parameters according to the current experiment runner. */ void resetModel() { try { if (docNode != null) { if (docNode.getNodeName().equals("run")) readExperimentRunFromNode(docNode); } else initNewExperimentRun(); experimentGUI.resetGUI( filename, runsBatch, modelAccessPoints, expAccessPoints, model.getName()); } catch (Exception e) { e.printStackTrace(); } }
/** * Saves the current Parameters into an XML File. To do so a DOM-Tree with the current Parameters * is constructed. This tree will be serialized by use of XML_Util.serializeDocument and saved * into the file selected via experimentGUI.saveDialog. * * @author Gunnar Kiesel */ void saveParameters() { // select file to save parameters in String newFilename = experimentGUI.saveDialog(filename); if (newFilename == null) return; filenameChanged = true; filename = newFilename; File file = new File(filename); // create DOM-tree Document document = XMLHelper.createDocument(); Element run = document.createElement("run"); run.setAttribute("model", modelClass.getName()); run.setAttribute("expRunner", expRunnerClass.getName()); document.appendChild(run); Element exp = document.createElement("exp"); run.appendChild(exp); expAccessPoints.setValues(); Map expMap = expAccessPoints.getAccessPoints(); String[] expnames = AccessUtil.getAccessPointNames(expMap); Object[] expvalues = AccessUtil.getAccessPointValues(expMap); for (int i = 0; i < expnames.length; i++) { XMLHelper.addElement( document, exp, "param", "name", expnames[i], "value", expvalues[i].toString()); } Element modelelement = document.createElement("model"); run.appendChild(modelelement); modelAccessPoints.setValues(); Map modelMap = modelAccessPoints.getAccessPoints(); String[] modelnames = AccessUtil.getAccessPointNames(modelMap); Object[] modelvalues = AccessUtil.getAccessPointValues(modelMap); for (int i = 0; i < modelnames.length; i++) { XMLHelper.addElement( document, modelelement, "param", "name", modelnames[i], "value", modelvalues[i].toString()); } // save DOM-tree to XML file try { XMLHelper.serializeDocument(document, new FileWriter(file)); filename = file.getAbsolutePath(); } catch (IOException ex) { ex.printStackTrace(); } }
/** Called when experiment is stopped. Implemented for ExperimentListener */ public void experimentStopped(SimRunEvent e) { Experiment exp = expRunner.getExperiment(); Map expMap = expAccessPoints.getAccessPoints(); Object[] expvalues = AccessUtil.getAccessPointValues(expMap); String currentTime = model.currentTime().toString(3); String experimentValues = expvalues[AccessUtil.getIndexof("name", expMap)].toString(); String outputPath = exp.getOutputPath(); List<List<String>> appendixes = exp.getOutputAppendixes(); String[] appendixesUsed = { appendixes.get(0).get(0), appendixes.get(1).get(0), appendixes.get(2).get(0), appendixes.get(3).get(0) }; // only use the first one (GUI can only set one output file type per channel) experimentGUI.setStopped(currentTime, startTime, experimentValues, outputPath, appendixesUsed); }
/** Loads the DOM node representing the document currently open in the experiment launcher */ void loadDocNode() { try { Document d = DocumentReader.getInstance().readDoc(filename); docNode = d.getDocumentElement(); if (docNode.getNodeName().equals("run")) { runsBatch = false; readExperimentRunFromNode(docNode); } else if (docNode.getNodeName().equals("batch")) { runsBatch = true; } experimentGUI.resetGUI( filename, runsBatch, modelAccessPoints, expAccessPoints, model.getName()); } catch (Exception e) { e.printStackTrace(); filename = null; docNode = null; runsBatch = false; } }
/** Called when experiment is paused. Implemented for ExperimentListener */ public void experimentPaused(SimRunEvent e) { experimentGUI.setPaused(); // this.settingsPanel.modelTable.setEnabled(true); }
/** Called when experiment is started or resumed. Implemented for ExperimentListener */ public void experimentRunning(SimRunEvent e) { experimentGUI.setRunning(); }
/** * Called when the currently active experiment's SimClock is advanced * * @param e SimRunEvent: A SimRunEvent. */ public void clockAdvanced(SimRunEvent e) { SimTime currentTime = e.getSimTime(); double timePercent = (currentTime.getTimeValue() / expRunner.getExperiment().getStopTime().getTimeValue()) * 100; experimentGUI.clockAdvanced(currentTime.toString(3), timePercent, startTime); }