diff --git a/src/main/java/org/zendesk/client/v2/Zendesk.java b/src/main/java/org/zendesk/client/v2/Zendesk.java index 933b2295e..13a0b6aee 100644 --- a/src/main/java/org/zendesk/client/v2/Zendesk.java +++ b/src/main/java/org/zendesk/client/v2/Zendesk.java @@ -55,12 +55,7 @@ import org.zendesk.client.v2.model.UserRelatedInfo; import org.zendesk.client.v2.model.dynamic.DynamicContentItem; import org.zendesk.client.v2.model.dynamic.DynamicContentItemVariant; -import org.zendesk.client.v2.model.hc.Article; -import org.zendesk.client.v2.model.hc.ArticleAttachments; -import org.zendesk.client.v2.model.hc.Category; -import org.zendesk.client.v2.model.hc.Section; -import org.zendesk.client.v2.model.hc.Subscription; -import org.zendesk.client.v2.model.hc.Translation; +import org.zendesk.client.v2.model.hc.*; import org.zendesk.client.v2.model.schedules.Holiday; import org.zendesk.client.v2.model.schedules.Schedule; import org.zendesk.client.v2.model.targets.BasecampTarget; @@ -76,6 +71,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; @@ -1735,6 +1731,58 @@ public void deleteDynamicContentItemVariant(Long itemId, DynamicContentItemVaria ////////////////////////////////////////////////////////////////////// // Action methods for Help Center ////////////////////////////////////////////////////////////////////// + /** + * Get all permission groups + * + * @return List of Permission Groups + */ + public Iterable getPermissionGroups() { + return new PagedIterable<>(cnst("/guide/permission_groups.json"), + handleList(PermissionGroup.class, "permission_groups")); + } + /** + * Get permission group by id + * + * @param id + */ + public PermissionGroup getPermissionGroup(long id) { + return complete(submit(req("GET", tmpl("/guide/permission_groups/{id}.json").set("id", id)), + handle(PermissionGroup.class, "permission_group"))); + } + /** + * Create permission group + * + * @param permissionGroup + */ + public PermissionGroup createPermissionGroup(PermissionGroup permissionGroup) { + return complete(submit(req("POST", tmpl("/guide/permission_groups.json"), + JSON, json(Collections.singletonMap("permission_group", permissionGroup))), handle(PermissionGroup.class, "permission_group"))); + } + /** + * Update permission group + * @param permissionGroup + */ + public PermissionGroup updatePermissionGroup(PermissionGroup permissionGroup) { + checkHasId(permissionGroup); + return complete(submit(req("PUT", tmpl("/guide/permission_groups/{id}.json").set("id", permissionGroup.getId()), + JSON, json(Collections.singletonMap("permission_group", permissionGroup))), handle(PermissionGroup.class, "permission_group"))); + } + /** + * Delete permission group + * @param permissionGroup + */ + public void deletePermissionGroup(PermissionGroup permissionGroup) { + checkHasId(permissionGroup); + deletePermissionGroup(permissionGroup.getId()); + } + /** + * Delete permission group + * @param id + */ + public void deletePermissionGroup(long id) { + complete(submit(req("DELETE", tmpl("/guide/permission_groups/{id}.json").set("id", id)), + handleStatus())); + } public List getHelpCenterLocales() { return complete(submit( @@ -2006,6 +2054,10 @@ private ListenableFuture submit(Request request, ZendeskAsyncCompletionHa } else if (request.getByteData() != null) { logger.debug("Request {} {} {} {} bytes", request.getMethod(), request.getUrl(), request.getHeaders().get("Content-type"), request.getByteData().length); + // For plain text payload debug + logger.debug("Request payload\n {}", new String(request.getByteData(), Charset.defaultCharset())); + ////////////////// + } else { logger.debug("Request {} {}", request.getMethod(), request.getUrl()); } @@ -2555,6 +2607,12 @@ private static void checkHasId(Holiday holiday) { } } + private static void checkHasId(PermissionGroup permissionGroup) { + if (permissionGroup.getId() == null) { + throw new IllegalArgumentException("PermissionGroup requires id"); + } + } + private static void checkHasToken(Attachment.Upload upload) { if (upload.getToken() == null) { throw new IllegalArgumentException("Upload requires token"); diff --git a/src/main/java/org/zendesk/client/v2/model/hc/PermissionGroup.java b/src/main/java/org/zendesk/client/v2/model/hc/PermissionGroup.java new file mode 100644 index 000000000..fb74faff6 --- /dev/null +++ b/src/main/java/org/zendesk/client/v2/model/hc/PermissionGroup.java @@ -0,0 +1,105 @@ +package org.zendesk.client.v2.model.hc; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.zendesk.client.v2.model.SearchResultEntity; + +import java.util.Date; +import java.util.List; + +/** + * Management Permission Group + * A management permission group defines which agents can create, update, archive, and publish articles. + * https://developer.zendesk.com/rest_api/docs/help_center/permission_groups + * @author Maxim Savenko (maxim.savenko@gmail.com) + */ +public class PermissionGroup implements SearchResultEntity { + /** Automatically assigned when the permission group is created */ + private Long id; + /** Permission group name */ + private String name; + /** The ids of user segments that have edit privileges */ + private List edit; + /** The ids of user segments that have publish privileges */ + private List publish; + /** When the permission group was created */ + @JsonProperty("created_at") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss Z") + private Date createdAt; + /** When the permission group was last updated */ + @JsonProperty("updated_at") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss Z") + private Date updatedAt; + /** Whether the permission group is built-in. Built-in permission groups cannot be modified */ + @JsonProperty("built_in") + private Boolean builtIn; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getEdit() { + return edit; + } + + public void setEdit(List edit) { + this.edit = edit; + } + + public List getPublish() { + return publish; + } + + public void setPublish(List publish) { + this.publish = publish; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Boolean getBuiltIn() { + return builtIn; + } + + public void setBuiltIn(Boolean builtIn) { + this.builtIn = builtIn; + } + + @Override + public String toString() { + return "PermissionGroup{" + + "id=" + id + + ", name='" + name + '\'' + + ", edit=" + edit + + ", publish=" + publish + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", builtIn=" + builtIn + + '}'; + } +} diff --git a/src/test/java/org/zendesk/client/v2/model/hc/PermissionGroupTest.java b/src/test/java/org/zendesk/client/v2/model/hc/PermissionGroupTest.java new file mode 100644 index 000000000..5d1e0b0f9 --- /dev/null +++ b/src/test/java/org/zendesk/client/v2/model/hc/PermissionGroupTest.java @@ -0,0 +1,60 @@ +package org.zendesk.client.v2.model.hc; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Test; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * Testing Permission Groups + * @author Maxim Savenko (maxim.savenko@gmail.com) + */ +public class PermissionGroupTest { + + private PermissionGroup parseJson(byte[] json) { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.readValue(json, PermissionGroup.class); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + @Test + public void testParsePermissionGroup() throws ParseException { + String json="{\n" + + " \"id\": 2939112,\n" + + " \"name\": \"ApiGroup\",\n" + + " \"built_in\": false,\n" + + " \"publish\": [360001413871],\n" + + " \"created_at\": \"2019-06-10 12:39:23 +0000\",\n" + + " \"updated_at\": \"2019-06-10 12:39:23 +0000\",\n" + + " \"edit\": [360001413871]\n" + + "}"; + PermissionGroup pg = parseJson(json.getBytes()); + + assertNotNull(pg); + assertEquals(PermissionGroup.class, pg.getClass()); + assertEquals((Long)2939112L, pg.getId()); + assertEquals("ApiGroup", pg.getName()); + assertEquals(false, pg.getBuiltIn()); + List ids = new ArrayList<>(); + ids.add(360001413871L); + assertEquals(ids, pg.getPublish()); + assertEquals(ids, pg.getEdit()); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss Z"); + Date date = simpleDateFormat.parse("2019-06-10 12:39:23 +0000"); + assertEquals(date, pg.getCreatedAt()); + assertEquals(date, pg.getUpdatedAt()); + } + +}