package rocks.inspectit.ui.rcp.handlers;
import java.util.Collections;
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.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.progress.IProgressConstants;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.util.ObjectUtils;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.InspectITImages;
import rocks.inspectit.ui.rcp.editor.inputdefinition.InputDefinition;
import rocks.inspectit.ui.rcp.editor.preferences.PreferenceId;
import rocks.inspectit.ui.rcp.editor.root.IRootEditor;
import rocks.inspectit.ui.rcp.provider.ICmrRepositoryProvider;
import rocks.inspectit.ui.rcp.provider.IInputDefinitionProvider;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition.OnlineStatus;
import rocks.inspectit.ui.rcp.view.impl.RepositoryManagerView;
/**
* Handler for clearing the repository buffer.
*
* @author Ivan Senic
*
*/
public class ClearRepositoryBufferHandler extends AbstractHandler implements IHandler {
/**
* {@inheritDoc}
*/
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
CmrRepositoryDefinition availableCmr = null;
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof StructuredSelection) {
Object selectedObject = ((StructuredSelection) selection).getFirstElement();
if (selectedObject instanceof ICmrRepositoryProvider) {
ICmrRepositoryProvider cmrRepositoryProvider = (ICmrRepositoryProvider) selectedObject;
availableCmr = cmrRepositoryProvider.getCmrRepositoryDefinition();
}
}
if (null == availableCmr) {
IWorkbenchPart editor = HandlerUtil.getActivePart(event);
if (editor instanceof IInputDefinitionProvider) {
IInputDefinitionProvider inputDefinitionProvider = (IInputDefinitionProvider) editor;
if (inputDefinitionProvider.getInputDefinition().getRepositoryDefinition() instanceof CmrRepositoryDefinition) {
availableCmr = (CmrRepositoryDefinition) inputDefinitionProvider.getInputDefinition().getRepositoryDefinition();
}
}
}
final CmrRepositoryDefinition cmrRepositoryDefinition = availableCmr;
if ((null != cmrRepositoryDefinition) && (cmrRepositoryDefinition.getOnlineStatus() != OnlineStatus.OFFLINE)) {
boolean isSure = MessageDialog.openConfirm(null, "Empty buffer", "Are you sure that you want to completely delete all the data in the buffer on repository "
+ cmrRepositoryDefinition.getName() + " (" + cmrRepositoryDefinition.getIp() + ":" + cmrRepositoryDefinition.getPort() + ")?");
if (isSure) {
Job clearBufferJob = new Job("Clear Respoitory Buffer") {
@Override
protected IStatus run(IProgressMonitor monitor) {
cmrRepositoryDefinition.getCmrManagementService().clearBuffer();
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IEditorReference[] editors = window.getActivePage().getEditorReferences();
for (IEditorReference editor : editors) {
IEditorPart editorPart = editor.getEditor(false);
if (editorPart instanceof IRootEditor) {
IRootEditor rootEditor = (IRootEditor) editorPart;
if (null != rootEditor.getPreferencePanel()) {
if (rootEditor.getSubView().getPreferenceIds().contains(PreferenceId.CLEAR_BUFFER)) {
InputDefinition inputDefinition = rootEditor.getInputDefinition();
if (ObjectUtils.equals(inputDefinition.getRepositoryDefinition(), cmrRepositoryDefinition)) {
rootEditor.getSubView().setDataInput(Collections.<DefaultData> emptyList());
}
}
}
}
}
IViewPart viewPart = window.getActivePage().findView(RepositoryManagerView.VIEW_ID);
if (viewPart instanceof RepositoryManagerView) {
((RepositoryManagerView) viewPart).refresh();
}
}
});
return Status.OK_STATUS;
}
};
clearBufferJob.setUser(true);
clearBufferJob.setProperty(IProgressConstants.ICON_PROPERTY, InspectIT.getDefault().getImageDescriptor(InspectITImages.IMG_BUFFER_CLEAR));
clearBufferJob.schedule();
}
}
return null;
}
}