Skip to content

Commit 8ed14e7

Browse files
committed
Merge pull request cloudbees-oss#15 from tomb50/to-upstream
Adding support for Forum, Topic & GroupMembership
2 parents 6d90ecd + 6fff586 commit 8ed14e7

File tree

5 files changed

+650
-13
lines changed

5 files changed

+650
-13
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ Here is the status of the various API components:
4343
* [Requests](http://developer.zendesk.com/documentation/rest_api/requests.html)
4444
* [User Identities](http://developer.zendesk.com/documentation/rest_api/user_identities.html)
4545
* [Groups](http://developer.zendesk.com/documentation/rest_api/groups.html)
46-
* [Group Membership](http://developer.zendesk.com/documentation/rest_api/group_memberships.html)
46+
* [Group Membership](http://developer.zendesk.com/documentation/rest_api/group_memberships.html)
4747
* [Custom Agent Roles](http://developer.zendesk.com/documentation/rest_api/custom_roles.html)
4848
* [Organizations](http://developer.zendesk.com/documentation/rest_api/organizations.html)*except for related info*
4949
* [Search](http://developer.zendesk.com/documentation/rest_api/search.html)*except for topics and sort ordering*
5050
* [Tags](http://developer.zendesk.com/documentation/rest_api/tags.html)
51-
* [Forums](http://developer.zendesk.com/documentation/rest_api/forums.html)
51+
* [Forums](http://developer.zendesk.com/documentation/rest_api/forums.html)
5252
* [Forum Subscriptions](http://developer.zendesk.com/documentation/rest_api/forum_subscriptions.html)
5353
* [Categories](http://developer.zendesk.com/documentation/rest_api/categories.html)
54-
* [Topics](http://developer.zendesk.com/documentation/rest_api/topics.html)
54+
* [Topics](http://developer.zendesk.com/documentation/rest_api/topics.html)
5555
* [Topic Comments](http://developer.zendesk.com/documentation/rest_api/topic_comments.html)
5656
* [Topic Subscriptions](http://developer.zendesk.com/documentation/rest_api/topic_subscriptions.html)
5757
* [Topic Votes](http://developer.zendesk.com/documentation/rest_api/topic_votes.html)

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

Lines changed: 184 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@
2020
import org.zendesk.client.v2.model.Audit;
2121
import org.zendesk.client.v2.model.Comment;
2222
import org.zendesk.client.v2.model.Field;
23+
import org.zendesk.client.v2.model.Forum;
2324
import org.zendesk.client.v2.model.Group;
25+
import org.zendesk.client.v2.model.GroupMembership;
2426
import org.zendesk.client.v2.model.Identity;
2527
import org.zendesk.client.v2.model.Organization;
2628
import org.zendesk.client.v2.model.OrganizationField;
2729
import org.zendesk.client.v2.model.SearchResultEntity;
30+
import org.zendesk.client.v2.model.Status;
2831
import org.zendesk.client.v2.model.Ticket;
32+
import org.zendesk.client.v2.model.Topic;
2933
import org.zendesk.client.v2.model.User;
3034
import org.zendesk.client.v2.model.UserField;
3135

@@ -40,7 +44,6 @@
4044
import java.util.Map;
4145
import java.util.NoSuchElementException;
4246
import java.util.concurrent.ExecutionException;
43-
import org.zendesk.client.v2.model.Status;
4447

4548

4649
/**
@@ -66,7 +69,7 @@ private static Map<String, Class<? extends SearchResultEntity>> searchResultType
6669
result.put("user", User.class);
6770
result.put("group", Group.class);
6871
result.put("organization", Organization.class);
69-
// result.put("topic", Topic.class) TODO add this when supported
72+
result.put("topic", Topic.class);
7073
return Collections.unmodifiableMap(result);
7174
}
7275

@@ -132,7 +135,7 @@ public Ticket getTicket(long id) {
132135
return complete(submit(req("GET", tmpl("/tickets/{id}.json").set("id", id)), handle(Ticket.class,
133136
"ticket")));
134137
}
135-
138+
136139
public List<Ticket> getTicketIncidents(long id) {
137140
return complete(submit(req("GET", tmpl("/tickets/{id}/incidents.json").set("id", id)),
138141
handleList(Ticket.class, "tickets")));
@@ -177,14 +180,14 @@ public void deleteTickets(long id, long... ids) {
177180
public Iterable<Ticket> getTickets() {
178181
return new PagedIterable<Ticket>(cnst("/tickets.json"), handleList(Ticket.class, "tickets"));
179182
}
180-
183+
181184
public Iterable<Ticket> getTicketsByStatus(Status... ticketStatus) {
182-
return new PagedIterable<Ticket>(tmpl("/tickets.json{?status}").set("status", statusArray(ticketStatus)),
185+
return new PagedIterable<Ticket>(tmpl("/tickets.json{?status}").set("status", statusArray(ticketStatus)),
183186
handleList(Ticket.class, "tickets"));
184187
}
185-
188+
186189
public Iterable<Ticket> getTicketsFromSearch(String searchTerm) {
187-
return new PagedIterable<Ticket>(tmpl("/search.json{?query}").set("query", searchTerm+"+type:ticket"),
190+
return new PagedIterable<Ticket>(tmpl("/search.json{?query}").set("query", searchTerm+"+type:ticket"),
188191
handleList(Ticket.class, "results"));
189192
}
190193

@@ -588,7 +591,7 @@ public Iterable<Comment> getRequestComments(long id) {
588591
return new PagedIterable<Comment>(tmpl("/requests/{id}/comments.json").set("id", id),
589592
handleList(Comment.class, "comments"));
590593
}
591-
594+
592595
public Iterable<Comment> getTicketComments(long id) {
593596
return new PagedIterable<Comment>(tmpl("/tickets/{id}/comments.json").set("id", id),
594597
handleList(Comment.class, "comments"));
@@ -718,7 +721,160 @@ public void deleteGroup(long id) {
718721
complete(submit(req("DELETE", tmpl("/groups/{id}.json").set("id", id)), handleStatus()));
719722
}
720723

721-
public Iterable<SearchResultEntity> getSearchResults(String query) {
724+
public Iterable<GroupMembership> getGroupMemberships() {
725+
return new PagedIterable<GroupMembership>(cnst("/group_memberships.json"),
726+
handleList(GroupMembership.class, "group_memberships"));
727+
}
728+
729+
public List<GroupMembership> getGroupMembershipByUser(long user_id) {
730+
return complete(submit(req("GET", tmpl("/users/{user_id}/group_memberships.json").set("user_id", user_id)),
731+
handleList(GroupMembership.class, "group_memberships")));
732+
}
733+
734+
public List<GroupMembership> getGroupMemberships(long group_id) {
735+
return complete(submit(req("GET", tmpl("/groups/{group_id}/memberships.json").set("group_id", group_id)),
736+
handleList(GroupMembership.class, "group_memberships")));
737+
}
738+
739+
public Iterable<GroupMembership> getAssignableGroupMemberships() {
740+
return new PagedIterable<GroupMembership>(cnst("/group_memberships/assignable.json"),
741+
handleList(GroupMembership.class, "group_memberships"));
742+
}
743+
744+
public List<GroupMembership> getAssignableGroupMemberships(long group_id) {
745+
return complete(submit(req("GET",
746+
tmpl("/groups/{group_id}/memberships/assignable.json").set("group_id", group_id)),
747+
handleList(GroupMembership.class, "group_memberships")));
748+
}
749+
750+
public GroupMembership getGroupMembership(long id) {
751+
return complete(submit(req("GET", tmpl("/group_memberships/{id}.json").set("id", id)),
752+
handle(GroupMembership.class, "group_membership")));
753+
}
754+
755+
public GroupMembership getGroupMembership(long user_id, long group_membership_id) {
756+
return complete(submit(req("GET", tmpl("/users/{uid}/group_memberships/{gmid}.json").set("uid", user_id)
757+
.set("gmid", group_membership_id)),
758+
handle(GroupMembership.class, "group_membership")));
759+
}
760+
761+
public GroupMembership createGroupMembership(GroupMembership groupMembership) {
762+
return complete(submit(req("POST", cnst("/group_memberships.json"), JSON, json(
763+
Collections.singletonMap("group_membership", groupMembership))),
764+
handle(GroupMembership.class, "group_membership")));
765+
}
766+
767+
public GroupMembership createGroupMembership(long user_id, GroupMembership groupMembership) {
768+
return complete(submit(req("POST", tmpl("/users/{id}/group_memberships.json").set("id", user_id), JSON,
769+
json(Collections.singletonMap("group_membership", groupMembership))),
770+
handle(GroupMembership.class, "group_membership")));
771+
}
772+
773+
public void deleteGroupMembership(GroupMembership groupMembership) {
774+
checkHasId(groupMembership);
775+
deleteGroupMembership(groupMembership.getId());
776+
}
777+
778+
public void deleteGroupMembership(long id) {
779+
complete(submit(req("DELETE", tmpl("/groups_memberships/{id}.json").set("id", id)), handleStatus()));
780+
}
781+
782+
public void deleteGroupMembership(long user_id, GroupMembership groupMembership) {
783+
checkHasId(groupMembership);
784+
deleteGroupMembership(user_id, groupMembership.getId());
785+
}
786+
787+
public void deleteGroupMembership(long user_id, long group_membership_id) {
788+
complete(submit(req("DELETE", tmpl("/users/{uid}/groups_memberships/{gmid}.json").set("uid", user_id)
789+
.set("gmid", group_membership_id)), handleStatus()));
790+
}
791+
792+
public List<GroupMembership> setGroupMembershipAsDefault(long user_id, GroupMembership groupMembership) {
793+
checkHasId(groupMembership);
794+
return complete(submit(req("POST", tmpl("/users/{uid}/group_memberships/{gmid}/make_default.json")
795+
.set("uid", user_id).set("gmid", groupMembership.getId()), JSON, json(
796+
Collections.singletonMap("group_memberships", groupMembership))),
797+
handleList(GroupMembership.class, "results")));
798+
}
799+
800+
public Iterable<Forum> getForums() {
801+
return new PagedIterable<Forum>(cnst("/forums.json"), handleList(Forum.class, "forums"));
802+
}
803+
804+
public List<Forum> getForums(long category_id) {
805+
return complete(submit(req("GET", tmpl("/categories/{id}/forums.json").set("id", category_id)),
806+
handleList(Forum.class, "forums")));
807+
}
808+
809+
public Forum getForum(long id) {
810+
return complete(submit(req("GET", tmpl("/forums/{id}.json").set("id", id)),
811+
handle(Forum.class, "forum")));
812+
}
813+
814+
public Forum createForum(Forum forum) {
815+
return complete(submit(req("POST", cnst("/forums.json"), JSON, json(
816+
Collections.singletonMap("forum", forum))), handle(Forum.class, "forum")));
817+
}
818+
819+
public Forum updateForum(Forum forum) {
820+
checkHasId(forum);
821+
return complete(submit(req("PUT", tmpl("/forums/{id}.json").set("id", forum.getId()), JSON, json(
822+
Collections.singletonMap("forum", forum))), handle(Forum.class, "forum")));
823+
}
824+
825+
public void deleteForum(Forum forum) {
826+
checkHasId(forum);
827+
complete(submit(req("DELETE", tmpl("/forums/{id}.json").set("id", forum.getId())), handleStatus()));
828+
}
829+
830+
public Iterable<Topic> getTopics() {
831+
return new PagedIterable<Topic>(cnst("/topics.json"), handleList(Topic.class, "topics"));
832+
}
833+
834+
public List<Topic> getTopics(long forum_id) {
835+
return complete(submit(req("GET", tmpl("/forums/{id}/topics.json").set("id", forum_id)),
836+
handleList(Topic.class, "topics")));
837+
}
838+
839+
public List<Topic> getTopicsByUser(long user_id) {
840+
return complete(submit(req("GET", tmpl("/users/{id}/topics.json").set("id", user_id)),
841+
handleList(Topic.class, "topics")));
842+
}
843+
844+
public Topic getTopic(long id) {
845+
return complete(submit(req("GET", tmpl("/topics/{id}.json").set("id", id)),
846+
handle(Topic.class, "topic")));
847+
}
848+
849+
public Topic createTopic(Topic topic) {
850+
checkHasId(topic);
851+
return complete(submit(req("POST", cnst("/topics.json"), JSON, json(
852+
Collections.singletonMap("topic", topic))), handle(Topic.class, "topic")));
853+
}
854+
855+
public Topic importTopic(Topic topic) {
856+
checkHasId(topic);
857+
return complete(submit(req("POST", cnst("/import/topics.json"), JSON, json(
858+
Collections.singletonMap("topic", topic))), handle(Topic.class, "topic")));
859+
}
860+
861+
public List<Topic> getTopics(long id, long... ids) {
862+
return complete(submit(req("POST", tmpl("/topics/show_many.json{?ids}").set("ids", idArray(id, ids))),
863+
handleList(Topic.class, "topics")));
864+
}
865+
866+
public Topic updateTopic(Topic topic) {
867+
checkHasId(topic);
868+
return complete(submit(req("PUT", tmpl("/topics/{id}.json").set("id", topic.getId()), JSON, json(
869+
Collections.singletonMap("topic", topic))), handle(Topic.class, "topic")));
870+
}
871+
872+
public void deleteTopic(Topic topic) {
873+
checkHasId(topic);
874+
complete(submit(req("DELETE", tmpl("/topics/{id}.json").set("id", topic.getId())), handleStatus()));
875+
}
876+
877+
public Iterable<SearchResultEntity> getSearchResults(String query) {
722878
return new PagedIterable<SearchResultEntity>(tmpl("/search.json{?query}").set("query", query),
723879
handleSearchList("results"));
724880
}
@@ -1000,6 +1156,24 @@ private static void checkHasId(Group group) {
10001156
}
10011157
}
10021158

1159+
private static void checkHasId(GroupMembership groupMembership) {
1160+
if (groupMembership.getId() == null) {
1161+
throw new IllegalArgumentException("GroupMembership requires id");
1162+
}
1163+
}
1164+
1165+
private void checkHasId(Forum forum) {
1166+
if (forum.getId() == null) {
1167+
throw new IllegalArgumentException( "Forum requires id");
1168+
}
1169+
}
1170+
1171+
private void checkHasId(Topic topic) {
1172+
if (topic.getId() == null) {
1173+
throw new IllegalArgumentException( "Topic requires id");
1174+
}
1175+
}
1176+
10031177
private static void checkHasToken(Attachment.Upload upload) {
10041178
if (upload.getToken() == null) {
10051179
throw new IllegalArgumentException("Upload requires token");
@@ -1014,7 +1188,7 @@ private static List<Long> idArray(long id, long... ids) {
10141188
}
10151189
return result;
10161190
}
1017-
1191+
10181192
private static List<String> statusArray(Status... statuses)
10191193
{
10201194
List<String> result = new ArrayList<String>(statuses.length);

0 commit comments

Comments
 (0)