diff --git a/src/main/java/org/gitlab4j/api/GroupApi.java b/src/main/java/org/gitlab4j/api/GroupApi.java index c54bb5dcf..63b5039ee 100644 --- a/src/main/java/org/gitlab4j/api/GroupApi.java +++ b/src/main/java/org/gitlab4j/api/GroupApi.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; import java.util.stream.Stream; import javax.ws.rs.core.Form; @@ -1572,8 +1573,23 @@ public void denyAccessRequest(Object groupIdOrPath, Long userId) throws GitLabAp * @throws GitLabApiException if any exception occurs */ public List getBadges(Object groupIdOrPath) throws GitLabApiException { - Response response = get(Response.Status.OK, null, "groups", getGroupIdOrPath(groupIdOrPath), "badges"); - return (response.readEntity(new GenericType>() {})); + return getBadges(groupIdOrPath, null); + } + + /** + * Gets a list of a group’s badges, case-sensitively filtered on bagdeName if non-null. + * + *
GitLab Endpoint: GET /groups/:id/badges?name=:name
+ * + * @param groupIdOrPath the group ID, path of the group, or a Group instance holding the group ID or path + * @param badgeName The name to filter on (case-sensitive), ignored if null. + * @return All badges of the GitLab item, case insensitively filtered on name. + * @throws GitLabApiException If any problem is encountered + */ + public List getBadges(Object groupIdOrPath, String badgeName) throws GitLabApiException { + Form queryParam = new GitLabApiForm().withParam("name", badgeName); + Response response = get(Response.Status.OK, queryParam.asMap(), "groups", getGroupIdOrPath(groupIdOrPath), "badges"); + return (response.readEntity(new GenericType>() {})); } /** @@ -1620,11 +1636,28 @@ public Optional getOptionalBadge(Object groupIdOrPath, Long badgeId) { * @throws GitLabApiException if any exception occurs */ public Badge addBadge(Object groupIdOrPath, String linkUrl, String imageUrl) throws GitLabApiException { - GitLabApiForm formData = new GitLabApiForm() - .withParam("link_url", linkUrl, true) - .withParam("image_url", imageUrl, true); - Response response = post(Response.Status.OK, formData, "groups", getGroupIdOrPath(groupIdOrPath), "badges"); - return (response.readEntity(Badge.class)); + return addBadge(groupIdOrPath, null, linkUrl, imageUrl); + } + + /** + * Add a badge to a group. + * + *
GitLab Endpoint: POST /groups/:id/badges
+ * + * @param groupIdOrPath the group ID, path of the group, or a Group instance holding the group ID or path + * @param name The name to give the badge (may be null) + * @param linkUrl the URL of the badge link + * @param imageUrl the URL of the image link + * @return A Badge instance for the added badge + * @throws GitLabApiException if any exception occurs + */ + public Badge addBadge(Object groupIdOrPath, String name, String linkUrl, String imageUrl) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("name", name, false) + .withParam("link_url", linkUrl, true) + .withParam("image_url", imageUrl, true); + Response response = post(Response.Status.OK, formData, "groups", getGroupIdOrPath(groupIdOrPath), "badges"); + return (response.readEntity(Badge.class)); } /** @@ -1640,11 +1673,29 @@ public Badge addBadge(Object groupIdOrPath, String linkUrl, String imageUrl) thr * @throws GitLabApiException if any exception occurs */ public Badge editBadge(Object groupIdOrPath, Long badgeId, String linkUrl, String imageUrl) throws GitLabApiException { - GitLabApiForm formData = new GitLabApiForm() - .withParam("link_url", linkUrl, false) - .withParam("image_url", imageUrl, false); - Response response = putWithFormData(Response.Status.OK, formData, "groups", getGroupIdOrPath(groupIdOrPath), "badges", badgeId); - return (response.readEntity(Badge.class)); + return (editBadge(groupIdOrPath, badgeId, null, linkUrl, imageUrl)); + } + + /** + * Edit a badge of a group. + * + *
GitLab Endpoint: PUT /groups/:id/badges
+ * + * @param groupIdOrPath the group ID, path of the group, or a Group instance holding the group ID or path + * @param badgeId the ID of the badge to edit + * @param name The name of the badge to edit (may be null) + * @param linkUrl the URL of the badge link + * @param imageUrl the URL of the image link + * @return a Badge instance for the edited badge + * @throws GitLabApiException if any exception occurs + */ + public Badge editBadge(Object groupIdOrPath, Long badgeId, String name, String linkUrl, String imageUrl) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("name", name, false) + .withParam("link_url", linkUrl, false) + .withParam("image_url", imageUrl, false); + Response response = putWithFormData(Response.Status.OK, formData, "groups", getGroupIdOrPath(groupIdOrPath), "badges", badgeId); + return (response.readEntity(Badge.class)); } /** diff --git a/src/main/java/org/gitlab4j/api/ProjectApi.java b/src/main/java/org/gitlab4j/api/ProjectApi.java index 641c7f454..1183103ad 100644 --- a/src/main/java/org/gitlab4j/api/ProjectApi.java +++ b/src/main/java/org/gitlab4j/api/ProjectApi.java @@ -3310,8 +3310,23 @@ public void triggerHousekeeping(Object projectIdOrPath) throws GitLabApiExceptio * @throws GitLabApiException if any exception occurs */ public List getBadges(Object projectIdOrPath) throws GitLabApiException { - Response response = get(Response.Status.OK, null, "projects", getProjectIdOrPath(projectIdOrPath), "badges"); - return (response.readEntity(new GenericType>() {})); + return getBadges(projectIdOrPath, null); + } + + /** + * Gets a list of a project’s badges and its group badges, case-sensitively filtered on bagdeName if non-null. + * + *
GitLab Endpoint: GET /projects/:id/badges?name=:name
+ * + * @param projectIdOrPath the project in the form of a Long(ID), String(path), or Project instance + * @param bagdeName The name to filter on (case-sensitive), ignored if null. + * @return All badges of the GitLab item, case insensitively filtered on name. + * @throws GitLabApiException If any problem is encountered + */ + public List getBadges(Object projectIdOrPath, String bagdeName) throws GitLabApiException { + Form queryParam = new GitLabApiForm().withParam("name", bagdeName); + Response response = get(Response.Status.OK, queryParam.asMap(), "projects", getProjectIdOrPath(projectIdOrPath), "badges"); + return (response.readEntity(new GenericType>() {})); } /** @@ -3358,11 +3373,28 @@ public Optional getOptionalBadge(Object projectIdOrPath, Long badgeId) { * @throws GitLabApiException if any exception occurs */ public Badge addBadge(Object projectIdOrPath, String linkUrl, String imageUrl) throws GitLabApiException { - GitLabApiForm formData = new GitLabApiForm() - .withParam("link_url", linkUrl, true) - .withParam("image_url", imageUrl, true); - Response response = post(Response.Status.OK, formData, "projects", getProjectIdOrPath(projectIdOrPath), "badges"); - return (response.readEntity(Badge.class)); + return addBadge(projectIdOrPath, null, linkUrl, imageUrl); + } + + /** + * Add a badge to a project. + * + *
GitLab Endpoint: POST /projects/:id/badges
+ * + * @param projectIdOrPath the project in the form of a Long(ID), String(path), or Project instance + * @param name The name to give the badge (may be null) + * @param linkUrl the URL of the badge link + * @param imageUrl the URL of the image link + * @return A Badge instance for the added badge + * @throws GitLabApiException if any exception occurs + */ + public Badge addBadge(Object projectIdOrPath, String name, String linkUrl, String imageUrl) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("name", name, false) + .withParam("link_url", linkUrl, true) + .withParam("image_url", imageUrl, true); + Response response = post(Response.Status.OK, formData, "projects", getProjectIdOrPath(projectIdOrPath), "badges"); + return (response.readEntity(Badge.class)); } /** @@ -3378,11 +3410,29 @@ public Badge addBadge(Object projectIdOrPath, String linkUrl, String imageUrl) t * @throws GitLabApiException if any exception occurs */ public Badge editBadge(Object projectIdOrPath, Long badgeId, String linkUrl, String imageUrl) throws GitLabApiException { - GitLabApiForm formData = new GitLabApiForm() - .withParam("link_url", linkUrl, false) - .withParam("image_url", imageUrl, false); - Response response = putWithFormData(Response.Status.OK, formData, "projects", getProjectIdOrPath(projectIdOrPath), "badges", badgeId); - return (response.readEntity(Badge.class)); + return (editBadge(projectIdOrPath, badgeId, null, linkUrl, imageUrl)); + } + + /** + * Edit a badge of a project. + * + *
GitLab Endpoint: PUT /projects/:id/badges
+ * + * @param projectIdOrPath the project in the form of a Long(ID), String(path), or Project instance + * @param badgeId the ID of the badge to edit + * @param name The name of the badge to edit (may be null) + * @param linkUrl the URL of the badge link + * @param imageUrl the URL of the image link + * @return a Badge instance for the editted badge + * @throws GitLabApiException if any exception occurs + */ + public Badge editBadge(Object projectIdOrPath, Long badgeId, String name, String linkUrl, String imageUrl) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("name", name, false) + .withParam("link_url", linkUrl, false) + .withParam("image_url", imageUrl, false); + Response response = putWithFormData(Response.Status.OK, formData, "projects", getProjectIdOrPath(projectIdOrPath), "badges", badgeId); + return (response.readEntity(Badge.class)); } /** diff --git a/src/test/resources/org/gitlab4j/api/badges.json b/src/test/resources/org/gitlab4j/api/badges.json index e909eb23f..d73ef6a59 100644 --- a/src/test/resources/org/gitlab4j/api/badges.json +++ b/src/test/resources/org/gitlab4j/api/badges.json @@ -1,6 +1,7 @@ [ { "id": 1, + "name": "Badge 1", "link_url": "http://example.com/ci_status.svg?project=%{project_path}&ref=%{default_branch}", "image_url": "https://shields.io/my/badge", "rendered_link_url": "http://example.com/ci_status.svg?project=example-org/example-project&ref=master", @@ -9,10 +10,11 @@ }, { "id": 2, + "name": "Badge 2", "link_url": "http://example.com/ci_status.svg?project=%{project_path}&ref=%{default_branch}", "image_url": "https://shields.io/my/badge", "rendered_link_url": "http://example.com/ci_status.svg?project=example-org/example-project&ref=master", "rendered_image_url": "https://shields.io/my/badge", "kind": "group" } -] \ No newline at end of file +]