public final void handleCommand()

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());
        }
    }