Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I check on the current documentation of group badges and I don't find the edit with name.
I did not try against latest versions of GitLab. Did you tried?

Copy link
Contributor Author

@roadSurfer roadSurfer Jan 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you cannot directly edit based on name and that is not what this code is doing.
It is still using badgeId to find the badge, and then setting name and other values to that requested.
The name only really matters on creation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I see what you mean now.
I will go and check.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Testing in Gitlab shows that name does form part of the group badge put request, but this is not reflected in their documentation.
I will also log a bug with them about that, must be just an oversight as it is documented for projects.

edit_group_badge

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have submitted a merge request to update the API documentation.

Copy link
Contributor Author

@roadSurfer roadSurfer Jan 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

109473 has now been merged and you can see the updated name information in the Group and Project API docs.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@roadSurfer thanks.

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"
}
]
]