trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/api/DecodeHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/api/DecodeHandler.java Wed Jun 23 14:49:59 2010 +0300
@@ -0,0 +1,253 @@
+/*
+ * 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:
+ *
+ * Decode handler handles stuff related to decode files
+ *
+ */
+package com.nokia.traceviewer.api;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import com.nokia.traceviewer.action.OpenDecodeFileAction;
+import com.nokia.traceviewer.api.TraceViewerAPI.TVAPIError;
+import com.nokia.traceviewer.engine.TraceViewerGlobals;
+import com.nokia.traceviewer.engine.TraceViewerUtils;
+import com.nokia.traceviewer.engine.activation.TraceActivationComponentItem;
+
+/**
+ * Decode handler handles stuff related to decode files
+ *
+ */
+final class DecodeHandler {
+
+ /**
+ * Model valid waiting time
+ */
+ private static final long MODEL_VALID_WAITING_TIME = 100;
+
+ /**
+ * Model valid maximum waiting time
+ */
+ private static final long MODEL_VALID_MAX_WAITING_TIME = 5000;
+
+ /**
+ * Decode file not loaded error code
+ */
+ private static final int DECODE_FILE_NOT_LOADED = -2;
+
+ /**
+ * Gets trace component name from the Decode model with a component id
+ *
+ * @param componentId
+ * component ID
+ * @return component name or null if not found or no Decode files are loaded
+ */
+ public String getTraceComponentName(int componentId) {
+ String componentName = null;
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ if (TraceViewerGlobals.getDecodeProvider().isModelLoadedAndValid()) {
+
+ // Returns null if the component is not found
+ componentName = TraceViewerGlobals.getDecodeProvider()
+ .getComponentName(componentId);
+ }
+ }
+
+ return componentName;
+ }
+
+ /**
+ * Gets trace group ID with a group name
+ *
+ * @param componentId
+ * the component ID
+ * @param groupName
+ * the group name
+ * @return trace group ID or -1 if group ID not found or -2 if no Decode
+ * files are loaded
+ */
+ public int getTraceGroupId(int componentId, String groupName) {
+ int groupId = DECODE_FILE_NOT_LOADED;
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ if (TraceViewerGlobals.getDecodeProvider().isModelLoadedAndValid()) {
+
+ // Returns -1 if the group is not found
+ groupId = TraceViewerGlobals.getDecodeProvider().getGroupId(
+ componentId, groupName);
+ }
+ }
+
+ return groupId;
+ }
+
+ /**
+ * Gets trace group name from the Decode model with a component and group
+ * ids
+ *
+ * @param componentId
+ * component ID
+ * @param groupId
+ * group ID
+ * @return group name or null if not found or no Decode files are loaded
+ */
+ public String getTraceGroupName(int componentId, int groupId) {
+ String groupName = null;
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ if (TraceViewerGlobals.getDecodeProvider().isModelLoadedAndValid()) {
+
+ // Returns null if the component is not found
+ groupName = TraceViewerGlobals.getDecodeProvider()
+ .getGroupName(componentId, groupId);
+ }
+ }
+
+ return groupName;
+ }
+
+ /**
+ * Gets trace name from the Decode model with a component, group and trace
+ * IDs
+ *
+ * @param componentId
+ * component ID
+ * @param groupId
+ * group ID
+ * @param traceId
+ * trace ID
+ * @return trace name or null if not found or no Decode files are loaded
+ */
+ public String getTraceName(int componentId, int groupId, int traceId) {
+ String traceName = null;
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ if (TraceViewerGlobals.getDecodeProvider().isModelLoadedAndValid()) {
+
+ // Returns null if the component is not found
+ traceName = TraceViewerGlobals.getDecodeProvider()
+ .getTraceName(componentId, groupId, traceId);
+ }
+ }
+
+ return traceName;
+ }
+
+ /**
+ * Loads decode file to the decode model. User must remember that loading
+ * the decode file can take some time and this function will block until the
+ * model is loaded or a maximum of 5 seconds.
+ *
+ * @param decodeFilePath
+ * absolute path to the decode file. Path must be in correct
+ * format for any operating system (Windows, Linux)
+ * @param deleteExistingModel
+ * if true, old decode model is removed before this decode file
+ * is loaded
+ * @return error code from TraceViewerAPI
+ */
+ public TVAPIError loadDecodeFile(String decodeFilePath,
+ boolean deleteExistingModel) {
+ TVAPIError errorCode = TVAPIError.DECODE_PROVIDER_PLUGIN_MISSING;
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ errorCode = TVAPIError.NONE;
+ File file = new File(decodeFilePath);
+
+ // Check that file exists
+ if (file.exists()) {
+
+ // TraceViewer view is visible, use it
+ if (TraceViewerGlobals.getTraceViewer().getView() != null
+ && !TraceViewerGlobals.getTraceViewer().getView()
+ .isDisposed()) {
+
+ OpenDecodeFileAction action = (OpenDecodeFileAction) TraceViewerGlobals
+ .getTraceViewer().getView().getActionFactory()
+ .getOpenDecodeFileAction();
+ action.loadFilesToModel(new String[] { decodeFilePath },
+ deleteExistingModel);
+
+ // No TraceViewer view available, use API
+ } else {
+ // Open the decode file
+ TraceViewerGlobals.getDecodeProvider().openDecodeFile(
+ decodeFilePath, null, deleteExistingModel);
+
+ // Wait until model is ready and loaded or maximum of five
+ // seconds
+ long startTime = System.currentTimeMillis();
+ while (!TraceViewerGlobals.getDecodeProvider()
+ .isModelLoadedAndValid()
+ && startTime + MODEL_VALID_MAX_WAITING_TIME > System
+ .currentTimeMillis()) {
+ try {
+ Thread.sleep(MODEL_VALID_WAITING_TIME);
+ } catch (InterruptedException e) {
+ }
+ }
+
+ // Refresh the view
+ refreshViewAfterDecodeFileLoad();
+ }
+
+ // File doesn't exist
+ } else {
+ errorCode = TVAPIError.FILE_DOES_NOT_EXIST;
+ }
+ }
+
+ return errorCode;
+ }
+
+ /**
+ * Refresh the view after Decode file has been loaded
+ */
+ private void refreshViewAfterDecodeFileLoad() {
+
+ // Refresh the view
+ if (TraceViewerGlobals.getTraceViewer().getView() != null) {
+
+ // Check if reading from the start is needed
+ if (TraceViewerUtils.isReadingFromStartNeeded()) {
+ TraceViewerGlobals.getTraceViewer().readDataFileFromBeginning();
+
+ // Refresh the current view
+ } else {
+ TraceViewerGlobals.getTraceViewer().getView()
+ .refreshCurrentView();
+ }
+ }
+ }
+
+ /**
+ * Gets components from all loaded Dictionaries
+ *
+ * @return list of components from all loaded Dictionaries. List can be
+ * empty.
+ */
+ public ArrayList<TraceActivationComponentItem> getDictionaryComponents() {
+ ArrayList<TraceActivationComponentItem> components = new ArrayList<TraceActivationComponentItem>();
+
+ if (TraceViewerGlobals.getDecodeProvider() != null) {
+ components = TraceViewerGlobals.getDecodeProvider()
+ .getActivationInformation(true);
+ }
+
+ return components;
+ }
+}