Skip to content

Commit 22d23a0

Browse files
committed
Add support for custom fields
1 parent d774b63 commit 22d23a0

File tree

3 files changed

+307
-5
lines changed

3 files changed

+307
-5
lines changed

src/main/java/org/zendesk/client/v2/ZenDesk.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.slf4j.Logger;
1818
import org.slf4j.LoggerFactory;
1919
import org.zendesk.client.v2.model.Audit;
20+
import org.zendesk.client.v2.model.Field;
2021
import org.zendesk.client.v2.model.Ticket;
2122

2223
import java.io.Closeable;
@@ -210,6 +211,36 @@ public void makePrivateTicketAudit(int ticketId, int auditId) {
210211
.set("auditId", auditId)), handleStatus()));
211212
}
212213

214+
public List<Field> getTicketFields() {
215+
return complete(submit(req("GET", cnst("/ticket_fields.json")), handleList(Field.class, "ticket_fields")));
216+
}
217+
218+
public Field getTicketField(int id) {
219+
return complete(submit(req("GET", tmpl("/ticket_fields/{id}.json").set("id", id)), handle(Field.class, "ticket_field")));
220+
}
221+
222+
public Field createTicketField(Field field) {
223+
return complete(submit(req("POST", cnst("/ticket_fields.json"), JSON, json(
224+
Collections.singletonMap("ticket_field", field))), handle(Field.class, "ticket_field")));
225+
}
226+
227+
public Field updateTicketField(Field field) {
228+
checkHasId(field);
229+
return complete(submit(req("PUT", tmpl("/ticket_fields/{id}.json").set("id", field.getId()), JSON,
230+
json(Collections.singletonMap("ticket_field", field))), handle(Field.class, "ticket_field")));
231+
}
232+
233+
public void deleteTicketField(Field field) {
234+
checkHasId(field);
235+
deleteTicket(field.getId());
236+
}
237+
238+
public void deleteTicketField(int id) {
239+
complete(submit(req("DELETE", tmpl("/ticket_fields/{id}.json").set("id", id)), handleStatus()));
240+
}
241+
242+
243+
213244

214245
//////////////////////////////////////////////////////////////////////
215246
// Helper methods
@@ -381,6 +412,12 @@ private static void checkHasId(Audit audit) {
381412
}
382413
}
383414

