Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java')
-rw-r--r--oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java1010
1 files changed, 34 insertions, 976 deletions
diff --git a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java
index e30824ce33..d64a2a721b 100644
--- a/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java
+++ b/oprofile/org.eclipse.linuxtools.oprofile.launch/src/org/eclipse/linuxtools/internal/oprofile/launch/configuration/OprofileEventConfigTab.java
@@ -21,1016 +21,74 @@
package org.eclipse.linuxtools.internal.oprofile.launch.configuration;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-
-import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-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.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.linuxtools.internal.oprofile.core.IOpcontrolProvider;
import org.eclipse.linuxtools.internal.oprofile.core.OpcontrolException;
import org.eclipse.linuxtools.internal.oprofile.core.Oprofile;
import org.eclipse.linuxtools.internal.oprofile.core.OprofileCorePlugin;
-import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpEvent;
-import org.eclipse.linuxtools.internal.oprofile.core.daemon.OpUnitMask;
-import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonEvent;
-import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchMessages;
import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin;
-import org.eclipse.linuxtools.tools.launch.core.properties.LinuxtoolsPathProperty;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.ScrolledComposite;
-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.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Text;
/**
* Thic class represents the event configuration tab of the launcher dialog.
+ * It supplies all functionality dependent on opcontrol and having root access.
*/
-public class OprofileEventConfigTab extends AbstractLaunchConfigurationTab {
- private static final String EMPTY_STRING = "";
- protected Button defaultEventCheck;
- protected OprofileCounter[] counters = null;
- protected CounterSubTab[] counterSubTabs;
- private Boolean hasPermissions = null;
- private Composite top;
-
- /**
- * Essentially the constructor for this tab; creates the 'default event'
- * checkbox and an appropriate number of counter tabs.
- * @param parent the parent composite
- */
- public void createControl(Composite parent) {
- Composite top = new Composite(parent, SWT.NONE);
- setControl(top);
- top.setLayout(new GridLayout());
- this.top = top;
- }
- /**
- * @since 1.1
- * @param top
- */
- private void createCounterTabs(Composite top){
- //tabs for each of the counters
- counters = OprofileCounter.getCounters(null);
- TabItem[] counterTabs = new TabItem[counters.length];
- counterSubTabs = new CounterSubTab[counters.length];
-
- TabFolder tabFolder = new TabFolder(top, SWT.NONE);
- tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+public class OprofileEventConfigTab extends AbstractEventConfigTab {
-
- for (int i = 0; i < counters.length; i++) {
- Composite c = new Composite(tabFolder, SWT.NONE);
- CounterSubTab currentTab = new CounterSubTab(c, counters[i]);
- counterSubTabs[i] = currentTab;
-
- counterTabs[i] = new TabItem(tabFolder, SWT.NONE);
- counterTabs[i].setControl(c);
- counterTabs[i].setText(OprofileLaunchMessages.getString("tab.event.counterTab.counterText") + String.valueOf(i)); //$NON-NLS-1$
- }
-
- getTabFolderComposite();
- }
-
- /**
- * Disposes all widgets and creates the timer mode Event tab
- * @since 1.1
- * @param top
- */
- private void createTimerModeTab(Composite top){
- Control[] children = top.getChildren();
- for (Control control : children) {
- control.dispose();
- }
- counterSubTabs = null;
- defaultEventCheck = null;
-
- Label timerModeLabel = new Label(top, SWT.LEFT);
- timerModeLabel.setText(OprofileLaunchMessages.getString("tab.event.timermode.no.options")); //$NON-NLS-1$
+ @Override
+ protected boolean getOprofileTimerMode() {
+ return Oprofile.getTimerMode();
}
- /**
- * @since 1.1
- */
- private Composite getTabFolderComposite(){
- // check for length and first tab being null to prevent AIOBE
- if(counterSubTabs.length == 0 ||counterSubTabs[0] == null){
- return null;
- } else {
- Composite c = counterSubTabs[0].getTabTopContainer();
- while(c != null && !(c instanceof TabFolder)){
- c = c.getParent();
- }
- return c.getParent();
- }
+ @Override
+ public OprofileCounter getOprofileCounter(int i) {
+ return new OprofileCounter(i);
}
- /**
- * @see ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
- */
- public void initializeFrom(ILaunchConfiguration config) {
- this.hasPermissions = null;
-
- IProject previousProject = Oprofile.OprofileProject.getProject();
- IProject project = getProject(config);
- Oprofile.OprofileProject.setProject(project);
-
- try {
- if(!hasPermissions(project)){
- OpcontrolException e = new OpcontrolException(OprofileCorePlugin.createErrorStatus("opcontrolSudo", null));
- OprofileCorePlugin.showErrorDialog("opcontrolProvider", e); //$NON-NLS-1$
- createTimerModeTab(top);
- return;
- }
- } catch (OpcontrolException e){
- OprofileCorePlugin.showErrorDialog("opcontrolProvider", e);
- createTimerModeTab(top);
- return;
- }
- Oprofile.updateInfo();
-
- String previousHost = null;
- if(previousProject != null){
- if(previousProject.getLocationURI() != null){
- previousHost = previousProject.getLocationURI().getHost();
- }
- }
-
- String host;
- if (project != null) {
- host = project.getLocationURI().getHost();
- } else {
- host = null;
- }
-
- // Create the counter tabs if host has changed or if they haven't been created yet
- // Check that initialization is not done for current project.
- // Any calculation based on project doesn't work as the very first time for local project they are both null.
- if(previousProject == null || previousHost != host || host == null || counters == null){
- Control[] children = top.getChildren();
-
- for (Control control : children) {
- control.dispose();
- }
-
- if (getTimerMode()) {
- Label timerModeLabel = new Label(top, SWT.LEFT);
- timerModeLabel.setText(OprofileLaunchMessages.getString("tab.event.timermode.no.options")); //$NON-NLS-1$
- } else {
- createVerticalSpacer(top, 1);
-
- //default event checkbox
- defaultEventCheck = new Button(top, SWT.CHECK);
- defaultEventCheck.setText(OprofileLaunchMessages.getString("tab.event.defaultevent.button.text")); //$NON-NLS-1$
- defaultEventCheck.setLayoutData(new GridData());
- defaultEventCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent se) {
- handleEnabledToggle();
- }
- });
- createVerticalSpacer(top, 1);
- createCounterTabs(top);
- }
-
- }
-
- if(!getTimerMode()){
- for (int i = 0; i < counters.length; i++) {
- counters[i].loadConfiguration(config);
- }
-
- for (CounterSubTab tab : counterSubTabs) {
- tab.initializeTab(config);
- tab.createEventsFilter();
- }
- try{
- boolean enabledState = config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true);
- defaultEventCheck.setSelection(enabledState);
- setEnabledState(!enabledState);
- } catch (CoreException e) {
- e.printStackTrace();
- }
- }
+ @Override
+ protected OprofileCounter[] getOprofileCounters(ILaunchConfiguration config) {
+ return OprofileCounter.getCounters(config);
}
- /**
- * @see ILaunchConfigurationTab#isValid(ILaunchConfiguration)
- */
@Override
- public boolean isValid(ILaunchConfiguration config) {
- IProject project = getProject(config);
- Oprofile.OprofileProject.setProject(project);
-
- try{
- if(!hasPermissions(project)){
- return false;
- }
- } catch(OpcontrolException e){
- return false;
- }
-
- if (getTimerMode()) {
- return true; //no options to check for validity
- } else {
- int numEnabledEvents = 0;
- boolean valid = true;
-
- try {
- if (config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false)) {
- numEnabledEvents = 1;
- } else {
- //This seems like an odd way to validate, but since most of the validation
- // is done with the OprofileDaemonEvent that the counter wraps, this
- // is the easiest way.
- OprofileCounter[] counters = new OprofileCounter[getNumberOfCounters()];
- for (int i = 0; i < counters.length; i++) {
- counters[i] = new OprofileCounter(i);
- counters[i].loadConfiguration(config);
-
- for (CounterSubTab counterSubTab : counterSubTabs){
- if(counterSubTab.enabledCheck.getSelection() && counterSubTab.eventList.getList().getSelectionIndex() == -1){
- valid = false;
- }
- }
-
- if (counters[i].getEnabled()) {
- ++numEnabledEvents;
-
- if (counters[i].getEvent() == null) {
- valid = false;
- break;
- }
-
- // First check min count
- int min = counters[i].getEvent().getMinCount();
- if (counters[i].getCount() < min) {
- valid = false;
- break;
- }
-
- // Next ask oprofile if it is valid
- if (!checkEventSetupValidity(counters[i].getNumber(), counters[i].getEvent().getText(), counters[i].getEvent().getUnitMask().getMaskValue())) {
- valid = false;
- break;
- }
- }
- }
- }
- } catch (CoreException e) {
- e.printStackTrace();
- }
-
- return (numEnabledEvents > 0 && valid);
- }
+ protected int getNumberOfOprofileCounters() {
+ return Oprofile.getNumberOfCounters();
}
- /**
- * @see ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
- */
- public void performApply(ILaunchConfigurationWorkingCopy config) {
- IProject project = getProject(config);
- try {
- if (!hasPermissions(project)) {
- return;
- }
- if (getTimerMode()) {
- config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, true);
- } else {
- config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, defaultEventCheck.getSelection());
- for (CounterSubTab cst : counterSubTabs) {
- cst.performApply(config);
- }
- }
-
- } catch (OpcontrolException e) {
- return;
-
- }
+ @Override
+ protected IProject getOprofileProject() {
+ return Oprofile.OprofileProject.getProject();
}
- /**
- * @see ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
- */
- public void setDefaults(ILaunchConfigurationWorkingCopy config) {
- boolean useDefault = true;
-
- IProject project = getProject(config);
+ @Override
+ protected void setOprofileProject(IProject project) {
Oprofile.OprofileProject.setProject(project);
- if(!LinuxtoolsPathProperty.getInstance().getLinuxtoolsPath(project).equals("")){
- try{
- if(!hasPermissions(project)){
- return;
- }
- } catch(OpcontrolException e){
- return;
- }
- }
-
- counters = OprofileCounter.getCounters(config);
-
- // When instantiated, the OprofileCounter will set defaults.
- for (int i = 0; i < counters.length; i++) {
- counters[i].saveConfiguration(config);
- if (counters[i].getEnabled()) {
- useDefault = false;
- }
- }
-
- config.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, useDefault);
- }
-
- /**
- * @see ILaunchConfigurationTab#getName()
- */
- public String getName() {
- return OprofileLaunchMessages.getString("tab.event.name"); //$NON-NLS-1$
}
- /**
- * @see ILaunchConfigurationTab#getImage()
- */
@Override
- public Image getImage() {
- return OprofileLaunchPlugin.getImageDescriptor(OprofileLaunchPlugin.ICON_EVENT_TAB).createImage();
- }
-
- /**
- * Handles the toggling of the default event check box. Not meant to be called
- * directly.
- */
- private void handleEnabledToggle() {
- setEnabledState(!defaultEventCheck.getSelection());
- updateLaunchConfigurationDialog();
- }
-
- /**
- * Sets the state of the child counter tabs' widgets.
- * @param state true for enabled, false for disabled
- */
- private void setEnabledState(boolean state) {
- for (CounterSubTab cst : counterSubTabs) {
- cst.setEnabledState(state);
- }
+ protected void updateOprofileInfo() {
+ Oprofile.updateInfo();
}
- /*
- * Extracted methods to be overridden by the test suite.
- */
-
- /**
- * Returns whether the event's unit mask is valid
- * @param counter counter number
- * @param name event name
- * @param maskValue unit mask value
- * @return true if valid config, false otherwise
- */
- protected boolean checkEventSetupValidity(int counter, String name, int maskValue) {
+ @Override
+ protected boolean checkEventSetupValidity(int counter, String name,
+ int maskValue) {
return OprofileLaunchPlugin.getCache().checkEvent(counter, name, maskValue);
}
- /**
- * Returns whether or not oprofile is operating in timer mode.
- * @return true if oprofile is in timer mode, false otherwise
- */
- protected boolean getTimerMode() {
- return Oprofile.getTimerMode();
- }
-
- /**
- * Returns the number of hardware counters the cpu has
- * @return int number of counters
- */
- protected int getNumberOfCounters() {
- return Oprofile.getNumberOfCounters();
- }
-
- /**
- * Checks if user has permission to run remote opcontrol as root. Uses a local cache variable
- * to avoid running costly calls repeatedly during creation of the view
- * @param project
- * @return
- * @throws OpcontrolException
- * @since 1.1
- */
- protected boolean hasPermissions(IProject project) throws OpcontrolException{
- if (this.hasPermissions == null){
- IOpcontrolProvider provider = OprofileCorePlugin.getDefault().getOpcontrolProvider();
- this.hasPermissions = provider.hasPermissions(project);
- }
- return this.hasPermissions;
- }
-
- /**
- *
- * @param config
- * @return
- * @since 1.1
- */
- protected IProject getProject(ILaunchConfiguration config){
- String name = null;
- try {
- name = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING);
- } catch (CoreException e) {
- return null;
- }
- if (name.equals(EMPTY_STRING)) {
- return null;
- }
-
- return ResourcesPlugin.getWorkspace().getRoot().getProject(name);
- }
-
- /**
- * A sub-tab of the OprofileEventConfigTab launch configuration tab.
- * Essentially, it is a frontend to an OprofileCounter. This is an
- * inner class because it requires methods from the parent tab (such as
- * updateLaunchConfigurationDialog() when a widget changes state).
- */
- protected class CounterSubTab {
- private Button enabledCheck;
- private Button profileKernelCheck;
- private Button profileUserCheck;
- private Label countTextLabel;
- private Text countText;
- private Label eventDescLabel;
- private Text eventDescText;
- private UnitMaskViewer unitMaskViewer;
- private ListViewer eventList;
- private Text eventFilterText;
- private OprofileCounter counter;
-
- private ScrolledComposite scrolledTop;
- protected Composite tabTopContainer;
-
-
- public Composite getTabTopContainer() {
- return tabTopContainer;
- }
-
- public void setTabTopContainer(Composite tabTopContainer) {
- this.tabTopContainer = tabTopContainer;
- }
-
- /**
- * Constructor for a subtab. Creates the layout and widgets for its content.
- * @param parent composite the widgets will be created in
- * @param counter the associated OprofileCounter object
- */
- public CounterSubTab(Composite parent, OprofileCounter counter) {
- this.counter = counter;
-
- parent.setLayout(new GridLayout());
-
- //scrollable composite on top
- ScrolledComposite scrolledContainer = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
- scrolledContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- scrolledContainer.setLayout(layout);
- scrolledContainer.setExpandHorizontal(true);
- scrolledContainer.setExpandVertical(true);
-
- //composite to contain the rest of the tab
- Composite tabTopContainer = new Composite(scrolledContainer, SWT.NONE);
- scrolledContainer.setContent(tabTopContainer);
- layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- layout.numColumns = 2;
- tabTopContainer.setLayout(layout);
- tabTopContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- //top cell
- Composite topCellComp = new Composite(tabTopContainer, SWT.NONE);
- layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- layout.numColumns = 2;
- topCellComp.setLayout(layout);
- topCellComp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1));
-
- createTopCell(topCellComp);
-
- createVerticalSpacer(tabTopContainer, 2);
-
- //left side composite group for eventList
- Composite eventListComp = new Composite(tabTopContainer, SWT.NONE);
- layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- eventListComp.setLayout(layout);
- //layoutdata is set later
-
- createLeftCell(eventListComp);
-
-
- //right side composite group for other event config and unit mask
- Composite eventConfigComp = new Composite(tabTopContainer, SWT.NONE);
- layout = new GridLayout();
- layout.numColumns = 2;
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- eventConfigComp.setLayout(layout);
- eventConfigComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
- createRightCell(eventConfigComp);
-
-
- //set the list's composite layout based on the right cell's size
- GridData data = new GridData(SWT.FILL, SWT.FILL, false, true);
- data.heightHint = eventConfigComp.getSize().x;
- eventListComp.setLayoutData(data);
-
- scrolledTop = scrolledContainer;
- this.tabTopContainer = tabTopContainer;
- }
-
- /**
- * Creates the "Enabled" checkbox, and the event description text.
- * @param parent composite these widgets will be created in
- */
- private void createTopCell(Composite parent) {
- //checkbox
- enabledCheck = new Button(parent, SWT.CHECK);
- enabledCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.enabled.button.text")); //$NON-NLS-1$
- enabledCheck.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
- enabledCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent se) {
- counter.setEnabled(enabledCheck.getSelection());
- internalSetEnabledState(counter.getEnabled());
- updateLaunchConfigurationDialog();
- }
- });
- enabledCheck.setEnabled(false);
-
- //label for textbox
- eventDescLabel = new Label(parent, SWT.NONE);
- eventDescLabel.setText(OprofileLaunchMessages.getString("tab.event.eventDescription.label.text")); //$NON-NLS-1$
- eventDescLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
-
- //textbox
- eventDescText = new Text(parent, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
- eventDescText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- }
-
- /**
- * Creates the event list widget.
- * @param parent composite these widgets will be created in
- */
- private void createLeftCell(Composite parent) {
- // Text box used to filter the event list
- eventFilterText = new Text(parent, SWT.BORDER | SWT.SINGLE | SWT.ICON_CANCEL | SWT.SEARCH);
- eventFilterText.setMessage(OprofileLaunchMessages.getString("tab.event.eventfilter.message"));
- GridData eventFilterLayout = new GridData();
- eventFilterLayout.horizontalAlignment = SWT.FILL;
- eventFilterLayout.grabExcessHorizontalSpace = true;
- eventFilterText.setLayoutData(eventFilterLayout);
- eventFilterText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- eventList.refresh(false);
- }
- });
-
- eventList = new ListViewer(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
- eventList.getList().setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
-
- eventList.setLabelProvider(new ILabelProvider(){
- public String getText(Object element) {
- OpEvent e = (OpEvent) element;
- return e.getText();
- }
- public Image getImage(Object element) { return null; }
- public void addListener(ILabelProviderListener listener) { }
- public void dispose() { }
- public boolean isLabelProperty(Object element, String property) { return false; }
- public void removeListener(ILabelProviderListener listener) { }
- });
-
- eventList.setContentProvider(new IStructuredContentProvider() {
- public Object[] getElements(Object inputElement) {
- OprofileCounter ctr = (OprofileCounter) inputElement;
- return ctr.getValidEvents();
- }
- public void dispose() { }
- public void inputChanged(Viewer arg0, Object arg1, Object arg2) { }
- });
-
- //adds the events to the list from the counter
- eventList.setInput(counter);
-
- eventList.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent sce) {
- handleEventListSelectionChange();
- }
- });
- }
-
- /**
- * Creates the 2 profile space checkboxes, event count and unit mask widget.
- * @param parent composite these widgets will be created in
- */
- private void createRightCell(Composite parent) {
- //profile kernel checkbox
- profileKernelCheck = new Button(parent, SWT.CHECK);
- profileKernelCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.profileKernel.check.text")); //$NON-NLS-1$
- profileKernelCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent se) {
- handleProfileKernelToggle();
- }
- });
-
- //profile user checkbox -- should this ever be disabled?
- profileUserCheck = new Button(parent, SWT.CHECK);
- profileUserCheck.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.profileUser.check.text")); //$NON-NLS-1$
- profileUserCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent se) {
- handleProfileUserToggle();
- }
- });
-
- //event count label/text
- countTextLabel = new Label(parent, SWT.NONE);
- countTextLabel.setText(OprofileLaunchMessages.getString("tab.event.counterSettings.count.label.text")); //$NON-NLS-1$
- countText = new Text(parent, SWT.SINGLE | SWT.BORDER);
- countText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- countText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent me) {
- handleCountTextModify();
- }
- });
-
- //unit mask widget
- Composite unitMaskComp = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- unitMaskComp.setLayout(layout);
- unitMaskComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
-
- unitMaskViewer = new UnitMaskViewer(unitMaskComp);
- }
-
- /**
- * Creates a text filter for the events list widget
- */
- private void createEventsFilter(){
- // Event Filter
- ViewerFilter eventFilter = new ViewerFilter() {
-
- @Override
- public Object[] filter(Viewer viewer, Object parent, Object[] elements) {
- Object[] filteredElements = super.filter(viewer,parent,elements);
- handleEventListSelectionChange();
- return filteredElements;
- }
-
- @Override
- public boolean select(Viewer viewer, Object parentElement, Object element) {
- String[] filterTerms = eventFilterText.getText().trim().toLowerCase().split(" ");
- String eventName = ((OpEvent)element).getText().toLowerCase();
- String eventDescription = ((OpEvent)element).getTextDescription().toLowerCase();
-
- boolean contains = true;
-
- for (String filterTerm : filterTerms) {
- if(contains){
- contains = eventName.contains(filterTerm) || eventDescription.contains(filterTerm);
- }
- }
- return contains;
- }
- };
- if(eventList != null){
- eventList.addFilter(eventFilter);
- }
- }
-
- /**
- * Initializes the tab on first creation.
- * @param config default configuration for the counter and the associated widgets
- */
- public void initializeTab(ILaunchConfiguration config) {
- //make all controls inactive, since the 'default event' checkbox
- // is checked by default
- setEnabledState(false);
-
- if (config != null) {
- counter.loadConfiguration(config);
- }
-
- boolean enabled = counter.getEnabled();
- enabledCheck.setSelection(enabled);
-
- if (counter.getEvent() == null) {
- // Default to first in list
- counter.setEvent(counter.getValidEvents()[0]);
- }
-
- //load default states
- profileKernelCheck.setSelection(counter.getProfileKernel());
- profileUserCheck.setSelection(counter.getProfileUser());
- countText.setText(Integer.toString(counter.getCount()));
- eventDescText.setText(counter.getEvent().getTextDescription());
- unitMaskViewer.displayEvent(counter.getEvent());
- eventList.setSelection(new StructuredSelection(counter.getEvent()));
- }
-
- /**
- * Applies the tab's current state to the launch configuration.
- * @param config launch config to apply to
- */
- public void performApply(ILaunchConfigurationWorkingCopy config) {
- counter.saveConfiguration(config);
- }
-
- /**
- * Enables/disables the widgets in this tab.
- * @param state true to enable to the counter's state, false to disable all
- */
- public void setEnabledState(boolean state) {
- enabledCheck.setEnabled(state);
- if (state) {
- internalSetEnabledState(counter.getEnabled());
- } else {
- internalSetEnabledState(false);
- }
- }
-
- /**
- * Method split from setEnabledState to avoid code duplication.
- * Not meant to be called directly.
- * @param state true to enable all widgets, false to disable all widgets
- */
- private void internalSetEnabledState(boolean state) {
- profileKernelCheck.setEnabled(state);
- profileUserCheck.setEnabled(state);
- countText.setEnabled(state);
- eventDescText.setEnabled(state);
- unitMaskViewer.setEnabled(state);
- eventList.getList().setEnabled(state);
- eventFilterText.setEnabled(state);
- }
-
- /**
- * Handling method for the event list. Gets the selection from the listviewer
- * and updates the UnitMask and event description text box.
- */
- private void handleEventListSelectionChange() {
- int index = eventList.getList().getSelectionIndex();
- if (index != -1){
- OpEvent event = (OpEvent) eventList.getElementAt(index);
- counter.setEvent(event);
- eventDescText.setText(event.getTextDescription());
- unitMaskViewer.displayEvent(event);
-
- // Check the min count to update the error message (events can have
- // different minimum reset counts)
- int min = counter.getEvent().getMinCount();
- if (counter.getCount() < min) {
- setErrorMessage(getMinCountErrorMessage(min));
- }
- } else {
- counter.setEvent(null);
- eventDescText.setText("");
- if(unitMaskViewer != null){
- unitMaskViewer.displayEvent(null);
- }
- }
-
- updateLaunchConfigurationDialog();
- }
-
- /**
- * Handles the toggling of the "profile user" button.
- */
- private void handleProfileUserToggle() {
- counter.setProfileUser(profileUserCheck.getSelection());
- updateLaunchConfigurationDialog();
- }
-
- /**
- * Handles the toggling of the "profile kernel" button.
- */
- private void handleProfileKernelToggle() {
- counter.setProfileKernel(profileKernelCheck.getSelection());
- updateLaunchConfigurationDialog();
- }
-
- /**
- * Handles text modify events in the count text widget.
- */
- private void handleCountTextModify() {
- String errorMessage = null;
- try {
-
- // This seems counter-intuitive, but we must save the count
- // so that isValid knows this launch config is invalid
- int count = Integer.parseInt(countText.getText());
- counter.setCount(count);
-
- // Check minimum count
- int min = counter.getEvent().getMinCount();
- if (count < min) {
- errorMessage = getMinCountErrorMessage(min);
- }
- } catch (NumberFormatException e) {
- errorMessage = OprofileLaunchMessages.getString("tab.event.counterSettings.count.invalid"); //$NON-NLS-1$
- counter.setCount(OprofileDaemonEvent.COUNT_INVALID);
- } finally {
- setErrorMessage(errorMessage);
- updateLaunchConfigurationDialog();
- }
- }
-
- /**
- * Returns a string with the minimum allowed count, suitable foruse with setErrorMessage().
- * @param min minimum count
- * @return a String containing the error message
- */
- private String getMinCountErrorMessage(int min) {
- String msg = OprofileLaunchMessages.getString("tab.event.counterSettings.count.too-small"); //$NON-NLS-1$
- Object[] args = new Object[] { Integer.valueOf(min) };
- return MessageFormat.format(msg, args);
- }
-
- /**
- * Changes parameters for the top scrolled composite which makes the scroll bars
- * appear when content overflows the visible area. Called by the UnitMaskViewer
- * whenever a new set of unit mask buttons are created, since the number of them is
- * variable and there is no guarantee as to the default size of the launch configuration
- * dialog in general.
- */
- private void resizeScrollContainer() {
- scrolledTop.setMinSize(tabTopContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
- }
-
-
- /**
- * This class displays event unit masks via check boxes and appropriate labels.
- */
- protected class UnitMaskViewer {
- private Label unitMaskLabel;
- private Composite top;
- private Composite maskListComp;
- private Button[] unitMaskButtons;
-
- /**
- * Constructor, creates the widget.
- * @param parent composite the widget will be created in
- */
- public UnitMaskViewer(Composite parent) {
- //"Unit Mask:" label
- unitMaskLabel = new Label(parent, SWT.NONE);
- unitMaskLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
- unitMaskLabel.setText(OprofileLaunchMessages.getString("unitmaskViewer.label.text")); //$NON-NLS-1$
- unitMaskLabel.setVisible(true);
-
- //composite to contain the button widgets
- Composite top = new Composite(parent, SWT.NONE);
- top.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- top.setLayout(layout);
- this.top = top;
-
- maskListComp = null;
- unitMaskButtons = null;
- }
-
- /**
- * Handles button toggles; updates the counter's unit mask to the appropriate value.
- * @param maskButton the button object
- * @param index the button's mask index (used in OpUnitMask for a proper mask value)
- */
- private void handleToggle(Button maskButton, int index) {
- OpUnitMask mask = counter.getUnitMask();
- if (mask != null) {
- if (maskButton.getSelection()) {
- mask.setMaskFromIndex(index);
- } else {
- mask.unSetMaskFromIndex(index);
- }
- }
-
- //update the parent tab
- updateLaunchConfigurationDialog();
- }
-
- /**
- * Disposes of the old unit mask check list and creates a new one with
- * the appropriate default value.
- * @param oe the event
- */
- public void displayEvent(OpEvent oe) {
- if (maskListComp != null) {
- maskListComp.dispose();
- }
-
- if(oe == null){
- return;
- }
-
-
- OpUnitMask mask = oe.getUnitMask();
- int totalMasks = mask.getNumMasks();
-
- Composite newMaskComp = new Composite(top, SWT.NONE);
- newMaskComp.setLayout(new GridLayout());
- newMaskComp.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
- maskListComp = newMaskComp;
-
- //creates these buttons with the default masks
- mask.setDefaultMaskValue();
-
- ArrayList<Button> maskButtons = new ArrayList<Button>();
-
- for (int i = 0; i < totalMasks; i++) {
- Button maskButton;
-
- if (mask.getType() == OpUnitMask.INVALID) {
- //big problem, most likely parsing went awry or opxml output mangled
- OprofileCorePlugin.showErrorDialog("opxmlParse", null); //$NON-NLS-1$
- return;
- } else if (mask.getType() == OpUnitMask.MANDATORY) {
- maskButton = new Button(newMaskComp, SWT.RADIO);
- maskButton.setEnabled(false);
- maskButton.setText(mask.getText(i));
- maskButton.setSelection(true);
- } else {
- int buttonType;
- final int maskButtonIndex = i;
- boolean selected = mask.isMaskSetFromIndex(maskButtonIndex);
-
- if (mask.getType() == OpUnitMask.EXCLUSIVE) {
- buttonType = SWT.RADIO;
- } else { //mask type is OpUnitMask.BITMASK
- buttonType = SWT.CHECK;
- }
-
- maskButton = new Button(newMaskComp, buttonType);
- maskButton.setEnabled(true);
- maskButton.setText(mask.getText(i));
- maskButton.setSelection(selected);
- maskButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent se) {
- handleToggle((Button)se.getSource(), maskButtonIndex);
- }
- });
-
- maskButtons.add(maskButton);
- }
- }
-
- unitMaskButtons = new Button[maskButtons.size()];
- maskButtons.toArray(unitMaskButtons);
-
- resizeScrollContainer();
- }
-
- /**
- * Enables and disables the viewer for UI input
- * @param enabled whether this viewer should be enabled
- */
- public void setEnabled(boolean enabled) {
- if (unitMaskButtons != null) {
- for (Button b : unitMaskButtons) {
- b.setEnabled(enabled);
- }
- }
+ @Override
+ protected boolean hasPermissions(IProject project) {
+ Boolean perms = getPermissions();
+ try{
+ if (perms == null){
+ IOpcontrolProvider provider = OprofileCorePlugin.getDefault().getOpcontrolProvider();
+ perms = provider.hasPermissions(project);
+ setPermissions(perms);
}
+ return perms;
+ } catch (OpcontrolException e){
+ return false;
}
}
}

Back to the top