/******************************************************************************* * Copyright (c) 2017 Rogue Wave Software Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Rogue Wave Software Inc. - initial implementation *******************************************************************************/ package org.eclipse.php.profile.ui.dialogs; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.StatusDialog; import org.eclipse.jface.viewers.*; import org.eclipse.php.internal.ui.util.PixelConverter; import org.eclipse.php.internal.ui.util.SWTUtil; import org.eclipse.php.internal.ui.util.StatusInfo; import org.eclipse.php.profile.ui.PHPProfileUIMessages; import org.eclipse.php.profile.ui.ProfilerUIImages; import org.eclipse.php.profile.ui.filters.ExecutionStatisticsFieldFilter; import org.eclipse.php.profile.ui.filters.ExecutionStatisticsFilter; import org.eclipse.php.profile.ui.filters.ExecutionStatisticsFilterCondition; import org.eclipse.php.profile.ui.filters.ExecutionStatisticsFilterString; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; /** * Execution statistics filter dialog. */ public class ExecutionStatisticsFilterDialog extends StatusDialog { private ExecutionStatisticsFilter fFilter; private Image fFilterImage; private List<ExecutionStatisticsFilter> fExistingFilters; private CTabFolder fTabFolder; private CTabItem fStandardTab; private CTabItem fAdvancedTab; private Text fFilterName; private Text fFilterString; private Button fCaseSensitive; private Button fFilterByFile; private Button fFilterByClass; private Button fFilterByFunction; private Button fShowInformationMatching; private Combo fDescriptor; private Text fNumber; private Combo fField; private Label fShowLabel; private Label fByLabel; private Combo fCondAttribute; private Combo fCondOperator; private Text fCondValue; private Table fCondTable; private TableViewer fCondTableViewer; private Button fAddButton; private Button fDeleteButton; private static final String[] fDescriptors = { PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.4"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.5"), }; //$NON-NLS-1$ private static final String[] fDescriptorsData = { ExecutionStatisticsFilterString.FILTER_BY_FILE_NAME, ExecutionStatisticsFilterString.FILTER_BY_CLASS_NAME, ExecutionStatisticsFilterString.FILTER_BY_FUNCTION_NAME, }; private static final String[] fFields = { PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.6"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.7"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.8"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.9"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.10"), }; //$NON-NLS-1$ private static final String[] fFieldsData = { ExecutionStatisticsFieldFilter.FIELD_CALLS_COUNT, ExecutionStatisticsFieldFilter.FIELD_AVERAGE_OWN_TIME, ExecutionStatisticsFieldFilter.FIELD_OWN_TIME, ExecutionStatisticsFieldFilter.FIELD_OTHERS_TIME, ExecutionStatisticsFieldFilter.FIELD_TOTAL_TIME }; private static final String[] fAttributes = { PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.11"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.12"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.13"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.14"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.15"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.16"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.17"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.18"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.19"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.20"), }; //$NON-NLS-1$ private static final String[] fAttributesData = { ExecutionStatisticsFilterCondition.ATTR_FILE_NAME, ExecutionStatisticsFilterCondition.ATTR_CLASS_NAME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_NAME, ExecutionStatisticsFilterCondition.ATTR_FILE_TOTAL_TIME, ExecutionStatisticsFilterCondition.ATTR_CLASS_TOTAL_TIME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_TOTAL_TIME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_AVERAGE_OWN_TIME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_OWN_TIME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_OTHERS_TIME, ExecutionStatisticsFilterCondition.ATTR_FUNCTION_CALLS_COUNT, }; private static final String[] fOperators = { PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.21"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.22"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.23"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.24"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.25"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.26"), }; //$NON-NLS-1$ private static final String[] fOperatorsData = { ExecutionStatisticsFilterCondition.OP_EQUALS, ExecutionStatisticsFilterCondition.OP_NOT_EQUALS, ExecutionStatisticsFilterCondition.OP_MATCHES, ExecutionStatisticsFilterCondition.OP_DOESNT_MATCH, ExecutionStatisticsFilterCondition.OP_LESS_THAN, ExecutionStatisticsFilterCondition.OP_MORE_THAN, }; private static final String[] fCondTableColumns = { PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.36"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.37"), //$NON-NLS-1$ PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.38"), }; //$NON-NLS-1$ private static final int[] fCondTableColumnsWidths = { 30, 15, 30, }; public ExecutionStatisticsFilterDialog(Shell parent, ExecutionStatisticsFilter filter, List<ExecutionStatisticsFilter> existingFilters) { super(parent); setShellStyle(getShellStyle() | SWT.RESIZE); setTitle(filter == null ? PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.49") //$NON-NLS-1$ : PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.0")); //$NON-NLS-1$ fFilter = filter; fExistingFilters = existingFilters; fFilterImage = ProfilerUIImages.get(ProfilerUIImages.IMG_OBJ_FILTER); } private void addStandardFilterTab(CTabFolder folder) { Composite page = new Composite(folder, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 10; layout.marginWidth = 10; page.setLayout(layout); page.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite filterStringComposite = new Composite(page, SWT.NONE); filterStringComposite.setLayout(new GridLayout()); filterStringComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label label = new Label(filterStringComposite, SWT.NONE); label.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.1")); //$NON-NLS-1$ fFilterString = new Text(filterStringComposite, SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalIndent = 10; fFilterString.setLayoutData(data); fCaseSensitive = new Button(filterStringComposite, SWT.CHECK); fCaseSensitive.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.42")); //$NON-NLS-1$ Composite filterByComposite = new Composite(page, SWT.NONE); filterByComposite.setLayout(new GridLayout()); filterByComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); label = new Label(filterByComposite, SWT.NONE); label.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.27")); //$NON-NLS-1$ Composite filterByGroup = new Composite(filterByComposite, SWT.NONE); layout = new GridLayout(); filterByGroup.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalIndent = 10; filterByGroup.setLayoutData(data); fFilterByFile = new Button(filterByGroup, SWT.RADIO); fFilterByFile.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.28")); //$NON-NLS-1$ fFilterByClass = new Button(filterByGroup, SWT.RADIO); fFilterByClass.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.29")); //$NON-NLS-1$ fFilterByFunction = new Button(filterByGroup, SWT.RADIO); fFilterByFunction.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.30")); //$NON-NLS-1$ fFilterByFunction.setSelection(true); // default Composite showInformationMatchingGroup = new Composite(page, SWT.NONE); layout = new GridLayout(); layout.numColumns = 5; showInformationMatchingGroup.setLayout(layout); showInformationMatchingGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fShowInformationMatching = new Button(showInformationMatchingGroup, SWT.CHECK); fShowInformationMatching.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.31")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 5; fShowInformationMatching.setLayoutData(data); fShowInformationMatching.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org. * eclipse .swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { showInformationMatchingSelected(); } }); fShowLabel = new Label(showInformationMatchingGroup, SWT.NONE); fShowLabel.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.32")); //$NON-NLS-1$ fDescriptor = new Combo(showInformationMatchingGroup, SWT.READ_ONLY); for (int i = 0; i < fDescriptors.length; ++i) { fDescriptor.add(fDescriptors[i]); fDescriptor.setData(fDescriptors[i], fDescriptorsData[i]); } fDescriptor.select(1); fDescriptor.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fNumber = new Text(showInformationMatchingGroup, SWT.BORDER); fNumber.setText("10"); //$NON-NLS-1$ fNumber.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fNumber.addModifyListener(new ModifyListener() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse. * swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { ExecutionStatisticsFilterDialog.this.validateFieldFilter(); } }); fByLabel = new Label(showInformationMatchingGroup, SWT.NONE); fByLabel.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.34")); //$NON-NLS-1$ fField = new Combo(showInformationMatchingGroup, SWT.READ_ONLY); for (int i = 0; i < fFields.length; ++i) { fField.add(fFields[i]); fField.setData(fFields[i], fFieldsData[i]); } fField.select(2); fField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fStandardTab = new CTabItem(folder, SWT.NONE); fStandardTab.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.2")); //$NON-NLS-1$ fStandardTab.setImage(fFilterImage); fStandardTab.setControl(page); folder.setSelection(fStandardTab); } private void updateAddDeleteButtonsStatus() { fAddButton.setEnabled(fCondAttribute.getText().length() > 0 && fCondOperator.getText().length() > 0); fDeleteButton.setEnabled(((IStructuredSelection) fCondTableViewer.getSelection()).getFirstElement() != null); } private void addAdvancedFilterTab(CTabFolder folder) { Composite page = new Composite(folder, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 10; layout.marginWidth = 10; page.setLayout(layout); page.setLayoutData(new GridData(GridData.FILL_BOTH)); PixelConverter pixelConverter = new PixelConverter(page); // Condition composite: Composite condComposite = new Composite(page, SWT.NONE); layout = new GridLayout(); layout.numColumns = 3; condComposite.setLayout(layout); condComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // Condition: Label label = new Label(condComposite, SWT.NONE); label.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.35")); //$NON-NLS-1$ GridData data = new GridData(); data.horizontalSpan = 3; label.setLayoutData(data); SelectionAdapter fAddDeleteButtonsStatusUpdater = new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org. * eclipse .swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { updateAddDeleteButtonsStatus(); ExecutionStatisticsFilterDialog.this.validateCondition(); } }; fCondAttribute = new Combo(condComposite, SWT.READ_ONLY); for (int i = 0; i < fAttributes.length; ++i) { fCondAttribute.add(fAttributes[i]); fCondAttribute.setData(fAttributes[i], fAttributesData[i]); } fCondAttribute.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fCondAttribute.addSelectionListener(fAddDeleteButtonsStatusUpdater); fCondOperator = new Combo(condComposite, SWT.READ_ONLY); for (int i = 0; i < fOperators.length; ++i) { fCondOperator.add(fOperators[i]); fCondOperator.setData(fOperators[i], fOperatorsData[i]); } fCondOperator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fCondOperator.addSelectionListener(fAddDeleteButtonsStatusUpdater); fCondValue = new Text(condComposite, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = pixelConverter.convertWidthInCharsToPixels(30); fCondValue.setLayoutData(data); fCondValue.addModifyListener(new ModifyListener() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse. * swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { ExecutionStatisticsFilterDialog.this.validateCondition(); } }); // Table composite Composite condTableComposite = new Composite(page, SWT.NONE); layout = new GridLayout(); layout.numColumns = 2; condTableComposite.setLayout(layout); condTableComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); // Table: fCondTable = new Table(condTableComposite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION); data = new GridData(GridData.FILL_BOTH); fCondTable.setLayoutData(data); fCondTable.setHeaderVisible(true); fCondTable.setLinesVisible(true); TableLayout tableLayout = new TableLayout(); for (int i = 0; i < fCondTableColumns.length; ++i) { int width = pixelConverter.convertWidthInCharsToPixels(fCondTableColumnsWidths[i]); tableLayout.addColumnData(new ColumnWeightData(width, true)); TableColumn column = new TableColumn(fCondTable, SWT.NONE); column.setText(fCondTableColumns[i]); } fCondTable.setLayout(tableLayout); fCondTableViewer = new TableViewer(fCondTable); fCondTableViewer.setUseHashlookup(true); fCondTableViewer.setContentProvider(new CondTableContentProvider()); fCondTableViewer.setLabelProvider(new CondTableLabelProvider()); fCondTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { /* * (non-Javadoc) * * @seeorg.eclipse.jface.viewers.ISelectionChangedListener# * selectionChanged * (org.eclipse.jface.viewers.SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sSelection = (IStructuredSelection) fCondTableViewer.getSelection(); ExecutionStatisticsFilterCondition cond = (ExecutionStatisticsFilterCondition) sSelection .getFirstElement(); if (cond != null) { fCondAttribute.setText(cond.getAttribute()); fCondOperator.setText(cond.getOperator()); fCondValue.setText(cond.getValue()); } updateAddDeleteButtonsStatus(); } }); // Buttons bar: Composite buttonsBar = new Composite(condTableComposite, SWT.NONE); layout = new GridLayout(); buttonsBar.setLayout(layout); buttonsBar.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); fAddButton = new Button(buttonsBar, SWT.NONE); fAddButton.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.39")); //$NON-NLS-1$ fAddButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ExecutionStatisticsFilterCondition cond = new ExecutionStatisticsFilterCondition(); cond.setAttribute(fCondAttribute.getText()); cond.setOperator(fCondOperator.getText()); cond.setValue(fCondValue.getText()); fCondTableViewer.add(cond); } }); fDeleteButton = new Button(buttonsBar, SWT.NONE); fDeleteButton.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.40")); //$NON-NLS-1$ fDeleteButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection sSelection = (IStructuredSelection) fCondTableViewer.getSelection(); ExecutionStatisticsFilterCondition cond = (ExecutionStatisticsFilterCondition) sSelection .getFirstElement(); fCondTableViewer.remove(cond); } }); fAdvancedTab = new CTabItem(folder, SWT.NONE); fAdvancedTab.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.3")); //$NON-NLS-1$ fAdvancedTab.setImage(fFilterImage); fAdvancedTab.setControl(page); } private void validateFilterName() { IStatus status = StatusInfo.OK_STATUS; String filterName = fFilterName.getText(); if (filterName.length() == 0) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.43")); //$NON-NLS-1$ } if (fFilter == null) { for (int i = 0; i < fExistingFilters.size(); ++i) { if (((ExecutionStatisticsFilter) fExistingFilters.get(i)).getName().equals(filterName)) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.44")); //$NON-NLS-1$ break; } } } updateStatus(status); } private void validateFieldFilter() { IStatus status = StatusInfo.OK_STATUS; if (fShowInformationMatching.getSelection()) { String numberStr = fNumber.getText(); if (numberStr.length() == 0) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.45")); //$NON-NLS-1$ } else { try { Integer.parseInt(numberStr); } catch (NumberFormatException e) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.46")); //$NON-NLS-1$ } } } updateStatus(status); } private void validateCondition() { IStatus status = StatusInfo.OK_STATUS; String operator = fCondOperator.getText(); String condition = fCondValue.getText(); if (ExecutionStatisticsFilterCondition.OP_LESS_THAN.equals(operator) || ExecutionStatisticsFilterCondition.OP_MORE_THAN.equals(operator)) { try { Double.parseDouble(condition); } catch (NumberFormatException e) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.47")); //$NON-NLS-1$ } } else { if (condition.trim().length() == 0) { status = new StatusInfo(IStatus.ERROR, PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.48")); //$NON-NLS-1$ } } if (status != StatusInfo.OK_STATUS) { fAddButton.setEnabled(false); } else { updateAddDeleteButtonsStatus(); } } /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets * .Composite) */ protected Control createDialogArea(Composite parent) { parent = (Composite) super.createDialogArea(parent); PixelConverter pixelConverter = new PixelConverter(parent); // Filter Name: Composite nameGroup = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; nameGroup.setLayout(layout); Label label = new Label(nameGroup, SWT.NONE); label.setText(PHPProfileUIMessages.getString("ExecutionStatisticsFilterDialog.41")); //$NON-NLS-1$ fFilterName = new Text(nameGroup, SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = pixelConverter.convertWidthInCharsToPixels(50); fFilterName.setLayoutData(data); fFilterName.addModifyListener(new ModifyListener() { /* * (non-Javadoc) * * @see * org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse. * swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { ExecutionStatisticsFilterDialog.this.validateFilterName(); } }); // Filter configuration: fTabFolder = SWTUtil.createTabFolder(parent); data = new GridData(GridData.FILL_BOTH); data.heightHint = pixelConverter.convertHeightInCharsToPixels(20); data.widthHint = pixelConverter.convertWidthInCharsToPixels(100); fTabFolder.setLayoutData(data); addStandardFilterTab(fTabFolder); addAdvancedFilterTab(fTabFolder); initializeValues(); updateAddDeleteButtonsStatus(); if (fFilter == null) { updateStatus(new StatusInfo(IStatus.ERROR, "")); //$NON-NLS-1$ } return parent; } private void showInformationMatchingSelected() { boolean status = fShowInformationMatching.getSelection(); fShowLabel.setEnabled(status); fDescriptor.setEnabled(status); fNumber.setEnabled(status); fByLabel.setEnabled(status); fField.setEnabled(status); } private void initializeValues() { if (fFilter != null) { fFilterName.setText(fFilter.getName()); ExecutionStatisticsFilterString filterString = fFilter.getFilterString(); if (filterString != null) { fFilterString.setText(filterString.getString() == null ? "" : filterString.getString()); //$NON-NLS-1$ fCaseSensitive.setSelection(filterString.isCaseSensitive()); fFilterByFile.setSelection( ExecutionStatisticsFilterString.FILTER_BY_FILE_NAME.equals(filterString.getFilterBy())); fFilterByClass.setSelection( ExecutionStatisticsFilterString.FILTER_BY_CLASS_NAME.equals(filterString.getFilterBy())); fFilterByFunction.setSelection( ExecutionStatisticsFilterString.FILTER_BY_FUNCTION_NAME.equals(filterString.getFilterBy())); } ExecutionStatisticsFieldFilter fieldFilter = fFilter.getFieldFilter(); if (fieldFilter != null) { fShowInformationMatching.setSelection(true); for (int i = 0; i < fDescriptor.getItemCount(); ++i) { if (fDescriptor.getData(fDescriptor.getItem(i)).equals(fieldFilter.getDescriptor())) { fDescriptor.select(i); break; } } for (int i = 0; i < fField.getItemCount(); ++i) { if (fField.getData(fField.getItem(i)).equals(fieldFilter.getField())) { fField.select(i); break; } } fNumber.setText(Integer.toString(fieldFilter.getNumber())); } } fCondTableViewer.setInput(fFilter); showInformationMatchingSelected(); } public ExecutionStatisticsFilter getFilter() { return fFilter; } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ protected void okPressed() { if (fFilter == null) { fFilter = new ExecutionStatisticsFilter(); } fFilter.setName(fFilterName.getText()); String filterPattern = fFilterString.getText().trim(); if (filterPattern.length() > 0) { ExecutionStatisticsFilterString filterString = new ExecutionStatisticsFilterString(); filterString.setString(filterPattern); filterString.setCaseSensitive(fCaseSensitive.getSelection()); if (fFilterByFile.getSelection()) { filterString.setFilterBy(ExecutionStatisticsFilterString.FILTER_BY_FILE_NAME); } else if (fFilterByClass.getSelection()) { filterString.setFilterBy(ExecutionStatisticsFilterString.FILTER_BY_CLASS_NAME); } else if (fFilterByFunction.getSelection()) { filterString.setFilterBy(ExecutionStatisticsFilterString.FILTER_BY_FUNCTION_NAME); } fFilter.setFilterString(filterString); } if (fShowInformationMatching.getSelection()) { ExecutionStatisticsFieldFilter fieldFilter = new ExecutionStatisticsFieldFilter(); fieldFilter.setDescriptor(fDescriptor.getText()); fieldFilter.setField(fField.getText()); fieldFilter.setNumber(Integer.parseInt(fNumber.getText())); fFilter.setFieldFilter(fieldFilter); } else { fFilter.setFieldFilter(null); } TableItem[] items = fCondTable.getItems(); ExecutionStatisticsFilterCondition[] conditions = new ExecutionStatisticsFilterCondition[items.length]; for (int i = 0; i < items.length; ++i) { conditions[i] = (ExecutionStatisticsFilterCondition) items[i].getData(); } fFilter.setFilterConditions(conditions); super.okPressed(); } class CondTableContentProvider implements IStructuredContentProvider { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IStructuredContentProvider#getElements( * java.lang.Object) */ public Object[] getElements(Object inputElement) { if (inputElement instanceof ExecutionStatisticsFilter && ((ExecutionStatisticsFilter) inputElement).getFilterConditions() != null) { return ((ExecutionStatisticsFilter) inputElement).getFilterConditions(); } return new Object[0]; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse * .jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } class CondTableLabelProvider extends LabelProvider implements ITableLabelProvider { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java * .lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { return null; } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java. * lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { if (element instanceof ExecutionStatisticsFilterCondition) { ExecutionStatisticsFilterCondition cond = (ExecutionStatisticsFilterCondition) element; switch (columnIndex) { case 0: return cond.getAttribute(); case 1: return cond.getOperator(); case 2: return cond.getValue(); } } return null; } } }