package rocks.inspectit.ui.rcp.handlers;
import java.util.ArrayList;
import java.util.List;
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.viewers.StructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import rocks.inspectit.shared.all.communication.data.HttpTimerData;
import rocks.inspectit.shared.all.communication.data.InvocationSequenceData;
import rocks.inspectit.shared.all.communication.data.ParameterContentData;
import rocks.inspectit.shared.cs.communication.data.InvocationSequenceDataHelper;
import rocks.inspectit.ui.rcp.InspectIT;
import rocks.inspectit.ui.rcp.formatter.TextFormatter;
import rocks.inspectit.ui.rcp.util.ClipboardUtil;
/**
* Handler for copying context parameters.
*
* @author Ivan Senic
*
*/
public class CopyContextParametersHandler extends AbstractHandler implements IHandler {
/**
* {@inheritDoc}
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event);
if (selection.isEmpty()) {
return null;
}
StringBuilder stringBuilder = new StringBuilder();
for (Object selected : selection.toArray()) {
if (selected instanceof InvocationSequenceData) {
InvocationSequenceData invocation = (InvocationSequenceData) selected;
boolean lineAdded = false;
if (InvocationSequenceDataHelper.hasHttpTimerData(invocation)) {
HttpTimerData httpTimer = (HttpTimerData) invocation.getTimerData();
if (null != httpTimer.getHttpInfo().getUri()) {
stringBuilder.append("URI: ");
stringBuilder.append(httpTimer.getHttpInfo().getUri());
stringBuilder.append('\t');
lineAdded = true;
}
}
if (InvocationSequenceDataHelper.hasCapturedParameters(invocation)) {
List<ParameterContentData> parameters = new ArrayList<>(InvocationSequenceDataHelper.getCapturedParameters(invocation, true));
for (ParameterContentData parameterContentData : parameters) {
stringBuilder.append('\'');
stringBuilder.append(parameterContentData.getName());
stringBuilder.append("': ");
stringBuilder.append(TextFormatter.clearLineBreaks(parameterContentData.getContent()));
stringBuilder.append('\t');
lineAdded = true;
}
}
if (lineAdded) {
stringBuilder.append('\n');
}
}
}
if (stringBuilder.length() > 0) {
ClipboardUtil.textToClipboard(HandlerUtil.getActiveShell(event).getDisplay(), stringBuilder.toString());
} else {
InspectIT.getDefault().createInfoDialog("No context parameter(s) available in selected data.", -1);
}
return null;
}
}