/*******************************************************************************
* 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.monitor;
import java.util.List;
import org.eclipse.jubula.client.alm.mylyn.ui.bridge.constants.ContentType;
import org.eclipse.jubula.client.core.model.IAUTMainPO;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.model.IPersistentObject;
import org.eclipse.jubula.client.ui.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.Plugin.ClientStatus;
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
import org.eclipse.jubula.client.ui.rcp.editors.CentralTestDataEditor;
import org.eclipse.jubula.client.ui.rcp.editors.IJBEditor;
import org.eclipse.jubula.client.ui.rcp.editors.ObjectMappingMultiPageEditor;
import org.eclipse.jubula.client.ui.rcp.editors.PersistableEditorInput;
import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
import org.eclipse.mylyn.context.core.ContextCore;
import org.eclipse.mylyn.context.core.IInteractionContext;
import org.eclipse.mylyn.context.core.IInteractionElement;
import org.eclipse.mylyn.monitor.core.InteractionEvent;
import org.eclipse.mylyn.monitor.ui.AbstractEditorTracker;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.ui.IEditorPart;
/**
* @author BREDEX GmbH
* @created Nov 10, 2010
*/
public class EditorInteractionMonitor extends AbstractEditorTracker {
/**
* <code>CTDE_ORIGIN_ID</code>
*/
private static final String CTDE_ORIGIN_ID = "ctde"; //$NON-NLS-1$
/**
* <code>CDTE_HANDLE</code>
*/
private static final String CDTE_HANDLE = "00000000000000000000000000000005"; //$NON-NLS-1$
/** {@inheritDoc} */
protected void editorBroughtToTop(IEditorPart part) {
// not needed
}
/** {@inheritDoc} */
protected void editorClosed(IEditorPart part) {
if (Plugin.getDefault().getClientStatus() == ClientStatus.STOPPING
|| TasksUi.getTaskActivityManager().getActiveTask() == null) {
return;
}
final IInteractionContext activeContext = ContextCore
.getContextManager().getActiveContext();
List<IInteractionElement> interesting = activeContext.getInteresting();
if (part instanceof CentralTestDataEditor) {
for (IInteractionElement element : interesting) {
if (element.getContentType()
.equals(ContentType.CTD_EDITOR)) {
activeContext.delete(element);
}
}
} else if (part instanceof ObjectMappingMultiPageEditor) {
PersistableEditorInput input =
(PersistableEditorInput)((ObjectMappingMultiPageEditor)part)
.getEditorInput();
IPersistentObject po = input.getNode();
String id = ((IAUTMainPO)po).getGuid();
for (IInteractionElement element : interesting) {
if (element.getHandleIdentifier().equals(id)) {
activeContext.delete(element);
}
}
} else if (part instanceof AbstractJBEditor) {
AbstractContextStructureBridge editorBridge = ContextCore
.getStructureBridge(part);
for (IInteractionElement element : interesting) {
if (element.getHandleIdentifier().equals(
editorBridge.getHandleIdentifier(part))) {
activeContext.delete(element);
}
}
}
}
/** {@inheritDoc} */
protected void editorOpened(IEditorPart part) {
if (TasksUi.getTaskActivityManager().getActiveTask() == null) {
return;
}
InteractionEvent iEvent = null;
if (part instanceof ObjectMappingMultiPageEditor) {
iEvent = getInteractionEvent((ObjectMappingMultiPageEditor)part);
} else if (part instanceof CentralTestDataEditor) {
iEvent = getInteractionEvent((CentralTestDataEditor)part);
} else if (part instanceof IJBEditor) {
iEvent = getInteractionEvent((IJBEditor)part);
}
if (iEvent != null) {
ContextCore.getContextManager().processInteractionEvent(iEvent);
}
}
/**
* @param jbEditor
* a jubula editor
* @return the interaction event
*/
private InteractionEvent getInteractionEvent(IJBEditor jbEditor) {
String guid = null;
AbstractContextStructureBridge bridge = ContextCore
.getStructureBridge(jbEditor);
IPersistentObject workingVersion = jbEditor.getEditorHelper()
.getEditSupport().getWorkVersion();
if (workingVersion instanceof INodePO) {
guid = ((INodePO)workingVersion).getGuid();
if (guid != null) {
return new InteractionEvent(InteractionEvent.Kind.SELECTION,
bridge.getContentType(),
bridge.getHandleIdentifier(jbEditor), guid);
}
}
return null;
}
/**
* @param ctde
* the central test data editor
* @return the interaction event
*/
private InteractionEvent getInteractionEvent(CentralTestDataEditor ctde) {
return new InteractionEvent(InteractionEvent.Kind.SELECTION,
ContentType.CTD_EDITOR, CDTE_HANDLE, CTDE_ORIGIN_ID);
}
/**
* @param ome
* the OME
* @return the interaction event
*/
private InteractionEvent getInteractionEvent(
ObjectMappingMultiPageEditor ome) {
PersistableEditorInput input = (PersistableEditorInput)(ome)
.getEditorInput();
IPersistentObject element = input.getNode();
String id = ((IAUTMainPO)element).getGuid();
return new InteractionEvent(InteractionEvent.Kind.SELECTION,
ContentType.OM_EDITOR, id, id);
}
}