1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.atlassian.jira.rest.client.api.domain;
18
19 import com.atlassian.jira.rest.client.api.AddressableEntity;
20 import com.google.common.base.Objects;
21 import org.joda.time.DateTime;
22
23 import javax.annotation.Nullable;
24 import java.net.URI;
25
26
27
28
29
30
31 public class Comment implements AddressableEntity {
32 private final URI self;
33 @Nullable
34 private final Long id;
35 @Nullable
36 private final BasicUser author;
37 @Nullable
38 private final BasicUser updateAuthor;
39 private final DateTime creationDate;
40 private final DateTime updateDate;
41 private final String body;
42 @Nullable
43 private final Visibility visibility;
44
45 public Comment(URI self, String body, @Nullable BasicUser author, @Nullable BasicUser updateAuthor, DateTime creationDate, DateTime updateDate, Visibility visibility, @Nullable Long id) {
46 this.author = author;
47 this.updateAuthor = updateAuthor;
48 this.creationDate = creationDate;
49 this.updateDate = updateDate;
50 this.body = body;
51 this.self = self;
52 this.visibility = visibility;
53 this.id = id;
54 }
55
56 public static Comment valueOf(String body) {
57 return new Comment(null, body, null, null, null, null, null, null);
58 }
59
60 public static Comment createWithRoleLevel(String body, String roleLevel) {
61 return new Comment(null, body, null, null, null, null, Visibility.role(roleLevel), null);
62 }
63
64 public static Comment createWithGroupLevel(String body, String groupLevel) {
65 return new Comment(null, body, null, null, null, null, Visibility.group(groupLevel), null);
66 }
67
68 public boolean wasUpdated() {
69 return updateDate.isAfter(creationDate);
70 }
71
72 public String getBody() {
73 return body;
74 }
75
76 @Nullable
77 public Long getId() {
78 return id;
79 }
80
81 @Override
82 public URI getSelf() {
83 return self;
84 }
85
86 @Nullable
87 public BasicUser getAuthor() {
88 return author;
89 }
90
91 @Nullable
92 public BasicUser getUpdateAuthor() {
93 return updateAuthor;
94 }
95
96 public DateTime getCreationDate() {
97 return creationDate;
98 }
99
100 public DateTime getUpdateDate() {
101 return updateDate;
102 }
103
104 @Nullable
105 public Visibility getVisibility() {
106 return visibility;
107 }
108
109 @Override
110 public String toString() {
111 return Objects.toStringHelper(this)
112 .add("self", self)
113 .add("id", id)
114 .add("body", body)
115 .add("author", author)
116 .add("updateAuthor", updateAuthor)
117 .add("creationDate", creationDate)
118 .add("visibility", visibility)
119 .add("updateDate", updateDate).toString();
120 }
121
122 @Override
123 public boolean equals(Object obj) {
124 if (obj instanceof Comment) {
125 Comment that = (Comment) obj;
126 return Objects.equal(this.self, that.self)
127 && Objects.equal(this.id, that.id)
128 && Objects.equal(this.body, that.body)
129 && Objects.equal(this.author, that.author)
130 && Objects.equal(this.updateAuthor, that.updateAuthor)
131 && Objects.equal(this.creationDate, that.creationDate)
132 && Objects.equal(this.updateDate, that.updateDate)
133 && Objects.equal(this.visibility, that.visibility)
134 && Objects.equal(this.body, that.body);
135 }
136 return false;
137 }
138
139 @Override
140 public int hashCode() {
141 return Objects.hashCode(self, id, body, author, updateAuthor, creationDate, updateDate, visibility);
142 }
143
144 }