GHPullRequestReviewCommentBuilder.java

package org.kohsuke.github;

import java.io.IOException;

// TODO: Auto-generated Javadoc

/**
 * Builds up a creation of new {@link GHPullRequestReviewComment}.
 *
 * @see GHPullRequest#createReviewComment()
 */
public class GHPullRequestReviewCommentBuilder {
    private final GHPullRequest pr;
    private final Requester builder;

    /**
     * Instantiates a new GH pull request review comment builder.
     *
     * @param pr
     *            the pr
     */
    GHPullRequestReviewCommentBuilder(GHPullRequest pr) {
        this.pr = pr;
        this.builder = pr.root().createRequest();
    }

    /**
     * The SHA of the commit that needs a review. Not using the latest commit SHA may render your review comment
     * outdated if a subsequent commit modifies the line you specify as the position. Defaults to the most recent commit
     * in the pull request when you do not specify a value.
     *
     * @param commitId
     *            the commit id
     * @return the gh pull request review comment builder
     */
    public GHPullRequestReviewCommentBuilder commitId(String commitId) {
        builder.with("commit_id", commitId);
        return this;
    }

    /**
     * The text of the pull request review comment.
     *
     * @param body
     *            the body
     * @return the gh pull request review comment builder
     */
    public GHPullRequestReviewCommentBuilder body(String body) {
        builder.with("body", body);
        return this;
    }

    /**
     * The relative path to the file that necessitates a comment.
     *
     * @param path
     *            the path
     * @return the gh pull request review comment builder
     */
    public GHPullRequestReviewCommentBuilder path(String path) {
        builder.with("path", path);
        return this;
    }

    /**
     * The position in the diff where you want to add a review comment.
     *
     * @param position
     *            the position
     * @return the gh pull request review comment builder
     * @implNote As position is deprecated in GitHub API, only keep this for internal usage (for retro-compatibility
     *           with {@link GHPullRequest#createReviewComment(String, String, String, int)}).
     */
    GHPullRequestReviewCommentBuilder position(int position) {
        builder.with("position", position);
        return this;
    }

    /**
     * A single line of the blob in the pull request diff that the comment applies to.
     * <p>
     * {@link #line(int)} and {@link #lines(int, int)} will overwrite each other's values.
     * </p>
     *
     * @param line
     *            the line number
     * @return the gh pull request review comment builder
     */
    public GHPullRequestReviewCommentBuilder line(int line) {
        builder.with("line", line);
        builder.remove("start_line");
        return this;
    }

    /**
     * The range of lines in the pull request diff that this comment applies to.
     * <p>
     * {@link #line(int)} and {@link #lines(int, int)} will overwrite each other's values.
     * </p>
     *
     * @param startLine
     *            the start line number of the comment
     * @param endLine
     *            the end line number of the comment
     * @return the gh pull request review comment builder
     */
    public GHPullRequestReviewCommentBuilder lines(int startLine, int endLine) {
        builder.with("start_line", startLine);
        builder.with("line", endLine);
        return this;
    }

    /**
     * Create gh pull request review comment.
     *
     * @return the gh pull request review comment builder
     * @throws IOException
     *             the io exception
     */
    public GHPullRequestReviewComment create() throws IOException {
        return builder.method("POST")
                .withUrlPath(pr.getApiRoute() + "/comments")
                .fetch(GHPullRequestReviewComment.class)
                .wrapUp(pr);
    }

}