All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.ext.interactivelauncher.startup.StartupModel Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.ext.interactivelauncher.startup;

import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import org.opentripplanner.ext.interactivelauncher.support.SearchForOtpConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class StartupModel {

  private static final Logger LOG = LoggerFactory.getLogger(StartupModel.class);

  @JsonIgnore
  private transient Consumer commandLineChange;

  private String rootDirectory = null;
  private String dataSource = null;
  private boolean buildStreet = false;
  private boolean buildTransit = true;
  private boolean saveGraph = false;
  private boolean serveGraph = true;
  private boolean visualizer = false;

  public void subscribeCmdLineUpdates(Consumer commandLineChange) {
    this.commandLineChange = commandLineChange;
  }

  @SuppressWarnings("AccessOfSystemProperties")
  public String getRootDirectory() {
    return rootDirectory == null ? System.getProperty("user.dir") : rootDirectory;
  }

  public void setRootDirectory(String rootDirectory) {
    // If the persisted JSON do not contain the rootDirectory, then avoid setting it
    if (rootDirectory != null) {
      this.rootDirectory = rootDirectory;
    }
    notifyChangeListener();
  }

  public String getDataSource() {
    return dataSource;
  }

  public void setDataSource(String dataSource) {
    this.dataSource = dataSource;
    notifyChangeListener();
  }

  @JsonIgnore
  public List getDataSourceOptions() {
    List dataSourceOptions = new ArrayList<>();
    File rootDir = new File(getRootDirectory());
    List dirs = SearchForOtpConfig.search(rootDir);
    // Add 1 char for the path-separator-character
    int length = rootDir.getAbsolutePath().length() + 1;

    for (File dir : dirs) {
      var path = dir.getAbsolutePath();
      if (path.length() <= length) {
        LOG.warn(
          "The root directory contains a config file, choose " +
          "the parent directory or delete the config file."
        );
        continue;
      }
      dataSourceOptions.add(path.substring(length));
    }
    return dataSourceOptions;
  }

  public boolean isBuildStreet() {
    return buildStreet;
  }

  public void setBuildStreet(boolean buildStreet) {
    this.buildStreet = buildStreet;
    notifyChangeListener();
  }

  public boolean isBuildTransit() {
    return buildTransit;
  }

  public void setBuildTransit(boolean buildTransit) {
    this.buildTransit = buildTransit;
    notifyChangeListener();
  }

  public boolean isSaveGraph() {
    return saveGraph;
  }

  public void setSaveGraph(boolean saveGraph) {
    this.saveGraph = saveGraph;
    notifyChangeListener();
  }

  public boolean isServeGraph() {
    return serveGraph;
  }

  public void setServeGraph(boolean serveGraph) {
    this.serveGraph = serveGraph;
    notifyChangeListener();
  }

  public boolean isVisualizer() {
    return visualizer;
  }

  public void setVisualizer(boolean visualizer) {
    this.visualizer = visualizer;
    notifyChangeListener();
  }

  @Override
  public String toString() {
    return String.join("", asOtpArgs());
  }

  public String toCliString() {
    return String.join(" ", asOtpArgs());
  }

  private void notifyChangeListener() {
    if (commandLineChange != null) {
      commandLineChange.accept(toCliString());
    }
  }

  @JsonIgnore
  String getDataSourceDirectory() {
    if (dataSource == null) {
      return "DATA_SOURCE_NOT_SET";
    }
    return getRootDirectory() + File.separatorChar + dataSource;
  }

  public String[] asOtpArgs() {
    List args = new ArrayList<>();

    if (buildAll()) {
      args.add("--build");
    } else if (buildStreet) {
      args.add("--buildStreet");
    } else if (buildTransit) {
      args.add("--loadStreet");
    } else {
      args.add("--load");
    }

    if (saveGraph && (buildTransit || buildStreet)) {
      args.add("--save");
    }
    if (serveGraph && !buildStreetOnly()) {
      args.add("--serve");
    }
    if (serveGraph && !buildStreetOnly() && visualizer) {
      args.add("--visualize");
    }

    args.add(getDataSourceDirectory());

    return args.toArray(new String[0]);
  }

  private boolean buildAll() {
    return buildStreet && buildTransit;
  }

  private boolean buildStreetOnly() {
    return buildStreet && !buildTransit;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy