/*
* Copyright (c) 2015 the original author or authors.
* 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
*
* Contributors:
* Etienne Studer & Donát Csikós (Gradle Inc.) - initial API and implementation and initial documentation
*/
package org.eclipse.buildship.ui.util.selection;
import com.google.common.base.Preconditions;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
/**
* Dynamically activates the context with the specified id whenever the currently active
* {@link IWorkbenchPartReference} belongs to the specified {@link IViewPart}.
*/
public final class ContextActivatingViewPartListener implements IPartListener2 {
private final IViewPart viewPart;
private final String contextId;
private final IContextService contextService;
private IContextActivation activation;
@SuppressWarnings({"cast", "RedundantCast"})
public ContextActivatingViewPartListener(String contextId, IViewPart viewPart) {
this.viewPart = Preconditions.checkNotNull(viewPart);
this.contextId = Preconditions.checkNotNull(contextId);
this.contextService = (IContextService) viewPart.getSite().getService(IContextService.class);
this.activation = null;
}
@Override
public void partActivated(IWorkbenchPartReference partReference) {
if (SelectionUtils.belongsToViewPart(partReference, this.viewPart)) {
this.activation = this.contextService.activateContext(this.contextId);
}
}
@Override
public void partDeactivated(IWorkbenchPartReference partReference) {
if (SelectionUtils.belongsToViewPart(partReference, this.viewPart) && this.activation != null) {
this.contextService.deactivateContext(this.activation);
}
}
@Override
public void partOpened(IWorkbenchPartReference partRef) {
}
@Override
public void partClosed(IWorkbenchPartReference partRef) {
}
@Override
public void partVisible(IWorkbenchPartReference partRef) {
}
@Override
public void partHidden(IWorkbenchPartReference partRef) {
}
@Override
public void partBroughtToTop(IWorkbenchPartReference partRef) {
}
@Override
public void partInputChanged(IWorkbenchPartReference partRef) {
}
}