package rocks.inspectit.ui.rcp.ci.form.part; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.SectionPart; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import rocks.inspectit.shared.cs.ci.Environment; import rocks.inspectit.shared.cs.ci.sensor.ISensorConfig; import rocks.inspectit.shared.cs.ci.sensor.platform.AbstractPlatformSensorConfig; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.ci.form.input.EnvironmentEditorInput; import rocks.inspectit.ui.rcp.formatter.ImageFormatter; import rocks.inspectit.ui.rcp.formatter.TextFormatter; /** * Part responsible for selection of platform sensors. * * @author Ivan Senic * */ public class PlatformSensorSelectionPart extends SectionPart implements IPropertyListener { /** * Environment being edited. */ private Environment environment; /** * {@link TableViewer} for displaying the sensors. */ private TableViewer tableViewer; /** * Form page part is created on. */ private FormPage formPage; /** * Default constructor. * * @param formPage * {@link FormPage} section belongs to. * @param parent * Parent composite. * @param toolkit * {@link FormToolkit} * @param style * Style used for creating the section. */ public PlatformSensorSelectionPart(FormPage formPage, Composite parent, FormToolkit toolkit, int style) { super(parent, toolkit, style); EnvironmentEditorInput input = (EnvironmentEditorInput) formPage.getEditor().getEditorInput(); this.environment = input.getEnvironment(); this.formPage = formPage; this.formPage.getEditor().addPropertyListener(this); // client createClient(getSection(), toolkit); // text and description on our own getSection().setText("Platform Sensors"); Label label = toolkit.createLabel(getSection(), "Select platform sensor to be active within environment"); label.setForeground(toolkit.getColors().getColor(IFormColors.TITLE)); getSection().setDescriptionControl(label); } /** * Creates complete client. * * @param section * {@link Section} * @param toolkit * {@link FormToolkit} */ private void createClient(Section section, FormToolkit toolkit) { Composite mainComposite = toolkit.createComposite(section); mainComposite.setLayout(new GridLayout(2, false)); section.setClient(mainComposite); Table table = toolkit.createTable(mainComposite, SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.CHECK); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); table.setLinesVisible(true); tableViewer = new TableViewer(table); createColumns(); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setInput(environment.getPlatformSensorConfigs()); tableViewer.refresh(); updateCheckedItems(); table.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (e.detail == SWT.CHECK) { if (!isDirty()) { markDirty(); } } } }); Label label = toolkit.createLabel(mainComposite, ""); label.setToolTipText("If sensor is selected then it will be active and collect monitoring data."); label.setImage(InspectIT.getDefault().getImage(InspectITImages.IMG_INFORMATION)); label.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); } /** * Creates columns for table. */ private void createColumns() { TableViewerColumn sensorNameColumn = new TableViewerColumn(tableViewer, SWT.NONE); sensorNameColumn.getColumn().setResizable(true); sensorNameColumn.getColumn().setWidth(250); sensorNameColumn.getColumn().setText("Sensor"); sensorNameColumn.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return TextFormatter.getSensorConfigName((ISensorConfig) element); } @Override public Image getImage(Object element) { return ImageFormatter.getSensorConfigImage((ISensorConfig) element); } }); sensorNameColumn.getColumn().setToolTipText("Sensor type."); } /** * {@inheritDoc} */ @Override public void commit(boolean onSave) { if (onSave) { super.commit(onSave); for (TableItem item : tableViewer.getTable().getItems()) { AbstractPlatformSensorConfig sensorConfig = (AbstractPlatformSensorConfig) item.getData(); sensorConfig.setActive(item.getChecked()); } } } /** * Updates states of the check boxes next to the elements. */ private void updateCheckedItems() { for (TableItem item : tableViewer.getTable().getItems()) { AbstractPlatformSensorConfig sensorConfig = (AbstractPlatformSensorConfig) item.getData(); item.setChecked(sensorConfig.isActive()); } } /** * {@inheritDoc} */ @Override public void propertyChanged(Object source, int propId) { if (propId == IEditorPart.PROP_INPUT) { EnvironmentEditorInput input = (EnvironmentEditorInput) formPage.getEditor().getEditorInput(); environment = input.getEnvironment(); tableViewer.setInput(environment.getPlatformSensorConfigs()); } } /** * {@inheritDoc} */ @Override public void dispose() { formPage.getEditor().removePropertyListener(this); super.dispose(); } }