package rocks.inspectit.ui.rcp.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.handlers.IHandlerService;
import rocks.inspectit.shared.all.tracing.data.ISpanIdentAware;
import rocks.inspectit.shared.all.tracing.data.SpanIdent;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.InspectITImages;
import rocks.inspectit.ui.rcp.editor.inputdefinition.EditorPropertiesData;
import rocks.inspectit.ui.rcp.editor.inputdefinition.EditorPropertiesData.PartType;
import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition;
import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition.IdDefinition;
import rocks.inspectit.ui.rcp.editor.inputdefinition.extra.InputDefinitionExtrasMarkerFactory;
import rocks.inspectit.ui.rcp.editor.inputdefinition.extra.TraceInputDefinitionExtra;
import rocks.inspectit.ui.rcp.editor.root.AbstractRootEditor;
import rocks.inspectit.ui.rcp.model.SensorTypeEnum;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
/**
* Handler for opening the trace details view.
*
* @author Ivan Senic
*
*/
public class OpenTraceDetailsHandler extends AbstractHandler {
/**
* Command id.
*/
public static final String COMMAND = "rocks.inspectit.ui.rcp.commands.traceDetails";
/**
* {@inheritDoc}
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
AbstractRootEditor rootEditor = (AbstractRootEditor) HandlerUtil.getActiveEditor(event);
RepositoryDefinition repositoryDefinition = rootEditor.getInputDefinition().getRepositoryDefinition();
Object selected = selection.getFirstElement();
if (selected instanceof ISpanIdentAware) {
SpanIdent spanIdent = ((ISpanIdentAware) selected).getSpanIdent();
if (null != spanIdent) {
InputDefinition inputDefinition = new InputDefinition();
inputDefinition.setRepositoryDefinition(repositoryDefinition);
inputDefinition.setId(SensorTypeEnum.TRACING_DETAILS);
EditorPropertiesData editorPropertiesData = new EditorPropertiesData();
editorPropertiesData.setSensorName(SensorTypeEnum.TRACING.getDisplayName());
editorPropertiesData.setSensorImage(SensorTypeEnum.TRACING.getImage());
editorPropertiesData.setViewName("Details (" + Long.toHexString(spanIdent.getTraceId()) + ")");
editorPropertiesData.setViewImage(InspectIT.getDefault().getImage(InspectITImages.IMG_PROPERTIES));
editorPropertiesData.setPartNameFlag(PartType.VIEW);
inputDefinition.setEditorPropertiesData(editorPropertiesData);
inputDefinition.setIdDefinition(new IdDefinition());
TraceInputDefinitionExtra traceInputDefinitionExtra = new TraceInputDefinitionExtra();
traceInputDefinitionExtra.setTraceId(spanIdent.getTraceId());
inputDefinition.addInputDefinitonExtra(InputDefinitionExtrasMarkerFactory.TRACE_EXTRAS_MARKER, traceInputDefinitionExtra);
// open the view via command
IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
Command command = commandService.getCommand(OpenViewHandler.COMMAND);
ExecutionEvent executionEvent = handlerService.createExecutionEvent(command, new Event());
IEvaluationContext context = (IEvaluationContext) executionEvent.getApplicationContext();
context.addVariable(OpenViewHandler.INPUT, inputDefinition);
try {
command.executeWithChecks(executionEvent);
} catch (NotDefinedException | NotEnabledException | NotHandledException e) {
throw new ExecutionException("Error opening the trace details view.", e);
}
}
}
return null;
}
}