in plugin/src/software/aws/toolkits/eclipse/amazonq/views/AmazonQChatViewActionHandler.java [51:126]
public final void handleCommand(final ParsedCommand parsedCommand, final Browser browser) {
Command command = parsedCommand.getCommand();
Object params = parsedCommand.getParams();
switch (command) {
case CHAT_SEND_PROMPT:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_QUICK_ACTION:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_INFO_LINK_CLICK:
case CHAT_LINK_CLICK:
case CHAT_SOURCE_LINK_CLICK:
InfoLinkClickParams infoLinkClickParams = jsonHandler.convertObject(params, InfoLinkClickParams.class);
var link = infoLinkClickParams.getLink();
if (link == null || link.isEmpty()) {
throw new IllegalArgumentException("Link parameter cannot be null or empty");
}
PluginUtils.handleExternalLinkClick(link);
break;
case CHAT_READY:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_TAB_ADD:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_TAB_REMOVE:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_TAB_CHANGE:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_END_CHAT:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_INSERT_TO_CURSOR_POSITION:
var insertToCursorParams = jsonHandler.convertObject(params, InsertToCursorPositionParams.class);
var cursorState = insertAtCursor(insertToCursorParams);
// add information about editor state and send telemetry event
// only include files that are accessible via lsp which have absolute paths
// When this fails, we will still send the request for amazonq_interactWithMessage telemetry
getOpenFileUri().ifPresent(filePathUri -> {
insertToCursorParams.setTextDocument(new TextDocumentIdentifier(filePathUri));
cursorState.ifPresent(state -> insertToCursorParams.setCursorState(Arrays.asList(state)));
});
chatCommunicationManager.sendMessageToChatServer(Command.TELEMETRY_EVENT, insertToCursorParams);
break;
case CHAT_FEEDBACK:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_FOLLOW_UP_CLICK:
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case TELEMETRY_EVENT:
// telemetry notification for insert to cursor is modified and forwarded to server in the InsertToCursorPosition handler
if (isInsertToCursorEvent(params)) {
break;
}
chatCommunicationManager.sendMessageToChatServer(command, params);
break;
case CHAT_COPY_TO_CLIPBOARD:
CopyToClipboardParams copyToClipboardParams = jsonHandler.convertObject(params, CopyToClipboardParams.class);
handleCopyToClipboard(copyToClipboardParams.code());
break;
case AUTH_FOLLOW_UP_CLICKED:
AuthFollowUpClickedParams authFollowUpClickedParams = jsonHandler.convertObject(params, AuthFollowUpClickedParams.class);
handleAuthFollowUpClicked(authFollowUpClickedParams);
break;
case DISCLAIMER_ACKNOWLEDGED:
Activator.getPluginStore().put(PluginStoreKeys.CHAT_DISCLAIMER_ACKNOWLEDGED, "true");
break;
default:
throw new AmazonQPluginException("Unexpected command received from Amazon Q Chat: " + command.toString());
}
}