trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/dataprocessor/ExternalFilterDataWriter.java
author Matti Laitinen <matti.t.laitinen@nokia.com>
Wed, 23 Jun 2010 14:49:59 +0300
changeset 11 5b9d4d8641ce
permissions -rw-r--r--
TraceViewer 2.6.0

/*
 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:
 *
 * External Filter Data Writer
 *
 */
package com.nokia.traceviewer.engine.dataprocessor;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import com.nokia.traceviewer.engine.TraceProperties;
import com.nokia.traceviewer.engine.TraceViewerGlobals;

/**
 * External Filter Data Writer sends data to Processes output stream
 */
public class ExternalFilterDataWriter {

	/**
	 * Output stream writer
	 */
	private final BufferedWriter writer;

	/**
	 * Constructor
	 * 
	 * @param os
	 *            output stream
	 */
	public ExternalFilterDataWriter(OutputStream os) {
		OutputStreamWriter osw = new OutputStreamWriter(os);
		writer = new BufferedWriter(osw);
	}

	/**
	 * Writes trace to Process input stream
	 * 
	 * @param properties
	 *            trace properties
	 */
	public void writeTrace(TraceProperties properties) {
		try {
			StringBuffer buf = new StringBuffer();
			if (properties.timestampString != null) {
				buf.append(properties.timestampString);
				buf.append(TraceViewerGlobals.getTraceViewer()
						.getDataProcessorAccess().getTimestampParser()
						.getTimeFromPreviousString(
								properties.timeFromPreviousTrace));
				buf.append('\t');
			}
			if (properties.traceString != null) {
				buf.append(properties.traceString);
			}
			buf.append('\n');
			writer.write(buf.toString());

			// Flush when last trace is written
			if (properties.lastTrace) {
				writer.flush();
			}
		} catch (IOException e) {
			// If writing goes wrong, shut down possible progressbar
			e.printStackTrace();
			closeProgressBar();
		}
	}

	/**
	 * Closes progressbar
	 */
	private void closeProgressBar() {
		if (TraceViewerGlobals.getTraceViewer().getDataProcessorAccess()
				.getFilterProcessor().isProcessingFilter()) {

			// Close progressbar
			TraceViewerGlobals.getTraceViewer().getView().closeProgressBar(
					TraceViewerGlobals.getTraceViewer()
							.getDataProcessorAccess().getFilterProcessor()
							.getFilterDialog().getProgressBar());
		}
	}

	/**
	 * Shuts down the writer
	 */
	public void shutDown() {
		try {
			writer.close();
		} catch (IOException e) {
			// If writing goes wrong, shut down possible progressbar
			// e.printStackTrace();
			closeProgressBar();
		}
	}
}