protected CompletableFuture onInvokeActivity()

in libraries/bot-builder/src/main/java/com/microsoft/bot/builder/teams/TeamsActivityHandler.java [62:189]


    protected CompletableFuture<InvokeResponse> onInvokeActivity(TurnContext turnContext) {
        CompletableFuture<InvokeResponse> result;

        try {
            if (turnContext.getActivity().getName() == null && turnContext.getActivity().isTeamsActivity()) {
                result = onTeamsCardActionInvoke(turnContext);
            } else {
                switch (turnContext.getActivity().getName()) {
                    case "fileConsent/invoke":
                        result = onTeamsFileConsent(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), FileConsentCardResponse.class)
                        );
                        break;

                    case "actionableMessage/executeAction":
                        result = onTeamsO365ConnectorCardAction(
                            turnContext,
                            Serialization
                                .safeGetAs(turnContext.getActivity().getValue(), O365ConnectorCardActionQuery.class)
                        ).thenApply(aVoid -> createInvokeResponse(null));
                        break;

                    case "composeExtension/queryLink":
                        result = onTeamsAppBasedLinkQuery(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), AppBasedLinkQuery.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/query":
                        result = onTeamsMessagingExtensionQuery(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), MessagingExtensionQuery.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/selectItem":
                        result = onTeamsMessagingExtensionSelectItem(turnContext, turnContext.getActivity().getValue())
                            .thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/submitAction":
                        result =
                            onTeamsMessagingExtensionSubmitActionDispatch(
                                turnContext,
                                Serialization
                                    .safeGetAs(turnContext.getActivity().getValue(), MessagingExtensionAction.class)
                            ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/fetchTask":
                        result =
                            onTeamsMessagingExtensionFetchTask(
                                turnContext,
                                Serialization
                                    .safeGetAs(turnContext.getActivity().getValue(), MessagingExtensionAction.class)
                            ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/querySettingUrl":
                        result = onTeamsMessagingExtensionConfigurationQuerySettingUrl(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), MessagingExtensionQuery.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/setting":
                        result = onTeamsMessagingExtensionConfigurationSetting(
                            turnContext,
                            turnContext.getActivity().getValue()
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "composeExtension/onCardButtonClicked":
                        result = onTeamsMessagingExtensionCardButtonClicked(
                            turnContext,
                            turnContext.getActivity().getValue()
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "task/fetch":
                        result = onTeamsTaskModuleFetch(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), TaskModuleRequest.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "task/submit":
                        result = onTeamsTaskModuleSubmit(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), TaskModuleRequest.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "tab/fetch":
                        result = onTeamsTabFetch(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), TabRequest.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    case "tab/submit":
                        result = onTeamsTabSubmit(
                            turnContext,
                            Serialization.safeGetAs(turnContext.getActivity().getValue(), TabSubmit.class)
                        ).thenApply(this::createInvokeResponse);
                        break;

                    default:
                        result = super.onInvokeActivity(turnContext);
                        break;
                }
            }
        } catch (Throwable t) {
            result = new CompletableFuture<>();
            result.completeExceptionally(t);
        }

        return result.exceptionally(e -> {
            if (e instanceof CompletionException && e.getCause() instanceof InvokeResponseException) {
                return ((InvokeResponseException) e.getCause()).createInvokeResponse();
            } else if (e instanceof InvokeResponseException) {
                return ((InvokeResponseException) e).createInvokeResponse();
            }
            return new InvokeResponse(HttpURLConnection.HTTP_INTERNAL_ERROR, e.getLocalizedMessage());
        });
    }