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

de.gwdg.metadataqa.marc.utils.marcspec.MARCspec Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.utils.marcspec;

import de.gwdg.metadataqa.marc.utils.marcspec.exception.InvalidMARCspecException;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class MARCspec {
  public static final Pattern hasSpacePattern = Pattern.compile("\\s");

  private Field field;

  private List subfields;

  public MARCspec(Field field) {
    this();
    this.field = field;
  }

  public MARCspec() {
    subfields = new ArrayList<>();
  }

  public MARCspec(String spec) {
    MARCspecParser parser = new MARCspecParser();
    MARCspec o = parser.parse(spec);
    field = o.getField();
    subfields = o.getSubfields();
  }

  public Field getField() {
    return field;
  }

  public void setField(Field field) {
    this.field = field;
  }

  public List getSubfields() {
    return subfields;
  }

  public void setSubfields(List subfields) {
    this.subfields = subfields;
  }

  public static Position[] validatePos(String positionInput) {
    int posLength = positionInput.length();

    if (1 > posLength) {
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR1, positionInput);
    }

    Pattern positionPattern = Pattern.compile("[^0-9\\-#]");
    if (positionPattern.matcher(positionInput).find()) { // alphabetic characters etc. are not valid
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR2, positionInput);
    }

    // something like 123- is not valid
    if (positionInput.endsWith("-")) {
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR3, positionInput);
    }

    // something like -123 ist not valid
    if (positionInput.startsWith("-")) {
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR4, positionInput);
    }

    String[] positions = positionInput.split("-");
    // only one - is allowed
    if (positions.length > 2) {
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR5, positionInput);
    }

    if (2 < positions.length) {
      throw new InvalidMARCspecException(InvalidMARCspecException.PR + InvalidMARCspecException.PR6, positionInput);
    }

    if (1 == positions.length) {
      positions[1] = null;
    }

    Position[] indexPositions = new Position[positions.length];
    for (int i = 0; i
        
Related Artifacts
Related Groups
-->


© 2015 - 2025 Weber Informatics LLC | Privacy Policy