/**
   * generates a minimal matsim4urbansim config
   *
   * <p>tnicolai: the resulting config has the same structure, i.e. the number of entries, as the
   * outcome of the above mehtod "generate()". The difference is that some parameters are set zero
   * instead of using the above defined parameters , e.g. timeAllocationMutatorProbability,
   * changeExpBetaProbability, reRouteDijkstraProbability, populationSamplingRate, etc..
   */
  @Deprecated // this generates a config in old format, use generateConfigV3 instead
  public String generateMinimalConfig() {

    ObjectFactory of = new ObjectFactory();

    // create MATSim4UrbanSim xml hierarchy

    // Config Type
    FileType matsim_config = of.createFileType();
    matsim_config.setInputFile(this.matsimExternalConfigFileName);
    FileType network = of.createFileType();
    network.setInputFile(this.networkInputFileName);
    InputPlansFileType inputPlansFileType = of.createInputPlansFileType();
    if (this.startMode == CreateTestMATSimConfig.COLD_START) inputPlansFileType.setInputFile("");
    else if (this.startMode == CreateTestMATSimConfig.WARRM_START)
      inputPlansFileType.setInputFile(this.inputPlansFileName);
    InputPlansFileType hotStratPlansFile = of.createInputPlansFileType();
    if (this.startMode == CreateTestMATSimConfig.HOT_START)
      hotStratPlansFile.setInputFile(this.hotstartPlansFileName);
    else hotStratPlansFile.setInputFile("");
    ControlerType controler = of.createControlerType();
    controler.setFirstIteration(this.firstIteration);
    controler.setLastIteration(this.lastIteration);
    PlanCalcScoreType planCalcScore = of.createPlanCalcScoreType();
    planCalcScore.setActivityType0(this.activityType_0);
    planCalcScore.setActivityType1(this.activityType_1);
    planCalcScore.setHomeActivityTypicalDuration(this.homeActivityTypicalDuration);
    planCalcScore.setWorkActivityTypicalDuration(this.workActivityTypicalDuration);
    planCalcScore.setWorkActivityOpeningTime(this.workActivityOpeningTime);
    planCalcScore.setWorkActivityLatestStartTime(this.workActivityLatestStartTime);
    //		StrategyType strategy = of.createStrategyType();
    //		strategy.setMaxAgentPlanMemorySize( this.maxAgentPlanMemorySize );

    // UrbanSimParameterType
    UrbansimParameterType ubansimParameterType = of.createUrbansimParameterType();
    ubansimParameterType.setYear(this.year);
    ubansimParameterType.setOpusHome(this.opusHome);
    ubansimParameterType.setOpusDataPath(this.opusDataPath);
    ubansimParameterType.setMatsim4Opus(this.matsim4opus);
    ubansimParameterType.setMatsim4OpusConfig(this.matsim4opusConfig);
    ubansimParameterType.setMatsim4OpusOutput(this.matsim4opusOutput);
    ubansimParameterType.setMatsim4OpusTemp(this.matsim4opusTemp);
    ubansimParameterType.setTestParameter(this.customParameter);

    // matsim4UrbanSimControlerType
    Matsim4UrbansimContolerType matsim4UrbanSimControlerType =
        of.createMatsim4UrbansimContolerType();
    matsim4UrbanSimControlerType.setCellSizeCellBasedAccessibility(
        this.cellSizeCellBasedAccessibility);
    FileType shapeFile = of.createFileType();
    shapeFile.setInputFile(this.shapeFileCellBasedAccessibilityInputFile);
    matsim4UrbanSimControlerType.setShapeFileCellBasedAccessibility(shapeFile);

    // accessibilityParameterType
    AccessibilityParameterType accessibilityParameterType = of.createAccessibilityParameterType();
    // for the following, ``false'' is currently not supported, thus I prefer setting it to true
    // here. kai, apr'13
    accessibilityParameterType.setUseLogitScaleParameterFromMATSim(true);
    accessibilityParameterType.setUseCarParameterFromMATSim(true);
    accessibilityParameterType.setUseWalkParameterFromMATSim(true);

    // === below here are no parameters, but just "plugging together"

    ConfigType configType = of.createConfigType();
    configType.setMatsimConfig(matsim_config);
    configType.setNetwork(network);
    configType.setInputPlansFile(inputPlansFileType);
    configType.setHotStartPlansFile(hotStratPlansFile);
    configType.setControler(controler);
    configType.setPlanCalcScore(planCalcScore);
    //		configType.setStrategy(strategy);

    // matsim4urbansimtype
    Matsim4UrbansimType matsim4UrbanSimType = of.createMatsim4UrbansimType();
    matsim4UrbanSimType.setUrbansimParameter(ubansimParameterType);
    matsim4UrbanSimType.setMatsim4UrbansimContoler(matsim4UrbanSimControlerType);
    matsim4UrbanSimType.setAccessibilityParameter(accessibilityParameterType);

    // MatsimConfigType
    MatsimConfigType matsimConfigType = of.createMatsimConfigType();
    matsimConfigType.setConfig(configType);
    matsimConfigType.setMatsim4Urbansim(matsim4UrbanSimType);

    return writeConfigFileV2(matsimConfigType);
  }
  /** generates the external MATSim config file with the specified parameter settings */
  @Deprecated // this generates a config in old format, use generateConfigV3 instead
  public String generateConfigV2() {

    ObjectFactory of = new ObjectFactory();

    // create MATSim4UrbanSim xml hierarchy

    // Config Type
    FileType matsim_config = of.createFileType();
    matsim_config.setInputFile(this.matsimExternalConfigFileName);
    FileType network = of.createFileType();
    network.setInputFile(this.networkInputFileName);
    InputPlansFileType inputPlansFileType = of.createInputPlansFileType();
    if (this.startMode == CreateTestMATSimConfig.COLD_START) inputPlansFileType.setInputFile("");
    else if (this.startMode == CreateTestMATSimConfig.WARRM_START)
      inputPlansFileType.setInputFile(this.inputPlansFileName);
    InputPlansFileType hotStratPlansFile = of.createInputPlansFileType();
    if (this.startMode == CreateTestMATSimConfig.HOT_START)
      hotStratPlansFile.setInputFile(this.hotstartPlansFileName);
    else hotStratPlansFile.setInputFile("");
    ControlerType controler = of.createControlerType();
    controler.setFirstIteration(this.firstIteration);
    controler.setLastIteration(this.lastIteration);
    PlanCalcScoreType planCalcScore = of.createPlanCalcScoreType();
    planCalcScore.setActivityType0(this.activityType_0);
    planCalcScore.setActivityType1(this.activityType_1);
    planCalcScore.setHomeActivityTypicalDuration(this.homeActivityTypicalDuration);
    planCalcScore.setWorkActivityTypicalDuration(this.workActivityTypicalDuration);
    planCalcScore.setWorkActivityOpeningTime(this.workActivityOpeningTime);
    planCalcScore.setWorkActivityLatestStartTime(this.workActivityLatestStartTime);
    //		StrategyType strategy = of.createStrategyType();
    //		strategy.setMaxAgentPlanMemorySize( this.maxAgentPlanMemorySize );
    //		strategy.setTimeAllocationMutatorProbability( this.timeAllocationMutatorProbability );
    //		strategy.setChangeExpBetaProbability( this.changeExpBetaProbability );
    //		strategy.setReRouteDijkstraProbability( this.reRouteDijkstraProbability );

    ConfigType configType = of.createConfigType();
    configType.setMatsimConfig(matsim_config);
    configType.setNetwork(network);
    configType.setInputPlansFile(inputPlansFileType);
    configType.setHotStartPlansFile(hotStratPlansFile);
    configType.setControler(controler);
    configType.setPlanCalcScore(planCalcScore);
    //		configType.setStrategy(strategy);

    // UrbanSimParameterType
    UrbansimParameterType ubansimParameterType = of.createUrbansimParameterType();
    ubansimParameterType.setPopulationSamplingRate(this.populationSamplingRate);
    ubansimParameterType.setYear(this.year);
    ubansimParameterType.setOpusHome(this.opusHome);
    ubansimParameterType.setOpusDataPath(this.opusDataPath);
    ubansimParameterType.setMatsim4Opus(this.matsim4opus);
    ubansimParameterType.setMatsim4OpusConfig(this.matsim4opusConfig);
    ubansimParameterType.setMatsim4OpusOutput(this.matsim4opusOutput);
    ubansimParameterType.setMatsim4OpusTemp(this.matsim4opusTemp);
    ubansimParameterType.setIsTestRun(this.isTestRun);
    ubansimParameterType.setRandomLocationDistributionRadiusForUrbanSimZone(
        this.randomLocationDistributionRadiusForUrbanSimZone);
    ubansimParameterType.setTestParameter(this.customParameter);
    ubansimParameterType.setBackupRunData(this.backupRunData);

    // matsim4UrbanSimControlerType
    Matsim4UrbansimContolerType matsim4UrbanSimControlerType =
        of.createMatsim4UrbansimContolerType();
    matsim4UrbanSimControlerType.setZone2ZoneImpedance(this.zone2zoneImpedance);
    matsim4UrbanSimControlerType.setAgentPerformance(this.agentPerformance);
    matsim4UrbanSimControlerType.setZoneBasedAccessibility(this.zoneBasedAccessibility);
    matsim4UrbanSimControlerType.setCellBasedAccessibility(this.cellBasedAccessibility);
    matsim4UrbanSimControlerType.setCellSizeCellBasedAccessibility(
        this.cellSizeCellBasedAccessibility);
    FileType shapeFile = of.createFileType();
    shapeFile.setInputFile(this.shapeFileCellBasedAccessibilityInputFile);
    matsim4UrbanSimControlerType.setShapeFileCellBasedAccessibility(shapeFile);
    matsim4UrbanSimControlerType.setUseCustomBoundingBox(this.useCustomBoundingBox);
    matsim4UrbanSimControlerType.setBoundingBoxBottom(this.boundingBoxTop);
    matsim4UrbanSimControlerType.setBoundingBoxLeft(this.boundingBoxLeft);
    matsim4UrbanSimControlerType.setBoundingBoxRight(this.boundingBoxRight);
    matsim4UrbanSimControlerType.setBoundingBoxTop(this.boundingBoxBottom);

    // accessibilityParameterType
    AccessibilityParameterType accessibilityParameterType = of.createAccessibilityParameterType();
    accessibilityParameterType.setAccessibilityDestinationSamplingRate(
        this.accessibilityDestinationSamplingRate);
    accessibilityParameterType.setUseLogitScaleParameterFromMATSim(
        this.useLogitScaleParameterFromMATSim);
    accessibilityParameterType.setUseCarParameterFromMATSim(this.useCarParameterFromMATSim);
    accessibilityParameterType.setUseWalkParameterFromMATSim(this.useWalkParameterFromMATSim);
    accessibilityParameterType.setUseRawSumsWithoutLn(this.useRawSumsWithoutLn);
    accessibilityParameterType.setBetaCarTravelTime(this.betaCarTravelTime);
    accessibilityParameterType.setBetaCarTravelTimePower2(this.betaCarTravelTimePower2);
    accessibilityParameterType.setBetaCarLnTravelTime(this.betaCarLnTravelTime);
    accessibilityParameterType.setBetaCarTravelDistance(this.betaCarTravelDistance);
    accessibilityParameterType.setBetaCarTravelDistancePower2(this.betaCarTravelDistancePower2);
    accessibilityParameterType.setBetaCarLnTravelDistance(this.betaCarLnTravelDistance);
    accessibilityParameterType.setBetaCarTravelCost(this.betaCarTravelCost);
    accessibilityParameterType.setBetaCarTravelCostPower2(this.betaCarTravelCostPower2);
    accessibilityParameterType.setBetaCarLnTravelCost(this.betaCarLnTravelCost);
    accessibilityParameterType.setBetaWalkTravelTime(this.betaWalkTravelTime);
    accessibilityParameterType.setBetaWalkTravelTimePower2(this.betaWalkTravelTimePower2);
    accessibilityParameterType.setBetaWalkLnTravelTime(this.betaWalkLnTravelTime);
    accessibilityParameterType.setBetaWalkTravelDistance(this.betaWalkTravelDistance);
    accessibilityParameterType.setBetaWalkTravelDistancePower2(this.betaWalkTravelDistancePower2);
    accessibilityParameterType.setBetaWalkLnTravelDistance(this.betaWalkLnTravelDistance);
    accessibilityParameterType.setBetaWalkTravelCost(this.betaWalkTravelCost);
    accessibilityParameterType.setBetaWalkTravelCostPower2(this.betaWalkTravelCostPower2);
    accessibilityParameterType.setBetaWalkLnTravelCost(this.betaWalkLnTravelCost);

    // matsim4urbansimtype
    Matsim4UrbansimType matsim4UrbanSimType = of.createMatsim4UrbansimType();
    matsim4UrbanSimType.setUrbansimParameter(ubansimParameterType);
    matsim4UrbanSimType.setMatsim4UrbansimContoler(matsim4UrbanSimControlerType);
    matsim4UrbanSimType.setAccessibilityParameter(accessibilityParameterType);

    // MatsimConfigType
    MatsimConfigType matsimConfigType = of.createMatsimConfigType();
    matsimConfigType.setConfig(configType);
    matsimConfigType.setMatsim4Urbansim(matsim4UrbanSimType);

    return writeConfigFileV2(matsimConfigType);
  }