diff -r ed1c9f64298a -r 5b9d4d8641ce trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/dataprocessor/VariableTracingProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/traceviewer/com.nokia.traceviewer/src/com/nokia/traceviewer/engine/dataprocessor/VariableTracingProcessor.java Wed Jun 23 14:49:59 2010 +0300 @@ -0,0 +1,288 @@ +/* + * 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: + * + * VariableTracingProcessor DataProcessor + * + */ +package com.nokia.traceviewer.engine.dataprocessor; + +import java.util.ArrayList; +import java.util.List; + +import com.nokia.traceviewer.TraceViewerPlugin; +import com.nokia.traceviewer.action.TraceViewerActionUtils; +import com.nokia.traceviewer.dialog.VariableTracingDialog; +import com.nokia.traceviewer.dialog.treeitem.TreeItem; +import com.nokia.traceviewer.dialog.treeitem.TreeItemContentProvider; +import com.nokia.traceviewer.dialog.treeitem.TreeItemListener; +import com.nokia.traceviewer.dialog.treeitem.VariableTracingTreeBaseItem; +import com.nokia.traceviewer.dialog.treeitem.VariableTracingTreeItem; +import com.nokia.traceviewer.dialog.treeitem.VariableTracingTreeTextItem; +import com.nokia.traceviewer.engine.TraceProperties; +import com.nokia.traceviewer.engine.TraceViewerGlobals; +import com.nokia.traceviewer.engine.TraceViewerPropertyViewInterface; +import com.nokia.traceviewer.engine.TraceViewerDialogInterface.Dialog; +import com.nokia.traceviewer.engine.preferences.PreferenceConstants; +import com.nokia.traceviewer.engine.preferences.XMLVariableTracingConfigurationImporter; + +/** + * VariableTracing DataProcessor + * + */ +public final class VariableTracingProcessor implements DataProcessor { + + /** + * Interval how often to update progressbar + */ + private static final int PROGRESSBAR_UPDATE_INTERVAL = 100; + + /** + * Variable Tracing dialog used in setting rules + */ + private VariableTracingDialog variableTracingDialog; + + /** + * Content provider for the dialog + */ + private TreeItemContentProvider contentProvider; + + /** + * First visible object in the dialog tree + */ + private TreeItem root; + + /** + * List of variable tracing items + */ + private final List variableTracingItems; + + /** + * Text rules that are applied + */ + private final List textRules; + + /** + * Constructor + */ + public VariableTracingProcessor() { + createInitialTree(); + variableTracingItems = new ArrayList(); + textRules = new ArrayList(); + + } + + /** + * Creates initial tree + */ + public void createInitialTree() { + contentProvider = new TreeItemContentProvider(); + // Create root node + TreeItem treeRoot = new VariableTracingTreeBaseItem(contentProvider, + null, "root", VariableTracingTreeItem.Rule.GROUP); //$NON-NLS-1$ + root = new VariableTracingTreeBaseItem(contentProvider, treeRoot, + TraceViewerPlugin.getDefault().getPreferenceStore().getString( + PreferenceConstants.CONFIGURATION_FILE), + VariableTracingTreeItem.Rule.GROUP); + treeRoot.addChild(root); + } + + /** + * Imports line count rules from configuration file + */ + public void importVariableTracingRules() { + // Import rules + XMLVariableTracingConfigurationImporter importer = new XMLVariableTracingConfigurationImporter( + root, TraceViewerPlugin.getDefault().getPreferenceStore() + .getString(PreferenceConstants.CONFIGURATION_FILE), + true); + importer.importData(); + } + + /* + * (non-Javadoc) + * + * @see + * com.nokia.traceviewer.engine.DataProcessor#processData(com.nokia.traceviewer + * .engine.TraceProperties) + */ + public void processData(TraceProperties properties) { + if (!properties.traceConfiguration.isScrolledTrace() + && !properties.traceConfiguration.isFilteredOut() + && !properties.traceConfiguration.isTriggeredOut()) { + int len = variableTracingItems.size(); + if (len > 0) { + + // Loop through variable tracing items + VariableTracingItem item; + for (int i = 0; i < len; i++) { + item = variableTracingItems.get(i); + + String traceLine = ""; //$NON-NLS-1$ + + // Traces missing + if (properties.bTraceInformation.isTraceMissing()) { + traceLine = TraceViewerActionUtils.TRACES_DROPPED_MSG; + } + if (properties.traceString != null) { + traceLine += properties.traceString; + } + + String rule = item.getTextToCompare(); + if (rule == null) { + break; + } + + String checkString = traceLine; + if (!item.isMatchCase()) { + checkString = checkString.toLowerCase(); + } + + // Line hits + if (checkString.contains(rule)) { + VariableTracingEvent event = new VariableTracingEvent( + item, + properties.timestampString, + traceLine.substring(checkString.indexOf(rule) + + rule.length()), + TraceViewerGlobals.getTraceViewer() + .getDataReaderAccess() + .getCurrentDataReader().getTraceCount(), + properties.information); + item.addEvent(event); + item.setChanged(true); + TraceViewerPropertyViewInterface view = TraceViewerGlobals + .getTraceViewer().getPropertyView(); + if (view != null) { + view.setVariableTracingTableChanged(); + } + } + } + + // Update progressbar if needed + updateProgressBar(); + } + } + } + + /** + * Update progressbar if needed + */ + private void updateProgressBar() { + // Update possible progressBar + if (isProcessingTracing() + && TraceViewerGlobals.getTraceViewer().getDataReaderAccess() + .getCurrentDataReader().getTraceCount() + % PROGRESSBAR_UPDATE_INTERVAL == 0) { + + variableTracingDialog.getProgressBar().updateProgressBar( + TraceViewerGlobals.getTraceViewer().getDataReaderAccess() + .getCurrentDataReader().getTraceCount()); + } + } + + /** + * Tells if initial tracing is in process + * + * @return true if initial tracing is in progress + */ + public boolean isProcessingTracing() { + return (variableTracingDialog != null + && variableTracingDialog.getProgressBar() != null + && variableTracingDialog.getProgressBar().getShell() != null && !variableTracingDialog + .getProgressBar().getShell().isDisposed()); + } + + /** + * Gets variable tracing dialog + * + * @return variable tracing dialog + */ + public VariableTracingDialog getVariableTracingDialog() { + if (variableTracingDialog == null) { + variableTracingDialog = (VariableTracingDialog) TraceViewerGlobals + .getTraceViewer().getDialogs().createDialog( + Dialog.VARIABLETRACING); + } + return variableTracingDialog; + } + + /** + * Gets root of the tree + * + * @return root + */ + public TreeItem getRoot() { + return root; + } + + /** + * Gets item listener + * + * @return the contentProvider + */ + public TreeItemListener getTreeItemListener() { + return contentProvider; + } + + /** + * Gets VariableTracingItems + * + * @return the VariableTracingItems + */ + public List getVariableTracingItems() { + return variableTracingItems; + } + + /** + * Empty variablesTracingItems + */ + public void emptyVariableTracingItems() { + for (int i = 0; i < variableTracingItems.size(); i++) { + variableTracingItems.get(i).clear(); + variableTracingItems.get(i).setChanged(true); + } + } + + /** + * Gets text rules + * + * @return text rules + */ + public List getTextRules() { + return textRules; + } + + /** + * Enable variabletracing rule + * + * @param item + * the rule item + */ + public void enableRule(VariableTracingTreeItem item) { + if (item instanceof VariableTracingTreeTextItem) { + VariableTracingTreeTextItem item2 = (VariableTracingTreeTextItem) item; + VariableTracingItem newItem = new VariableTracingItem(item2 + .getName(), item2.getText(), item2.isMatchCase(), item2 + .getHistoryCount()); + textRules.add((VariableTracingTreeTextItem) item); + variableTracingItems.add(newItem); + } + + if (TraceViewerGlobals.getTraceViewer().getPropertyView() != null) { + TraceViewerGlobals.getTraceViewer().getPropertyView() + .createNewPropertyTableItems(); + } + } +} \ No newline at end of file