blob: fb04c4c4b96839d63c3c4fa69583a54060e34c15 [file] [log] [blame]
/**
* Copyright (c) 2015 Mia-Software, and Soft-Maint
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Grégoire Dupé (Mia-Software) - Bug 471020 - Ecore Explorer View
* Thomas Cicognani (Soft-Maint) - Bug 471020 - Ecore Explorer View
*/
package org.eclipse.modisco.infra.browser.ecore.ui.internal.view;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPageListener;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.part.EditorPart;
public class EcoreExplorerWindowListener implements IPageListener,
IPartListener2 {
private final EcoreExplorerView view;
public EcoreExplorerWindowListener(final EcoreExplorerView view) {
this.view = view;
}
public void pageActivated(final IWorkbenchPage page) {
changeInput(page);
}
public void pageClosed(final IWorkbenchPage page) {
changeInput(page);
}
public void pageOpened(final IWorkbenchPage page) {
changeInput(page);
page.addPartListener(this);
}
public void partActivated(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partBroughtToTop(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partClosed(final IWorkbenchPartReference partRef) {
final IWorkbenchPage page = partRef.getPage();
final IEditorPart activeEditor = page.getActiveEditor();
if (activeEditor == null) {
this.view.changeInput(new StructuredSelection());
} else {
changeInput(activeEditor);
}
}
public void partDeactivated(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partOpened(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partHidden(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partVisible(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
public void partInputChanged(final IWorkbenchPartReference partRef) {
changeInput(partRef.getPart(false));
}
private void changeInput(final IWorkbenchPage page) {
final IWorkbenchPart part = page.getActivePart();
if (part != null) {
changeInput(part);
}
}
private void changeInput(final IWorkbenchPart part) {
if (part instanceof EditorPart) {
final EditorPart editorPart = (EditorPart) part;
final IEditorSite editorSite = editorPart.getEditorSite();
final ISelectionProvider selectionProvider = editorSite.getSelectionProvider();
final ISelection selection = selectionProvider.getSelection();
if (!this.view.changeInput(selection)) {
final IEditingDomainProvider edProvider = (IEditingDomainProvider) part
.getAdapter(IEditingDomainProvider.class);
final EditingDomain editingDomain = edProvider
.getEditingDomain();
final ResourceSet resourceSet = editingDomain.getResourceSet();
final Set<EObject> eObjects = new HashSet<EObject>();
for (Resource resource : resourceSet.getResources()) {
eObjects.addAll(resource.getContents());
}
this.view.changeInput(eObjects);
}
}
}
}