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

de.gwdg.metadataqa.marc.utils.QAMarcReaderFactory Maven / Gradle / Ivy

package de.gwdg.metadataqa.marc.utils;

import de.gwdg.metadataqa.marc.cli.parameters.CommonParameters;
import de.gwdg.metadataqa.marc.definition.MarcFormat;
import de.gwdg.metadataqa.marc.utils.marcreader.AlephseqMarcReader;
import de.gwdg.metadataqa.marc.utils.marcreader.LineSeparatedMarcReader;
import de.gwdg.metadataqa.marc.utils.marcreader.MarcMakerReader;
import de.gwdg.metadataqa.marc.utils.marcreader.MarclineReader;
import de.gwdg.metadataqa.marc.utils.pica.PicaNormalizedReader;
import de.gwdg.metadataqa.marc.utils.pica.PicaPlainReader;
import de.gwdg.metadataqa.marc.utils.pica.PicaReader;
import org.apache.commons.lang3.StringUtils;
import org.marc4j.MarcReader;
import org.marc4j.MarcStreamReader;
import org.marc4j.MarcXmlReader;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

public final class QAMarcReaderFactory {

  private CommonParameters parameters;

  private QAMarcReaderFactory(CommonParameters parameters) {
    this.parameters = parameters;
  }

  private MarcReader getIsoFileReader(String fileName) throws Exception {
    return getIsoStreamReader(new FileInputStream(fileName));
  }

  private MarcReader getIsoStreamReader(InputStream stream) throws Exception {
    String encoding = parameters != null ? parameters.getDefaultEncoding() : null;
    return new MarcStreamReader(stream, encoding);
  }

  private MarcReader getXmlFileReader(String fileName) throws Exception {
    return getXmlStreamReader(new FileInputStream(fileName));
  }

  private MarcReader getXmlStreamReader(InputStream stream) throws Exception {
    return new MarcXmlReader(stream);
  }

  private MarcReader getLineSeparatedFileReader(String fileName) throws Exception {
    return new LineSeparatedMarcReader(fileName);
  }

  private MarcReader getLineSeparatedStreamReader(InputStream stream) throws Exception {
    return new LineSeparatedMarcReader(stream);
  }

  private MarcReader getAlephseqFileReader(String fileName) throws Exception {
    AlephseqMarcReader reader = new AlephseqMarcReader(fileName);
    confiigureAlephseqMarcReader(reader);
    return reader;
  }

  private MarcReader getAlephseqStreamReader(InputStream stream) throws Exception {
    AlephseqMarcReader reader = new AlephseqMarcReader(stream);
    confiigureAlephseqMarcReader(reader);
    return reader;
  }

  private void confiigureAlephseqMarcReader(AlephseqMarcReader reader) {
    if (parameters != null && parameters.getAlephseqLineType() != null)
      reader.setLineType(parameters.getAlephseqLineType());
  }

  private MarcReader getPicaPlainFileReader(String fileName, CommonParameters parameters) {
    // String encoding = (parameters != null && StringUtils.isNotBlank(parameters.getDefaultEncoding())) ? parameters.getDefaultEncoding() : "UTF-8";
    PicaReader reader = new PicaPlainReader(fileName);
    configurePicaReader(reader, parameters);
    return reader;
  }

  private MarcReader getPicaPlainStreamReader(InputStream stream, CommonParameters parameters) {
    String encoding = (parameters != null && StringUtils.isNotBlank(parameters.getDefaultEncoding())) ? parameters.getDefaultEncoding() : "UTF-8";
    PicaReader reader = new PicaPlainReader(stream, encoding);
    configurePicaReader(reader, parameters);
    return reader;
  }

  private MarcReader getPicaNormalizedFileReader(String fileName, CommonParameters parameters) {
    // String encoding = (parameters != null && StringUtils.isNotBlank(parameters.getDefaultEncoding())) ? parameters.getDefaultEncoding() : "UTF-8";
    PicaReader reader = new PicaNormalizedReader(fileName);
    configurePicaReader(reader, parameters);
    return reader;
  }

