package rocks.inspectit.ui.rcp.handlers;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
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.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ui.handlers.HandlerUtil;
import rocks.inspectit.shared.all.communication.DefaultData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.communication.data.cmr.CmrStatusData;
import rocks.inspectit.ui.rcp.editor.root.AbstractRootEditor;
import rocks.inspectit.ui.rcp.formatter.NumberFormatter;
import rocks.inspectit.ui.rcp.repository.CmrRepositoryDefinition;
import rocks.inspectit.ui.rcp.repository.RepositoryDefinition;
import rocks.inspectit.ui.rcp.wizard.CopyDataToStorageWizard;
/**
* Handler for copying data to storage.
*
* @author Ivan Senic
*
*/
public class CopyDataToStorageHandler extends AbstractHandler implements IHandler {
/**
* {@inheritDoc}
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
AbstractRootEditor rootEditor = (AbstractRootEditor) HandlerUtil.getActiveEditor(event);
RepositoryDefinition repositoryDefinition = rootEditor.getInputDefinition().getRepositoryDefinition();
StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event);
Set<DefaultData> copyDataSet = new HashSet<>(selection.size());
for (Iterator<?> it = selection.iterator(); it.hasNext();) {
Object nextObject = it.next();
if (nextObject instanceof InvocationSequenceData) {
InvocationSequenceData invocationSequenceData = (InvocationSequenceData) nextObject;
while (null != invocationSequenceData.getParentSequence()) {
invocationSequenceData = invocationSequenceData.getParentSequence();
}
copyDataSet.add(invocationSequenceData);
} else if (nextObject instanceof DefaultData) {
copyDataSet.add((DefaultData) nextObject);
}
}
if (!copyDataSet.isEmpty() && (repositoryDefinition instanceof CmrRepositoryDefinition)) {
CmrRepositoryDefinition cmrRepositoryDefinition = (CmrRepositoryDefinition) repositoryDefinition;
// check if the writing state is OK
try {
CmrStatusData cmrStatusData = cmrRepositoryDefinition.getCmrManagementService().getCmrStatusData();
if (cmrStatusData.isWarnSpaceLeftActive()) {
String leftSpace = NumberFormatter.humanReadableByteCount(cmrStatusData.getStorageDataSpaceLeft());
if (!MessageDialog.openQuestion(HandlerUtil.getActiveShell(event), "Confirm", "For selected CMR there is an active warning about insufficient storage space left. Only " + leftSpace
+ " are left on the target server, are you sure you want to continue?")) {
return null;
}
}
} catch (Exception e) { // NOPMD NOCHK
// ignore because if we can not get the info. we will still respond to user
// action
}
CopyDataToStorageWizard wizard = new CopyDataToStorageWizard(cmrRepositoryDefinition, copyDataSet);
WizardDialog dialog = new WizardDialog(HandlerUtil.getActiveShell(event), wizard);
dialog.open();
}
return null;
}
}