Java tutorial
/* * 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 preferences page * */ package com.nokia.traceviewer.engine.preferences; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import com.nokia.traceviewer.TraceViewerHelpContextIDs; import com.nokia.traceviewer.TraceViewerPlugin; import com.nokia.traceviewer.engine.TraceProvider; import com.nokia.traceviewer.engine.TraceViewerGlobals; /** * TraceViewer preferences page * */ public final class TraceViewerPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { /** * Preference page ID for opening page directly */ public static final String PAGE_ID = "com.nokia.traceviewer.preferences.TraceViewerPreferences"; //$NON-NLS-1$ /** * PreferenceStore holding all preferences */ private final IPreferenceStore store; /** * Radio buttons to implify timestamp accuracy */ private Button[] timestampAccuracyButton = new Button[2]; /** * Radio buttons to implify how to show undecoded traces */ private Button[] showUndecodedTracesAsButton = new Button[3]; /** * Time from previous trace checkbox */ private Button timeFromPreviousTraceCheckBox; /** * Show trace component and group name in trace checkbox */ private Button showComponentGroupNameCheckBox; /** * Show trace class and function name in trace checkbox */ private Button showClassFunctionNameCheckBox; /** * Automatically reload changed Dictionaries checkbox */ private Button autoReloadDictionariesCheckBox; /** * Show BTrace variables checkbox */ private Button showBTraceVariablesCheckBox; /** * Radio buttons to implify data format */ private Button[] dataFormatButton; /** * Constructor */ public TraceViewerPreferencesPage() { super(); // Set the preference store for the preference page. store = TraceViewerPlugin.getDefault().getPreferenceStore(); setPreferenceStore(store); } /* * (non-Javadoc) * * @see * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { } /* * (non-Javadoc) * * @see * org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse * .swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { // Set help PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, TraceViewerHelpContextIDs.GENERAL_PREFERENCES); // Create Top composite in top of the parent composite Composite top = new Composite(parent, SWT.LEFT); GridData topCompositeGridData = new GridData(SWT.FILL, SWT.FILL, true, false); top.setLayoutData(topCompositeGridData); GridLayout topCompositeGridLayout = new GridLayout(); topCompositeGridLayout.horizontalSpacing = 5; topCompositeGridLayout.verticalSpacing = 5; topCompositeGridLayout.marginWidth = 0; topCompositeGridLayout.marginHeight = 0; top.setLayout(topCompositeGridLayout); Label generalTextLabel = new Label(top, SWT.NONE); String generalTextLabelText = Messages.getString("TraceViewerPreferencesPage.GeneralSettingsText"); //$NON-NLS-1$ generalTextLabel.setText(generalTextLabelText); // General group Group generalGroup = new Group(top, SWT.NONE); String generalGroupText = Messages.getString("TraceViewerPreferencesPage.GeneralGroupText"); //$NON-NLS-1$ generalGroup.setText(generalGroupText); GridData generalGroupGridData = new GridData(SWT.FILL, SWT.FILL, true, false); generalGroup.setLayoutData(generalGroupGridData); generalGroup.setLayout(new GridLayout()); // Show milliseconds from previous trace checkbox timeFromPreviousTraceCheckBox = new Button(generalGroup, SWT.CHECK); timeFromPreviousTraceCheckBox .setText(Messages.getString("TraceViewerPreferencesPage.ShowPreviousTimeText")); //$NON-NLS-1$ timeFromPreviousTraceCheckBox .setToolTipText(Messages.getString("TraceViewerPreferencesPage.TimeFromPreviousToolTip")); //$NON-NLS-1$ timeFromPreviousTraceCheckBox .setSelection(store.getBoolean(PreferenceConstants.TIME_FROM_PREVIOUS_TRACE_CHECKBOX)); // Show trace component and group before trace text checkbox showComponentGroupNameCheckBox = new Button(generalGroup, SWT.CHECK); showComponentGroupNameCheckBox .setText(Messages.getString("TraceViewerPreferencesPage.ShowComponentGroupName")); //$NON-NLS-1$ String showComponentGroupToolTip = Messages .getString("TraceViewerPreferencesPage.ShowComponentAndGroupToolTip"); //$NON-NLS-1$ showComponentGroupNameCheckBox.setToolTipText(showComponentGroupToolTip); showComponentGroupNameCheckBox .setSelection(store.getBoolean(PreferenceConstants.SHOW_COMPONENT_GROUP_NAME_CHECKBOX)); // Show trace class and function before trace text checkbox showClassFunctionNameCheckBox = new Button(generalGroup, SWT.CHECK); showClassFunctionNameCheckBox .setText(Messages.getString("TraceViewerPreferencesPage.ShowClassFunctionName")); //$NON-NLS-1$ String showClassFunctionToolTip = Messages .getString("TraceViewerPreferencesPage.ShowClassAndFunctionToolTip"); //$NON-NLS-1$ showClassFunctionNameCheckBox.setToolTipText(showClassFunctionToolTip); showClassFunctionNameCheckBox .setSelection(store.getBoolean(PreferenceConstants.SHOW_CLASS_FUNCTION_NAME_CHECKBOX)); // Automatically reload changed Dictionaries checkbox autoReloadDictionariesCheckBox = new Button(generalGroup, SWT.CHECK); String autoReloadText = Messages.getString("TraceViewerPreferencesPage.AutoReloadDictionariesText"); //$NON-NLS-1$ String autoReloadToolTip = Messages.getString("TraceViewerPreferencesPage.AutoReloadDictionariesToolTip"); //$NON-NLS-1$ autoReloadDictionariesCheckBox.setText(autoReloadText); autoReloadDictionariesCheckBox.setToolTipText(autoReloadToolTip); autoReloadDictionariesCheckBox .setSelection(store.getBoolean(PreferenceConstants.AUTO_RELOAD_DICTIONARIES_CHECKBOX)); // Show BTrace variables in OST traces checkbox showBTraceVariablesCheckBox = new Button(generalGroup, SWT.CHECK); String btraceVariablesText = Messages.getString("TraceViewerPreferencesPage.ShowBTraceVariablesText"); //$NON-NLS-1$ String btraceVariablesToolTip = Messages.getString("TraceViewerPreferencesPage.ShowBTraceVariablesToolTip"); //$NON-NLS-1$ showBTraceVariablesCheckBox.setText(btraceVariablesText); showBTraceVariablesCheckBox.setToolTipText(btraceVariablesToolTip); showBTraceVariablesCheckBox .setSelection(store.getBoolean(PreferenceConstants.SHOW_BTRACE_VARIABLES_CHECKBOX)); // Timestamp accuracy group Group timestampAccuracyGroup = new Group(top, SWT.NONE); String timestampAccuracyGroupText = Messages.getString("TraceViewerPreferencesPage.TimestampAccuracyText"); //$NON-NLS-1$ timestampAccuracyGroup.setText(timestampAccuracyGroupText); GridData timestampAccuracyGroupGridData = new GridData(SWT.FILL, SWT.FILL, true, false); timestampAccuracyGroup.setLayoutData(timestampAccuracyGroupGridData); timestampAccuracyGroup.setLayout(new GridLayout()); // Timestamp accuracy milliseconds timestampAccuracyButton[0] = new Button(timestampAccuracyGroup, SWT.RADIO); String milliSecondsText = Messages.getString("TraceViewerPreferencesPage.MilliSecondsText"); //$NON-NLS-1$ timestampAccuracyButton[0].setText(milliSecondsText); // Timestamp accuracy microseconds timestampAccuracyButton[1] = new Button(timestampAccuracyGroup, SWT.RADIO); String microSecondsText = Messages.getString("TraceViewerPreferencesPage.MicroSecondsText"); //$NON-NLS-1$ timestampAccuracyButton[1].setText(microSecondsText); // Get the current accuracy from PreferenceStore String accuracy = store.getString(PreferenceConstants.TIMESTAMP_ACCURACY); if (accuracy.equals(PreferenceConstants.MILLISECOND_ACCURACY)) { timestampAccuracyButton[0].setSelection(true); timestampAccuracyButton[1].setSelection(false); } else { timestampAccuracyButton[0].setSelection(false); timestampAccuracyButton[1].setSelection(true); } // Show undecoded traces as group Group showUndecodedTracesGroup = new Group(top, SWT.NONE); String showUndecodedTracesAs = Messages.getString("TraceViewerPreferencesPage.ShowUndecodedTracesAsText"); //$NON-NLS-1$ showUndecodedTracesGroup.setText(showUndecodedTracesAs); GridData showUndecodedTracesAsGroupGridData = new GridData(SWT.FILL, SWT.FILL, true, false); showUndecodedTracesGroup.setLayoutData(showUndecodedTracesAsGroupGridData); showUndecodedTracesGroup.setLayout(new GridLayout()); // Show undecoded traces as "BINARY TRACE" showUndecodedTracesAsButton[0] = new Button(showUndecodedTracesGroup, SWT.RADIO); String asInfoText = Messages.getString("TraceViewerPreferencesPage.ShowUndecodedTracesAsInfoText"); //$NON-NLS-1$ showUndecodedTracesAsButton[0].setText(asInfoText); // Show undecoded traces as "HEX" showUndecodedTracesAsButton[1] = new Button(showUndecodedTracesGroup, SWT.RADIO); String asHexText = Messages.getString("TraceViewerPreferencesPage.ShowUndecodedTracesAsHexText"); //$NON-NLS-1$ showUndecodedTracesAsButton[1].setText(asHexText); // Show undecoded traces as "ID numbers" showUndecodedTracesAsButton[2] = new Button(showUndecodedTracesGroup, SWT.RADIO); String asTraceIDsText = Messages.getString("TraceViewerPreferencesPage.ShowUndecodedTracesAsIDsText"); //$NON-NLS-1$ showUndecodedTracesAsButton[2].setText(asTraceIDsText); // Get the current "show undecoded traces" value from PreferenceStore String showUndecoded = store.getString(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE); if (showUndecoded.equals(PreferenceConstants.UNDECODED_INFO_TEXT)) { showUndecodedTracesAsButton[0].setSelection(true); showUndecodedTracesAsButton[1].setSelection(false); showUndecodedTracesAsButton[2].setSelection(false); } else if (showUndecoded.equals(PreferenceConstants.UNDECODED_HEX)) { showUndecodedTracesAsButton[0].setSelection(false); showUndecodedTracesAsButton[1].setSelection(true); showUndecodedTracesAsButton[2].setSelection(false); } else { showUndecodedTracesAsButton[0].setSelection(false); showUndecodedTracesAsButton[1].setSelection(false); showUndecodedTracesAsButton[2].setSelection(true); } // Data format editor. Show only if there are more than one // TraceProviders registered List<TraceProvider> dataFormats = TraceViewerGlobals.getListOfTraceProviders(); if (dataFormats.size() > 1) { // Data format group String dataFormatText = Messages.getString("TraceViewerPreferencesPage.DataFormatText"); //$NON-NLS-1$ Group dataFormatGroup = new Group(top, SWT.NONE); dataFormatGroup.setText(dataFormatText); GridData dataFormatGroupGridData = new GridData(SWT.FILL, SWT.FILL, true, false); dataFormatGroup.setLayoutData(dataFormatGroupGridData); dataFormatGroup.setLayout(new GridLayout()); dataFormatButton = new Button[dataFormats.size()]; String dataFormat = store.getString(PreferenceConstants.DATA_FORMAT); // Go through data formats for (int i = 0; i < dataFormats.size(); i++) { dataFormatButton[i] = new Button(dataFormatGroup, SWT.RADIO); String dataFormatName = dataFormats.get(i).getName(); dataFormatButton[i].setText(dataFormatName); if (dataFormat.equals(dataFormatName)) { dataFormatButton[i].setSelection(true); } else { dataFormatButton[i].setSelection(false); } } } return top; } /* * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { if (getControl() != null && !getControl().isDisposed()) { // Timestamp accuracy timestampAccuracyButton[0].setSelection(true); timestampAccuracyButton[1].setSelection(false); timeFromPreviousTraceCheckBox.setSelection(true); // Show undecoded traces as showUndecodedTracesAsButton[0].setSelection(false); showUndecodedTracesAsButton[1].setSelection(false); showUndecodedTracesAsButton[2].setSelection(true); showClassFunctionNameCheckBox.setSelection(true); autoReloadDictionariesCheckBox.setSelection(true); showBTraceVariablesCheckBox.setSelection(true); super.performDefaults(); } } /* * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { saveSettings(); return super.performOk(); } /* * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#performApply() */ @Override public void performApply() { saveSettings(); super.performApply(); } /** * Saves settings */ private void saveSettings() { if (getControl() != null && !getControl().isDisposed()) { // Save old values before saving boolean updateNeeded = false; String oldTimestampAccuracy = store.getString(PreferenceConstants.TIMESTAMP_ACCURACY); boolean oldTimeFromPrevious = store.getBoolean(PreferenceConstants.TIME_FROM_PREVIOUS_TRACE_CHECKBOX); String oldShowBinaryAsType = store.getString(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE); boolean showComponentGroupNamePrevious = store .getBoolean(PreferenceConstants.SHOW_COMPONENT_GROUP_NAME_CHECKBOX); boolean showClassNamePrevious = store.getBoolean(PreferenceConstants.SHOW_CLASS_FUNCTION_NAME_CHECKBOX); boolean showThreadId = store.getBoolean(PreferenceConstants.SHOW_BTRACE_VARIABLES_CHECKBOX); // Store new values. Timestamp accuracy. if (timestampAccuracyButton[0].getSelection()) { store.setValue(PreferenceConstants.TIMESTAMP_ACCURACY, PreferenceConstants.MILLISECOND_ACCURACY); } else { store.setValue(PreferenceConstants.TIMESTAMP_ACCURACY, PreferenceConstants.MICROSECOND_ACCURACY); } // Show time from previous trace store.setValue(PreferenceConstants.TIME_FROM_PREVIOUS_TRACE_CHECKBOX, timeFromPreviousTraceCheckBox.getSelection()); // Store "show undecoded traces" value if (showUndecodedTracesAsButton[0].getSelection()) { store.setValue(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE, PreferenceConstants.UNDECODED_INFO_TEXT); } else if (showUndecodedTracesAsButton[1].getSelection()) { store.setValue(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE, PreferenceConstants.UNDECODED_HEX); } else { store.setValue(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE, PreferenceConstants.UNDECODED_ID_AND_DATA); } // Show component and group name store.setValue(PreferenceConstants.SHOW_COMPONENT_GROUP_NAME_CHECKBOX, showComponentGroupNameCheckBox.getSelection()); // Show class and function name store.setValue(PreferenceConstants.SHOW_CLASS_FUNCTION_NAME_CHECKBOX, showClassFunctionNameCheckBox.getSelection()); // Auto reload changed Dictionaries store.setValue(PreferenceConstants.AUTO_RELOAD_DICTIONARIES_CHECKBOX, autoReloadDictionariesCheckBox.getSelection()); // Show Thread ID store.setValue(PreferenceConstants.SHOW_BTRACE_VARIABLES_CHECKBOX, showBTraceVariablesCheckBox.getSelection()); // Data format if (dataFormatButton != null) { for (int i = 0; i < dataFormatButton.length; i++) { if (dataFormatButton[i].getSelection()) { store.setValue(PreferenceConstants.DATA_FORMAT, dataFormatButton[i].getText()); } } } // Check if new values are different from old values and set // updateNeeded boolean to true if needed if (!store.getString(PreferenceConstants.TIMESTAMP_ACCURACY).equals(oldTimestampAccuracy)) { updateNeeded = true; } else if (store .getBoolean(PreferenceConstants.TIME_FROM_PREVIOUS_TRACE_CHECKBOX) != oldTimeFromPrevious) { updateNeeded = true; } else if (!store.getString(PreferenceConstants.SHOW_UNDECODED_TRACES_TYPE) .equals(oldShowBinaryAsType)) { updateNeeded = true; } else if (store.getBoolean( PreferenceConstants.SHOW_COMPONENT_GROUP_NAME_CHECKBOX) != showComponentGroupNamePrevious) { updateNeeded = true; } else if (store .getBoolean(PreferenceConstants.SHOW_CLASS_FUNCTION_NAME_CHECKBOX) != showClassNamePrevious) { updateNeeded = true; } else if (store.getBoolean(PreferenceConstants.SHOW_BTRACE_VARIABLES_CHECKBOX) != showThreadId) { updateNeeded = true; } // Update properties updateProperties(updateNeeded); } } /** * Updates properties to TraceViewer engine * * @param updateNeeded * if true, update to engine is needed */ private void updateProperties(boolean updateNeeded) { // Change the values and refresh the TraceViewer view if update is // needed if (updateNeeded) { // Set timestamp accuracy to timestampParser boolean millisec = false; if (store.getString(PreferenceConstants.TIMESTAMP_ACCURACY) .equals(PreferenceConstants.MILLISECOND_ACCURACY)) { millisec = true; } TraceViewerGlobals.getTraceViewer().getDataProcessorAccess().getTimestampParser() .setTimestampAccuracyMilliSecs(millisec); // Set showing time from previous trace to timestampParser TraceViewerGlobals.getTraceViewer().getDataProcessorAccess().getTimestampParser() .setShowTimeFromPrevious(timeFromPreviousTraceCheckBox.getSelection()); // Set show class and function name before trace text if (TraceViewerGlobals.getDecodeProvider() != null) { TraceViewerGlobals.getDecodeProvider().setAddPrefixesToTrace( showClassFunctionNameCheckBox.getSelection(), showComponentGroupNameCheckBox.getSelection()); } // Set show BTrace variables to Decoder TraceViewerGlobals.getTraceViewer().getDataProcessorAccess().getDecoder() .setShowBTraceVariables(showBTraceVariablesCheckBox.getSelection()); // Update the TraceViewer view TraceViewerGlobals.getTraceViewer().getView().refreshCurrentView(); } // Set new TraceProvider. Find it from the list of TraceProviders using // the selected name. TraceViewer handles the change. If provider is // the same as previously, nothing is done. List<TraceProvider> dataFormats = TraceViewerGlobals.getListOfTraceProviders(); if (dataFormatButton != null) { for (int i = 0; i < dataFormats.size(); i++) { // Compare the name of the Provider to the name saved to the // preference store if (dataFormats.get(i).getName().equals(store.getString(PreferenceConstants.DATA_FORMAT))) { // Set new TraceProvider to the TraceViewer TraceViewerGlobals.setTraceProvider(dataFormats.get(i), false); break; } } } } }