private void runExperimentSeries(
      ScenarioInstance scenarioInstance,
      Map<MeasurementSpecification, List<ExperimentSeriesDefinition>> experimentSeries) {
    boolean mecAcquired = false;
    try {
      experimentController.acquireMEController();
      mecAcquired = true;

      for (MeasurementSpecification measSpec : experimentSeries.keySet()) {
        experimentController.initialize(
            EngineTools.getConstantParameterValues(measSpec.getInitializationAssignemts()),
            scenarioInstance.getScenarioDefinition().getMeasurementEnvironmentDefinition());

        for (ExperimentSeriesDefinition esd : experimentSeries.get(measSpec)) {
          ExperimentSeries series = scenarioInstance.getExperimentSeries(esd.getName());
          if (series == null) {
            series = EntityFactory.createExperimentSeries(esd);
            scenarioInstance.getExperimentSeriesList().add(series);
            series.setScenarioInstance(scenarioInstance);

            persistenceProvider.store(series);
          }

          experimentSeriesManager.runExperimentSeries(series);
        }
      }

    } catch (Exception e) {
      throw new RuntimeException("Failed executing experiments!", e);
    } finally {
      if (mecAcquired) {
        experimentController.releaseMEController();
      }
    }
  }
  private ExperimentSeries getSeries(ScenarioInstance instance, String name)
      throws DataNotFoundException {
    for (ExperimentSeries series : instance.getExperimentSeriesList()) {
      if (series.getName().equals(name)) {
        return series;
      }
    }

    throw new DataNotFoundException("No ExperimentSeries '" + name + "' found..");
  }
  /** @return a dummy scenario instance */
  public static ScenarioInstance createDummyScenarioInstance() {
    scenarioDefinition = loadScenarioDefinition();
    ScenarioInstance scenarioInstance =
        EntityFactory.createScenarioInstance(scenarioDefinition, "Dummy");

    for (ExperimentSeries es : createDummyExperimentSeries()) {
      scenarioInstance.getExperimentSeriesList().add(es);
      es.setScenarioInstance(scenarioInstance);
    }
    return scenarioInstance;
  }
  private static List<ExperimentSeries> createDummyExperimentSeries() {
    List<ExperimentSeries> seriesList = new LinkedList<ExperimentSeries>();
    for (ExperimentSeriesDefinition esd :
        scenarioDefinition.getMeasurementSpecifications().get(0).getExperimentSeriesDefinitions()) {
      ExperimentSeries es = EntityFactory.createExperimentSeries(esd);

      for (ExperimentSeriesRun run : createDummyExperimentSeriesRuns(_10)) {
        es.getExperimentSeriesRuns().add(run);
        run.setExperimentSeries(es);
      }

      seriesList.add(es);
    }

    return seriesList;
  }
  private ExperimentSeriesRun getRun(ExperimentSeries series, Long timestamp)
      throws DataNotFoundException {
    for (ExperimentSeriesRun run : series.getExperimentSeriesRuns()) {
      System.out.println(run.getTimestamp() + " " + timestamp);
      if (timestamp.equals(run.getTimestamp())) {
        return run;
      }
    }

    throw new DataNotFoundException(
        "No ExperimentSeriesRun with timestamp '" + timestamp + "' found..");
  }
  /**
   * Creates a SharedScenarioInstance out of a ScenarioInstance which can send to the FrontEnd.
   *
   * @param instance
   * @return
   */
  private SharedScenarioInstance convertInstance(ScenarioInstance instance) {
    SharedScenarioInstance retInstance = new SharedScenarioInstance();

    retInstance.setScenarioName(instance.getName());
    retInstance.setControllerUrl(instance.getMeasurementEnvironmentUrl());

    for (ExperimentSeries series : instance.getExperimentSeriesList()) {
      SharedExperimentSeries sharedSeries = new SharedExperimentSeries();
      sharedSeries.setExperimentName(series.getName());

      for (ExperimentSeriesRun run : series.getExperimentSeriesRuns()) {
        SharedExperimentRuns sharedRun = new SharedExperimentRuns();
        sharedRun.setTimestamp(run.getTimestamp());
        sharedRun.setLabel(run.getLabel());

        sharedSeries.addExperimentRun(sharedRun);
      }

      retInstance.addExperimentSeries(sharedSeries);
    }

    return retInstance;
  }