Skip to content

Commit 08d5651

Browse files
committed
1 parent 9ee5bfd commit 08d5651

File tree

5 files changed

+264
-1
lines changed

5 files changed

+264
-1
lines changed

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.databind.JavaType;
77
import com.fasterxml.jackson.databind.JsonNode;
88
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import com.fasterxml.jackson.databind.ObjectReader;
910
import com.fasterxml.jackson.databind.SerializationFeature;
1011
import com.fasterxml.jackson.databind.util.StdDateFormat;
1112
import java.io.Closeable;
@@ -103,6 +104,8 @@
103104
import org.zendesk.client.v2.model.targets.Target;
104105
import org.zendesk.client.v2.model.targets.TwitterTarget;
105106
import org.zendesk.client.v2.model.targets.UrlTarget;
107+
import org.zendesk.client.v2.model.views.ExecutedViewPage;
108+
import org.zendesk.client.v2.model.views.ViewRow;
106109

107110
/**
108111
* @author stephenc
@@ -1033,6 +1036,17 @@ public Iterable<Ticket> getView(long id) {
10331036
tmpl("/views/{id}/tickets.json").set("id", id), handleList(Ticket.class, "tickets"));
10341037
}
10351038

1039+
@SuppressWarnings("unchecked")
1040+
public <V extends ViewRow> Optional<ExecutedViewPage<V>> executeView(long id, Class<V> clazz) {
1041+
var objectReader =
1042+
mapper.readerFor(
1043+
mapper.getTypeFactory().constructParametricType(ExecutedViewPage.class, clazz));
1044+
return Optional.of(
1045+
complete(
1046+
submit(
1047+
req("GET", tmpl("/views/{id}/execute.json").set("id", id)), handle(objectReader))));
1048+
}
1049+
10361050
// Automations
10371051
public Iterable<Automation> getAutomations() {
10381052
return new PagedIterable<>(
@@ -3519,12 +3533,17 @@ public Void onCompleted(Response response) throws Exception {
35193533

35203534
@SuppressWarnings("unchecked")
35213535
protected <T> ZendeskAsyncCompletionHandler<T> handle(final Class<T> clazz) {
3536+
return handle(mapper.readerFor(clazz));
3537+
}
3538+
3539+
@SuppressWarnings("unchecked")
3540+
protected <T> ZendeskAsyncCompletionHandler<T> handle(ObjectReader reader) {
35223541
return new ZendeskAsyncCompletionHandler<T>() {
35233542
@Override
35243543
public T onCompleted(Response response) throws Exception {
35253544
logResponse(response);
35263545
if (isStatus2xx(response)) {
3527-
return (T) mapper.readerFor(clazz).readValue(response.getResponseBodyAsStream());
3546+
return reader.readValue(response.getResponseBodyAsStream());
35283547
} else if (isRateLimitResponse(response)) {
35293548
throw new ZendeskResponseRateLimitException(response);
35303549
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package org.zendesk.client.v2.model.views;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import java.io.Serializable;
5+
import java.util.List;
6+
import java.util.Objects;
7+
8+
// this is somewhat similar to a Page but with a single ExecuteView object and not a list
9+
// hence why we cannot inherite Page<?>
10+
public class ExecutedViewPage<V extends ViewRow> implements Serializable {
11+
private static final long serialVersionUID = -7683989282890282540L;
12+
13+
private @JsonProperty("next_page") String nextPage;
14+
private @JsonProperty("previous_page") String previousPage;
15+
private int count;
16+
17+
private List<ViewColumn> columns;
18+
private List<V> rows;
19+
20+
public List<ViewColumn> getColumns() {
21+
return columns;
22+
}
23+
24+
public void setColumns(List<ViewColumn> columns) {
25+
this.columns = columns;
26+
}
27+
28+
public List<V> getRows() {
29+
return rows;
30+
}
31+
32+
public void setRows(List<V> rows) {
33+
this.rows = rows;
34+
}
35+
36+
public String getNextPage() {
37+
return nextPage;
38+
}
39+
40+
public void setNextPage(final String nextPage) {
41+
this.nextPage = nextPage;
42+
}
43+
44+
public String getPreviousPage() {
45+
return previousPage;
46+
}
47+
48+
public void setPreviousPage(final String previousPage) {
49+
this.previousPage = previousPage;
50+
}
51+
52+
public int getCount() {
53+
return count;
54+
}
55+
56+
public void setCount(final int count) {
57+
this.count = count;
58+
}
59+
60+
@Override
61+
public boolean equals(Object o) {
62+
if (o == null || getClass() != o.getClass()) return false;
63+
64+
ExecutedViewPage<?> that = (ExecutedViewPage<?>) o;
65+
return count == that.count
66+
&& Objects.equals(nextPage, that.nextPage)
67+
&& Objects.equals(previousPage, that.previousPage)
68+
&& Objects.equals(columns, that.columns)
69+
&& Objects.equals(rows, that.rows);
70+
}
71+
72+
@Override
73+
public int hashCode() {
74+
int result = Objects.hashCode(nextPage);
75+
result = 31 * result + Objects.hashCode(previousPage);
76+
result = 31 * result + count;
77+
result = 31 * result + Objects.hashCode(columns);
78+
result = 31 * result + Objects.hashCode(rows);
79+
return result;
80+
}
81+
82+
@Override
83+
public String toString() {
84+
return "ExecutedViewPage{"
85+
+ "nextPage='"
86+
+ nextPage
87+
+ '\''
88+
+ ", previousPage='"
89+
+ previousPage
90+
+ '\''
91+
+ ", count="
92+
+ count
93+
+ ", columns="
94+
+ columns
95+
+ ", rows="
96+
+ rows
97+
+ '}';
98+
}
99+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package org.zendesk.client.v2.model.views;
2+
3+
import java.io.Serializable;
4+
import java.util.Objects;
5+
6+
public class ViewColumn implements Serializable {
7+
private static final long serialVersionUID = 5250249523833634470L;
8+
9+
private String id;
10+
private String title;
11+
private boolean filterable;
12+
private boolean sortable;
13+
14+
public String getId() {
15+
return id;
16+
}
17+
18+
public void setId(String id) {
19+
this.id = id;
20+
}
21+
22+
public String getTitle() {
23+
return title;
24+
}
25+
26+
public void setTitle(String title) {
27+
this.title = title;
28+
}
29+
30+
public boolean isFilterable() {
31+
return filterable;
32+
}
33+
34+
public void setFilterable(boolean filterable) {
35+
this.filterable = filterable;
36+
}
37+
38+
public boolean isSortable() {
39+
return sortable;
40+
}
41+
42+
public void setSortable(boolean sortable) {
43+
this.sortable = sortable;
44+
}
45+
46+
@Override
47+
public boolean equals(Object o) {
48+
if (o == null || getClass() != o.getClass()) return false;
49+
50+
ViewColumn that = (ViewColumn) o;
51+
return filterable == that.filterable
52+
&& sortable == that.sortable
53+
&& Objects.equals(id, that.id)
54+
&& Objects.equals(title, that.title);
55+
}
56+
57+
@Override
58+
public int hashCode() {
59+
int result = Objects.hashCode(id);
60+
result = 31 * result + Objects.hashCode(title);
61+
result = 31 * result + Boolean.hashCode(filterable);
62+
result = 31 * result + Boolean.hashCode(sortable);
63+
return result;
64+
}
65+
66+
@Override
67+
public String toString() {
68+
return "ViewColumn{"
69+
+ "id='"
70+
+ id
71+
+ '\''
72+
+ ", title='"
73+
+ title
74+
+ '\''
75+
+ ", filterable="
76+
+ filterable
77+
+ ", sortable="
78+
+ sortable
79+
+ '}';
80+
}
81+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.zendesk.client.v2.model.views;
2+
3+
import java.io.Serializable;
4+
import java.util.Objects;
5+
import org.zendesk.client.v2.model.Ticket;
6+
7+
public abstract class ViewRow implements Serializable {
8+
private static final long serialVersionUID = -5436397225795525024L;
9+
private Ticket ticket;
10+
11+
public Ticket getTicket() {
12+
return ticket;
13+
}
14+
15+
public void setTicket(Ticket ticket) {
16+
this.ticket = ticket;
17+
}
18+
19+
@Override
20+
public boolean equals(Object o) {
21+
if (o == null || getClass() != o.getClass()) return false;
22+
23+
ViewRow viewRow = (ViewRow) o;
24+
return Objects.equals(ticket, viewRow.ticket);
25+
}
26+
27+
@Override
28+
public int hashCode() {
29+
return Objects.hashCode(ticket);
30+
}
31+
32+
@Override
33+
public String toString() {
34+
return "ViewRow{" + "ticket=" + ticket + '}';
35+
}
36+
}

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import static org.junit.Assert.assertTrue;
2929
import static org.junit.Assume.assumeThat;
3030

31+
import com.fasterxml.jackson.annotation.JsonProperty;
3132
import java.util.ArrayList;
3233
import java.util.Arrays;
3334
import java.util.Calendar;
@@ -107,6 +108,7 @@
107108
import org.zendesk.client.v2.model.schedules.Interval;
108109
import org.zendesk.client.v2.model.schedules.Schedule;
109110
import org.zendesk.client.v2.model.targets.Target;
111+
import org.zendesk.client.v2.model.views.ViewRow;
110112

111113
/**
112114
* @author stephenc
@@ -2848,6 +2850,32 @@ public void getLocalesReturnsLocales() throws Exception {
28482850
assertThat(numLocales, greaterThan(0));
28492851
}
28502852

2853+
@Test
2854+
public void executeView() throws Exception {
2855+
// a view specifically created for this test, that is supposed to stay on our test instance
2856+
var ispView = 37058613923611L;
2857+
createClientWithTokenOrPassword();
2858+
var maybeViewPage = instance.executeView(ispView, ViewRowWithSatisfactionScore.class);
2859+
assertThat(maybeViewPage.isPresent(), is(true));
2860+
assertThat(maybeViewPage.get().getCount(), is(2));
2861+
assertThat(maybeViewPage.get().getRows().get(0).getSatisfactionScore(), is("Unoffered"));
2862+
}
2863+
2864+
static class ViewRowWithSatisfactionScore extends ViewRow {
2865+
private static final long serialVersionUID = 1L;
2866+
2867+
@JsonProperty("satisfaction_score")
2868+
private String satisfactionScore;
2869+
2870+
public String getSatisfactionScore() {
2871+
return satisfactionScore;
2872+
}
2873+
2874+
public void setSatisfactionScore(String satisfactionScore) {
2875+
this.satisfactionScore = satisfactionScore;
2876+
}
2877+
}
2878+
28512879
// UTILITIES
28522880

28532881
/**

0 commit comments

Comments
 (0)