package rocks.inspectit.ui.rcp.handlers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.collections.CollectionUtils; 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.IHandler; 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.IStructuredSelection; 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.communication.data.HttpTimerData; 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.HttpChartingInputDefinitionExtra; import rocks.inspectit.ui.rcp.editor.inputdefinition.extra.InputDefinitionExtrasMarkerFactory; import rocks.inspectit.ui.rcp.editor.root.AbstractRootEditor; import rocks.inspectit.ui.rcp.editor.table.input.TaggedHttpTimerDataInputController; import rocks.inspectit.ui.rcp.model.SensorTypeEnum; import rocks.inspectit.ui.rcp.repository.RepositoryDefinition; import rocks.inspectit.ui.rcp.util.data.RegExAggregatedHttpTimerData; /** * Handler for displaying the {@link HttpTimerData} in charts. * * @author Ivan Senic * */ public class HttpDisplayInChartHandler extends AbstractHandler implements IHandler { /** * {@inheritDoc} */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); AbstractRootEditor rootEditor = (AbstractRootEditor) HandlerUtil.getActiveEditor(event); RepositoryDefinition repositoryDefinition = rootEditor.getInputDefinition().getRepositoryDefinition(); InputDefinition inputDefinition = null; List<HttpTimerData> templates = new ArrayList<>(); List<RegExAggregatedHttpTimerData> regExTemplates = new ArrayList<>(); boolean regExTransformation = false; for (Iterator<?> iterator = selection.iterator(); iterator.hasNext();) { Object selectedObject = iterator.next(); if (selectedObject instanceof RegExAggregatedHttpTimerData) { templates.addAll(((RegExAggregatedHttpTimerData) selectedObject).getAggregatedDataList()); regExTemplates.add((RegExAggregatedHttpTimerData) selectedObject); regExTransformation = true; } else if (selectedObject instanceof HttpTimerData) { templates.add((HttpTimerData) selectedObject); } } if (CollectionUtils.isNotEmpty(templates)) { boolean plotByTagValue = null != rootEditor.getSubView().getSubViewWithInputController(TaggedHttpTimerDataInputController.class); inputDefinition = new InputDefinition(); inputDefinition.setRepositoryDefinition(repositoryDefinition); inputDefinition.setId(SensorTypeEnum.CHARTING_HTTP_TIMER_SENSOR); EditorPropertiesData editorPropertiesData = new EditorPropertiesData(); editorPropertiesData.setSensorImage(SensorTypeEnum.CHARTING_HTTP_TIMER_SENSOR.getImage()); editorPropertiesData.setSensorName("Chart"); editorPropertiesData.setPartNameFlag(PartType.SENSOR); if ((templates.size() == 1) && !regExTransformation) { HttpTimerData template = templates.get(0); if (plotByTagValue) { editorPropertiesData.setViewName("Tag: " + template.getHttpInfo().getInspectItTaggingHeaderValue() + " [" + template.getHttpInfo().getRequestMethod() + "]"); } else { editorPropertiesData.setViewName("URI: " + template.getHttpInfo().getUri() + " [" + template.getHttpInfo().getRequestMethod() + "]"); } } else if ((regExTemplates.size() == 1) && regExTransformation) { RegExAggregatedHttpTimerData regExTemplate = regExTemplates.get(0); editorPropertiesData.setViewName("Transformed URI: " + regExTemplate.getTransformedUri() + " [" + regExTemplate.getHttpInfo().getRequestMethod() + "]"); } else { editorPropertiesData.setViewName("Multiple HTTP data"); } inputDefinition.setEditorPropertiesData(editorPropertiesData); IdDefinition idDefinition = new IdDefinition(); idDefinition.setPlatformId(templates.get(0).getPlatformIdent()); idDefinition.setSensorTypeId(templates.get(0).getSensorTypeIdent()); inputDefinition.setIdDefinition(idDefinition); HttpChartingInputDefinitionExtra inputDefinitionExtra = new HttpChartingInputDefinitionExtra(); inputDefinitionExtra.setTemplates(templates); inputDefinitionExtra.setRegExTemplates(regExTemplates); inputDefinitionExtra.setPlotByTagValue(plotByTagValue); inputDefinition.addInputDefinitonExtra(InputDefinitionExtrasMarkerFactory.HTTP_CHARTING_EXTRAS_MARKER, inputDefinitionExtra); // 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 HTTP chart view.", e); } } return null; } }