/*******************************************************************************
* Copyright (c) 2014, 2015 Tasktop Technologies and others.
* 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.reviews.ui;
import java.util.List;
import org.eclipse.mylyn.reviews.core.model.IReview;
import org.eclipse.mylyn.reviews.ui.spi.editor.AbstractReviewTaskEditorPage;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.ui.IPageListener;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWindowListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.editor.IFormPage;
import com.google.common.collect.Lists;
public class ActiveReviewManager {
private IReview review = null;
private TaskEditor currentPart;
private final List<IActiveReviewListener> reviewListeners = Lists.newArrayList();
private final IPartListener editorPartListener = new IPartListener() {
public void partOpened(IWorkbenchPart part) {
}
public void partDeactivated(IWorkbenchPart part) {
}
public void partClosed(IWorkbenchPart part) {
if (part == currentPart) {
currentPart = null;
setReview(null);
}
}
public void partBroughtToTop(IWorkbenchPart part) {
}
public void partActivated(IWorkbenchPart part) {
if (part instanceof TaskEditor && currentPart != part) {
TaskEditor editor = (TaskEditor) part;
IFormPage page = editor.getActivePageInstance();
if (page instanceof AbstractReviewTaskEditorPage) {
currentPart = editor;
AbstractReviewTaskEditorPage reviewPage = (AbstractReviewTaskEditorPage) page;
setReview(reviewPage.getReview());
}
}
}
};
private final IPageListener pageListener = new IPageListener() {
private IWorkbenchPage activePage;
public void pageOpened(IWorkbenchPage page) {
}
public void pageClosed(IWorkbenchPage page) {
pageActivated(null);
}
public void pageActivated(IWorkbenchPage page) {
if (page != activePage) {
if (activePage != null) {
activePage.removePartListener(editorPartListener);
}
if (page != null) {
page.addPartListener(editorPartListener);
editorPartListener.partActivated(page.getActiveEditor());
}
activePage = page;
}
}
};
private final IWindowListener windowListener = new IWindowListener() {
public void windowOpened(IWorkbenchWindow window) {
}
public void windowDeactivated(IWorkbenchWindow window) {
window.removePageListener(pageListener);
}
public void windowClosed(IWorkbenchWindow window) {
}
public void windowActivated(IWorkbenchWindow window) {
window.addPageListener(pageListener);
pageListener.pageActivated(window.getActivePage());
}
};
public ActiveReviewManager() {
PlatformUI.getWorkbench().addWindowListener(windowListener);
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (activeWorkbenchWindow != null) {
activeWorkbenchWindow.addPageListener(pageListener);
windowListener.windowActivated(activeWorkbenchWindow);
}
}
public void setReview(IReview review) {
if (this.review != review) {
this.review = review;
if (review != null) {
for (IActiveReviewListener reviewListener : reviewListeners) {
reviewListener.reviewActivated(review);
}
} else {
for (IActiveReviewListener reviewListener : reviewListeners) {
reviewListener.reviewDeactivated();
}
}
}
}
public void addReviewListener(IActiveReviewListener listener) {
reviewListeners.add(listener);
}
public void removeReviewListener(IActiveReviewListener listener) {
reviewListeners.remove(listener);
}
public IReview getReview() {
return review;
}
public TaskEditor getCurrentPart() {
return currentPart;
}
}