package info.ephyra.answerselection.filters;
import info.ephyra.io.MsgPrinter;
import info.ephyra.search.Result;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
/**
* <p>The <code>SerializationFilter</code> serializes the results and writes
* them to a file.</p>
*
* <p>This class extends the class <code>Filter</code>.</p>
*
* @author Nico Schlaefer
* @version 2007-07-25
*/
public class SerializationFilter extends Filter {
/** Output file for serialized results. */
private static File serialFile;
// Getters/Setters
public static File getSerialFile() {
return serialFile;
}
public static void setSerialFile(File serialFile) {
SerializationFilter.serialFile = serialFile;
}
/**
* Filters an array of <code>Result</code> objects.
*
* @param results results to filter
* @return filtered results
*/
public Result[] apply(Result[] results) {
// output file set?
if (serialFile == null) return results;
// modify file name if file already exists
// (comment this out to replace existing files)
String path = serialFile.getPath();
File serialFile = new File(path);
if (serialFile.exists()) {
path = serialFile.getPath() + "_2";
serialFile = new File(path);
int i = 2;
while (serialFile.exists()) {
path = serialFile.getPath();
path = path.replaceFirst("_" + i + "$", "_" + ++i);
serialFile = new File(path);
}
}
// serialize results
try {
FileOutputStream fos = new FileOutputStream(serialFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
for (Result result : results) oos.writeObject(result);
oos.close();
} catch (IOException e) {
MsgPrinter.printErrorMsg("Could not write serialized results:");
MsgPrinter.printErrorMsg(e.toString());
System.exit(1);
}
return results;
}
}