package com.constellio.data.dao.services.transactionLog.reader1;
import java.io.BufferedReader;
import java.io.IOException;
import com.constellio.data.io.services.facades.IOServices;
import com.constellio.data.utils.LazyIterator;
public class ReaderLinesIteratorV1 extends LazyIterator<String> {
boolean wasCarriageReturn = false;
char[] buffer = new char[1];
char carriageReturnChar = '\r';
char lineFeedChar = '\n';
BufferedReader tLogBufferedReader;
IOServices ioServices;
public ReaderLinesIteratorV1(IOServices ioServices, BufferedReader tLogBufferedReader) {
this.ioServices = ioServices;
this.tLogBufferedReader = tLogBufferedReader;
}
@Override
protected String getNextOrNull() {
String nextLine;
try {
nextLine = getNextLine();
} catch (IOException e) {
throw new RuntimeException(e);
}
if (nextLine == null) {
ioServices.closeQuietly(tLogBufferedReader);
}
return nextLine;
}
private String getNextLine()
throws IOException {
StringBuilder stringBuilder = new StringBuilder();
wasCarriageReturn = false;
int response;
while (1 == (response = tLogBufferedReader.read(buffer))) {
if (buffer[0] == carriageReturnChar) {
wasCarriageReturn = true;
} else if (buffer[0] == lineFeedChar && wasCarriageReturn) {
stringBuilder.append("__LINEBREAK__");
} else if (buffer[0] == lineFeedChar) {
break;
} else {
wasCarriageReturn = false;
stringBuilder.append(buffer[0]);
}
}
if (response != 1 && stringBuilder.length() == 0) {
return null;
}
return stringBuilder.toString();
}
}