Exemple #1
0
  /**
   * 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();
  }