trace/traceanalyser/com.nokia.s60tools.traceanalyser/src/com/nokia/s60tools/traceanalyser/ui/views/MainView.java
/*
* Copyright (c) 2009 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:
*
*/
package com.nokia.s60tools.traceanalyser.ui.views;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Timer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.*;
import org.eclipse.swt.widgets.Menu;
import com.nokia.s60tools.traceanalyser.containers.RuleInformation;
import com.nokia.s60tools.traceanalyser.export.ITraceAnalyserRuleType;
import com.nokia.s60tools.traceanalyser.export.RuleEvent;
import com.nokia.s60tools.traceanalyser.export.TraceAnalyserRule;
import com.nokia.s60tools.traceanalyser.interfaces.ITraceAnalyserFileObserver;
import com.nokia.s60tools.traceanalyser.model.Engine;
import com.nokia.s60tools.traceanalyser.plugin.TraceAnalyserPlugin;
import com.nokia.s60tools.traceanalyser.resources.ImageKeys;
import com.nokia.s60tools.traceanalyser.resources.ImageResourceManager;
import com.nokia.s60tools.traceanalyser.ui.dialogs.EditRuleDialog;
import com.nokia.s60tools.traceanalyser.ui.editors.HistoryEditor;
import com.nokia.s60tools.traceanalyser.ui.editors.HistoryEditorInput;
import com.nokia.s60tools.ui.S60ToolsTable;
import com.nokia.s60tools.ui.S60ToolsTableColumnData;
import com.nokia.s60tools.ui.S60ToolsTableFactory;
import com.nokia.traceviewer.api.TraceViewerAPI;
import com.nokia.traceviewer.api.TraceViewerAPI.TVAPIError;
/**
* <p>
* MainView.
* The main view of Trace Analyser Carbide extension.
* <p>
*/
public class MainView extends ViewPart implements ITraceAnalyserFileObserver, SelectionListener, ActionListener, KeyListener {
/* TraceViewers ID */
public static final String TRACE_VIEWER_VIEW_ID = "com.nokia.traceviewer.view.TraceViewerView";
/* Main view's ID */
public static final String ID = "com.nokia.s60tools.traceanalyser.ui.views.MainView";
private static final int TAB_INDEX_RULE_LIST = 0;
private static final int TAB_INDEX_FAIL_LOG =1;
/* Table Viewers for both main view's tables. */
private CheckboxTableViewer viewerRuleTable;
private TableViewer viewerFailLogTable;
/* content providers for both main view's tables */
private RuleTableContentProvider contentProviderRuleTable;
private FailLogTableContentProvider contentProviderFailLogTable;
/* actions */
private Action doubleClickAction;
private Action actionCopyRule;
/* rule view actions */
private Action actionDeleteRule;
private Action actionClearOneRuleCounters;
private Action actionClearAllCounters;
private Action actionCreateNewRule;
private Action actionEditRule;
private Action actionShowHistory;
/* fail log actions */
private Action actionClearFailLog;
private Action actionShowInTraceViewer;
/* list of rule types */
ArrayList<ITraceAnalyserRuleType> ruleTypes;
/* composites for both tabs */
private Composite compositeRules;
private Composite compositeFailLog;
/* Tab Folder for main view */
TabFolder tabFolder;
/* Trace Analyser engine */
Engine engine;
/* Timer that is used when blinking icon */
Timer timer;
/* count of how many times icon is blinked */
int blinkCount;
/* Arraylist containing all open editor views */
ArrayList<HistoryEditor> openEditors;
/**
* The constructor.
*/
public MainView() {
ruleTypes = new ArrayList<ITraceAnalyserRuleType>();
engine = TraceAnalyserPlugin.getEngine();
TraceAnalyserPlugin.setMainView(this);
ruleTypes = engine.getRuleTypes();
blinkCount = 0;
openEditors = new ArrayList<HistoryEditor>();
}
/**
* showAndReturnYourself.
* Makes main view visible and returns an instance of itself. Can be called from
* an UI thread only.
* @return instance of main view
*/
public static MainView showAndReturnYourself() {
return showAndReturnYourself(false);
}
/**
* showAndReturnYourself.
* Makes main view visible and returns an instance of itself. Can be called from
* an UI thread only.
* @return instance of main view
*/
public static MainView showAndReturnYourself(boolean openOnly) {
try {
IWorkbenchWindow ww = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (ww == null)
return null;
IWorkbenchPage page = ww.getActivePage();
IWorkbenchPart currentPart = page.getActivePart();
// Checking if view is already open
IViewReference[] viewRefs = page.getViewReferences();
for (int i = 0; i < viewRefs.length; i++) {
IViewReference reference = viewRefs[i];
String id = reference.getId();
if(id.equalsIgnoreCase(MainView.ID)){
// Found, restoring the view
IViewPart viewPart = reference.getView(true);
if (!openOnly)
page.activate(viewPart);
return (MainView)viewPart;
}
}
// View was not found, opening it up as a new view.
MainView mView = (MainView)page.showView(MainView.ID);
if (openOnly)
page.bringToTop(currentPart);
return mView;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* This is a callback that will allow us
* to create the viewer and initialize it.
*/
public void createPartControl(Composite parent) {
createTabControls(parent);
createFailLogTable();
createRuleTable();
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewerRuleTable.getControl(), "com.nokia.s60tools.traceanalyser.viewer");
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
refreshRuleContentAndViewAsynch();
refreshFailLogContentAndViewAsynch();
readActivationStatus();
setHelps();
}
/**
* Creates Tab controls
* @param parent composite where tab controls are placed.
*/
private void createTabControls(Composite parent){
// create tab folder.
tabFolder = new TabFolder (parent, SWT.DOWN);
tabFolder.addSelectionListener(this);
// create rule composite
compositeRules = new Composite(tabFolder, SWT.NONE);
GridLayout layoutCompositeRules = new GridLayout();
layoutCompositeRules.numColumns = 1;
compositeRules.setLayout(layoutCompositeRules);
// create fail log composite
compositeFailLog = new Composite(tabFolder, SWT.NONE);
GridLayout layoutCompositeFailLog = new GridLayout();
layoutCompositeFailLog.numColumns = 1;
compositeFailLog.setLayout(layoutCompositeFailLog);
// create tab items
TabItem item = new TabItem (tabFolder, SWT.NONE);
item.setText ("Trace Analyser rules");
item.setControl(compositeRules);
tabFolder.pack();
TabItem item2 = new TabItem (tabFolder, SWT.NONE);
item2.setText ("Fail Log");
item2.setControl(compositeFailLog);
tabFolder.pack();
}
/**
* Creates fail log table
*/
private void createFailLogTable(){
// Create fail log table
ArrayList<S60ToolsTableColumnData> failLogColumnArrayList = new ArrayList<S60ToolsTableColumnData>();
failLogColumnArrayList.add(new S60ToolsTableColumnData("Time", 150, 0, FailLogTableDataSorter.TIME));
failLogColumnArrayList.add(new S60ToolsTableColumnData("Rule", 175, 1, FailLogTableDataSorter.RULE));
failLogColumnArrayList.add(new S60ToolsTableColumnData("Violation", 75, 2, FailLogTableDataSorter.VIOLATION));
failLogColumnArrayList.add(new S60ToolsTableColumnData("Limit", 75, 3, FailLogTableDataSorter.LIMIT));
S60ToolsTableColumnData[] columnDataTableFailLog = failLogColumnArrayList.toArray(new S60ToolsTableColumnData[0]);
S60ToolsTable tableFailLog = S60ToolsTableFactory.create(compositeFailLog, columnDataTableFailLog);
viewerFailLogTable = new TableViewer(tableFailLog.getTableInstance());
contentProviderFailLogTable = new FailLogTableContentProvider(engine);
viewerFailLogTable.setContentProvider(contentProviderFailLogTable);
viewerFailLogTable.setLabelProvider(new FailLogTableLabelProvider());
viewerFailLogTable.setComparator(new FailLogTableDataSorter());
viewerFailLogTable.setSorter(new FailLogTableDataSorter());
viewerFailLogTable.setInput(getViewSite());
tableFailLog.setHostingViewer(viewerFailLogTable);
}
/**
* Creates rule table
*/
private void createRuleTable(){
Table tableRules = new Table(compositeRules, SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER);
tableRules.setLayoutData(new GridData(GridData.FILL_BOTH));
tableRules.setLinesVisible(true);
tableRules.setHeaderVisible(true);
// Add selection listeners for each column after creating it
tableRules.addSelectionListener(this);
int parameter_column_length = 60;
TableColumn tableColumn = new TableColumn(tableRules, SWT.NONE);
tableColumn.setWidth(20);
tableColumn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
checkAllPressed();
}
});
TableColumn tableColumn2 = new TableColumn(tableRules, SWT.NONE);
tableColumn2.setWidth(150);
tableColumn2.setText("Rule Name");
tableColumn2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(new RuleTableDataSorter(
RuleTableDataSorter.RULE_NAME));
}
});
TableColumn tableColumn3 = new TableColumn(tableRules, SWT.NONE);
tableColumn3.setWidth(parameter_column_length);
tableColumn3.setText("Pass");
tableColumn3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.PASS));
}
});
TableColumn tableColumn4 = new TableColumn(tableRules, SWT.NONE);
tableColumn4.setWidth(parameter_column_length);
tableColumn4.setText("Fail");
tableColumn4.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.FAIL));
}
});
TableColumn tableColumn5 = new TableColumn(tableRules, SWT.NONE);
tableColumn5.setWidth(parameter_column_length);
tableColumn5.setText("Pass %");
tableColumn5.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.PASSPERCENT));
}
});
TableColumn tableColumn6 = new TableColumn(tableRules, SWT.NONE);
tableColumn6.setWidth(parameter_column_length);
tableColumn6.setText("Min");
tableColumn6.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.MIN));
}
});
TableColumn tableColumn7 = new TableColumn(tableRules, SWT.NONE);
tableColumn7.setWidth(parameter_column_length);
tableColumn7.setText("Max");
tableColumn7.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.MAX));
}
});
TableColumn tableColumn8 = new TableColumn(tableRules, SWT.NONE);
tableColumn8.setWidth(parameter_column_length);
tableColumn8.setText("Avg");
tableColumn8.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.AVG));
}
});
TableColumn tableColumn9 = new TableColumn(tableRules, SWT.NONE);
tableColumn9.setWidth(parameter_column_length);
tableColumn9.setText("Med");
tableColumn9.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
viewerRuleTable.setSorter(
new RuleTableDataSorter(RuleTableDataSorter.MED));
}
});
viewerRuleTable = new CheckboxTableViewer(tableRules);
contentProviderRuleTable = new RuleTableContentProvider(engine);
viewerRuleTable.setContentProvider(contentProviderRuleTable);
viewerRuleTable.setLabelProvider(new RuleTableLabelProvider());
/*viewerRuleTable.setComparator(new RuleTableDataSorter());
viewerRuleTable.setSorter(new RuleTableDataSorter());*/
viewerRuleTable.setInput(getViewSite());
tableRules.addKeyListener(this);
}
/**
* hookContextMenu.
* Creates context menu for main view.
*/
private void hookContextMenu() {
MenuManager menuMgrRuleTable = new MenuManager("#PopupMenu");
menuMgrRuleTable.setRemoveAllWhenShown(true);
menuMgrRuleTable.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
MainView.this.fillContextMenuRuleTable(manager);
}
});
Menu menuRuleTable = menuMgrRuleTable.createContextMenu(viewerRuleTable.getControl());
viewerRuleTable.getControl().setMenu(menuRuleTable);
getSite().registerContextMenu(menuMgrRuleTable, viewerRuleTable);
MenuManager menuMgrFailLog = new MenuManager("#PopupMenu");
menuMgrFailLog.setRemoveAllWhenShown(true);
menuMgrFailLog.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
MainView.this.fillContextMenuFailLog(manager);
}
});
Menu menuFailLog = menuMgrFailLog.createContextMenu(viewerFailLogTable.getControl());
viewerFailLogTable.getControl().setMenu(menuFailLog);
getSite().registerContextMenu(menuMgrFailLog, viewerFailLogTable);
}
/**
* contributeToActionBars
*/
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
/**
* fillContextMenuRuleTable
* fills context menu for rule table.
* @param manager menumanager
*/
@SuppressWarnings("unchecked")
private void fillContextMenuRuleTable(IMenuManager manager) {
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
if(selectionList.size() == 1){
manager.add(actionEditRule);
manager.add(actionClearOneRuleCounters);
manager.add(actionShowHistory);
manager.add(actionCopyRule);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(actionDeleteRule);
}
else if(selectionList.size() > 1){
manager.add(actionClearOneRuleCounters);
manager.add(actionShowHistory);
manager.add(actionDeleteRule);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
}
/**
* fillContextMenuFailLog.
* fills context menu for fail log view.
* @param manager menumanager
*/
private void fillContextMenuFailLog(IMenuManager manager) {
manager.add(actionShowInTraceViewer);
}
/**
* fillLocalToolBar.
* fills local toolbar.
* @param manager menumanager
*/
private void fillLocalToolBar(IToolBarManager manager) {
manager.removeAll();
if(tabFolder.getSelectionIndex() == TAB_INDEX_RULE_LIST && actionCopyRule != null){
manager.add(actionCreateNewRule);
manager.add(actionClearAllCounters);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(actionDeleteRule);
manager.update(true);
}
else if (tabFolder.getSelectionIndex() == TAB_INDEX_FAIL_LOG && actionCopyRule != null){
manager.add(actionClearFailLog);
manager.update(true);
}
}
/**
* fills local menu
*/
private void fillLocalPullDown(IMenuManager manager) {
manager.removeAll();
if(tabFolder.getSelectionIndex() == TAB_INDEX_RULE_LIST && actionCopyRule != null){
manager.add(actionCreateNewRule);
manager.add(actionClearAllCounters);
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
manager.add(actionDeleteRule);
manager.update(true);
}
else if (tabFolder.getSelectionIndex() == TAB_INDEX_FAIL_LOG && actionCopyRule != null){
manager.add(actionClearFailLog);
manager.update(true);
}
}
/**
* makeActions.
* Creates actions for main view.
*/
@SuppressWarnings("unchecked")
private void makeActions() {
actionDeleteRule = new Action() {
public void run() {
if(tabFolder.getSelectionIndex() == TAB_INDEX_RULE_LIST){
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
// Confirm deletion
if(showConfirmation("Trace Analyser - Delete Rule", "Are you sure you want to delete selected files?")){
boolean error = false;
for(RuleInformation item : selectionList){
if(!engine.removeRule(item.getRule().getName())){
error = true;
}
}
if(error){
showErrorMessage("Trace Analyser - Error", "An error occured when deleting rule(s).");
}
refreshRuleContentAndView();
}
}
}
};
actionDeleteRule.setText("Delete Selected Rule");
actionDeleteRule.setToolTipText("Delete Selected Rule");
actionDeleteRule.setImageDescriptor( PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
actionClearOneRuleCounters = new Action() {
public void run() {
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
if(showConfirmation("Trace Analyser - Clear History", "Are you sure you want to clear selected rule's history information?")){
for(RuleInformation item : selectionList){
engine.resetOneRulesHistory(item.getRule().getName());
}
}
}
};
actionClearOneRuleCounters.setText("Clear Selected Rule's Counters");
actionClearOneRuleCounters.setToolTipText("Clear Selected Rule's Counters");
actionClearAllCounters = new Action() {
public void run() {
if(showConfirmation("Trace Analyser - Clear History", "Are you sure you want to clear all rule's history information?")){
engine.resetHistory();
}
}
};
actionClearAllCounters.setText("Clear All Rule's counters");
actionClearAllCounters.setToolTipText("Clear All Rule's counters");
actionClearAllCounters.setImageDescriptor(ImageResourceManager.getImageDescriptor(ImageKeys.IMG_CLEAR_ALL));
actionCreateNewRule = new Action() {
public void run() {
// create dialog
EditRuleDialog dialog = new EditRuleDialog(getSite().getShell(), ruleTypes, null, engine, true);
// open query dialog
int retVal = dialog.open();
// if ok pressed
if( retVal == 0 ){
refreshRuleContentAndViewAsynch();
}
}
};
actionCreateNewRule.setText("Create New Rule");
actionCreateNewRule.setToolTipText("Create New Rule");
actionCreateNewRule.setImageDescriptor(ImageResourceManager.getImageDescriptor(ImageKeys.IMG_CREATE_NEW));
doubleClickAction = new Action() {
public void run() {
if(tabFolder.getSelectionIndex() == TAB_INDEX_RULE_LIST){
actionEditRule.run();
}
else if(tabFolder.getSelectionIndex() == TAB_INDEX_FAIL_LOG){
actionShowInTraceViewer.run();
}
}
};
actionEditRule = new Action() {
public void run() {
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
//verify that only one file is selected.
if( selectionList.size() == 1 ){
TraceAnalyserRule rule = selectionList.get(0).getRule();
String ruleName = rule.getName();
EditRuleDialog dialog = new EditRuleDialog(getSite().getShell(), ruleTypes, rule, engine, false);
int retVal = dialog.open();
// open query dialog
if( retVal == 0 ){
for(HistoryEditor item : openEditors){
if(item.getRuleName().equals(ruleName)){
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
activePage.closeAllEditors(false);
}
}
refreshRuleContentAndViewAsynch();
}
// Cancel pressed
else if( retVal == 1 ){
}
}
}
};
actionEditRule.setText("Edit Selected Rule");
actionEditRule.setToolTipText("Edit Selected Rule");
actionClearFailLog = new Action() {
public void run() {
if(showConfirmation("Trace Analyser - Clear Fail Log", "Are your sure you want to clear Fail Log")){
engine.clearFailLog();
}
}
};
actionClearFailLog.setText("Clear Fail Log");
actionClearFailLog.setToolTipText("Clear Fail Log");
actionClearFailLog.setImageDescriptor(ImageResourceManager.getImageDescriptor(ImageKeys.IMG_CLEAR_FAIL_LOG));
actionShowInTraceViewer = new Action() {
public void run() {
ISelection selection = viewerFailLogTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleEvent> selectionList = (List<RuleEvent>)obj;
//verify that only one file is selected.
if( selectionList.size() == 1 ){
//sync to trace
TVAPIError error;
if(selectionList.get(0).getTraceNumbers().length == 1){
error = TraceViewerAPI.syncToTrace(selectionList.get(0).getTraceNumbers()[0], 0);
}
else{
error = TraceViewerAPI.syncToTrace(selectionList.get(0).getTraceNumbers()[0], selectionList.get(0).getTraceNumbers()[1]);
}
if(error == TVAPIError.NONE){
showTraceViewer();
}
else{
showErrorMessage("Trace Analyser - Error",
"Unable to locate events from TraceViewer's log. Perhaps the log has been cleared.");
}
}
}
};
actionShowInTraceViewer.setText("Show in TraceViewer");
actionShowInTraceViewer.setToolTipText("Show in TraceViewer");
actionShowHistory = new Action() {
public void run() {
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
//verify that only one file is selected.
if( selectionList.size() == 1 ){
HistoryEditorInput input = new HistoryEditorInput(selectionList.get(0));
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
openEditors.add((HistoryEditor)activePage.openEditor(input,"com.nokia.s60tools.traceanalyser.ui.editors.HistoryEditor"));
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
};
actionShowHistory.setText("Show History");
actionShowHistory.setToolTipText("Show History");
actionCopyRule = new Action() {
public void run() {
ISelection selection = viewerRuleTable.getSelection();
Object obj = ((IStructuredSelection)selection).toList();
List<RuleInformation> selectionList = (List<RuleInformation>)obj;
//verify that only one file is selected.
if( selectionList.size() == 1 ){
TraceAnalyserRule rule = selectionList.get(0).getRule();
EditRuleDialog dialog = new EditRuleDialog(getSite().getShell(), ruleTypes, rule, engine, true);
int retVal = dialog.open();
// open query dialog
if( retVal == 0 ){
refreshRuleContentAndViewAsynch();
}
// Cancel pressed
else if( retVal == 1 ){
}
}
}
};
actionCopyRule.setText("Copy Selected Rule");
actionCopyRule.setToolTipText("Copy Selected Rule");
}
/**
* hookDoubleClickAction.
*/
private void hookDoubleClickAction() {
IDoubleClickListener listener = new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
doubleClickAction.run();
}
};
viewerRuleTable.addDoubleClickListener(listener);
viewerFailLogTable.addDoubleClickListener(listener);
}
/**
* Passing the focus request to the viewer's control.
*/
public void setFocus() {
viewerRuleTable.getControl().setFocus();
}
/*
* (non-Javadoc)
* @see com.nokia.s60tools.traceanalyser.interfaces.ITraceAnalyserFileObserver#rulesUpdated()
*/
public void rulesUpdated() {
Runnable refreshRunnable = new Runnable(){
public void run(){
viewerRuleTable.refresh();
readActivationStatus();
for(HistoryEditor item : openEditors){
item.historyUpdated();
}
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/*
* (non-Javadoc)
* @see com.nokia.s60tools.traceanalyser.interfaces.ITraceAnalyserFileObserver#ruleUpdated(java.lang.String)
*/
public void ruleUpdated(final String ruleName){
Runnable refreshRunnable = new Runnable(){
public void run(){
viewerRuleTable.refresh();
readActivationStatus();
for(HistoryEditor item : openEditors){
item.historyUpdated();
}
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/**
* refreshRuleContentAndViewAsynch.
* Refreshes content and view asynchronously.
*/
private void refreshRuleContentAndViewAsynch(){
Runnable refreshRunnable = new Runnable(){
public void run(){
refreshRuleContentAndView();
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/**
* refreshRuleContentAndView.
* Refreshes content and view asynchronously.
*/
private void refreshRuleContentAndView(){
contentProviderRuleTable.refresh();
viewerRuleTable.refresh();
readActivationStatus();
}
/*
* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent arg0) {
// nothing to be done.
}
/*
* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent event) {
if(event.widget == tabFolder){
contributeToActionBars();
}
if(event.detail == SWT.CHECK){
RuleInformation info = (RuleInformation)event.item.getData();
boolean value = viewerRuleTable.getChecked(event.item.getData());
engine.changeRuleaActivation(info.getRule().getName(), value);
}
}
/*
* (non-Javadoc)
* @see com.nokia.s60tools.traceanalyser.interfaces.ITraceAnalyserFileObserver#failLogUpdated()
*/
public void failLogUpdated() {
Runnable refreshRunnable = new Runnable(){
public void run(){
viewerFailLogTable.refresh();
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/**
* refreshFailLogContentAndViewAsynch.
* Refreshes content and view asynchronously.
*/
private void refreshFailLogContentAndViewAsynch(){
Runnable refreshRunnable = new Runnable(){
public void run(){
refreshFailLogContentAndView();
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/**
* refreshFailLogContentAndView.
* Refreshes content and view asynchronously.
*/
private void refreshFailLogContentAndView(){
contentProviderFailLogTable.refresh();
viewerFailLogTable.refresh();
}
public void dispose(){
TraceAnalyserPlugin.setMainView(null);
}
/**
* showTraceViewer
* shows trace viewer plugin
*/
public static void showTraceViewer() {
try {
IWorkbenchWindow ww = TraceAnalyserPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
if (ww == null)
return;
IWorkbenchPage page = ww.getActivePage();
// Checking if view is already open
IViewReference[] viewRefs = page.getViewReferences();
for (int i = 0; i < viewRefs.length; i++) {
IViewReference reference = viewRefs[i];
String id = reference.getId();
if(id.equalsIgnoreCase(TRACE_VIEWER_VIEW_ID)){
// Found, restoring the view
IViewPart viewPart = reference.getView(true);
page.activate(viewPart);
return;
}
}
// View was not found, opening it up as a new view.
page.showView(TRACE_VIEWER_VIEW_ID);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* blinks icon when fail received.
*/
public void blinkIcon(){
Runnable refreshRunnable = new Runnable(){
public void run(){
setTitleImage(ImageResourceManager.getImage(ImageKeys.IMG_FAIL_RECEIVED));
}
};
if(timer == null || !timer.isRunning()){
timer = new Timer(500, this);
timer.start();
Display.getDefault().asyncExec(refreshRunnable);
}
else{
}
}
/*
* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent arg0) {
Runnable refreshRunnable = new Runnable(){
public void run(){
if(blinkCount % 2 == 1){
setTitleImage(ImageResourceManager.getImage(ImageKeys.IMG_FAIL_RECEIVED));
}
else{
setTitleImage(ImageResourceManager.getImage(ImageKeys.IMG_APP_ICON));
}
blinkCount++;
if( blinkCount == 3){
blinkCount = 0;
timer.stop();
}
}
};
Display.getDefault().asyncExec(refreshRunnable);
}
/**
* Reads activation status and sets table's check/uncheck status correct
*/
private void readActivationStatus(){
int i = 0;
while(true){
Object information = viewerRuleTable.getElementAt(i);
if(information != null){
if( ((RuleInformation)information).getRule().isActivated()){
viewerRuleTable.setChecked(information, true);
}
}
else{
break;
}
i++;
}
}
/**
* showErrorMessage.
* shows error message asynchronously
* @param header header of message
* @param text error text
*/
public void showErrorMessage(String header, String text){
MessageDialog.openError( getSite().getShell(), header, text);
}
/**
* showConfirmation.
* Displays a Confirmation dialog
* @param header text for window header
* @param text text for window text
* @return true, if yes was pressed.
*/
public boolean showConfirmation(String header, String text){
MessageBox messageBox = new MessageBox(this.getSite().getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO);
messageBox.setText(header);
messageBox.setMessage(text);
int retval = messageBox.open();
if(retval == SWT.YES){
return true;
}
else{
return false;
}
}
/**
* editorClosed
* removes editor pointer from openEditors-array
* @param ruleName name of the rule.
*/
public void editorClosed(String ruleName){
HistoryEditor closeEditor = null;
for(HistoryEditor item : openEditors){
if(item.getRuleName().equals(ruleName)){
closeEditor = item;
}
}
openEditors.remove(closeEditor);
}
/*
* (non-Javadoc)
* @see org.eclipse.swt.events.KeyListener#keyPressed(org.eclipse.swt.events.KeyEvent)
*/
public void keyPressed(KeyEvent keyEvent) {
// if delete key is pressed run delete -action.
if( keyEvent.keyCode == java.awt.event.KeyEvent.VK_DELETE){
actionDeleteRule.run();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.swt.events.KeyListener#keyReleased(org.eclipse.swt.events.KeyEvent)
*/
public void keyReleased(KeyEvent arg0) {
// can be left empty.
}
/**
* Activate/deactivate all rules in main view
*/
private void checkAllPressed(){
boolean activationStatus = false;
// compare amount of checked and unchecked rules
if( viewerRuleTable.getCheckedElements().length <= (viewerRuleTable.getTable().getItemCount() / 2)){
activationStatus = true;
}
int i = 0;
while(true){
RuleInformation information = (RuleInformation)viewerRuleTable.getElementAt(i);
if(information != null){
viewerRuleTable.setChecked(information, activationStatus);
engine.changeRuleaActivation(information.getRule().getName(), activationStatus);
}
else{
break;
}
i++;
}
}
/**
* Sets this page's context sensitive helps
*/
protected void setHelps() {
PlatformUI.getWorkbench().getHelpSystem().setHelp( viewerFailLogTable.getControl(), com.nokia.s60tools.traceanalyser.resources.HelpContextIDs.TRACE_ANALYSER_FAIL_LOG);
PlatformUI.getWorkbench().getHelpSystem().setHelp( tabFolder, com.nokia.s60tools.traceanalyser.resources.HelpContextIDs.TRACE_ANALYSER_MAIN_VIEW);
PlatformUI.getWorkbench().getHelpSystem().setHelp( viewerRuleTable.getControl(), com.nokia.s60tools.traceanalyser.resources.HelpContextIDs.TRACE_ANALYSER_MAIN_VIEW);
PlatformUI.getWorkbench().getHelpSystem().setHelp( getSite().getShell(), com.nokia.s60tools.traceanalyser.resources.HelpContextIDs.TRACE_ANALYSER_MAIN_VIEW);
}
}