Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EMF Compare/API Viewer FilteringGrouping
THIS PAGE IS ARCHIVED. IT IS PROBABLY OUTDATED AND WILL NOT BE UPDATED
The API has to allow to create a new viewer (Structure Viewer) from the result of a model comparison and to display the differences in relation to a given filtering and grouping configuration. The content of this viewer can be updated calling setInput(Object) method or modifying its filtering and grouping configuration through setDifferenceFilters(List<IDifferenceFilter>) and setDifferenceGroupingFacility(IDifferenceGroupingFacility).
It is the service class: CompareServices which contains this API:
StructureViewer getStructureViewer(Composite parent, ComparisonSnapshot input)
It is used to create and retrieve a viewer for the parent composite (for example, the control of a ViewPane) and from the result of a model comparison as input (ComparisonSnapshot).
The same thing, but with filters and grouping configuration to initialize the viewer:
StructureViewer getStructureViewer(Composite parent, ComparisonSnapshot input, List<IDifferenceFilter> filters, IDifferenceGroupingFacility groupingFacility)
Here is an example to return a viewer for "parent" with a filter on added elements:
final List<IDifferenceFilter> filters = DifferenceFilterRegistry.INSTANCE.getFilters(DifferenceFilterRegistry.FILTERING_ADDED_ELEMENTS_ID);
final ISelectionProvider provider = editor.getEditorSite().getSelectionProvider();
if (provider instanceof IInputProvider) {
final Object root = ((IInputProvider)provider).getInput();
if (root instanceof ComparisonSnapshot) {
return getStructureViewer(parent, root, filters, null);
}
}
Below, an API to open a view based on this viewer:
void openView(final ComparisonSnapshot input, final List<IDifferenceFilter> filters, final IDifferenceGroupingFacility group)
It enables to open the structure view from a comparion result (snapshot) with a given filtering and grouping configuration.
Here is an example to call this method:
final List<IDifferenceFilter> filters = DifferenceFilterRegistry.INSTANCE.getFilters(DifferenceFilterRegistry.FILTERING_ADDED_ELEMENTS_ID);
final ISelectionProvider provider = editor.getEditorSite().getSelectionProvider();
if (provider instanceof IInputProvider) {
final Object root = ((IInputProvider)provider).getInput();
if (root instanceof ComparisonSnapshot) {
CompareServices.openView((ComparisonSnapshot)root, filters, null);
}
}
The API can be called from an existing opened EMF Compare editor:
void openView(IEditorPart editor, final List<IDifferenceFilter> filters, final IDifferenceGroupingFacility group)
Here is an example to call this method:
IEditorPart editor = null;
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench != null) {
final IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
if (workbenchWindow != null) {
final IWorkbenchPage page = workbenchWindow.getActivePage();
if (page != null) {
final IEditorReference[] editors = page.getEditorReferences();
for (IEditorReference iEditorReference : editors) {
if (editorInput.equals(iEditorReference.getEditorInput())) {
editor = iEditorReference.getEditor(true);
break;
}
}
}
}
}
CompareServices.openView(editor, null, null);
These last methods can be called without filtering and grouping configuration. It is equivalent to put filters and group to null value.
void openView(final ComparisonSnapshot input)
void openView(IEditorPart editor)