public Integer call()

in src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java [107:177]


    public Integer call() {
        try {
            CommandLine commandLine = spec.commandLine();
            if (commandLine.isUsageHelpRequested()) {
                commandLine.usage(commandLine.getOut());
            } else {
                StagingRepository repo = repositoryService.find(repositoryId);
                Set<Release> releases = repositoryService.getReleases(repo);
                List<Version> versions = releases.stream()
                        .map(r -> versionClient.find(r))
                        .collect(Collectors.toList());

                String releaseName = releases.stream()
                        .map(Release::getFullName)
                        .collect(Collectors.joining(", "));

                Set<Issue> fixedIssues = new HashSet<>();
                for (Release release : releases) {
                    fixedIssues.addAll(versionClient.findFixedIssues(release));
                }
                int fixedIssuesCount =  fixedIssues.size();
                String issueOrIssues = fixedIssuesCount > 1 ? "issues" : "issue";
                String releaseOrReleases = versions.size() > 1 ?
                        "these releases" : "this release";

                String releaseNotesLinks = versions.stream()
                        .map(v -> RELEASE_NOTES_LINK_TEMPLATE.replace("##VERSION_ID##", String.valueOf(v.getId())))
                        .collect(Collectors.joining("\n"));

                Member currentMember = membersFinder.getCurrentMember();
                String emailContents = EMAIL_TEMPLATE
                        .replace("##FROM##", new InternetAddress(currentMember.getEmail(), currentMember.getName()).toString())
                        .replace("##DATE##", dateProvider.getCurrentDateForEmailHeader())
                        .replace("##RELEASE_NAME##", releaseName)
                        .replace("##RELEASE_ID##", String.valueOf(repositoryId))
                        .replace("##RELEASE_OR_RELEASES##", releaseOrReleases)
                        .replace("##RELEASE_JIRA_LINKS##", releaseNotesLinks)
                        .replace("##FIXED_ISSUES_COUNT##", String.valueOf(fixedIssuesCount))
                        .replace("##ISSUE_OR_ISSUES##", issueOrIssues)
                        .replace("##USER_NAME##", currentMember.getName());
                switch (reusableCLIOptions.executionMode) {
                    case DRY_RUN:
                        LOGGER.info("The following email would be sent from your @apache.org address (see the \"From:\" header):\n");
                        LOGGER.info(emailContents);
                        break;
                    case INTERACTIVE:
                        String question = "Should the following email be sent from your @apache.org address (see the" +
                                " \"From:\" header)?\n\n" + emailContents;
                        InputOption answer = UserInput.yesNo(question, InputOption.YES);
                        if (InputOption.YES.equals(answer)) {
                            LOGGER.info("Sending email...");
                            mailer.send(emailContents);
                            LOGGER.info("Done!");
                        } else if (InputOption.NO.equals(answer)) {
                            LOGGER.info("Aborted.");
                        }
                        break;
                    case AUTO:
                        LOGGER.info(emailContents);
                        LOGGER.info("Sending email...");
                        mailer.send(emailContents);
                        LOGGER.info("Done!");
                        break;
                }
            }
        } catch (IOException e) {
            LOGGER.warn("Failed executing command", e);
            return CommandLine.ExitCode.SOFTWARE;
        }
        return CommandLine.ExitCode.OK;
    }