package rocks.inspectit.ui.rcp.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.progress.IProgressConstants; import rocks.inspectit.shared.all.exception.BusinessException; import rocks.inspectit.shared.cs.storage.recording.RecordingState; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.provider.ICmrRepositoryAndAgentProvider; import rocks.inspectit.ui.rcp.provider.ICmrRepositoryProvider; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition; import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus; import rocks.inspectit.ui.rcp.view.impl.RepositoryManagerView; import rocks.inspectit.ui.rcp.view.impl.StorageManagerView; /** * Stops recording. * * @author Ivan Senic * */ public class StopRecordingHanlder extends AbstractHandler implements IHandler { /** * {@inheritDoc} */ @Override public Object execute(final ExecutionEvent event) throws ExecutionException { CmrRepositoryDefinition cmrRepositoryDefinition = null; ISelection selection = HandlerUtil.getCurrentSelection(event); if (selection instanceof StructuredSelection) { Object selectedObject = ((StructuredSelection) selection).getFirstElement(); if (selectedObject instanceof ICmrRepositoryProvider) { cmrRepositoryDefinition = ((ICmrRepositoryProvider) selectedObject).getCmrRepositoryDefinition(); } else if (((StructuredSelection) selection).getFirstElement() instanceof ICmrRepositoryAndAgentProvider) { cmrRepositoryDefinition = ((ICmrRepositoryAndAgentProvider) selectedObject).getCmrRepositoryDefinition(); } } if (null != cmrRepositoryDefinition) { if (cmrRepositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE) { boolean canStop = cmrRepositoryDefinition.getStorageService().getRecordingState() != RecordingState.OFF; if (canStop) { final CmrRepositoryDefinition finalCmrRepositoryDefinition = cmrRepositoryDefinition; Job stopRecordingJob = new Job("Stop Recording") { @Override protected IStatus run(IProgressMonitor monitor) { try { finalCmrRepositoryDefinition.getStorageService().stopRecording(); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IViewPart repositoryManagerView = activePage.findView(RepositoryManagerView.VIEW_ID); if (repositoryManagerView instanceof RepositoryManagerView) { ((RepositoryManagerView) repositoryManagerView).refresh(); } IViewPart storageManagerView = activePage.findView(StorageManagerView.VIEW_ID); if (storageManagerView instanceof StorageManagerView) { ((StorageManagerView) storageManagerView).refresh(finalCmrRepositoryDefinition); } } }); } catch (final BusinessException e) { return new Status(IStatus.ERROR, InspectIT.ID, "Stopping the recording failed", e); } return Status.OK_STATUS; } }; stopRecordingJob.setUser(true); stopRecordingJob.setProperty(IProgressConstants.ICON_PROPERTY, InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_RECORD_STOP)); stopRecordingJob.schedule(); } } else { throw new ExecutionException("Recording can not be stopped, because the repository is currently offline."); } } return null; } }