415+
private static void checkHasId(Field field) {
416+
if (field.getId() == null) {
417+
throw new IllegalArgumentException("Field requires id");
418+
}
419+
}
420+
384421
private static List<Integer> idArray(int id, int... ids) {
385422
List<Integer> result = new ArrayList<Integer>(ids.length + 1);
386423
result.add(id);
Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
package org.zendesk.client.v2.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
import java.util.Date;
6+
import java.util.List;
7+
8+
/**
9+
* @author stephenc
10+
* @since 05/04/2013 12:03
11+
*/
12+
public class Field {
13+
private Integer id;
14+
private String url;
15+
private String type;
16+
private String title;
17+
private String description;
18+
private Integer position;
19+
private Boolean active;
20+
private Boolean required;
21+
private Boolean collapsedForAgents;
22+
private String regexpForValidation;
23+
private String titleInPortal;
24+
private Boolean visibleInPortal;
25+
private Boolean editableInPortal;
26+
private Boolean requiredInPortal;
27+
private String tag;
28+
private Date createdAt;
29+
private Date updatedAt;
30+
private List<Option> customFieldOptions;
31+
32+
public Boolean getActive() {
33+
return active;
34+
}
35+
36+
public void setActive(Boolean active) {
37+
this.active = active;
38+
}
39+
40+
@JsonProperty("collapsed_for_agents")
41+
public Boolean getCollapsedForAgents() {
42+
return collapsedForAgents;
43+
}
44+
45+
public void setCollapsedForAgents(Boolean collapsedForAgents) {
46+
this.collapsedForAgents = collapsedForAgents;
47+
}
48+
49+
@JsonProperty("created_at")
50+
public Date getCreatedAt() {
51+
return createdAt;
52+
}
53+
54+
public void setCreatedAt(Date createdAt) {
55+
this.createdAt = createdAt;
56+
}
57+
58+
@JsonProperty("custom_field_options")
59+
public List<Option> getCustomFieldOptions() {
60+
return customFieldOptions;
61+
}
62+
63+
public void setCustomFieldOptions(List<Option> customFieldOptions) {
64+
this.customFieldOptions = customFieldOptions;
65+
}
66+
67+
public String getDescription() {
68+
return description;
69+
}
70+
71+
public void setDescription(String description) {
72+
this.description = description;
73+
}
74+
75+
@JsonProperty("editable_in_portal")
76+
public Boolean getEditableInPortal() {
77+
return editableInPortal;
78+
}
79+
80+
public void setEditableInPortal(Boolean editableInPortal) {
81+
this.editableInPortal = editableInPortal;
82+
}
83+
84+
public Integer getId() {
85+
return id;
86+
}
87+
88+
public void setId(Integer id) {
89+
this.id = id;
90+
}
91+
92+
public Integer getPosition() {
93+
return position;
94+
}
95+
96+
public void setPosition(Integer position) {
97+
this.position = position;
98+
}
99+
100+
@JsonProperty("regexp_for_validation")
101+
public String getRegexpForValidation() {
102+
return regexpForValidation;
103+
}
104+
105+
public void setRegexpForValidation(String regexpForValidation) {
106+
this.regexpForValidation = regexpForValidation;
107+
}
108+
109+
public Boolean getRequired() {
110+
return required;
111+
}
112+
113+
public void setRequired(Boolean required) {
114+
this.required = required;
115+
}
116+
117+
@JsonProperty("required_in_portal")
118+
public Boolean getRequiredInPortal() {
119+
return requiredInPortal;
120+
}
121+
122+
public void setRequiredInPortal(Boolean requiredInPortal) {
123+
this.requiredInPortal = requiredInPortal;
124+
}
125+
126+
public String getTag() {
127+
return tag;
128+
}
129+
130+
public void setTag(String tag) {
131+
this.tag = tag;
132+
}
133+
134+
public String getTitle() {
135+
return title;
136+
}
137+
138+
public void setTitle(String title) {
139+
this.title = title;
140+
}
141+
142+
@JsonProperty("title_in_portal")
143+
public String getTitleInPortal() {
144+
return titleInPortal;
145+
}
146+
147+
public void setTitleInPortal(String titleInPortal) {
148+
this.titleInPortal = titleInPortal;
149+
}
150+
151+
public String getType() {
152+
return type;
153+
}
154+
155+
public void setType(String type) {
156+
this.type = type;
157+
}
158+
159+
@JsonProperty("updated_at")
160+
public Date getUpdatedAt() {
161+
return updatedAt;
162+
}
163+
164+
public void setUpdatedAt(Date updatedAt) {
165+
this.updatedAt = updatedAt;
166+
}
167+
168+
public String getUrl() {
169+
return url;
170+
}
171+
172+
public void setUrl(String url) {
173+
this.url = url;
174+
}
175+
176+
@JsonProperty("visible_in_portal")
177+
public Boolean getVisibleInPortal() {
178+
return visibleInPortal;
179+
}
180+
181+
public void setVisibleInPortal(Boolean visibleInPortal) {
182+
this.visibleInPortal = visibleInPortal;
183+
}
184+
185+
@Override
186+
public String toString() {
187+
final StringBuilder sb = new StringBuilder();
188+
sb.append("Field");
189+
sb.append("{active=").append(active);
190+
sb.append(", id=").append(id);
191+
sb.append(", url='").append(url).append('\'');
192+
sb.append(", type='").append(type).append('\'');
193+
sb.append(", title='").append(title).append('\'');
194+
sb.append(", description='").append(description).append('\'');
195+
sb.append(", position=").append(position);
196+
sb.append(", required=").append(required);
197+
sb.append(", collapsedForAgents=").append(collapsedForAgents);
198+
sb.append(", regexpForValidation='").append(regexpForValidation).append('\'');
199+
sb.append(", titleInPortal='").append(titleInPortal).append('\'');
200+
sb.append(", visibleInPortal=").append(visibleInPortal);
201+
sb.append(", editableInPortal=").append(editableInPortal);
202+
sb.append(", requiredInPortal=").append(requiredInPortal);
203+
sb.append(", tag='").append(tag).append('\'');
204+
sb.append(", createdAt=").append(createdAt);
205+
sb.append(", updatedAt=").append(updatedAt);
206+
sb.append(", customFieldOptions=").append(customFieldOptions);
207+
sb.append('}');
208+
return sb.toString();
209+
}
210+
211+
private static class Option {
212+
private String name;
213+
private String value;
214+
215+
private Option() {
216+
}
217+
218+
private Option(String name, String value) {
219+
this.name = name;
220+
this.value = value;
221+
}
222+
223+
public String getName() {
224+
return name;
225+
}
226+
227+
public void setName(String name) {
228+
this.name = name;
229+
}
230+
231+
public String getValue() {
232+
return value;
233+
}
234+
235+
public void setValue(String value) {
236+
this.value = value;
237+
}
238+
239+
@Override
240+
public String toString() {
241+
final StringBuilder sb = new StringBuilder();
242+
sb.append("Option");
243+
sb.append("{name='").append(name).append('\'');
244+
sb.append(", value='").append(value).append('\'');
245+
sb.append('}');
246+
return sb.toString();
247+
}
248+
}
249+
}

src/test/java/org/zendesk/client/v2/RealSmokeTest.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package org.zendesk.client.v2;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.SerializationFeature;
35
import org.junit.After;
46
import org.junit.BeforeClass;
57
import org.junit.Ignore;
68
import org.junit.Test;
79
import org.zendesk.client.v2.model.Audit;
8-
import org.zendesk.client.v2.model.events.Event;
10+
import org.zendesk.client.v2.model.Field;
911
import org.zendesk.client.v2.model.Ticket;
12+
import org.zendesk.client.v2.model.events.Event;
1013

1114
import java.util.Collections;
1215
import java.util.Properties;
@@ -15,9 +18,7 @@
1518
import static org.hamcrest.CoreMatchers.not;
1619
import static org.hamcrest.CoreMatchers.notNullValue;
1720
import static org.hamcrest.CoreMatchers.nullValue;
18-
import static org.junit.Assert.assertNotNull;
1921
import static org.junit.Assert.assertThat;
20-
import static org.junit.Assert.fail;
2122
import static org.junit.Assume.assumeThat;
2223

2324
/**
@@ -104,7 +105,7 @@ public void getTicketsById() throws Exception {
104105
for (Ticket t : instance.getTickets(1, 3, 5)) {
105106
assertThat(t.getSubject(), notNullValue());
106107
assertThat(t.getId(), is(count));
107-
count+= 2;
108+
count += 2;
108109
}
109110
assertThat(count, is(7));
110111
}
@@ -118,6 +119,19 @@ public void getTicketAudits() throws Exception {
118119
}
119120
}
120121

122+
@Test
123+
public void getTicketFields() throws Exception {
124+
createClientWithToken();
125+
int count = 0;
126+
for (Field f : instance.getTicketFields()) {
127+
assertThat(f, notNullValue());
128+
assertThat(f.getId(), notNullValue());
129+
assertThat(f.getType(), notNullValue());
130+
System.out.println(new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(f));
131+
if (++count > 10) break;
132+
}
133+
}
134+
121135
@Test
122136
public void createClientWithPassword() throws Exception {
123137
assumeHavePassword();
@@ -141,7 +155,9 @@ public void createAnonymousClient() {
141155
public void createDeleteTicket() throws Exception {
142156
createClientWithToken();
143157
assumeThat("Must have a requester email", config.getProperty("requester.email"), notNullValue());
144-
Ticket t = new Ticket(new Ticket.Requester(config.getProperty("requester.name"), config.getProperty("requester.email")), "This is a test", new Ticket.Comment("Please ignore this ticket"));
158+
Ticket t = new Ticket(
159+
new Ticket.Requester(config.getProperty("requester.name"), config.getProperty("requester.email")),
160+
"This is a test", new Ticket.Comment("Please ignore this ticket"));
145161
Ticket ticket = instance.createTicket(t);
146162
System.out.println(ticket.getId() + " -> " + ticket.getUrl());
147163
assertThat(ticket.getId(), notNullValue());

0 commit comments

Comments
 (0)