MtasUpdateRequestProcessorResultReader.java
- package mtas.solr.update.processor;
- import java.io.Closeable;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.util.Iterator;
- import java.util.NoSuchElementException;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- /**
- * The Class MtasUpdateRequestProcessorResultReader.
- */
- public class MtasUpdateRequestProcessorResultReader implements Closeable {
- /** The Constant log. */
- private static final Log log = LogFactory
- .getLog(MtasUpdateRequestProcessorResultReader.class);
- /** The stored string value. */
- private String storedStringValue;
- /** The file input stream. */
- private FileInputStream fileInputStream;
- /** The object input stream. */
- private ObjectInputStream objectInputStream;
- /** The file. */
- private File file;
- /** The iterator. */
- private Iterator<MtasUpdateRequestProcessorResultItem> iterator;
- /** The closed. */
- private boolean closed;
- /**
- * Instantiates a new mtas update request processor result reader.
- *
- * @param fileName the file name
- * @throws IOException Signals that an I/O exception has occurred.
- */
- public MtasUpdateRequestProcessorResultReader(String fileName)
- throws IOException {
- file = null;
- fileInputStream = null;
- objectInputStream = null;
- closed = false;
- iterator = null;
- if (fileName != null) {
- file = new File(fileName);
- fileInputStream = new FileInputStream(file);
- objectInputStream = new ObjectInputStream(fileInputStream);
- try {
- Object o = objectInputStream.readObject();
- if (o instanceof String) {
- storedStringValue = (String) o;
- } else {
- throw new IOException("invalid tokenStream");
- }
- iterator = new Iterator<MtasUpdateRequestProcessorResultItem>() {
- MtasUpdateRequestProcessorResultItem next = null;
- @Override
- public boolean hasNext() {
- if (!closed) {
- if (next != null) {
- return true;
- } else {
- next = getNext();
- return next != null;
- }
- } else {
- return false;
- }
- }
- @Override
- public MtasUpdateRequestProcessorResultItem next() {
- if (!closed) {
- MtasUpdateRequestProcessorResultItem result;
- if (next != null) {
- result = next;
- next = null;
- return result;
- } else {
- next = getNext();
- if (next != null) {
- result = next;
- next = null;
- return result;
- } else {
- throw new NoSuchElementException();
- }
- }
- } else {
- throw new NoSuchElementException();
- }
- }
- private MtasUpdateRequestProcessorResultItem getNext() {
- if (!closed) {
- try {
- Object o = objectInputStream.readObject();
- if (o instanceof MtasUpdateRequestProcessorResultItem) {
- return (MtasUpdateRequestProcessorResultItem) o;
- } else {
- forceClose();
- return null;
- }
- } catch (ClassNotFoundException | IOException e) {
- log.debug(e.getClass().getSimpleName()
- + " while retrieving data from " + fileName, e);
- forceClose();
- return null;
- }
- } else {
- return null;
- }
- }
- };
- } catch (IOException e) {
- log.error(e.getClass().getSimpleName() + " while processing " + fileName
- + " (" + e.getMessage() + ")", e);
- forceClose();
- throw new IOException(e.getMessage());
- } catch (ClassNotFoundException e) {
- log.error(e.getClass().getSimpleName() + " while processing " + fileName
- + " (" + e.getMessage() + ")", e);
- forceClose();
- throw new IOException("invalid tokenStream");
- }
- }
- }
- /**
- * Gets the stored string value.
- *
- * @return the stored string value
- */
- public String getStoredStringValue() {
- return storedStringValue;
- }
- /**
- * Gets the stored bin value.
- *
- * @return the stored bin value
- */
- public byte[] getStoredBinValue() {
- return new byte[0];
- }
- /**
- * Gets the iterator.
- *
- * @return the iterator
- */
- public Iterator<MtasUpdateRequestProcessorResultItem> getIterator() {
- return iterator;
- }
- /*
- * (non-Javadoc)
- *
- * @see java.io.Closeable#close()
- */
- @Override
- public void close() throws IOException {
- forceClose();
- }
- /**
- * Force close.
- */
- private void forceClose() {
- if (file != null) {
- if (file.exists() && file.canWrite() && !file.delete()) {
- log.debug("couldn't delete " + file.getName());
- }
- file = null;
- }
- try {
- objectInputStream.close();
- } catch (IOException e) {
- log.debug(e);
- }
- closed = true;
- }
- }