Bug 548164 - Allow sort customization
Change-Id: Ib1d62c9cdd548c98fe15cae8eeeb57362dbdaefe
Signed-off-by: Eugen Neufeld <eneufeld@eclipsesource.com>
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
index f97665c..04b3efd 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridControlSWTRenderer.java
@@ -68,6 +68,7 @@
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.viewers.ViewerRow;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.jface.gridviewer.GridViewerEditor;
@@ -394,7 +395,7 @@
// CHECKSTYLE.OFF: ParameterNumber
protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent, IObservableList list,
IObservableValue labelText, IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
- ObservableListContentProvider cp, ECPTableViewerComparator comparator,
+ ObservableListContentProvider cp, ViewerComparator comparator,
TableActionBar<? extends AbstractTableViewer> actionBar) {
// CHECKSTYLE.ON: ParameterNumber
return GridTableViewerFactory.fillDefaults(parent, SWT.NONE, list, labelText, labelTooltipText)
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
index 12a9242..957f5f7 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.nebula.grid/src/org/eclipse/emf/ecp/view/spi/table/nebula/grid/GridTableViewerComposite.java
@@ -88,6 +88,10 @@
private final IObservableValue<Feature> activeFilteringMode = new WritableValue<>();
+ private TableViewerComparator comparator;
+
+ private List<Integer> sortableColumns;
+
static {
FEATURE_MENU_LISTENERS.put(TableConfiguration.FEATURE_COLUMN_HIDE_SHOW,
comp -> comp.new ColumnHideShowMenuListener());
@@ -236,6 +240,8 @@
@Override
public void setComparator(final TableViewerComparator comparator, List<Integer> sortableColumns) {
+ this.comparator = comparator;
+ this.sortableColumns = sortableColumns;
for (int i = 0; i < getTableViewer().getGrid().getColumns().length; i++) {
if (!sortableColumns.contains(i)) {
continue;
@@ -245,16 +251,7 @@
final SelectionAdapter selectionAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- // Reset other columns to avoid left over sort indicators
- for (final int index : sortableColumns) {
- final GridColumn column = getTableViewer().getGrid().getColumns()[index];
- if (index != j && column.getSort() != SWT.NONE) {
- column.setSort(SWT.NONE);
- }
- }
- comparator.setColumn(j);
- tableColumn.setSort(comparator.getDirection());
- gridTableViewer.refresh();
+ setCompareColumn(j);
}
};
tableColumn.addSelectionListener(selectionAdapter);
@@ -680,4 +677,19 @@
}
}
+ @Override
+ public void setCompareColumn(int columnIndex) {
+ // Reset other columns to avoid left over sort indicators
+ for (final int index : sortableColumns) {
+ final GridColumn column = getTableViewer().getGrid().getColumns()[index];
+ if (index != columnIndex && column.getSort() != SWT.NONE) {
+ column.setSort(SWT.NONE);
+ }
+ }
+ comparator.setColumn(columnIndex);
+ final GridColumn tableColumn = getTableViewer().getGrid().getColumns()[columnIndex];
+ tableColumn.setSort(comparator.getDirection());
+ gridTableViewer.refresh();
+ }
+
}
diff --git a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
index fb7a303..3905785 100644
--- a/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
+++ b/bundles/org.eclipse.emf.ecp.view.table.ui.swt/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlSWTRenderer.java
@@ -410,8 +410,8 @@
/* content provider */
final ObservableListContentProvider cp = new ObservableListContentProvider();
- final ECPTableViewerComparator comparator = getVElement().isMoveUpDownDisabled()
- ? new ECPTableViewerComparator()
+ final TableControlComparator comparator = getVElement().isMoveUpDownDisabled()
+ ? createTableViewerComparator()
: null;
/* render */
@@ -485,6 +485,16 @@
}
/**
+ * Creates a TableControlComparator.
+ *
+ * @return TableControlComparator
+ * @since 1.22
+ */
+ protected TableControlComparator createTableViewerComparator() {
+ return new ECPTableViewerComparator();
+ }
+
+ /**
* Create the {@link ViewerActionContext} for the table viewer.
*
* @return the {@link TableRendererViewerActionContext}
@@ -677,6 +687,39 @@
* @param actionBar the {@link ActionBar}
* @return the {@link TableViewerSWTBuilder}
* @since 1.18
+ * @deprecated Please use
+ * {@link #createTableViewerSWTBuilder(Composite, IObservableList, IObservableValue, IObservableValue, TableViewerCompositeBuilder, ObservableListContentProvider, ViewerComparator, TableActionBar)}
+ * instead
+ */
+ @Deprecated
+ // CHECKSTYLE.OFF: ParameterNumber
+ protected TableViewerSWTBuilder createTableViewerSWTBuilder(Composite parent,
+ @SuppressWarnings("rawtypes") IObservableList list,
+ @SuppressWarnings("rawtypes") IObservableValue labelText,
+ @SuppressWarnings("rawtypes") IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
+ ObservableListContentProvider cp, ECPTableViewerComparator comparator,
+ TableActionBar<? extends AbstractTableViewer> actionBar) {
+ // CHECKSTYLE.ON: ParameterNumber
+
+ return createTableViewerSWTBuilder(parent, list, labelText, labelTooltipText, compositeBuilder, cp,
+ (ViewerComparator) comparator,
+ actionBar);
+ }
+
+ /**
+ * Creates a new {@link TableViewerSWTBuilder}.
+ *
+ * @param parent the parent {@link Composite}
+ * @param list the input object
+ * @param labelText the title
+ * @param labelTooltipText the tooltip
+ * @param compositeBuilder the {@link TableViewerCompositeBuilder}
+ * @param cp the content provider
+ * @param comparator the {@link ViewerComparator}; has no effect if move up/down
+ * functionality is enabled
+ * @param actionBar the {@link ActionBar}
+ * @return the {@link TableViewerSWTBuilder}
+ * @since 1.22
*
*/
// CHECKSTYLE.OFF: ParameterNumber
@@ -684,7 +727,7 @@
@SuppressWarnings("rawtypes") IObservableList list,
@SuppressWarnings("rawtypes") IObservableValue labelText,
@SuppressWarnings("rawtypes") IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
- ObservableListContentProvider cp, ECPTableViewerComparator comparator,
+ ObservableListContentProvider cp, ViewerComparator comparator,
TableActionBar<? extends AbstractTableViewer> actionBar) {
// CHECKSTYLE.ON: ParameterNumber
return TableViewerFactory.fillDefaults(parent, SWT.NONE, list, labelText, labelTooltipText)
@@ -913,7 +956,7 @@
}
}
- private void setupSorting(final ECPTableViewerComparator comparator, int regularColumnsStartIndex,
+ private void setupSorting(final TableViewerComparator comparator, int regularColumnsStartIndex,
final AbstractTableViewerComposite<? extends AbstractTableViewer> tableViewerComposite) {
final VTTableStyleProperty tableStyleProperty = getTableStyleProperty();
@@ -1721,6 +1764,9 @@
// We might have ignored columns at the beginning
propertyIndex = propertyIndex - regularColumnsStartIndex;
+ if (propertyIndex < 0) {
+ return 0;
+ }
int rc = 0;
final VDomainModelReference dmr = getColumnDomainModelReferences().get(propertyIndex);
@@ -2430,6 +2476,16 @@
}
/**
+ * This class combines the {@link ViewerComparator} with the {@link TableViewerComparator}.
+ * This is needed to allow customizations.
+ *
+ * @author Eugen Neufeld
+ * @since 1.22
+ */
+ protected abstract class TableControlComparator extends ViewerComparator implements TableViewerComparator {
+ }
+
+ /**
* The {@link ViewerComparator} for this table which allows 3 states for sort order:
* none, up and down.
*
@@ -2437,7 +2493,7 @@
* @since 1.10
*
*/
- protected class ECPTableViewerComparator extends ViewerComparator implements TableViewerComparator {
+ protected class ECPTableViewerComparator extends TableControlComparator {
private int propertyIndex;
private static final int NONE = 0;
private int direction = NONE;
@@ -2475,10 +2531,10 @@
}
// No sorting is the same as no column being selected for sorting
if (direction == NONE) {
- sortColumnFeature = java.util.Optional.empty();
+ setSortColumnFeature(null);
} else {
// columnFeatures starts at index 0 with the first regular column
- sortColumnFeature = java.util.Optional.of(columnFeatures[propertyIndex - regularColumnsStartIndex]);
+ setSortColumnFeature(getColumnFeature(propertyIndex));
}
}
@@ -2499,11 +2555,11 @@
public void notifyChange(ModelChangeNotification notification) {
final int event = notification.getRawNotification().getEventType();
if (notification.getStructuralFeature() == tableEReference
- && sortColumnFeature.isPresent()
+ && getSortColumnFeature().isPresent()
&& (event == Notification.ADD || event == Notification.ADD_MANY)) {
sortAndReveal(notification.getNewEObjects());
- } else if (sortColumnFeature.isPresent()
- && notification.getStructuralFeature() == sortColumnFeature.get()) {
+ } else if (getSortColumnFeature().isPresent()
+ && notification.getStructuralFeature() == getSortColumnFeature().get()) {
sortAndReveal(notification.getNotifier());
}
}
@@ -3014,4 +3070,32 @@
instanceName);
}
+ /**
+ * Returns the current sort column feature.
+ *
+ * @return an {@link java.util.Optional} containing the feature used for sorting
+ */
+ protected java.util.Optional<EStructuralFeature> getSortColumnFeature() {
+ return sortColumnFeature;
+ }
+
+ /**
+ * Set the column to use for sorting.
+ *
+ * @param sortColumnFeature an optional containing the feature to use for sorting
+ */
+ protected void setSortColumnFeature(EStructuralFeature sortColumnFeature) {
+ this.sortColumnFeature = java.util.Optional.ofNullable(sortColumnFeature);
+ }
+
+ /**
+ * Find the feature for a specific index.
+ *
+ * @param propertyIndex The index to find the feature for
+ * @return The {@link EStructuralFeature} for the provided index
+ */
+ protected EStructuralFeature getColumnFeature(int propertyIndex) {
+ return columnFeatures[propertyIndex - regularColumnsStartIndex];
+ }
+
}
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
index 9cfef48..e75ad15 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/AbstractTableViewerComposite.java
@@ -380,4 +380,11 @@
*/
public abstract void setComparator(TableViewerComparator comparator, List<Integer> sortableColumns);
+ /**
+ * Allow to set an initial sort.
+ *
+ * @param column The column to sort
+ * @since 1.22
+ */
+ public abstract void setCompareColumn(int column);
}
diff --git a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
index 84b6dad..80d0613 100644
--- a/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
+++ b/bundles/org.eclipse.emfforms.swt.table/src/org/eclipse/emfforms/spi/swt/table/TableViewerComposite.java
@@ -39,6 +39,7 @@
public class TableViewerComposite extends AbstractTableViewerComposite<TableViewer> {
private TableViewer tableViewer;
+ private TableViewerComparator comparator;
/**
* Default constructor.
@@ -138,6 +139,7 @@
@Override
public void setComparator(final TableViewerComparator comparator, List<Integer> sortableColumns) {
+ this.comparator = comparator;
for (int i = 0; i < getTableViewer().getTable().getColumns().length; i++) {
if (!sortableColumns.contains(i)) {
continue;
@@ -147,11 +149,7 @@
final SelectionAdapter selectionAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- comparator.setColumn(j);
- final int dir = comparator.getDirection();
- tableViewer.getTable().setSortDirection(dir);
- tableViewer.getTable().setSortColumn(tableColumn);
- tableViewer.refresh();
+ setCompareColumn(j);
}
};
tableColumn.addSelectionListener(selectionAdapter);
@@ -166,4 +164,13 @@
super.dispose();
}
+ @Override
+ public void setCompareColumn(int column) {
+ final TableColumn tableColumn = getTableViewer().getTable().getColumns()[column];
+ comparator.setColumn(column);
+ tableViewer.getTable().setSortDirection(comparator.getDirection());
+ tableViewer.getTable().setSortColumn(tableColumn);
+ tableViewer.refresh();
+ }
+
}
diff --git a/releng/org.eclipse.emf.ecp.releng/checkstyle/esmCheckstyleTest.xml b/releng/org.eclipse.emf.ecp.releng/checkstyle/esmCheckstyleTest.xml
index f7dfea2..f3f0439 100644
--- a/releng/org.eclipse.emf.ecp.releng/checkstyle/esmCheckstyleTest.xml
+++ b/releng/org.eclipse.emf.ecp.releng/checkstyle/esmCheckstyleTest.xml
@@ -47,6 +47,11 @@
<property name="onCommentFormat" value="// END REUSED CLASS"/>
<metadata name="com.atlassw.tools.eclipse.checkstyle.comment" value="High Complexity Code Warning Suppression"/>
</module>
+ <module name="SuppressionCommentFilter">
+ <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
+ <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
+ <property name="checkFormat" value="$1"/>
+ </module>
<module name="PackageName"/>
<module name="ParameterName"/>
<module name="StaticVariableName"/>
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/All Tests for view.table.ui.swt.launch b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/All Tests for view.table.ui.swt.launch
index bb2d5cf..2e1319a 100644
--- a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/All Tests for view.table.ui.swt.launch
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/All Tests for view.table.ui.swt.launch
@@ -33,8 +33,8 @@
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.platform.ide"/>
<booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,org.apache.batik.constants@default:default,org.apache.batik.css*1.10.0.v20180703-1553@default:default,org.apache.batik.i18n@default:default,org.apache.batik.util*1.10.0.v20180703-1553@default:default,org.apache.commons.codec@default:default,org.apache.commons.jxpath@default:default,org.apache.commons.logging*1.1.1.v201101211721@default:default,org.apache.commons.logging*1.2.0.v20180409-1502@default:default,org.apache.felix.scr@1:true,org.apache.xmlgraphics@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions.supplier@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.databinding.edit@default:default,org.eclipse.emf.databinding@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.emf.emfstore.client@default:default,org.eclipse.emf.emfstore.common.model@default:default,org.eclipse.emf.emfstore.common@default:default,org.eclipse.emf.emfstore.examplemodel.edit@default:default,org.eclipse.emf.emfstore.examplemodel@default:default,org.eclipse.emf.emfstore.migration@default:default,org.eclipse.emf.emfstore.server.model@default:default,org.eclipse.emf.emfstore.server@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.region@default:false,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.net4j.util@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi.util@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.cocoa.macosx.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.library@default:default,org.junit@default:default,org.mockito.mockito-core-hamcrest-modified@default:default,org.objenesis@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil*1.0.1.v200903091627@default:default,org.w3c.dom.svg@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.ecp.common.test@default:false,org.eclipse.emf.ecp.common.ui@default:default,org.eclipse.emf.ecp.common@default:default,org.eclipse.emf.ecp.core.test@default:false,org.eclipse.emf.ecp.core@default:default,org.eclipse.emf.ecp.edit.swt.test@default:false,org.eclipse.emf.ecp.edit.swt@default:default,org.eclipse.emf.ecp.edit@default:default,org.eclipse.emf.ecp.emfstore.core@default:default,org.eclipse.emf.ecp.makeithappen.model@default:default,org.eclipse.emf.ecp.test.common@default:default,org.eclipse.emf.ecp.test.model@default:default,org.eclipse.emf.ecp.ui.view.swt.test@default:false,org.eclipse.emf.ecp.ui.view.swt@default:default,org.eclipse.emf.ecp.ui.view.test@default:default,org.eclipse.emf.ecp.ui.view@default:default,org.eclipse.emf.ecp.view.context.tests@default:false,org.eclipse.emf.ecp.view.context@default:default,org.eclipse.emf.ecp.view.core.swt.tests@default:false,org.eclipse.emf.ecp.view.core.swt@default:default,org.eclipse.emf.ecp.view.group.model@default:default,org.eclipse.emf.ecp.view.label.model@default:default,org.eclipse.emf.ecp.view.label.ui.swt@default:default,org.eclipse.emf.ecp.view.migrator@default:default,org.eclipse.emf.ecp.view.model.common.test@default:false,org.eclipse.emf.ecp.view.model.common@default:default,org.eclipse.emf.ecp.view.model.provider.generator@default:default,org.eclipse.emf.ecp.view.model.provider.xmi.test@default:false,org.eclipse.emf.ecp.view.model.provider.xmi@default:default,org.eclipse.emf.ecp.view.model.test@default:false,org.eclipse.emf.ecp.view.model@default:default,org.eclipse.emf.ecp.view.swt.layout@default:default,org.eclipse.emf.ecp.view.table.columnservice@default:default,org.eclipse.emf.ecp.view.table.model.test@default:false,org.eclipse.emf.ecp.view.table.model@default:default,org.eclipse.emf.ecp.view.table.test.common@default:default,org.eclipse.emf.ecp.view.table.ui.swt.test@default:false,org.eclipse.emf.ecp.view.table.ui.swt@default:default,org.eclipse.emf.ecp.view.template.annotation.model@default:default,org.eclipse.emf.ecp.view.template.model.test@default:false,org.eclipse.emf.ecp.view.template.model@default:default,org.eclipse.emf.ecp.view.template.service@default:default,org.eclipse.emf.ecp.view.test.common.swt@default:default,org.eclipse.emf.ecp.view.test.common@default:default,org.eclipse.emf.ecp.view.util.swt@default:default,org.eclipse.emf.ecp.view.validation.test@default:false,org.eclipse.emf.ecp.view.validation@default:default,org.eclipse.emf.ecp.view.vertical.model@default:default,org.eclipse.emf.rap.edit.ui.minimal@default:default,org.eclipse.emfforms.common.prevalidation@default:default,org.eclipse.emfforms.common.validation.tests@default:false,org.eclipse.emfforms.common.validation@default:default,org.eclipse.emfforms.common@default:default,org.eclipse.emfforms.core.bazaar.tests@default:false,org.eclipse.emfforms.core.bazaar@default:default,org.eclipse.emfforms.core.services.databinding.featurepath@default:default,org.eclipse.emfforms.core.services.databinding.testmodel@default:default,org.eclipse.emfforms.core.services.domainexpander.default.tests@default:false,org.eclipse.emfforms.core.services.domainexpander.default@default:default,org.eclipse.emfforms.core.services.domainexpander.table@default:default,org.eclipse.emfforms.core.services.editsupport@default:default,org.eclipse.emfforms.core.services.emf.tests@default:false,org.eclipse.emfforms.core.services.emf@default:default,org.eclipse.emfforms.core.services.emfspecificservice@default:default,org.eclipse.emfforms.core.services.legacy.tests@default:false,org.eclipse.emfforms.core.services.legacy@default:default,org.eclipse.emfforms.core.services.locale.default@default:default,org.eclipse.emfforms.core.services.mappingprovider.default@default:default,org.eclipse.emfforms.core.services.mappingprovider.table.panel@default:default,org.eclipse.emfforms.core.services.mappingprovider.table@default:default,org.eclipse.emfforms.core.services.segments.featurepath@default:default,org.eclipse.emfforms.core.services.segments.multi@default:default,org.eclipse.emfforms.core.services.segments@default:default,org.eclipse.emfforms.core.services.structuralchange.default@default:default,org.eclipse.emfforms.core.services.structuralchange.table@default:default,org.eclipse.emfforms.core.services.structuralchange@default:default,org.eclipse.emfforms.core.services.tests@default:false,org.eclipse.emfforms.core.services@default:default,org.eclipse.emfforms.localization.tests@default:false,org.eclipse.emfforms.localization@default:default,org.eclipse.emfforms.swt.common.test@default:default,org.eclipse.emfforms.swt.core.di@default:default,org.eclipse.emfforms.swt.core.tests@default:false,org.eclipse.emfforms.swt.core@default:default,org.eclipse.emfforms.swt.table@default:default,org.eclipse.emfforms.view.annotation.model@default:default,org.eclipse.emfforms.view.controlgrid.model@default:default,org.eclipse.emfforms.view.multisegment.model@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu,javax.annotation,javax.inject,org.apache.batik.constants,org.apache.batik.css*1.10.0.v20180703-1553,org.apache.batik.i18n,org.apache.batik.util*1.10.0.v20180703-1553,org.apache.commons.codec,org.apache.commons.io,org.apache.commons.jxpath,org.apache.commons.logging*1.1.1.v201101211721,org.apache.commons.logging*1.2.0.v20180409-1502,org.apache.felix.scr,org.apache.log4j,org.apache.xmlgraphics,org.eclipse.ant.core,org.eclipse.compare.core,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.databinding,org.eclipse.core.databinding.observable,org.eclipse.core.databinding.property,org.eclipse.core.expressions,org.eclipse.core.filesystem,org.eclipse.core.filesystem.linux.x86_64,org.eclipse.core.jobs,org.eclipse.core.resources,org.eclipse.core.runtime,org.eclipse.core.variables,org.eclipse.e4.core.commands,org.eclipse.e4.core.contexts,org.eclipse.e4.core.di,org.eclipse.e4.core.di.annotations,org.eclipse.e4.core.di.extensions,org.eclipse.e4.core.di.extensions.supplier,org.eclipse.e4.core.services,org.eclipse.e4.emf.xpath,org.eclipse.e4.ui.bindings,org.eclipse.e4.ui.css.core,org.eclipse.e4.ui.css.swt,org.eclipse.e4.ui.css.swt.theme,org.eclipse.e4.ui.di,org.eclipse.e4.ui.model.workbench,org.eclipse.e4.ui.services,org.eclipse.e4.ui.swt.gtk,org.eclipse.e4.ui.widgets,org.eclipse.e4.ui.workbench,org.eclipse.e4.ui.workbench.addons.swt,org.eclipse.e4.ui.workbench.renderers.swt,org.eclipse.e4.ui.workbench.swt,org.eclipse.e4.ui.workbench3,org.eclipse.emf.common,org.eclipse.emf.common.ui,org.eclipse.emf.databinding,org.eclipse.emf.databinding.edit,org.eclipse.emf.ecore,org.eclipse.emf.ecore.change,org.eclipse.emf.ecore.edit,org.eclipse.emf.ecore.xmi,org.eclipse.emf.edit,org.eclipse.emf.edit.ui,org.eclipse.emf.emfstore.client,org.eclipse.emf.emfstore.common,org.eclipse.emf.emfstore.common.model,org.eclipse.emf.emfstore.examplemodel,org.eclipse.emf.emfstore.examplemodel.edit,org.eclipse.emf.emfstore.migration,org.eclipse.emf.emfstore.server,org.eclipse.emf.emfstore.server.model,org.eclipse.equinox.app,org.eclipse.equinox.bidi,org.eclipse.equinox.common,org.eclipse.equinox.ds,org.eclipse.equinox.event,org.eclipse.equinox.p2.core,org.eclipse.equinox.p2.engine,org.eclipse.equinox.p2.metadata,org.eclipse.equinox.p2.metadata.repository,org.eclipse.equinox.p2.repository,org.eclipse.equinox.preferences,org.eclipse.equinox.region,org.eclipse.equinox.registry,org.eclipse.equinox.security,org.eclipse.equinox.security.linux.x86_64,org.eclipse.equinox.transforms.hook,org.eclipse.equinox.weaving.hook,org.eclipse.help,org.eclipse.jface,org.eclipse.jface.databinding,org.eclipse.jface.text,org.eclipse.net4j.util,org.eclipse.osgi,org.eclipse.osgi.compatibility.state,org.eclipse.osgi.services,org.eclipse.osgi.util,org.eclipse.swt,org.eclipse.swt.gtk.linux.x86_64,org.eclipse.swtbot.junit4_x,org.eclipse.swtbot.swt.finder,org.eclipse.team.core,org.eclipse.text,org.eclipse.ui,org.eclipse.ui.forms,org.eclipse.ui.ide,org.eclipse.ui.navigator,org.eclipse.ui.trace,org.eclipse.ui.views,org.eclipse.ui.workbench,org.eclipse.xtext.logging,org.hamcrest.core,org.hamcrest.library,org.junit,org.mockito.mockito-core-hamcrest-modified,org.objenesis,org.tukaani.xz,org.w3c.css.sac,org.w3c.dom.events,org.w3c.dom.smil*1.0.1.v200903091627,org.w3c.dom.svg"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.emf.ecp.common,org.eclipse.emf.ecp.common.ui,org.eclipse.emf.ecp.common.ui.nl_de,org.eclipse.emf.ecp.core,org.eclipse.emf.ecp.core.nl_de,org.eclipse.emf.ecp.edit,org.eclipse.emf.ecp.edit.nl_de,org.eclipse.emf.ecp.edit.swt,org.eclipse.emf.ecp.edit.swt.nl_de,org.eclipse.emf.ecp.emfstore.core,org.eclipse.emf.ecp.makeithappen.model,org.eclipse.emf.ecp.test.common,org.eclipse.emf.ecp.ui,org.eclipse.emf.ecp.ui.nl_de,org.eclipse.emf.ecp.ui.view,org.eclipse.emf.ecp.ui.view.swt,org.eclipse.emf.ecp.ui.view.swt.di,org.eclipse.emf.ecp.ui.view.test@default:default,org.eclipse.emf.ecp.validation,org.eclipse.emf.ecp.validation.nl_de,org.eclipse.emf.ecp.view.categorization.model,org.eclipse.emf.ecp.view.categorization.model.edit,org.eclipse.emf.ecp.view.categorization.model.edit.nl_de,org.eclipse.emf.ecp.view.categorization.swt,org.eclipse.emf.ecp.view.context,org.eclipse.emf.ecp.view.control.multireference,org.eclipse.emf.ecp.view.core.swt,org.eclipse.emf.ecp.view.core.swt.nl_de,org.eclipse.emf.ecp.view.group.model,org.eclipse.emf.ecp.view.group.ui.swt,org.eclipse.emf.ecp.view.horizontal.model,org.eclipse.emf.ecp.view.horizontal.ui.swt,org.eclipse.emf.ecp.view.indexdmr.model,org.eclipse.emf.ecp.view.label.model,org.eclipse.emf.ecp.view.label.ui.swt,org.eclipse.emf.ecp.view.mappingdmr.model,org.eclipse.emf.ecp.view.migrator,org.eclipse.emf.ecp.view.model,org.eclipse.emf.ecp.view.model.common,org.eclipse.emf.ecp.view.model.common.di,org.eclipse.emf.ecp.view.model.edit,org.eclipse.emf.ecp.view.model.edit.nl_de,org.eclipse.emf.ecp.view.model.nl_de,org.eclipse.emf.ecp.view.model.provider.generator,org.eclipse.emf.ecp.view.model.provider.xmi,org.eclipse.emf.ecp.view.rule.model,org.eclipse.emf.ecp.view.swt.layout,org.eclipse.emf.ecp.view.table.columnservice,org.eclipse.emf.ecp.view.table.model,org.eclipse.emf.ecp.view.table.model.nl_de,org.eclipse.emf.ecp.view.table.test.common,org.eclipse.emf.ecp.view.table.ui.swt,org.eclipse.emf.ecp.view.table.ui.swt.nl_de,org.eclipse.emf.ecp.view.table.ui.swt.test,org.eclipse.emf.ecp.view.table.validation,org.eclipse.emf.ecp.view.template.annotation.model,org.eclipse.emf.ecp.view.template.model,org.eclipse.emf.ecp.view.template.service,org.eclipse.emf.ecp.view.test.common.swt,org.eclipse.emf.ecp.view.treemasterdetail.model,org.eclipse.emf.ecp.view.treemasterdetail.ui.swt,org.eclipse.emf.ecp.view.treemasterdetail.validation,org.eclipse.emf.ecp.view.util.swt,org.eclipse.emf.ecp.view.validation,org.eclipse.emf.ecp.view.vertical.model,org.eclipse.emf.ecp.view.vertical.ui.swt,org.eclipse.emfforms.common,org.eclipse.emfforms.common.prevalidation,org.eclipse.emfforms.common.validation,org.eclipse.emfforms.core.bazaar,org.eclipse.emfforms.core.services,org.eclipse.emfforms.core.services.databinding.featurepath,org.eclipse.emfforms.core.services.databinding.index,org.eclipse.emfforms.core.services.databinding.mapping,org.eclipse.emfforms.core.services.domainexpander.default,org.eclipse.emfforms.core.services.domainexpander.index,org.eclipse.emfforms.core.services.domainexpander.mapping,org.eclipse.emfforms.core.services.domainexpander.table,org.eclipse.emfforms.core.services.editsupport,org.eclipse.emfforms.core.services.emf,org.eclipse.emfforms.core.services.emfspecificservice,org.eclipse.emfforms.core.services.legacy,org.eclipse.emfforms.core.services.locale.default,org.eclipse.emfforms.core.services.mappingprovider.default,org.eclipse.emfforms.core.services.mappingprovider.table,org.eclipse.emfforms.core.services.mappingprovider.table.panel,org.eclipse.emfforms.core.services.segments,org.eclipse.emfforms.core.services.segments.featurepath,org.eclipse.emfforms.core.services.segments.index,org.eclipse.emfforms.core.services.segments.mapping,org.eclipse.emfforms.core.services.segments.multi,org.eclipse.emfforms.core.services.structuralchange,org.eclipse.emfforms.core.services.structuralchange.default,org.eclipse.emfforms.core.services.structuralchange.index,org.eclipse.emfforms.core.services.structuralchange.mapping,org.eclipse.emfforms.core.services.structuralchange.table,org.eclipse.emfforms.editor,org.eclipse.emfforms.editor.ecore,org.eclipse.emfforms.localization,org.eclipse.emfforms.setup.base,org.eclipse.emfforms.swt.control.multiattribute,org.eclipse.emfforms.swt.core,org.eclipse.emfforms.swt.core.di,org.eclipse.emfforms.swt.core.di.extension,org.eclipse.emfforms.swt.core.plugin,org.eclipse.emfforms.swt.table,org.eclipse.emfforms.swt.treemasterdetail,org.eclipse.emfforms.swt.treemasterdetail.decorator.validation.default,org.eclipse.emfforms.view.annotation.model,org.eclipse.emfforms.view.controlgrid.model,org.eclipse.emfforms.view.indexsegment.model,org.eclipse.emfforms.view.mappingsegment.model,org.eclipse.emfforms.view.model.localization,org.eclipse.emfforms.view.multisegment.model"/>
<booleanAttribute key="show_selected_only" value="false"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlRendererSort_PTest.java b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlRendererSort_PTest.java
new file mode 100644
index 0000000..177b04c
--- /dev/null
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/spi/table/swt/TableControlRendererSort_PTest.java
@@ -0,0 +1,244 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2019 EclipseSource Muenchen GmbH and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * eugen - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.emf.ecp.view.spi.table.swt;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.inject.Inject;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
+import org.eclipse.emf.ecp.view.spi.model.VElement;
+import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
+import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
+import org.eclipse.emf.ecp.view.spi.renderer.NoPropertyDescriptorFoundExeption;
+import org.eclipse.emf.ecp.view.spi.renderer.NoRendererFoundException;
+import org.eclipse.emf.ecp.view.spi.table.model.VTableControl;
+import org.eclipse.emf.ecp.view.spi.table.model.VTableDomainModelReference;
+import org.eclipse.emf.ecp.view.spi.util.swt.ImageRegistryService;
+import org.eclipse.emf.ecp.view.table.test.common.TableTestUtil;
+import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
+import org.eclipse.emf.ecp.view.test.common.swt.spi.DatabindingClassRunner;
+import org.eclipse.emf.ecp.view.test.common.swt.spi.SWTTestUtil;
+import org.eclipse.emf.ecp.view.test.common.swt.spi.SWTViewTestHelper;
+import org.eclipse.emfforms.spi.common.report.ReportService;
+import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
+import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
+import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
+import org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer;
+import org.eclipse.emfforms.spi.swt.core.EMFFormsNoRendererException;
+import org.eclipse.emfforms.spi.swt.core.di.EMFFormsDIRendererService;
+import org.eclipse.emfforms.spi.swt.core.layout.SWTGridCell;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @author eugen
+ *
+ */
+@RunWith(DatabindingClassRunner.class)
+public class TableControlRendererSort_PTest {
+
+ private static class TableControlSWTRendererSort extends TableControlSWTRenderer {
+
+ @Inject
+ // CHECKSTYLE.OFF: ParameterNumber
+ TableControlSWTRendererSort(VTableControl vElement, ViewModelContext viewContext,
+ ReportService reportService,
+ EMFFormsDatabindingEMF emfFormsDatabinding, EMFFormsLabelProvider emfFormsLabelProvider,
+ VTViewTemplateProvider vtViewTemplateProvider, ImageRegistryService imageRegistryService,
+ EMFFormsEditSupport emfFormsEditSupport) {
+ // CHECKSTYLE.ON: ParameterNumber
+ super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider,
+ vtViewTemplateProvider,
+ imageRegistryService, emfFormsEditSupport);
+ }
+
+ @Override
+ protected TableControlComparator createTableViewerComparator() {
+ // CHECKSTYLE.OFF: AnonInnerLength
+ return new TableControlComparator() {
+ private int propertyIndex;
+ private int direction;
+
+ @Override
+ public int getDirection() {
+ switch (direction) {
+ case 0:
+ return SWT.DOWN; // ascending
+ case 1:
+ return SWT.UP; // descending
+ default:
+ return SWT.DOWN;
+ }
+ }
+
+ @Override
+ public void setColumn(int column) {
+ if (column == propertyIndex) {
+ // Same column as last sort; toggle the direction
+ direction = (direction + 1) % 2;
+ } else {
+ // New column; do an ascending sort
+ propertyIndex = column;
+ direction = 0;
+ }
+ // columnFeatures starts at index 0 with the first regular column
+ setSortColumnFeature(getColumnFeature(propertyIndex));
+ }
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ return TableControlSWTRendererSort.this.compare(viewer, e1, e2, direction + 1, propertyIndex);
+ }
+ };
+ // CHECKSTYLE.ON: AnonInnerLength
+ }
+
+ @Override
+ protected Control renderTableControl(SWTGridCell gridCell, Composite parent)
+ throws NoRendererFoundException, NoPropertyDescriptorFoundExeption {
+ final Control result = super.renderTableControl(gridCell, parent);
+ getTableViewerComposite().setCompareColumn(1);
+ return result;
+ }
+
+ }
+
+ private static class TableControlSWTRendererSortService implements EMFFormsDIRendererService<VTableControl> {
+
+ @Override
+ public double isApplicable(VElement vElement, ViewModelContext viewModelContext) {
+ if (!VTableControl.class.isInstance(vElement)) {
+ return NOT_APPLICABLE;
+ }
+ final VTableControl tableControl = (VTableControl) vElement;
+ final VTableDomainModelReference domainRef = (VTableDomainModelReference) tableControl
+ .getDomainModelReference();
+ if (domainRef.getDomainModelEFeature() == EcorePackage.eINSTANCE.getEClass_EStructuralFeatures()) {
+ return Double.MAX_VALUE;
+ }
+ return NOT_APPLICABLE;
+ }
+
+ @Override
+ public Class<? extends AbstractSWTRenderer<VTableControl>> getRendererClass() {
+ return TableControlSWTRendererSort.class;
+ }
+
+ }
+
+ private static ServiceRegistration<EMFFormsDIRendererService> serviceRegistration;
+ private Shell shell;
+
+ @BeforeClass
+ public static void beforeClass() {
+ final Bundle bundle = FrameworkUtil.getBundle(TableControlRendererSort_PTest.class);
+ final BundleContext bundleContext = bundle.getBundleContext();
+ final Dictionary<String, Object> properties = new Hashtable<String, Object>();
+ properties.put(Constants.SERVICE_RANKING, Double.MAX_VALUE);
+ serviceRegistration = bundleContext.registerService(EMFFormsDIRendererService.class,
+ new TableControlSWTRendererSortService(), properties);
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ serviceRegistration.unregister();
+ }
+
+ @Before
+ public void init() {
+ shell = SWTViewTestHelper.createShell();
+ }
+
+ @After
+ public void after() {
+ if (shell != null && !shell.isDisposed()) {
+ shell.dispose();
+ }
+ }
+
+ @Test
+ public void tableCustomSort()
+ throws EMFFormsNoRendererException, NoRendererFoundException, NoPropertyDescriptorFoundExeption {
+
+ // table control
+ final VTableControl tableControl = TableTestUtil.createTableControl();
+ final VTableDomainModelReference tableDMR = (VTableDomainModelReference) tableControl.getDomainModelReference();
+ tableDMR.setDomainModelEFeature(EcorePackage.eINSTANCE.getEClass_EStructuralFeatures());
+ tableDMR.getColumnDomainModelReferences().add(createDMR(EcorePackage.eINSTANCE.getENamedElement_Name()));
+
+ // render
+ shell.open();
+
+ final EClass domain = EcoreFactory.eINSTANCE.createEClass();
+ final EAttribute att1 = EcoreFactory.eINSTANCE.createEAttribute();
+ att1.setName("zzz");
+ final EAttribute att2 = EcoreFactory.eINSTANCE.createEAttribute();
+ att2.setName("aaa");
+ domain.getEStructuralFeatures().add(att1);
+ domain.getEStructuralFeatures().add(att2);
+
+ Control control = null;
+ try {
+ control = SWTViewTestHelper.render(tableControl, domain, shell);
+ } catch (NoRendererFoundException | NoPropertyDescriptorFoundExeption | EMFFormsNoRendererException ex) {
+ fail("An exception occurred while rendering the table: " + ex.getMessage());
+ }
+ if (control == null) {
+ fail("No control was rendered");
+ }
+ final Table table = SWTTestUtil.findControl(control, 0, Table.class);
+
+ SWTTestUtil.waitForUIThread();
+ assertEquals(SWT.DOWN, table.getSortDirection()); // SWT.DOWN := ascending sorting
+
+ final EAttribute first = (EAttribute) table.getItem(0).getData();
+ assertEquals("aaa", first.getName());
+
+ final EAttribute second = (EAttribute) table.getItem(1).getData();
+ assertEquals("zzz", second.getName());
+ }
+
+ private static VFeaturePathDomainModelReference createDMR(EAttribute attribute, EReference... refs) {
+ final VFeaturePathDomainModelReference dmr = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
+ dmr.setDomainModelEFeature(attribute);
+ dmr.getDomainModelEReferencePath().addAll(Arrays.asList(refs));
+ return dmr;
+ }
+}
diff --git a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/table/ui/swt/test/AllTests.java b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/table/ui/swt/test/AllTests.java
index f7dedd3..9786f30 100644
--- a/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/table/ui/swt/test/AllTests.java
+++ b/tests/org.eclipse.emf.ecp.view.table.ui.swt.test/src/org/eclipse/emf/ecp/view/table/ui/swt/test/AllTests.java
@@ -20,6 +20,7 @@
import org.eclipse.emf.ecp.view.spi.table.swt.SWTTableDatabindingLabel_PTest;
import org.eclipse.emf.ecp.view.spi.table.swt.SWTTable_PTest;
import org.eclipse.emf.ecp.view.spi.table.swt.TableControlDetailPanelRenderer_PTest;
+import org.eclipse.emf.ecp.view.spi.table.swt.TableControlRendererSort_PTest;
import org.eclipse.emf.ecp.view.spi.table.swt.TableControlSWTRendererPerformance_PTest;
import org.eclipse.emf.ecp.view.spi.table.swt.TableControlSWTRenderer_ITest;
import org.junit.runner.RunWith;
@@ -30,7 +31,7 @@
@SuiteClasses({ SWTTable_PTest.class, SWTTableDatabindingLabel_PTest.class, RunnableManagerTest.class,
TableControlDetailPanelRenderer_PTest.class, MultiReferenceTooltipModifier_PTest.class,
MultiReferenceCellEditor_PTest.class, TableControlSWTRendererPerformance_PTest.class,
- TableControlSWTRenderer_ITest.class,
+ TableControlSWTRenderer_ITest.class, TableControlRendererSort_PTest.class
})
public class AllTests {