Skip to content

Commit e23069f

Browse files
committed
+User Segments
1 parent c33a324 commit e23069f

File tree

5 files changed

+370
-0
lines changed

5 files changed

+370
-0
lines changed

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

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.zendesk.client.v2.model.hc.Subscription;
6363
import org.zendesk.client.v2.model.hc.Translation;
6464
import org.zendesk.client.v2.model.hc.PermissionGroup;
65+
import org.zendesk.client.v2.model.hc.UserSegment;
6566
import org.zendesk.client.v2.model.schedules.Holiday;
6667
import org.zendesk.client.v2.model.schedules.Schedule;
6768
import org.zendesk.client.v2.model.targets.BasecampTarget;
@@ -1766,6 +1767,7 @@ public PermissionGroup createPermissionGroup(PermissionGroup permissionGroup) {
17661767
}
17671768
/**
17681769
* Update permission group
1770+
*
17691771
* @param permissionGroup
17701772
*/
17711773
public PermissionGroup updatePermissionGroup(PermissionGroup permissionGroup) {
@@ -1775,6 +1777,7 @@ public PermissionGroup updatePermissionGroup(PermissionGroup permissionGroup) {
17751777
}
17761778
/**
17771779
* Delete permission group
1780+
*
17781781
* @param permissionGroup
17791782
*/
17801783
public void deletePermissionGroup(PermissionGroup permissionGroup) {
@@ -1783,12 +1786,114 @@ public void deletePermissionGroup(PermissionGroup permissionGroup) {
17831786
}
17841787
/**
17851788
* Delete permission group
1789+
*
17861790
* @param id
17871791
*/
17881792
public void deletePermissionGroup(long id) {
17891793
complete(submit(req("DELETE", tmpl("/guide/permission_groups/{id}.json").set("id", id)),
17901794
handleStatus()));
17911795
}
1796+
/**
1797+
* Get user segments
1798+
*
1799+
* @return List of User Segments
1800+
*/
1801+
public Iterable<UserSegment> getUserSegments() {
1802+
return new PagedIterable<>(cnst("/help_center/user_segments.json"),
1803+
handleList(UserSegment.class, "user_segments"));
1804+
}
1805+
/**
1806+
* Returns the list of user segments that a particular user belongs to
1807+
*
1808+
* @return List of User Segments
1809+
*/
1810+
public Iterable<UserSegment> getUserSegments(long id) {
1811+
return new PagedIterable<>(tmpl("/help_center/users/{id}/user_segments.json").set("id", id),
1812+
handleList(UserSegment.class, "user_segments"));
1813+
}
1814+
/**
1815+
* Request only user segments applicable on the account's current Guide plan
1816+
*
1817+
* @return List of User Segments
1818+
*/
1819+
public Iterable<UserSegment> getUserSegmentsApplicable() {
1820+
return new PagedIterable<>(cnst("/help_center/user_segments/applicable.json"),
1821+
handleList(UserSegment.class, "user_segments"));
1822+
}
1823+
/**
1824+
* Get user segment by id
1825+
*
1826+
* @param id
1827+
*/
1828+
public UserSegment getUserSegment(long id) {
1829+
return complete(submit(req("GET", tmpl("/help_center/user_segments/{id}.json").set("id", id)),
1830+
handle(UserSegment.class, "user_segment")));
1831+
}
1832+
1833+
/**
1834+
* List Sections using a User Segment
1835+
*
1836+
* @param userSegment
1837+
* @return List of Sections
1838+
*/
1839+
public Iterable<Section> getSections(UserSegment userSegment) {
1840+
checkHasId(userSegment);
1841+
return new PagedIterable<>(
1842+
tmpl("/help_center/user_segments/{id}/sections.json").set("id", userSegment.getId()),
1843+
handleList(Section.class, "sections"));
1844+
}
1845+
1846+
/**
1847+
* List Topics using a User Segment
1848+
*
1849+
* @param userSegment
1850+
* @return List of Topics
1851+
*/
1852+
public Iterable<Topic> getTopics(UserSegment userSegment) {
1853+
checkHasId(userSegment);
1854+
return new PagedIterable<>(
1855+
tmpl("/help_center/user_segments/{id}/topics.json").set("id", userSegment.getId()),
1856+
handleList(Topic.class, "topics"));
1857+
}
1858+
1859+
/**
1860+
* Create User Segment
1861+
*
1862+
* @param userSegment
1863+
*/
1864+
public UserSegment createUserSegment(UserSegment userSegment) {
1865+
return complete(submit(req("POST", tmpl("/help_center/user_segments.json"),
1866+
JSON, json(Collections.singletonMap("user_segment", userSegment))), handle(UserSegment.class, "user_segment")));
1867+
}
1868+
/**
1869+
* Update User Segment
1870+
*
1871+
* @param userSegment
1872+
*/
1873+
public UserSegment updateUserSegment(UserSegment userSegment) {
1874+
checkHasId(userSegment);
1875+
return complete(submit(req("PUT", tmpl("/help_center/user_segments/{id}.json").set("id", userSegment.getId()),
1876+
JSON, json(Collections.singletonMap("user_segment", userSegment))), handle(UserSegment.class, "user_segment")));
1877+
}
1878+
/**
1879+
* Delete User Segment
1880+
*
1881+
* @param userSegment
1882+
*/
1883+
public void deleteUserSegment(UserSegment userSegment) {
1884+
checkHasId(userSegment);
1885+
deleteUserSegment(userSegment.getId());
1886+
}
1887+
1888+
/**
1889+
* Delete User Segment
1890+
*
1891+
* @param id
1892+
*/
1893+
public void deleteUserSegment(long id) {
1894+
complete(submit(req("DELETE", tmpl("/help_center/user_segments/{id}.json").set("id", id)),
1895+
handleStatus()));
1896+
}
17921897

17931898
public List<String> getHelpCenterLocales() {
17941899
return complete(submit(
@@ -2630,6 +2735,12 @@ private static void checkHasId(PermissionGroup permissionGroup) {
26302735
}
26312736
}
26322737

2738+
private static void checkHasId(UserSegment userSegment) {
2739+
if (userSegment.getId() == null) {
2740+
throw new IllegalArgumentException("UserSegment requires id");
2741+
}
2742+
}
2743+
26332744
private static void checkHasToken(Attachment.Upload upload) {
26342745
if (upload.getToken() == null) {
26352746
throw new IllegalArgumentException("Upload requires token");
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package org.zendesk.client.v2.model.hc;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import org.zendesk.client.v2.model.SearchResultEntity;
5+
6+
import java.util.Date;
7+
import java.util.List;
8+
9+
/**
10+
* User Segments
11+
* A user segment defines who can view the content of a section or topic.
12+
* https://developer.zendesk.com/rest_api/docs/help_center/user_segments
13+
* @author Maxim Savenko ([email protected])
14+
*/
15+
public class UserSegment implements SearchResultEntity {
16+
/** Automatically assigned when the user segment is created */
17+
private Long id;
18+
/** User segment name (localized to the locale of the current user for built-in user segments) */
19+
private String name;
20+
/** The set of users who can view content */
21+
@JsonProperty("user_type")
22+
private UserType userType;
23+
/** The ids of user segments that have edit privileges */
24+
@JsonProperty("group_ids")
25+
private List<Long> groupIds;
26+
/** The ids of the organizations that have access */
27+
@JsonProperty("organization_ids")
28+
private List<Long> organizationIds;
29+
/** All the tags a user must have to have access */
30+
private List<String> tags;
31+
/** A user must have at least one tag in the list to have access */
32+
@JsonProperty("or_tags")
33+
private List<String> orTags;
34+
/** When the user segment was created */
35+
@JsonProperty("created_at")
36+
private Date createdAt;
37+
/** When the user segment was last updated */
38+
@JsonProperty("updated_at")
39+
private Date updatedAt;
40+
/** Whether the user segment is built-in. Built-in user segments cannot be modified */
41+
@JsonProperty("built_in")
42+
private Boolean builtIn;
43+
44+
public Long getId() {
45+
return id;
46+
}
47+
48+
public UserSegment setId(Long id) {
49+
this.id = id;
50+
return this;
51+
}
52+
53+
public String getName() {
54+
return name;
55+
}
56+
57+
public UserSegment setName(String name) {
58+
this.name = name;
59+
return this;
60+
}
61+
62+
public UserType getUserType() {
63+
return userType;
64+
}
65+
66+
public UserSegment setUserType(UserType userType) {
67+
this.userType = userType;
68+
return this;
69+
}
70+
71+
public List<Long> getGroupIds() {
72+
return groupIds;
73+
}
74+
75+
public UserSegment setGroupIds(List<Long> groupIds) {
76+
this.groupIds = groupIds;
77+
return this;
78+
}
79+
80+
public List<Long> getOrganizationIds() {
81+
return organizationIds;
82+
}
83+
84+
public UserSegment setOrganizationIds(List<Long> organizationIds) {
85+
this.organizationIds = organizationIds;
86+
return this;
87+
}
88+
89+
public List<String> getTags() {
90+
return tags;
91+
}
92+
93+
public UserSegment setTags(List<String> tags) {
94+
this.tags = tags;
95+
return this;
96+
}
97+
98+
public List<String> getOrTags() {
99+
return orTags;
100+
}
101+
102+
public UserSegment setOrTags(List<String> orTags) {
103+
this.orTags = orTags;
104+
return this;
105+
}
106+
107+
public Date getCreatedAt() {
108+
return createdAt;
109+
}
110+
111+
public UserSegment setCreatedAt(Date createdAt) {
112+
this.createdAt = createdAt;
113+
return this;
114+
}
115+
116+
public Date getUpdatedAt() {
117+
return updatedAt;
118+
}
119+
120+
public UserSegment setUpdatedAt(Date updatedAt) {
121+
this.updatedAt = updatedAt;
122+
return this;
123+
}
124+
125+
public Boolean getBuiltIn() {
126+
return builtIn;
127+
}
128+
129+
public UserSegment setBuiltIn(Boolean builtIn) {
130+
this.builtIn = builtIn;
131+
return this;
132+
}
133+
134+
@Override
135+
public String toString() {
136+
return "UserSegment{" +
137+
"id=" + id +
138+
", name='" + name + '\'' +
139+
", userType='" + userType + '\'' +
140+
", groupIds=" + groupIds +
141+
", organizationIds=" + organizationIds +
142+
", tags=" + tags +
143+
", orTags=" + orTags +
144+
", createdAt=" + createdAt +
145+
", updatedAt=" + updatedAt +
146+
", builtIn=" + builtIn +
147+
'}';
148+
}
149+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.zendesk.client.v2.model.hc;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
5+
/**
6+
* User Type
7+
*
8+
* @author Maxim Savenko ([email protected])
9+
*/
10+
public enum UserType {
11+
@JsonProperty("signed_in_users")
12+
SIGNED_IN_USERS("signed_in_users"),
13+
@JsonProperty("staff")
14+
STAFF("staff");
15+
16+
private final String name;
17+
18+
UserType(String name) {
19+
this.name = name;
20+
}
21+
22+
@Override
23+
public String toString() {
24+
return name;
25+
}
26+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.zendesk.client.v2.model.hc;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import org.junit.Test;
5+
6+
import java.text.ParseException;
7+
import java.util.ArrayList;
8+
import java.util.Date;
9+
import java.util.List;
10+
11+
import static org.junit.Assert.assertEquals;
12+
import static org.junit.Assert.assertNotNull;
13+
14+
/**
15+
* Testing UserType
16+
*
17+
* @author Maxim Savenko ([email protected])
18+
*/
19+
public class UserSegmentTest {
20+
private UserSegment parseJson(byte[] json) {
21+
ObjectMapper mapper = new ObjectMapper();
22+
try {
23+
return mapper.readValue(json, UserSegment.class);
24+
} catch (Exception e) {
25+
e.printStackTrace();
26+
return null;
27+
}
28+
}
29+
30+
@Test
31+
public void testParseUserSegment() throws ParseException {
32+
String json="{\n" +
33+
" \"id\": 360001421932,\n" +
34+
" \"user_type\": \"staff\",\n" +
35+
" \"name\": \"Test User Segment\",\n" +
36+
" \"group_ids\": [360004797451],\n" +
37+
" \"organization_ids\": [],\n" +
38+
" \"tags\": [\"vip\"],\n" +
39+
" \"or_tags\": [],\n" +
40+
" \"created_at\": \"2019-06-10T12:39:23Z\",\n" +
41+
" \"updated_at\": \"2019-06-10T12:39:23Z\",\n" +
42+
" \"built_in\": false\n" +
43+
" }";
44+
UserSegment userSegment = parseJson(json.getBytes());
45+
46+
assertNotNull(userSegment);
47+
assertEquals(UserSegment.class, userSegment.getClass());
48+
49+
assertEquals((Long)360001421932L, userSegment.getId());
50+
assertEquals("Test User Segment", userSegment.getName());
51+
52+
List<Long> ids = new ArrayList<>();
53+
ids.add(360004797451L);
54+
assertEquals(ids, userSegment.getGroupIds());
55+
assertEquals(new ArrayList<>(), userSegment.getOrganizationIds());
56+
57+
List<String> tags = new ArrayList<>();
58+
tags.add("vip");
59+
assertEquals(tags, userSegment.getTags());
60+
assertEquals(new ArrayList<>(), userSegment.getOrTags());
61+
62+
assertEquals(new Date(1560170363000L), userSegment.getCreatedAt());
63+
assertEquals(new Date(1560170363000L), userSegment.getUpdatedAt());
64+
assertEquals(false,userSegment.getBuiltIn());
65+
}
66+
}

0 commit comments

Comments
 (0)