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