trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/api/ViewHandler.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:
 *
 * View handler handles operations that require TraceViewer view 
 *
 */
package com.nokia.traceviewer.api;

import org.eclipse.ui.PlatformUI;

import com.nokia.traceviewer.api.TraceViewerAPI.TVAPIError;
import com.nokia.traceviewer.engine.TraceViewerGlobals;

/**
 * View handler handles operations that require TraceViewer view
 */
final class ViewHandler {

	/**
	 * Private variable to be able to change it in inner class
	 */
	private TVAPIError syncToTimestampRet;

	/**
	 * Stops or restarts the TraceViewer view update
	 * 
	 * @param stop
	 *            if true, stops the view update. If false, restarts the update.
	 */
	public void stopViewUpdate(boolean stop) {
		if (TraceViewerGlobals.getTraceViewer().getView() != null) {
			TraceViewerGlobals.getTraceViewer().getView().stopViewUpdate(stop);
		}
	}

	/**
	 * Syncs to timestamp in the TraceViewer view. If both start and end
	 * timestamps are given, the range is selected. This function assumes that
	 * the traces in the TraceViewer view are in chronological order. Also,
	 * endTimestamp must always be "bigger" than startTimestamp
	 * 
	 * @param startTimestamp
	 *            start timestamp in the format of hh:mm:ss.SSS
	 * @param endTimestamp
	 *            end timestamp in the format of hh:mm:ss.SSS or null if only
	 *            start timestamp is searched for
	 * @return error code from TraceViewerAPI
	 */
	public TVAPIError syncToTimestamp(final String startTimestamp,
			final String endTimestamp) {
		syncToTimestampRet = TVAPIError.NONE;

		if (TraceViewerGlobals.getTraceViewer().getView() != null) {

			PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {

				/*
				 * (non-Javadoc)
				 * 
				 * @see java.lang.Runnable#run()
				 */
				public void run() {

					// Check that the view is not disposed
					if (!TraceViewerGlobals.getTraceViewer().getView()
							.isDisposed()) {

						// Start searching for the timestamp(s)
						TraceViewerGlobals.getTraceViewer()
								.getDataProcessorAccess().getSearchProcessor()
								.searchTraceWithTimestamp(startTimestamp,
										endTimestamp);
					} else {
						syncToTimestampRet = TVAPIError.TRACE_VIEW_NOT_OPEN;
					}

				}
			});

		} else {
			syncToTimestampRet = TVAPIError.TRACE_VIEW_NOT_OPEN;
		}

		return syncToTimestampRet;
	}

	/**
	 * Syncs to trace in the TraceViewer view
	 * 
	 * @param startTrace
	 *            start trace number
	 * @param endTrace
	 *            end trace number of 0 if only start trace is searched for
	 * @return error code from TraceViewerAPI
	 */
	public TVAPIError syncToTrace(int startTrace, int endTrace) {
		TVAPIError ret = TVAPIError.NONE;

		if (TraceViewerGlobals.getTraceViewer().getView() != null) {
			int start = startTrace;
			int end = endTrace;

			// Decrease lines by one because actually traces start from index 0
			if (start > 0) {
				start--;
			}
			if (end > 0) {
				end--;
			}

			// Highlight lines
			TraceViewerGlobals.getTraceViewer().getView().highlightLines(start,
					end, true);

		} else {
			ret = TVAPIError.TRACE_VIEW_NOT_OPEN;
		}

		return ret;
	}

}