package hu.sztaki.ilab.longneck.process.access;
import hu.sztaki.ilab.longneck.Field;
import hu.sztaki.ilab.longneck.Record;
import hu.sztaki.ilab.longneck.RecordImpl;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.log4j.Logger;
/**
* Source of words set is file.
* One line is one value.
*
*/
public class WordsetFileSource implements Source {
private static final Logger LOG = Logger.getLogger(WordsetFileSource.class);
private static final String DEFAULT_ENCODING = "UTF8"; //default file encoding
private String sourceFile;
private List<String> sourceList;
private static final String COLUMN_FIELD_NAME = "word"; //coulmn-name
@Override
public void init() {
readFile();
}
private void readFile() {
sourceList = Collections.synchronizedList(new ArrayList<String>());
try {
BufferedReader br;
br = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile), DEFAULT_ENCODING));
String line;
while ((line = br.readLine()) != null) {
sourceList.add(line);
}
} catch (UnsupportedEncodingException e) {
LOG.error("Unsupported encoding in " + sourceFile + " wordset file", e);
} catch (FileNotFoundException e) {
LOG.error("Can't read wordset file: " + sourceFile, e);
} catch (IOException e) {
LOG.error("Error when reading wordset file: " + sourceFile, e);
}
}
public String getSourceFile() {
return sourceFile;
}
public void setSourceFile(String sourceFile) {
this.sourceFile = sourceFile;
}
@Override
public Record getRecord() throws NoMoreRecordsException {
if (sourceList == null || sourceList.isEmpty()) {
throw new NoMoreRecordsException();
}
String e = sourceList.remove(0);
if (e == null) {
throw new NoMoreRecordsException();
}
Record result = new RecordImpl();
result.add(new Field(COLUMN_FIELD_NAME, e));
return result;
}
@Override
public void close() {
}
}