package com.urswolfer.intellij.plugin.gerrit.ui.diff;
import com.google.gerrit.extensions.client.Comment;
import com.google.gerrit.extensions.client.Side;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.inject.Inject;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.urswolfer.intellij.plugin.gerrit.GerritSettings;
import com.urswolfer.intellij.plugin.gerrit.rest.GerritUtil;
import javax.swing.*;
/**
* @author Thomas Forrer
*/
public class AddCommentActionBuilder {
@Inject
private CommentBalloonBuilder commentBalloonBuilder;
@Inject
private GerritUtil gerritUtil;
@Inject
private GerritSettings gerritSettings;
public Builder create(CommentsDiffTool commentsDiffTool,
ChangeInfo changeInfo,
String revisionId,
Editor editor,
String filePath,
Side commentSide) {
return new Builder().init(commentsDiffTool, changeInfo, revisionId, editor, filePath, commentSide);
}
public class Builder {
private String text;
private Icon icon;
private CommentsDiffTool commentsDiffTool;
private ChangeInfo changeInfo;
private String revisionId;
private Editor editor;
private String filePath;
private Side commentSide;
private Comment commentToEdit;
private RangeHighlighter lineHighlighter;
private RangeHighlighter rangeHighlighter;
private Comment replyToComment;
private Builder init(CommentsDiffTool commentsDiffTool,
ChangeInfo changeInfo,
String revisionId,
Editor editor,
String filePath,
Side commentSide) {
this.commentsDiffTool = commentsDiffTool;
this.changeInfo = changeInfo;
this.revisionId = revisionId;
this.editor = editor;
this.filePath = filePath;
this.commentSide = commentSide;
return this;
}
public Builder withText(String text) {
this.text = text;
return this;
}
public Builder withIcon(Icon icon) {
this.icon = icon;
return this;
}
public Builder update(Comment commentToEdit,
RangeHighlighter lineHighlighter,
RangeHighlighter rangeHighlighter) {
this.commentToEdit = commentToEdit;
this.lineHighlighter = lineHighlighter;
this.rangeHighlighter = rangeHighlighter;
return this;
}
public Builder reply(Comment replyToComment) {
this.replyToComment = replyToComment;
return this;
}
public AddCommentAction get() {
return new AddCommentAction(text, icon, commentsDiffTool, gerritUtil, gerritSettings, editor, commentBalloonBuilder,
changeInfo, revisionId, filePath, commentSide, commentToEdit, lineHighlighter, rangeHighlighter, replyToComment);
}
}
}