Java tutorial
// ===================================================================== // // Copyright (C) 2012 - 2016, Philip Graf // // 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 // // ===================================================================== package ch.acanda.eclipse.pmd.properties; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.BeansObservables; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.set.IObservableSet; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.databinding.viewers.ViewersObservables; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import ch.acanda.eclipse.pmd.properties.PMDPropertyPageViewModel.RuleSetViewModel; import ch.acanda.eclipse.pmd.swtbot.SWTBotID; /** * A composite containing a single checkbox table viewer showing the rule set configurations. * * @author Philip Graf */ final class RuleSetConfigurationTable extends Composite { private final CheckboxTableViewer tableViewer; private final Table table; private final PMDPropertyPageViewModel model; public RuleSetConfigurationTable(final Composite parent, final PMDPropertyPageViewModel model) { super(parent, SWT.NONE); this.model = model; setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 2)); final TableColumnLayout tableColumnLayout = new TableColumnLayout(); setLayout(tableColumnLayout); tableViewer = CheckboxTableViewer.newCheckList(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); ColumnViewerToolTipSupport.enableFor(tableViewer, ToolTip.NO_RECREATE); SWTBotID.set(table, SWTBotID.RULESETS); final TableViewerColumn nameViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); final TableColumn nameColumn = nameViewerColumn.getColumn(); tableColumnLayout.setColumnData(nameColumn, new ColumnWeightData(1, 50, true)); nameColumn.setText("Name"); nameViewerColumn.setLabelProvider(new NameLabelProvider(model)); final TableViewerColumn typeViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); final TableColumn typeColumn = typeViewerColumn.getColumn(); tableColumnLayout.setColumnData(typeColumn, new ColumnPixelData(75, true, true)); typeColumn.setText("Type"); typeViewerColumn.setLabelProvider(new TypeLabelProvider(model)); final TableViewerColumn locationViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); final TableColumn locationColumn = locationViewerColumn.getColumn(); tableColumnLayout.setColumnData(locationColumn, new ColumnWeightData(2, 50, true)); locationColumn.setText("Location"); locationViewerColumn.setLabelProvider(new LocationLabelProvider(model)); initDataBindings(); initListeners(); } private void initDataBindings() { final DataBindingContext bindingContext = new DataBindingContext(); // final ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); tableViewer.setContentProvider(listContentProvider); // final IObservableList ruleSetsObserveList = BeansObservables.observeList(Realm.getDefault(), model, "ruleSets"); tableViewer.setInput(ruleSetsObserveList); // final IObservableValue tableObserveEnabledObserveWidget = SWTObservables.observeEnabled(table); final IObservableValue modelPMDEnabledObserveValue = BeansObservables.observeValue(model, "PMDEnabled"); bindingContext.bindValue(tableObserveEnabledObserveWidget, modelPMDEnabledObserveValue, null, null); // final IObservableList tableViewerObserveMultiSelection = ViewersObservables .observeMultiSelection(tableViewer); final IObservableList selectedRuleSetsObserveList = BeansObservables.observeList(Realm.getDefault(), model, "selectedRuleSets"); bindingContext.bindList(tableViewerObserveMultiSelection, selectedRuleSetsObserveList, null, null); // final IObservableSet tableViewerObserveCheckedElements = ViewersObservables .observeCheckedElements(tableViewer, RuleSetViewModel.class); final IObservableSet activeConfigurationsObserveSet = BeansObservables.observeSet(Realm.getDefault(), model, "activeRuleSets"); bindingContext.bindSet(tableViewerObserveCheckedElements, activeConfigurationsObserveSet, null, null); } private void initListeners() { model.addPropertyChangeListener(PMDPropertyPageViewModel.ACTIVE_RULE_SETS, new PropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent evt) { // this updates the column image of invalid configurations when their checked state changes tableViewer.refresh(true); } }); } }