/******************************************************************************* * Copyright (c) 2013 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.alm.mylyn.ui.bridge.listener; import java.util.ArrayList; import java.util.List; import org.eclipse.jubula.client.alm.mylyn.ui.bridge.bridge.EditorContextStructureBridge; import org.eclipse.jubula.client.alm.mylyn.ui.bridge.constants.ContentType; import org.eclipse.jubula.client.core.events.DataEventDispatcher; import org.eclipse.jubula.client.core.events.DataEventDispatcher.IProjectStateListener; import org.eclipse.jubula.client.core.events.DataEventDispatcher.ProjectState; import org.eclipse.jubula.client.core.model.IAUTMainPO; import org.eclipse.jubula.client.core.model.INodePO; import org.eclipse.jubula.client.core.model.IProjectPO; import org.eclipse.jubula.client.core.model.ITestDataCategoryPO; import org.eclipse.jubula.client.core.persistence.GeneralStorage; import org.eclipse.jubula.client.ui.constants.Constants; import org.eclipse.jubula.client.ui.rcp.Plugin; import org.eclipse.jubula.client.ui.rcp.controllers.MultipleTCBTracker; import org.eclipse.jubula.client.ui.rcp.controllers.TreeViewContainerGUIController; import org.eclipse.jubula.client.ui.rcp.handlers.open.AbstractOpenHandler; import org.eclipse.jubula.client.ui.rcp.views.TestCaseBrowser; import org.eclipse.jubula.client.ui.views.ITreeViewerContainer; import org.eclipse.mylyn.context.core.AbstractContextStructureBridge; import org.eclipse.mylyn.context.core.ContextCore; import org.eclipse.mylyn.context.core.IInteractionElement; import org.eclipse.mylyn.monitor.ui.MonitorUi; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.ITaskActivationListener; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author BREDEX GmbH * @created Nov 10, 2010 */ public class TaskActivationListener implements ITaskActivationListener, IProjectStateListener { /** standard logging */ private static final Logger LOG = LoggerFactory.getLogger(DataEventDispatcher.class); /** {@inheritDoc} */ public void preTaskActivated(ITask task) { // do nothing } /** {@inheritDoc} */ public void preTaskDeactivated(ITask task) { // do nothing } /** {@inheritDoc} */ public void taskActivated(ITask task) { closeAllEditors(); if (GeneralStorage.getInstance().getProject() != null) { restoreOpenEditors(task); } } /** * @param task * - the active task */ private void restoreOpenEditors(ITask task) { List<IInteractionElement> interesting = ContextCore.getContextManager() .getActiveContext().getInteresting(); List<String> handles = new ArrayList<String>(); for (IInteractionElement element : interesting) { handles.add(element.getHandleIdentifier()); IProjectPO project = GeneralStorage.getInstance().getProject(); if (project != null) { if (element.getContentType().equals(ContentType.CTD_EDITOR)) { ITestDataCategoryPO centralTestData = project .getTestDataCubeCont(); if (centralTestData != null) { IEditorPart editor = AbstractOpenHandler .openEditor(centralTestData); if (editor != null) { editor.getSite().getPage().activate(editor); } } } else if (element.getContentType().equals( ContentType.OM_EDITOR)) { for (IAUTMainPO po : project.getAutMainList()) { if (po != null && po.getGuid().equals( element.getHandleIdentifier())) { IEditorPart editor = AbstractOpenHandler .openEditor(po); if (editor != null) { editor.getSite().getPage().activate(editor); } } } } } } for (String id : handles) { if (id.endsWith(EditorContextStructureBridge.EDITOR_ID_POSTFIX)) { AbstractContextStructureBridge bridge = ContextCore .getStructureBridge(EditorContextStructureBridge. EDITOR_CONTENT_TYPE); Object objForHandle = bridge.getObjectForHandle(id); if (objForHandle instanceof INodePO) { AbstractOpenHandler.openEditor((INodePO)objForHandle); } } } } /** {@inheritDoc} */ public void taskDeactivated(ITask task) { collapseTree((ITreeViewerContainer) Plugin .getView(Constants.TS_BROWSER_ID)); for (TestCaseBrowser tcb : MultipleTCBTracker.getInstance() .getOpenTCBs()) { collapseTree(tcb); } } /** * @param tvc * - the tree view container to collapse */ private void collapseTree(ITreeViewerContainer tvc) { if (tvc != null) { TreeViewContainerGUIController.collapseExpandTree(tvc); } } /** {@inheritDoc} */ public void handleProjectStateChanged(ProjectState state) { if (ProjectState.opened.equals(state)) { ITask currentTask = TasksUi.getTaskActivityManager() .getActiveTask(); if (currentTask != null) { restoreOpenEditors(currentTask); } } } /** * close all editors */ public void closeAllEditors() { try { if (PlatformUI.getWorkbench().isClosing()) { return; } for (IWorkbenchWindow window : MonitorUi.getMonitoredWindows()) { IWorkbenchPage page = window.getActivePage(); if (page != null) { IEditorReference[] references = page.getEditorReferences(); List<IEditorReference> toClose = new ArrayList<IEditorReference>(); for (IEditorReference reference : references) { toClose.add(reference); } page.closeEditors(toClose.toArray( new IEditorReference[toClose.size()]), true); } } } catch (Throwable t) { LOG.error("Unhandled exception while closing all editors", t); //$NON-NLS-1$ } } }