  private MarcReader getPicaNormalizedStreamReader(InputStream stream, CommonParameters parameters) {
    String encoding = (parameters != null && StringUtils.isNotBlank(parameters.getDefaultEncoding())) ? parameters.getDefaultEncoding() : "UTF-8";
    PicaReader reader = new PicaNormalizedReader(stream, encoding);
    configurePicaReader(reader, parameters);
    return reader;
  }

  private void configurePicaReader(PicaReader reader, CommonParameters parameters) {
    if (parameters != null) {
      if (StringUtils.isNotEmpty(parameters.getPicaIdField()))
        reader.setIdField(parameters.getPicaIdField());
      if (StringUtils.isNotEmpty(parameters.getPicaSubfieldSeparator()))
        reader.setSubfieldSeparator(parameters.getPicaSubfieldSeparator());
    }
  }

  private MarcReader getMarclineFileReader(String fileName) throws Exception {
    return new MarclineReader(fileName);
  }

  private MarcReader getMarclineStreamReader(InputStream stream) throws Exception {
    return new MarclineReader(stream);
  }

  private MarcReader getMarcMakerFileReader(String fileName) throws Exception {
    return new MarcMakerReader(fileName);
  }

  private MarcReader getMarcMakerStreamReader(InputStream stream) throws Exception {
    return new MarcMakerReader(stream);
  }

  public static MarcReader getFileReader(MarcFormat marcFormat, String fileName) throws Exception {
    return getFileReader(marcFormat, fileName, null);
  }

  public static MarcReader getFileReader(MarcFormat marcFormat, String fileName, CommonParameters parameters) throws Exception {
    QAMarcReaderFactory factory = new QAMarcReaderFactory(parameters);
    MarcReader reader = null;
    switch (marcFormat) {
      case ALEPHSEQ:
        reader = factory.getAlephseqFileReader(fileName); break;
      case LINE_SEPARATED:
        reader = factory.getLineSeparatedFileReader(fileName); break;
      case XML:
        reader = factory.getXmlFileReader(fileName); break;
      case MARC_LINE:
        reader = factory.getMarclineFileReader(fileName); break;
      case MARC_MAKER:
        reader = factory.getMarcMakerFileReader(fileName); break;
      case PICA_PLAIN:
        reader = factory.getPicaPlainFileReader(fileName, parameters); break;
      case PICA_NORMALIZED:
        reader = factory.getPicaNormalizedFileReader(fileName, parameters); break;
      case ISO:
      default:
        reader = factory.getIsoFileReader(fileName); break;
    }
    return reader;
  }

  public static MarcReader getStreamReader(MarcFormat marcFormat, InputStream stream) throws Exception {
    return getStreamReader(marcFormat, stream, null);
  }

  public static MarcReader getStreamReader(MarcFormat marcFormat, InputStream stream, CommonParameters parameters) throws Exception {
    QAMarcReaderFactory factory = new QAMarcReaderFactory(parameters);
    MarcReader reader = null;
    switch (marcFormat) {
      case ALEPHSEQ:
        reader = factory.getAlephseqStreamReader(stream); break;
      case LINE_SEPARATED:
        reader = factory.getLineSeparatedStreamReader(stream); break;
      case XML:
        reader = factory.getXmlStreamReader(stream); break;
      case MARC_LINE:
        reader = factory.getMarclineStreamReader(stream); break;
      case MARC_MAKER:
        reader = factory.getMarcMakerStreamReader(stream); break;
      case PICA_PLAIN:
        reader = factory.getPicaPlainStreamReader(stream, parameters); break;
      case PICA_NORMALIZED:
        reader = factory.getPicaNormalizedStreamReader(stream, parameters); break;
      case ISO:
      default:
        reader = factory.getIsoStreamReader(stream); break;
    }
    return reader;
  }

  public static MarcReader getStringReader(MarcFormat marcFormat, String content) throws Exception {
    return getStringReader(marcFormat, content, null);
  }

  public static MarcReader getStringReader(MarcFormat marcFormat, String content, CommonParameters parameters) throws Exception {
    InputStream stream = new ByteArrayInputStream(content.getBytes());
    return getStreamReader(marcFormat, stream, parameters);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy