Skip to content

Commit 0bd3e6f

Browse files
committed
Merge pull request #4 from richarddbarnett/master
Support creating private comments
2 parents ac727b8 + acd9d7b commit 0bd3e6f

File tree

3 files changed

+89
-23
lines changed

3 files changed

+89
-23
lines changed

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

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.ning.http.client.Request;
1414
import com.ning.http.client.RequestBuilder;
1515
import com.ning.http.client.Response;
16+
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
1819
import org.zendesk.client.v2.model.Attachment;
@@ -665,6 +666,14 @@ private String json(Object object) {
665666

666667
private <T> ListenableFuture<T> submit(Request request, AsyncCompletionHandler<T> handler) {
667668
try {
669+
if (request.getStringData() != null) {
670+
logger.debug("Request {} {}\n{}", request.getMethod(), request.getUrl(), request.getStringData());
671+
} else if (request.getByteData() != null) {
672+
logger.debug("Request {} {} {} {} bytes", request.getMethod(), request.getUrl(), //
673+
request.getHeaders().getFirstValue("Content-type"), request.getByteData().length);
674+
} else {
675+
logger.debug("Request {} {}", request.getMethod(), request.getUrl());
676+
}
668677
return client.executeRequest(request, handler);
669678
} catch (IOException e) {
670679
throw new ZenDeskException(e.getMessage(), e);
@@ -716,12 +725,11 @@ protected AsyncCompletionHandler<Void> handleStatus() {
716725
return new AsyncCompletionHandler<Void>() {
717726
@Override
718727
public Void onCompleted(Response response) throws Exception {
719-
logger.debug("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
720-
response.getResponseBody());
721-
if (response.getStatusCode() / 100 == 2) {
728+
logResponse(response);
729+
if (isStatus2xx(response)) {
722730
return null;
723731
}
724-
throw new ZenDeskException(response.getStatusText());
732+
throw new ZenDeskResponseException(response);
725733
}
726734
};
727735
}
@@ -730,15 +738,14 @@ protected <T> AsyncCompletionHandler<T> handle(final Class<T> clazz) {
730738
return new AsyncCompletionHandler<T>() {
731739
@Override
732740
public T onCompleted(Response response) throws Exception {
733-
logger.debug("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
734-
response.getResponseBody());
735-
if (response.getStatusCode() / 100 == 2) {
741+
logResponse(response);
742+
if (isStatus2xx(response)) {
736743
return (T) mapper.reader(clazz).readValue(response.getResponseBodyAsBytes());
737744
}
738745
if (response.getStatusCode() == 404) {
739746
return null;
740747
}
741-
throw new ZenDeskException(response.getStatusText());
748+
throw new ZenDeskResponseException(response);
742749
}
743750
};
744751
}
@@ -747,15 +754,14 @@ protected <T> AsyncCompletionHandler<T> handle(final Class<T> clazz, final Strin
747754
return new AsyncCompletionHandler<T>() {
748755
@Override
749756
public T onCompleted(Response response) throws Exception {
750-
logger.debug("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
751-
response.getResponseBody());
752-
if (response.getStatusCode() / 100 == 2) {
757+
logResponse(response);
758+
if (isStatus2xx(response)) {
753759
return mapper.convertValue(mapper.readTree(response.getResponseBodyAsBytes()).get(name), clazz);
754760
}
755761
if (response.getStatusCode() == 404) {
756762
return null;
757763
}
758-
throw new ZenDeskException(response.getStatusText());
764+
throw new ZenDeskResponseException(response);
759765
}
760766
};
761767
}
@@ -764,16 +770,15 @@ protected <T> AsyncCompletionHandler<List<T>> handleList(final Class<T> clazz) {
764770
return new AsyncCompletionHandler<List<T>>() {
765771
@Override
766772
public List<T> onCompleted(Response response) throws Exception {
767-
logger.info("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
768-
response.getResponseBody());
769-
if (response.getStatusCode() / 100 == 2) {
773+
logResponse(response);
774+
if (isStatus2xx(response)) {
770775
List<T> values = new ArrayList<T>();
771776
for (JsonNode node : mapper.readTree(response.getResponseBodyAsBytes())) {
772777
values.add(mapper.convertValue(node, clazz));
773778
}
774779
return values;
775780
}
776-
throw new ZenDeskException(response.getStatusText());
781+
throw new ZenDeskResponseException(response);
777782
}
778783
};
779784
}
@@ -782,16 +787,15 @@ protected <T> AsyncCompletionHandler<List<T>> handleList(final Class<T> clazz, f
782787
return new AsyncCompletionHandler<List<T>>() {
783788
@Override
784789
public List<T> onCompleted(Response response) throws Exception {
785-
logger.debug("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
786-
response.getResponseBody());
787-
if (response.getStatusCode() / 100 == 2) {
790+
logResponse(response);
791+
if (isStatus2xx(response)) {
788792
List<T> values = new ArrayList<T>();
789793
for (JsonNode node : mapper.readTree(response.getResponseBodyAsBytes()).get(name)) {
790794
values.add(mapper.convertValue(node, clazz));
791795
}
792796
return values;
793797
}
794-
throw new ZenDeskException(response.getStatusText());
798+
throw new ZenDeskResponseException(response);
795799
}
796800
};
797801
}
@@ -804,6 +808,18 @@ private Uri cnst(String template) {
804808
return new FixedUri(url + template);
805809
}
806810

811+
private void logResponse(Response response) throws IOException {
812+
logger.debug("Response HTTP/{} {}\n{}", response.getStatusCode(), response.getStatusText(),
813+
response.getResponseBody());
814+
if (logger.isTraceEnabled()) {
815+
logger.trace("Response headers {}", response.getHeaders());
816+
}
817+
}
818+
819+
private boolean isStatus2xx(Response response) {
820+
return response.getStatusCode() / 100 == 2;
821+
}
822+
807823
//////////////////////////////////////////////////////////////////////
808824
// Static helper methods
809825
//////////////////////////////////////////////////////////////////////
@@ -814,6 +830,9 @@ private static <T> T complete(ListenableFuture<T> future) {
814830
} catch (InterruptedException e) {
815831
throw new ZenDeskException(e.getMessage(), e);
816832
} catch (ExecutionException e) {
833+
if (e.getCause() instanceof ZenDeskException) {
834+
throw (ZenDeskException) e.getCause();
835+
}
817836
throw new ZenDeskException(e.getMessage(), e);
818837
}
819838
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.zendesk.client.v2;
2+
3+
import java.io.IOException;
4+
5+
import com.ning.http.client.Response;
6+
7+
/**
8+
* {@link ZenDeskException} specialisation for HTTP non-2xx responses
9+
*/
10+
public class ZenDeskResponseException extends ZenDeskException {
11+
private int statusCode;
12+
private String statusText;
13+
private String body;
14+
15+
public ZenDeskResponseException(Response resp) throws IOException {
16+
this(resp.getStatusCode(), resp.getStatusText(), resp.getResponseBody());
17+
}
18+
19+
public ZenDeskResponseException(int statusCode, String statusText, String body) {
20+
super(statusText);
21+
this.statusCode = statusCode;
22+
this.statusText = statusText;
23+
this.body = body;
24+
}
25+
26+
public int getStatusCode() {
27+
return statusCode;
28+
}
29+
30+
public String getStatusText() {
31+
return statusText;
32+
}
33+
34+
public String getBody() {
35+
return body;
36+
}
37+
}

src/main/java/org/zendesk/client/v2/model/Comment.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77
import java.util.List;
88

99
/**
10-
* @author stephenc
11-
* @since 09/04/2013 15:09
12-
*/
10+
* @author stephenc
11+
* @since 09/04/2013 15:09
12+
*/
1313
public class Comment {
1414
private Integer id;
1515
private String body;
1616
private Integer authorId;
1717
private List<String> uploads;
1818
private List<Attachment> attachments;
1919
private Date createdAt;
20+
private Boolean publicComment;
2021

2122
public Comment() {
2223
}
@@ -80,6 +81,15 @@ public void setId(Integer id) {
8081
this.id = id;
8182
}
8283

84+
@JsonProperty("public")
85+
public Boolean isPublic() {
86+
return publicComment;
87+
}
88+
89+
public void setPublic(Boolean isPublic) {
90+
this.publicComment = isPublic;
91+
}
92+
8393
@Override
8494
public String toString() {
8595
final StringBuilder sb = new StringBuilder("Comment{");

0 commit comments

Comments
 (0)