diff -r ed1c9f64298a -r 5b9d4d8641ce trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/TraceViewerEventListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/TraceViewerEventListener.java Wed Jun 23 14:49:59 2010 +0300 @@ -0,0 +1,183 @@ +/* + * 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: + * + * TraceViewer event listener + * + */ +package com.nokia.traceviewer.engine; + +import org.eclipse.ui.PlatformUI; + +import com.nokia.trace.eventrouter.PropertySource; +import com.nokia.trace.eventrouter.TraceEvent; +import com.nokia.trace.eventrouter.TraceEventListener; +import com.nokia.trace.eventrouter.TraceEventRouter; +import com.nokia.traceviewer.TraceViewerPlugin; + +/** + * TraceViewer event listener + * + */ +final class TraceViewerEventListener implements TraceEventListener { + + /** + * Component ID string + */ + private static final String CID_STR = "cid"; //$NON-NLS-1$ + + /** + * Group ID string + */ + private static final String GID_STR = "gid"; //$NON-NLS-1$ + + /** + * Trace ID string + */ + private static final String TID_STR = "tid"; //$NON-NLS-1$ + + /** + * Search trace action string + */ + private static final String SEARCHTRACEACTION = "searchtrace"; //$NON-NLS-1$ + + /* + * (non-Javadoc) + * + * @see + * com.nokia.trace.eventrouter.TraceEventListener#processEvent(com.nokia + * .trace.eventrouter.TraceEvent) + */ + public void processEvent(TraceEvent event) { + if (event.getSource() instanceof PropertySource) { + final PropertySource source = (PropertySource) event.getSource(); + + // This Event is meant for this plugin if the target is the + // ID of this Plugin + if (source.getTargetId().equals(TraceViewerPlugin.PLUGIN_ID)) { + PlatformUI.getWorkbench().getDisplay().asyncExec( + new Runnable() { + + /* + * (non-Javadoc) + * + * @see java.lang.Runnable#run() + */ + public void run() { + handleEvent(source); + } + }); + } + } + } + + /** + * Handles the event + * + * @param source + * propertysource of the event to handle + */ + private void handleEvent(PropertySource source) { + String action = source.getActionName(); + if (action.equals(SEARCHTRACEACTION)) { + handleSearchTraceAction(source); + } else { + // Unknown event action, do nothing + } + } + + /** + * Handles search trace action + * + * @param source + * propertysource of the event to handle + */ + private void handleSearchTraceAction(PropertySource source) { + + // View must exist to use the search functionality + if (TraceViewerGlobals.getTraceViewer().getView() != null) { + String cidStr = source.getProperties().get(CID_STR); + String gidStr = source.getProperties().get(GID_STR); + String tidStr = source.getProperties().get(TID_STR); + + try { + + int cid = Integer.parseInt(cidStr); + + // Get the group ID in a separate method + int gid = getGroupID(cid, gidStr); + + int tid = Integer.parseInt(tidStr); + + // Create the search if ID's are valid + if (gid != -1 && tid != -1) { + TraceViewerGlobals.getTraceViewer() + .getDataProcessorAccess().getSearchProcessor() + .searchTraceWithID(cid, gid, tid); + } + + } catch (NumberFormatException e) { + // If numbers parsing failed, show a error message + String errMsg1 = Messages + .getString("TraceViewerEventListener.InvalidSearchTraceMsg1"); //$NON-NLS-1$ + String errMsg2 = Messages + .getString("TraceViewerEventListener.InvalidSearchTraceMsg2"); //$NON-NLS-1$ + TraceViewerGlobals.getTraceViewer().getDialogs() + .showErrorMessage( + errMsg1 + source.getSourceId() + errMsg2); + } + } + + } + + /** + * Gets group ID from the group string + * + * @param componentId + * component ID + * @param gidStr + * group ID string + * @return group ID or -1 if parsing failed + */ + private int getGroupID(int componentId, String gidStr) { + int groupId = -1; + // First try to parse integer + try { + groupId = Integer.parseInt(gidStr); + + // If parsing failed, string contains the group name. Go ask the ID + // from the DecodeProvider + } catch (NumberFormatException e) { + if (TraceViewerGlobals.getDecodeProvider() != null) { + groupId = TraceViewerGlobals.getDecodeProvider().getGroupId( + componentId, gidStr); + } + } + return groupId; + } + + /** + * Registers itself to the event router + */ + public void register() { + TraceEventRouter.getInstance().addEventListener(this); + } + + /** + * Unregisters itself from the event router + */ + public void unregister() { + TraceEventRouter.getInstance().removeEventListener(this); + } +}