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

de.gwdg.metadataqa.marc.cli.parameters.FormatterParameters Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.cli.parameters;

import de.gwdg.metadataqa.marc.definition.bibliographic.SchemaType;
import de.gwdg.metadataqa.marc.utils.SchemaSpec;
import de.gwdg.metadataqa.marc.utils.marcspec.legacy.MarcSpec;
import de.gwdg.metadataqa.marc.utils.pica.path.PicaSpec;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class FormatterParameters extends CommonParameters {
  public static final String DEFAULT_FILE_NAME = "extracted.csv";

  private String format = null;
  private int countNr = -1;
  private String search = null;
  private String path = null;
  private String query = null;
  private List selector = null;
  private boolean withId = false;
  private String separator = "\t";
  private String fileName = DEFAULT_FILE_NAME;

  private boolean isOptionSet = false;

  protected void setOptions() {
    if (!isOptionSet) {
      super.setOptions();
      options.addOption("f", "format", true, "specify a format");
      options.addOption("c", "countNr", true, "count number of the record (e.g. 1 means the first record)");
      options.addOption("s", "search", true, "search string ([path]=[value])");
      options.addOption("l", "selector", true, "selectors");
      options.addOption("w", "withId", false, "the generated CSV should contain record ID as first field");
      options.addOption("p", "separator", true, "separator between the parts (default: TAB)");
      options.addOption("e", "fileName", true, String.format("output file (default: %s)", DEFAULT_FILE_NAME));
      isOptionSet = true;
    }
  }

  public FormatterParameters(String[] arguments) throws ParseException {
    super(arguments);

    if (cmd.hasOption("format"))
      format = cmd.getOptionValue("format");

    if (cmd.hasOption("countNr"))
      countNr = Integer.parseInt(cmd.getOptionValue("countNr"));

    if (cmd.hasOption("search")) {
      search = cmd.getOptionValue("search");
      String[] parts = search.split("=", 2);
      path = parts[0];
      query = parts[1];
    }

    if (cmd.hasOption("selector")) {
      String rawSelector = cmd.getOptionValue("selector");
      String[] rawSelectors = rawSelector.split(";");
      selector = new ArrayList<>();
      if (getSchemaType().equals(SchemaType.MARC21)) {
        for (String _rawSelector : rawSelectors)
          selector.add(new MarcSpec(_rawSelector));
      } else if (getSchemaType().equals(SchemaType.PICA)) {
        for (String _rawSelector : rawSelectors)
          selector.add(new PicaSpec(_rawSelector));
      }
    }

    withId = cmd.hasOption("withId");

    if (cmd.hasOption("separator"))
      separator = cmd.getOptionValue("separator");

    if (cmd.hasOption("fileName"))
      fileName = cmd.getOptionValue("fileName");
  }

  public String getFormat() {
    return format;
  }

  public int getCountNr() {
    return countNr;
  }

  public String getSearch() {
    return search;
  }

  public boolean hasSearch() {
    return StringUtils.isNotBlank(path) && StringUtils.isNotBlank(query);
  }

  public String getPath() {
    return path;
  }

  public String getQuery() {
    return query;
  }

  public List getSelector() {
    return selector;
  }

  public boolean hasSelector() {
    return selector != null && !selector.isEmpty();
  }

  public boolean withId() {
    return withId;
  }

  public String getSeparator() {
    return separator;
  }

  public String getFileName() {
    return fileName;
  }

  @Override
  public String formatParameters() {
    String text = super.formatParameters();
    text += String.format("format: %s%n", format);
    text += String.format("countNr: %s%n", countNr);
    text += String.format("search: %s%n", search);
    text += String.format("withId: %s%n", withId);
    text += String.format("separator: %s%n", separator);
    text += String.format("outputFile: %s%n", fileName);
    return text;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy