// Path: src/com/jetbrains/crucible/model/Comment.java
// public class Comment {
// 
//   @NotNull private final User myAuthor;
//   @NotNull private final String myMessage;
//   private boolean myDraft;
// 
//   private String myLine;
//   private String myReviewItemId;
//   private String myPermId;
//   private String myRevision;
//   private Date myCreateDate = new Date();
//   private final List<Comment> myReplies = new ArrayList<Comment>();
//   private String myParentCommentId;
// 
//   public Comment(@NotNull final User commentAuthor, @NotNull final String message, boolean draft) {
//     myAuthor = commentAuthor;
//     myMessage = message;
//     myDraft = draft;
//   }
// 
//   @NotNull
//   public String getMessage() {
//     return myMessage;
//   }
// 
//   @NotNull
//   public User getAuthor() {
//     return myAuthor;
//   }
// 
//   public Date getCreateDate() {
//     return new Date(myCreateDate.getTime());
//   }
// 
//   public void setCreateDate(Date createDate) {
//     if (createDate != null) {
//       myCreateDate = new Date(createDate.getTime());
//     }
//   }
// 
//   @Override
//   public String toString() {
//     return getMessage();
//   }
// 
//   public String getLine() {
//     return myLine;
//   }
// 
//   public void setLine(String line) {
//     myLine = line;
//   }
// 
//   public String getReviewItemId() {
//     return myReviewItemId;
//   }
// 
//   public void setReviewItemId(String reviewItemId) {
//     myReviewItemId = reviewItemId;
//   }
// 
//   public String getRevision() {
//     return myRevision;
//   }
// 
//   public void setRevision(String revision) {
//     myRevision = revision;
//   }
// 
//   public void addReply(Comment reply) {
//     myReplies.add(reply);
//   }
// 
//   public List<Comment> getReplies() {
//     return myReplies;
//   }
// 
//   public void setParentCommentId(String parentCommentId) {
//     myParentCommentId = parentCommentId;
//   }
// 
//   public String getParentCommentId() {
//     return myParentCommentId;
//   }
// 
//   public String getPermId() {
//     return myPermId;
//   }
// 
//   public void setPermId(String id) {
//     myPermId = id;
//   }
// 
//   public boolean isDraft() {
//     return myDraft;
//   }
// 
//   public void setDraft(boolean draft) {
//     myDraft = draft;
//   }
// }
// 
// Path: src/com/jetbrains/crucible/model/Review.java
// public class Review extends BasicReview {
//   private final List<Comment> myGeneralComments = new ArrayList<Comment>();
//   private final List<Comment> myComments = new ArrayList<Comment>();
// 
//   private final Set<ReviewItem> myItems = new HashSet<ReviewItem>();
// 
//   public Review(@NotNull final String id, @NotNull final User author,
//                 @Nullable final User moderator) {
//     super(id, author, moderator);
//   }
// 
//   public void addGeneralComment(@NotNull Comment generalComment) {
//     myGeneralComments.add(generalComment);
//   }
// 
//   public void addComment(@NotNull Comment comment) {
//     myComments.add(comment);
//   }
// 
//   @NotNull
//   public List<Comment> getGeneralComments() {
//     return myGeneralComments;
//   }
// 
//   @NotNull
//   public List<Comment> getComments() {
//     return myComments;
//   }
// 
//   @NotNull
//   public Set<ReviewItem> getReviewItems() {
//     return myItems;
//   }
// 
//   public void addReviewItem(@NotNull final ReviewItem item) {
//     myItems.add(item);
//   }
// 
//   @Nullable
//   public String getPathById(@NotNull final String id) {
//     for (ReviewItem item : myItems) {
//       if (item.getId().equals(id))
//         return item.getPath();
//     }
//     return null;
//   }
// 
//   @Nullable
//   public String getIdByPath(@NotNull final String path, Project project) {
//     final Map<String,VirtualFile> hash = CrucibleManager.getInstance(project).getRepoHash();
// 
//     for (ReviewItem item : myItems) {
//       final String repo = item.getRepo();
//       final String root = hash.containsKey(repo) ? hash.get(repo).getPath() : project.getBasePath();
//       String relativePath = FileUtil.getRelativePath(new File(Objects.requireNonNull(root)), new File(path));
//       if (FileUtil.pathsEqual(relativePath, item.getPath())) {
//         return item.getId();
//       }
//     }
//     return null;
//   }
// 
//   public boolean isInPatch(@NotNull Comment comment) {
//     final String reviewItemId = comment.getReviewItemId();
//     return null != ContainerUtil.find(myItems, new Condition<ReviewItem>() {
//       @Override
//       public boolean value(ReviewItem item) {
//         return item.getId().equalsIgnoreCase(reviewItemId) && item.isPatch();
//       }
//     });
//   }
// }


import com.intellij.openapi.project.Project;
import com.jetbrains.crucible.model.Comment;
import com.jetbrains.crucible.model.Review;
import org.jetbrains.annotations.NotNull;
package com.jetbrains.crucible.ui.toolWindow.details;


/**
 * @author Kirill Likhodedov
 */
public abstract class CommentAction {

  @NotNull protected final Project myProject;
// Path: src/com/jetbrains/crucible/model/Comment.java
// public class Comment {
// 
//   @NotNull private final User myAuthor;
//   @NotNull private final String myMessage;
//   private boolean myDraft;
// 
//   private String myLine;
//   private String myReviewItemId;
//   private String myPermId;
//   private String myRevision;
//   private Date myCreateDate = new Date();
//   private final List<Comment> myReplies = new ArrayList<Comment>();
//   private String myParentCommentId;
// 
//   public Comment(@NotNull final User commentAuthor, @NotNull final String message, boolean draft) {
//     myAuthor = commentAuthor;
//     myMessage = message;
//     myDraft = draft;
//   }
// 
//   @NotNull
//   public String getMessage() {
//     return myMessage;
//   }
// 
//   @NotNull
//   public User getAuthor() {
//     return myAuthor;
//   }
// 
//   public Date getCreateDate() {
//     return new Date(myCreateDate.getTime());
//   }
// 
//   public void setCreateDate(Date createDate) {
//     if (createDate != null) {
//       myCreateDate = new Date(createDate.getTime());
//     }
//   }
// 
//   @Override
//   public String toString() {
//     return getMessage();
//   }
// 
//   public String getLine() {
//     return myLine;
//   }
// 
//   public void setLine(String line) {
//     myLine = line;
//   }
// 
//   public String getReviewItemId() {
//     return myReviewItemId;
//   }
// 
//   public void setReviewItemId(String reviewItemId) {
//     myReviewItemId = reviewItemId;
//   }
// 
//   public String getRevision() {
//     return myRevision;
//   }
// 
//   public void setRevision(String revision) {
//     myRevision = revision;
//   }
// 
//   public void addReply(Comment reply) {
//     myReplies.add(reply);
//   }
// 
//   public List<Comment> getReplies() {
//     return myReplies;
//   }
// 
//   public void setParentCommentId(String parentCommentId) {
//     myParentCommentId = parentCommentId;
//   }
// 
//   public String getParentCommentId() {
//     return myParentCommentId;
//   }
// 
//   public String getPermId() {
//     return myPermId;
//   }
// 
//   public void setPermId(String id) {
//     myPermId = id;
//   }
// 
//   public boolean isDraft() {
//     return myDraft;
//   }
// 
//   public void setDraft(boolean draft) {
//     myDraft = draft;
//   }
// }
// 
// Path: src/com/jetbrains/crucible/model/Review.java
// public class Review extends BasicReview {
//   private final List<Comment> myGeneralComments = new ArrayList<Comment>();
//   private final List<Comment> myComments = new ArrayList<Comment>();
// 
//   private final Set<ReviewItem> myItems = new HashSet<ReviewItem>();
// 
//   public Review(@NotNull final String id, @NotNull final User author,
//                 @Nullable final User moderator) {
//     super(id, author, moderator);
//   }
// 
//   public void addGeneralComment(@NotNull Comment generalComment) {
//     myGeneralComments.add(generalComment);
//   }
// 
//   public void addComment(@NotNull Comment comment) {
//     myComments.add(comment);
//   }
// 
//   @NotNull
//   public List<Comment> getGeneralComments() {
//     return myGeneralComments;
//   }
// 
//   @NotNull
//   public List<Comment> getComments() {
//     return myComments;
//   }
// 
//   @NotNull
//   public Set<ReviewItem> getReviewItems() {
//     return myItems;
//   }
// 
//   public void addReviewItem(@NotNull final ReviewItem item) {
//     myItems.add(item);
//   }
// 
//   @Nullable
//   public String getPathById(@NotNull final String id) {
//     for (ReviewItem item : myItems) {
//       if (item.getId().equals(id))
//         return item.getPath();
//     }
//     return null;
//   }
// 
//   @Nullable
//   public String getIdByPath(@NotNull final String path, Project project) {
//     final Map<String,VirtualFile> hash = CrucibleManager.getInstance(project).getRepoHash();
// 
//     for (ReviewItem item : myItems) {
//       final String repo = item.getRepo();
//       final String root = hash.containsKey(repo) ? hash.get(repo).getPath() : project.getBasePath();
//       String relativePath = FileUtil.getRelativePath(new File(Objects.requireNonNull(root)), new File(path));
//       if (FileUtil.pathsEqual(relativePath, item.getPath())) {
//         return item.getId();
//       }
//     }
//     return null;
//   }
// 
//   public boolean isInPatch(@NotNull Comment comment) {
//     final String reviewItemId = comment.getReviewItemId();
//     return null != ContainerUtil.find(myItems, new Condition<ReviewItem>() {
//       @Override
//       public boolean value(ReviewItem item) {
//         return item.getId().equalsIgnoreCase(reviewItemId) && item.isPatch();
//       }
//     });
//   }
// }


// Path: src/com/jetbrains/crucible/ui/toolWindow/details/CommentAction.java
import com.intellij.openapi.project.Project;
import com.jetbrains.crucible.model.Comment;
import com.jetbrains.crucible.model.Review;
import org.jetbrains.annotations.NotNull;

package com.jetbrains.crucible.ui.toolWindow.details;


/**
 * @author Kirill Likhodedov
 */
public abstract class CommentAction {

  @NotNull protected final Project myProject;
  @NotNull protected final Review myReview;