MtasUpdateRequestProcessorResultWriter.java
package mtas.solr.update.processor;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.util.BytesRef;
/**
* The Class MtasUpdateRequestProcessorResultWriter.
*/
public class MtasUpdateRequestProcessorResultWriter implements Closeable {
/** The Constant log. */
private static final Log log = LogFactory
.getLog(MtasUpdateRequestProcessorResultWriter.class);
/** The object output stream. */
private ObjectOutputStream objectOutputStream;
/** The file output stream. */
private FileOutputStream fileOutputStream;
/** The closed. */
private boolean closed;
/** The token number. */
private int tokenNumber;
/** The file. */
private File file;
/**
* Instantiates a new mtas update request processor result writer.
*
* @param value the value
*/
public MtasUpdateRequestProcessorResultWriter(String value) {
closed = false;
tokenNumber = 0;
file = null;
fileOutputStream = null;
objectOutputStream = null;
try {
file = File.createTempFile("MtasUpdateRequestProcessorResult", ".data");
fileOutputStream = new FileOutputStream(file);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(value);
} catch (IOException e) {
forceCloseAndDelete();
log.debug(e);
}
}
/**
* Adds the item.
*
* @param term the term
* @param offsetStart the offset start
* @param offsetEnd the offset end
* @param posIncr the pos incr
* @param payload the payload
* @param flags the flags
*/
public void addItem(String term, Integer offsetStart, Integer offsetEnd,
Integer posIncr, BytesRef payload, Integer flags) {
if (!closed) {
tokenNumber++;
MtasUpdateRequestProcessorResultItem item = new MtasUpdateRequestProcessorResultItem(
term, offsetStart, offsetEnd, posIncr, payload, flags);
try {
objectOutputStream.writeObject(item);
objectOutputStream.reset();
objectOutputStream.flush();
} catch (IOException e) {
forceCloseAndDelete();
log.debug(e);
}
}
}
/**
* Gets the token number.
*
* @return the token number
*/
public int getTokenNumber() {
return tokenNumber;
}
/**
* Gets the file name.
*
* @return the file name
* @throws IOException Signals that an I/O exception has occurred.
*/
public String getFileName() throws IOException {
if (file != null) {
return file.getAbsolutePath();
} else {
throw new IOException("no file");
}
}
/*
* (non-Javadoc)
*
* @see java.io.Closeable#close()
*/
@Override
public void close() throws IOException {
if (!closed) {
objectOutputStream.close();
fileOutputStream.close();
closed = true;
}
}
/**
* Force close and delete.
*/
public void forceCloseAndDelete() {
try {
if (objectOutputStream != null) {
objectOutputStream.close();
objectOutputStream = null;
}
if (fileOutputStream != null) {
fileOutputStream.close();
fileOutputStream = null;
}
} catch (IOException e) {
log.debug(e);
}
closed = true;
tokenNumber = 0;
if (file != null) {
if (file.exists() && file.canWrite() && !file.delete()) {
log.debug("couldn't delete " + file.getName());
}
file = null;
}
}
}