Skip to content

Commit

Permalink
Add support for name in badges (gitlab4j#898)
Browse files Browse the repository at this point in the history
---------

Co-authored-by: jason <[email protected]>
  • Loading branch information
roadSurfer and roadSurfer authored Feb 5, 2023
1 parent 608c486 commit 2be235b
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 25 deletions.
75 changes: 63 additions & 12 deletions src/main/java/org/gitlab4j/api/GroupApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1572,8 +1573,23 @@ public void denyAccessRequest(Object groupIdOrPath, Long userId) throws GitLabAp
* @throws GitLabApiException if any exception occurs
*/
public List<Badge> getBadges(Object groupIdOrPath) throws GitLabApiException {
Response response = get(Response.Status.OK, null, "groups", getGroupIdOrPath(groupIdOrPath), "badges");
return (response.readEntity(new GenericType<List<Badge>>() {}));
return getBadges(groupIdOrPath, null);
}

/**
* Gets a list of a group’s badges, case-sensitively filtered on bagdeName if non-null.
*
* <pre><code>GitLab Endpoint: GET /groups/:id/badges?name=:name</code></pre>
*
* @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<Badge> 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<List<Badge>>() {}));
}

/**
Expand Down Expand Up @@ -1620,11 +1636,28 @@ public Optional<Badge> 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.
*
* <pre><code>GitLab Endpoint: POST /groups/:id/badges</code></pre>
*
* @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));
}

/**
Expand All @@ -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.
*
* <pre><code>GitLab Endpoint: PUT /groups/:id/badges</code></pre>
*
* @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));
}

/**
Expand Down
74 changes: 62 additions & 12 deletions src/main/java/org/gitlab4j/api/ProjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -3310,8 +3310,23 @@ public void triggerHousekeeping(Object projectIdOrPath) throws GitLabApiExceptio
* @throws GitLabApiException if any exception occurs
*/
public List<Badge> getBadges(Object projectIdOrPath) throws GitLabApiException {
Response response = get(Response.Status.OK, null, "projects", getProjectIdOrPath(projectIdOrPath), "badges");
return (response.readEntity(new GenericType<List<Badge>>() {}));
return getBadges(projectIdOrPath, null);
}

/**
* Gets a list of a project’s badges and its group badges, case-sensitively filtered on bagdeName if non-null.
*
* <pre><code>GitLab Endpoint: GET /projects/:id/badges?name=:name</code></pre>
*
* @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<Badge> 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<List<Badge>>() {}));
}

/**
Expand Down Expand Up @@ -3358,11 +3373,28 @@ public Optional<Badge> 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.
*
* <pre><code>GitLab Endpoint: POST /projects/:id/badges</code></pre>
*
* @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));
}

/**
Expand All @@ -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.
*
* <pre><code>GitLab Endpoint: PUT /projects/:id/badges</code></pre>
*
* @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));
}

/**
Expand Down
4 changes: 3 additions & 1 deletion src/test/resources/org/gitlab4j/api/badges.json
Original file line number Diff line number Diff line change
@@ -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",
Expand All @@ -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"
}
]
]

0 comments on commit 2be235b

Please sign in to comment.