1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.atlassian.jira.rest.client.domain.input;
18
19 import com.atlassian.jira.rest.client.domain.BasicComponent;
20 import com.atlassian.jira.rest.client.domain.BasicIssueType;
21 import com.atlassian.jira.rest.client.domain.BasicPriority;
22 import com.atlassian.jira.rest.client.domain.BasicProject;
23 import com.atlassian.jira.rest.client.domain.BasicUser;
24 import com.atlassian.jira.rest.client.domain.IssueFieldId;
25 import com.atlassian.jira.rest.client.domain.Version;
26 import com.atlassian.jira.rest.client.internal.json.JsonParseUtil;
27 import com.atlassian.jira.rest.client.internal.json.gen.ComplexIssueInputFieldValueJsonGenerator;
28 import com.google.common.base.Function;
29 import com.google.common.collect.Iterables;
30 import com.google.common.collect.Lists;
31 import com.google.common.collect.Maps;
32 import org.joda.time.DateTime;
33
34 import java.util.Map;
35
36 import static com.atlassian.jira.rest.client.domain.EntityHelper.toNamesList;
37
38
39
40
41
42
43 public class IssueInputBuilder {
44
45 private final ValueTransformerManager valueTransformerManager = new ValueTransformerManager()
46 .registerTransformer(new BaseValueTransformer());
47
48 private Map<String, FieldInput> fields = Maps.newHashMap();
49
50 public IssueInputBuilder(String projectKey, Long issueTypeId) {
51 setProjectKey(projectKey);
52 setIssueTypeId(issueTypeId);
53 }
54
55 public IssueInputBuilder(BasicProject project, BasicIssueType issueType) {
56 setProject(project);
57 setIssueType(issueType);
58 }
59
60 @SuppressWarnings("unused")
61 public IssueInputBuilder(String projectKey, Long issueTypeId, String summary) {
62 this(projectKey, issueTypeId);
63 setSummary(summary);
64 }
65
66 @SuppressWarnings("unused")
67 public IssueInputBuilder(BasicProject project, BasicIssueType issueType, String summary) {
68 this(project, issueType);
69 setSummary(summary);
70 }
71
72 public IssueInputBuilder setSummary(String summary) {
73 return setFieldInput(new FieldInput(IssueFieldId.SUMMARY_FIELD, summary));
74 }
75
76 public IssueInputBuilder setProjectKey(String projectKey) {
77 return setFieldInput(new FieldInput(IssueFieldId.PROJECT_FIELD, ComplexIssueInputFieldValue.with("key", projectKey)));
78 }
79
80 public IssueInputBuilder setProject(BasicProject project) {
81 return setProjectKey(project.getKey());
82 }
83
84 public IssueInputBuilder setIssueTypeId(Long issueTypeId) {
85 return setFieldInput(new FieldInput(
86 IssueFieldId.ISSUE_TYPE_FIELD,
87 ComplexIssueInputFieldValue.with("id", issueTypeId.toString())
88 ));
89 }
90
91 public IssueInputBuilder setIssueType(BasicIssueType issueType) {
92 return setIssueTypeId(issueType.getId());
93 }
94
95
96
97
98
99
100
101
102
103
104
105 public IssueInputBuilder setFieldInput(FieldInput fieldInput) {
106 fields.put(fieldInput.getId(), fieldInput);
107 return this;
108 }
109
110
111
112
113
114
115
116
117
118
119
120
121 @SuppressWarnings("unused")
122 public IssueInputBuilder setFieldValue(String id, ComplexIssueInputFieldValue value) {
123 return setFieldInput(new FieldInput(id, value));
124 }
125
126
127
128
129
130
131
132
133
134 public IssueInputBuilder setFieldValue(String id, Object value) throws CannotTransformValueException {
135 return setFieldInput(new FieldInput(id, valueTransformerManager.apply(value)));
136 }
137
138 public IssueInputBuilder setDescription(String summary) {
139 return setFieldInput(new FieldInput(IssueFieldId.DESCRIPTION_FIELD, summary));
140 }
141
142 public IssueInputBuilder setAssignee(BasicUser assignee) {
143 return setAssigneeName(assignee.getName());
144 }
145
146 public IssueInputBuilder setAssigneeName(String assignee) {
147 return setFieldInput(new FieldInput(IssueFieldId.ASSIGNEE_FIELD, ComplexIssueInputFieldValue.with("name", assignee)));
148 }
149
150 public IssueInput build() {
151 return new IssueInput(fields);
152 }
153
154 @SuppressWarnings("unused")
155 public IssueInputBuilder setAffectedVersions(Iterable<Version> versions) {
156 return setAffectedVersionsNames(toNamesList(versions));
157 }
158
159 public IssueInputBuilder setAffectedVersionsNames(Iterable<String> names) {
160 return setFieldInput(new FieldInput(IssueFieldId.AFFECTS_VERSIONS_FIELD, toListOfComplexIssueInputFieldValueWithSingleKey(names, "name")));
161 }
162
163 public IssueInputBuilder setComponentsNames(Iterable<String> names) {
164 return setFieldInput(new FieldInput(IssueFieldId.COMPONENTS_FIELD, toListOfComplexIssueInputFieldValueWithSingleKey(names, "name")));
165 }
166
167 public IssueInputBuilder setComponents(Iterable<BasicComponent> basicComponents) {
168 return setComponentsNames(toNamesList(basicComponents));
169 }
170
171 public IssueInputBuilder setComponents(BasicComponent... basicComponents) {
172 return setComponents(Lists.newArrayList(basicComponents));
173 }
174
175 public IssueInputBuilder setDueDate(DateTime date) {
176 return setFieldInput(new FieldInput(IssueFieldId.DUE_DATE_FIELD, JsonParseUtil.formatDate(date)));
177 }
178
179 public IssueInputBuilder setFixVersionsNames(Iterable<String> names) {
180 return setFieldInput(new FieldInput(IssueFieldId.FIX_VERSIONS_FIELD, toListOfComplexIssueInputFieldValueWithSingleKey(names, "name")));
181 }
182
183 @SuppressWarnings("unused")
184 public IssueInputBuilder setFixVersions(Iterable<Version> versions) {
185 return setFixVersionsNames(toNamesList(versions));
186 }
187
188 public IssueInputBuilder setPriority(BasicPriority priority) {
189 return setPriorityId(priority.getId());
190 }
191
192 public IssueInputBuilder setPriorityId(Long id) {
193 return setFieldInput(new FieldInput(IssueFieldId.PRIORITY_FIELD, ComplexIssueInputFieldValue.with("id", id.toString())));
194 }
195
196 public IssueInputBuilder setReporter(BasicUser reporter) {
197 return setReporterName(reporter.getName());
198 }
199
200 public IssueInputBuilder setReporterName(String reporterName) {
201 return setFieldInput(new FieldInput(IssueFieldId.REPORTER_FIELD, ComplexIssueInputFieldValue.with("name", reporterName)));
202 }
203
204
205
206
207
208
209
210 @SuppressWarnings("UnusedDeclaration")
211 public ValueTransformerManager getValueTransformerManager() {
212 return valueTransformerManager;
213 }
214
215 private <T> Iterable<ComplexIssueInputFieldValue> toListOfComplexIssueInputFieldValueWithSingleKey(final Iterable<T> items, final String key) {
216 return Iterables.transform(items, new Function<T, ComplexIssueInputFieldValue>() {
217
218 @Override
219 public ComplexIssueInputFieldValue apply(T value) {
220 return ComplexIssueInputFieldValue.with(key, value);
221 }
222 });
223 }
224
225 }