git-svn-id: https://hyracks.googlecode.com/svn/branches/fullstack_genomix@2778 123451ca-8445-de46-9d55-352943316053
diff --git a/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java
new file mode 100644
index 0000000..da85170
--- /dev/null
+++ b/genomix/genomix-core/src/main/java/edu/uci/ics/genomix/dataflow/PrinterOperatorDescriptor.java
@@ -0,0 +1,113 @@
+package edu.uci.ics.genomix.dataflow;
+
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.IOpenableDataWriter;
+import edu.uci.ics.hyracks.api.dataflow.IOperatorNodePushable;
+import edu.uci.ics.hyracks.api.dataflow.value.IRecordDescriptorProvider;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.job.IOperatorDescriptorRegistry;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.base.IOpenableDataWriterOperator;
+import edu.uci.ics.hyracks.dataflow.std.util.DeserializedOperatorNodePushable;
+import edu.uci.ics.hyracks.dataflow.std.util.StringSerializationUtils;
+
+public class PrinterOperatorDescriptor extends AbstractSingleActivityOperatorDescriptor {
+ private static final long serialVersionUID = 1L;
+ private String filename;
+ private boolean writeFile;
+ private BufferedWriter writer;
+ private FileOutputStream stream;
+
+ public PrinterOperatorDescriptor(IOperatorDescriptorRegistry spec) {
+ super(spec, 1, 0);
+ writeFile = false;
+ }
+
+ public PrinterOperatorDescriptor(IOperatorDescriptorRegistry spec, String filename) {
+ super(spec, 1, 0);
+ this.filename = filename;
+ writeFile = true;
+ }
+
+ private class PrinterOperator implements IOpenableDataWriterOperator {
+
+ private int partition;
+ public PrinterOperator(int partition){
+ this.partition = partition;
+ }
+
+ @Override
+ public void open() throws HyracksDataException {
+ if( true == writeFile){
+ try {
+ filename = filename + String.valueOf(partition)+".txt";
+ //System.err.println(filename);
+ stream = new FileOutputStream(filename);
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ writer = new BufferedWriter(new OutputStreamWriter(stream));
+ }
+ }
+
+ @Override
+ public void close() throws HyracksDataException {
+ //System.err.println("kick");
+ if( true == writeFile){
+ try {
+ writer.close();
+ stream.close();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public void fail() throws HyracksDataException {
+ }
+
+ @Override
+ public void writeData(Object[] data) throws HyracksDataException {
+ try{
+ if(true == writeFile){
+ for (int i = 0; i < data.length; ++i) {
+ writer.write(String.valueOf(data[i]));
+ writer.write(", ");
+ writer.write("\n");
+ }
+ }
+ else{
+ for (int i = 0; i < data.length; ++i) {
+ System.err.print(StringSerializationUtils.toString(data[i]));
+ System.err.print(", ");
+ }
+ System.err.println();
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void setDataWriter(int index, IOpenableDataWriter<Object[]> writer) {
+ throw new IllegalArgumentException();
+ }
+ }
+
+ @Override
+ public IOperatorNodePushable createPushRuntime(IHyracksTaskContext ctx,
+ IRecordDescriptorProvider recordDescProvider, int partition, int nPartitions) {
+ return new DeserializedOperatorNodePushable(ctx, new PrinterOperator(partition),
+ recordDescProvider.getInputRecordDescriptor(getActivityId(), 0));
+ }
+}
\ No newline at end of file