package nl.uva.sc.parser;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import nl.uva.sc.datatypes.Line;
import nl.uva.sc.datatypes.Word;
import nl.uva.sc.parser.subscriber.BookParserSubscriber;
import nl.uva.sc.parser.subscriber.ParserSubscribers;
public class BookParser {
private final ParserSubscribers mSubscribers = new ParserSubscribers();
public void parse(final Path bookFilePath, final Charset encoding) throws IOException {
byte[] b = Files.readAllBytes(bookFilePath);
ByteBuffer bb = ByteBuffer.wrap(b);
CharBuffer cb = encoding.decode(bb);
String line = cb.toString();
Line currentLine = new Line(line);
for (Word word : currentLine.getWords()) {
handleWord(word);
}
}
private void handleWord(final Word word) {
if (!word.isEmpty()) {
mSubscribers.notifyListener(word);
}
}
public boolean subscribe(final BookParserSubscriber subscriber) {
return mSubscribers.subscribe(subscriber);
}
public boolean unsubscribe(final BookParserSubscriber subscriber) {
return mSubscribers.unsubscribe(subscriber);
}
}