package com.mobilesorcery.sdk.profiling.emulator; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.mobilesorcery.sdk.core.CoreMoSyncPlugin; import com.mobilesorcery.sdk.core.ParseException; import com.mobilesorcery.sdk.profiling.filter.NameFilter; import com.mobilesorcery.sdk.profiling.filter.NameFilter.MatchType; import com.mobilesorcery.sdk.ui.MosyncUIPlugin; import com.mobilesorcery.sdk.ui.UpdateListener; import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl; public class EmulatorProfilingLaunchConfigurationTab extends AbstractLaunchConfigurationTab implements IUpdatableControl { private Text funcFilter; private Text fileFilter; private Button useRegExp; @Override public void createControl(Composite parent) { Group filterGroup = new Group(parent, SWT.NONE); filterGroup.setText("&Filters"); filterGroup.setLayout(new GridLayout(2, false)); Label info = new Label(filterGroup, SWT.WRAP); info.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, false, false, 2, 1)); info.setText("Set function and file names to filter OUT, separate with space.\n" + "Regular expressions require a . (dot) before * (asterisk) to match ANY character.\n" + "To escape spaces, use \\ (backslash); to escape regular expressions use \\\\ (double backslash)."); info.setFont(MosyncUIPlugin.getDefault().getFont(MosyncUIPlugin.FONT_INFO_TEXT)); Label funcFilterLabel = new Label(filterGroup, SWT.NONE); funcFilterLabel.setText("Name filters"); funcFilter = new Text(filterGroup, SWT.SINGLE | SWT.BORDER); funcFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label fileFilterLabel = new Label(filterGroup, SWT.NONE); fileFilterLabel.setText("File filters"); fileFilter = new Text(filterGroup, SWT.SINGLE | SWT.BORDER); fileFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); useRegExp = new Button(filterGroup, SWT.CHECK); useRegExp.setText("Use regular e&xpressions"); UpdateListener updateListener = new UpdateListener(this); funcFilter.addListener(SWT.Modify, updateListener); fileFilter.addListener(SWT.Modify, updateListener); useRegExp.addListener(SWT.Selection, updateListener); setControl(filterGroup); } @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // TODO Auto-generated method stub } @Override public void initializeFrom(ILaunchConfiguration configuration) { try { funcFilter.setText(configuration.getAttribute(EmulatorProfilingLaunchConfigurationDelegate.FD_FILTER, "")); fileFilter.setText(configuration.getAttribute(EmulatorProfilingLaunchConfigurationDelegate.FILE_FILTER, "")); useRegExp.setSelection(configuration.getAttribute(EmulatorProfilingLaunchConfigurationDelegate.USE_REG_EXP, false)); } catch (CoreException e) { CoreMoSyncPlugin.getDefault().log(e); } } @Override public void performApply(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(EmulatorProfilingLaunchConfigurationDelegate.FD_FILTER, funcFilter.getText()); configuration.setAttribute(EmulatorProfilingLaunchConfigurationDelegate.FILE_FILTER, fileFilter.getText()); configuration.setAttribute(EmulatorProfilingLaunchConfigurationDelegate.USE_REG_EXP, useRegExp.getSelection()); } @Override public String getName() { return "Profiling"; } @Override public void updateUI() { // Validate try { MatchType matchType = useRegExp.getSelection() ? MatchType.REGEXP : MatchType.CONTAINS; NameFilter.create(funcFilter.getText(), NameFilter.Criteria.NAME, matchType, true); NameFilter.create(fileFilter.getText(), NameFilter.Criteria.FILE, matchType, true); setErrorMessage(null); } catch (ParseException e) { setErrorMessage(e.getMessage()); } updateLaunchConfigurationDialog(); } }