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

de.gwdg.metadataqa.marc.utils.marcreader.LineSeparatedMarcReader Maven / Gradle / Ivy

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

import org.marc4j.MarcReader;
import org.marc4j.MarcStreamReader;
import org.marc4j.marc.Record;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LineSeparatedMarcReader implements MarcReader {

  private static final Logger logger = Logger.getLogger(LineSeparatedMarcReader.class.getCanonicalName());

  private BufferedReader bufferedReader = null;
  private String line = null;
  private boolean nextIsConsumed = false;
  private int lineNumber = 0;

  public LineSeparatedMarcReader(String lineSeparatedMarc) {
    try {
      bufferedReader = new BufferedReader(new FileReader(lineSeparatedMarc));
    } catch (FileNotFoundException e) {
      logger.log(Level.WARNING, "error in LineSeparatedMarcReader()", e);
    }
  }

  public LineSeparatedMarcReader(InputStream in) {
    bufferedReader = new BufferedReader(new InputStreamReader(in));
  }

  @Override
  public boolean hasNext() {
    if (lineNumber == 0 || nextIsConsumed) {
      try {
        line = bufferedReader.readLine();
      } catch (IOException e) {
        logger.log(Level.WARNING, "error in hasNext()", e);
      }
      lineNumber++;
      nextIsConsumed = false;
    }
    return (line != null);
  }

  @Override
  public Record next() {
    InputStream is = new ByteArrayInputStream(line.getBytes());
    MarcReader reader = new MarcStreamReader(is);
    Record marc4jRecord = null;
    if (reader.hasNext()) {
      marc4jRecord = reader.next();
    }
    nextIsConsumed = true;
    return marc4jRecord;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy