Skip to content

Commit

Permalink
Enrich GitLab client interfaces/implementations/proxy
Browse files Browse the repository at this point in the history
* Add 'addProjectHook' method with 'secretToken' Parameter on GitlabClient
  and All depending Interfaces/Implementations
* Add 'Get Project WebHooks' method on GitlabClient and All depending
  Interfaces/Implementations
* Add 'Get Groups' method on GitlabClient and All depending
  Interfaces/Implementations
* Add method 'getGroupProjects' on GitlabClient and All depending
  Interfaces/Implementations
  • Loading branch information
jetune authored and basil committed Jun 18, 2022
1 parent 044d15a commit 9d32eea
Show file tree
Hide file tree
Showing 13 changed files with 1,307 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,18 @@

import com.dabsquared.gitlabjenkins.gitlab.api.model.*;
import com.dabsquared.gitlabjenkins.gitlab.hook.model.State;

import java.util.List;

public interface GitLabClient {
String getHostUrl();

List<Group> getGroups();

List<Project> getGroupProjects(String groupId);
List<Project> getGroupProjects(String groupId, Boolean includeSubgroups, ProjectVisibilityType visibility, OrderType orderBy, SortType sort);

List<Group> getGroups(Boolean allAvailable, Boolean topLevelOnly, OrderType orderBy, SortType sort);

Project createProject(String projectName);

MergeRequest createMergeRequest(Integer projectId, String sourceBranch, String targetBranch, String title);
Expand All @@ -18,8 +24,12 @@ public interface GitLabClient {

void deleteProject(String projectId);

List<ProjectHook> getProjectHooks(String projectName);

void addProjectHook(String projectId, String url, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents);

void addProjectHook(String projectId, String url, String secretToken, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents);

void changeBuildStatus(String projectId, String sha, BuildState state, String ref, String context, String targetUrl, String description);

void changeBuildStatus(Integer projectId, String sha, BuildState state, String ref, String context, String targetUrl, String description);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.dabsquared.gitlabjenkins.gitlab.api.impl;


import com.dabsquared.gitlabjenkins.gitlab.api.GitLabClient;
import com.dabsquared.gitlabjenkins.gitlab.api.GitLabClientBuilder;
import com.dabsquared.gitlabjenkins.gitlab.api.model.*;
import com.dabsquared.gitlabjenkins.gitlab.hook.model.State;

import javax.ws.rs.NotFoundException;
import java.util.List;
import java.util.NoSuchElementException;

import javax.ws.rs.NotFoundException;

final class AutodetectingGitLabClient implements GitLabClient {
private final Iterable<GitLabClientBuilder> builders;
Expand All @@ -35,6 +32,51 @@ public String getHostUrl() {
return url;
}

@Override
public List<Group> getGroups() {
return execute(
new GitLabOperation<List<Group>>() {
@Override
List<Group> execute(GitLabClient client) {
return client.getGroups();
}
});
}

@Override
public List<Project> getGroupProjects(String groupId) {
return execute(
new GitLabOperation<List<Project>>() {
@Override
List<Project> execute(GitLabClient client) {
return client.getGroupProjects(groupId);
}
});
}

@Override
public List<Project> getGroupProjects(String groupId, Boolean includeSubgroups, ProjectVisibilityType visibility,
OrderType orderBy, SortType sort) {
return execute(
new GitLabOperation<List<Project>>() {
@Override
List<Project> execute(GitLabClient client) {
return client.getGroupProjects(groupId, includeSubgroups, visibility, orderBy, sort);
}
});
}

@Override
public List<Group> getGroups(Boolean allAvailable, Boolean topLevelOnly, OrderType orderBy, SortType sort) {
return execute(
new GitLabOperation<List<Group>>() {
@Override
List<Group> execute(GitLabClient client) {
return client.getGroups(allAvailable, topLevelOnly, orderBy, sort);
}
});
}

@Override
public Project createProject(final String projectName) {
return execute(
Expand Down Expand Up @@ -68,6 +110,17 @@ Project execute(GitLabClient client) {
});
}

@Override
public List<ProjectHook> getProjectHooks(String projectName) {
return execute(
new GitLabOperation<List<ProjectHook>>() {
@Override
List<ProjectHook> execute(GitLabClient client) {
return client.getProjectHooks(projectName);
}
});
}

@Override
public Project updateProject(final String projectId, final String name, final String path) {
return execute(
Expand Down Expand Up @@ -103,6 +156,18 @@ Void execute(GitLabClient client) {
});
}

@Override
public void addProjectHook(final String projectId, final String url, String secretToken, final Boolean pushEvents, final Boolean mergeRequestEvents, final Boolean noteEvents) {
execute(
new GitLabOperation<Void>() {
@Override
Void execute(GitLabClient client) {
client.addProjectHook(projectId, url, secretToken, pushEvents, mergeRequestEvents, noteEvents);
return null;
}
});
}

@Override
public void changeBuildStatus(final String projectId, final String sha, final BuildState state, final String ref, final String context, final String targetUrl, final String description) {
execute(
Expand Down Expand Up @@ -177,7 +242,6 @@ List<Awardable> execute(GitLabClient client) {
);
}


@Override
public void awardMergeRequestEmoji(final MergeRequest mr, final String body) {
execute(
Expand Down Expand Up @@ -292,7 +356,6 @@ List<Pipeline> execute(GitLabClient client) {
});
}


private GitLabClient delegate(boolean reset) {
if (reset || delegate == null) {
delegate = autodetectOrDie();
Expand Down Expand Up @@ -328,7 +391,6 @@ private <R> R execute(GitLabOperation<R> operation) {
return operation.execute(false);
}


private abstract class GitLabOperation<R> {
private R execute(boolean reset) {
try {
Expand All @@ -342,7 +404,6 @@ private R execute(boolean reset) {
}
}


abstract R execute(GitLabClient client);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.dabsquared.gitlabjenkins.gitlab.api.impl;


import com.dabsquared.gitlabjenkins.gitlab.api.model.*;
import com.dabsquared.gitlabjenkins.gitlab.hook.model.State;

import java.util.List;


interface GitLabApiProxy {
List<Group> getGroups(Boolean allAvailable, Boolean topLevelOnly, String orderBy, String sort);
List<Project> getGroupProjects(String groupId, Boolean includeSubgroups, String visibility, String orderBy, String sort);

Project createProject(String projectName);

MergeRequest createMergeRequest(Integer projectId, String sourceBranch, String targetBranch, String title);
Expand All @@ -18,8 +18,12 @@ interface GitLabApiProxy {

void deleteProject(String projectId);

List<ProjectHook> getProjectHooks(String projectName);

void addProjectHook(String projectId, String url, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents);

void addProjectHook(String projectId, String url, String secretToken, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents);

void changeBuildStatus(String projectId, String sha, BuildState state, String ref, String context, String targetUrl, String description);

void changeBuildStatus(Integer projectId, String sha, BuildState state, String ref, String context, String targetUrl, String description);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package com.dabsquared.gitlabjenkins.gitlab.api.impl;


import com.dabsquared.gitlabjenkins.gitlab.api.GitLabClient;
import com.dabsquared.gitlabjenkins.gitlab.api.model.*;
import com.dabsquared.gitlabjenkins.gitlab.hook.model.State;

import java.util.List;
import java.util.function.Function;


final class ResteasyGitLabClient implements GitLabClient {
private final String hostUrl;
private final GitLabApiProxy api;
Expand All @@ -25,6 +22,49 @@ public final String getHostUrl() {
return hostUrl;
}

@Override
public List<Group> getGroups() {
return api.getGroups(
true,
false,
OrderType.path.name(),
SortType.asc.name()
);
}

@Override
public List<Group> getGroups(Boolean allAvailable, Boolean topLevelOnly, OrderType orderBy, SortType sort) {
return api.getGroups(
allAvailable,
topLevelOnly,
orderBy == null ? OrderType.path.name() : orderBy.name(),
sort == null ? SortType.asc.name() : sort.name()
);
}

@Override
public List<Project> getGroupProjects(String groupId) {
return api.getGroupProjects(
groupId,
Boolean.FALSE,
null,
OrderType.path.name(),
SortType.asc.name()
);
}

@Override
public List<Project> getGroupProjects(String groupId, Boolean includeSubgroups, ProjectVisibilityType visibility,
OrderType orderBy, SortType sort) {
return api.getGroupProjects(
groupId,
includeSubgroups == null ? Boolean.FALSE : includeSubgroups,
visibility == null ? null : visibility.getValue(),
orderBy == null ? OrderType.path.name() : orderBy.name(),
sort == null ? SortType.asc.name() : sort.name()
);
}

@Override
public Project createProject(String projectName) {
return api.createProject(projectName);
Expand All @@ -50,11 +90,21 @@ public void deleteProject(String projectId) {
api.deleteProject(projectId);
}

@Override
public List<ProjectHook> getProjectHooks(String projectName) {
return api.getProjectHooks(projectName);
}

@Override
public void addProjectHook(String projectId, String url, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents) {
api.addProjectHook(projectId, url, pushEvents, mergeRequestEvents, noteEvents);
}

@Override
public void addProjectHook(String projectId, String url, String secretToken, Boolean pushEvents, Boolean mergeRequestEvents, Boolean noteEvents) {
api.addProjectHook(projectId, url, secretToken, pushEvents, mergeRequestEvents, noteEvents);
}

@Override
public void changeBuildStatus(String projectId, String sha, BuildState state, String ref, String context, String targetUrl, String description) {
api.changeBuildStatus(projectId, sha, state, ref, context, targetUrl, description);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
package com.dabsquared.gitlabjenkins.gitlab.api.impl;

import static com.dabsquared.gitlabjenkins.gitlab.api.impl.V3GitLabApiProxy.ID;

import com.dabsquared.gitlabjenkins.gitlab.api.model.*;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Awardable;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Branch;
import com.dabsquared.gitlabjenkins.gitlab.api.model.BuildState;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Group;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Label;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequest;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Pipeline;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Project;
import com.dabsquared.gitlabjenkins.gitlab.api.model.ProjectHook;
import com.dabsquared.gitlabjenkins.gitlab.api.model.User;
import com.dabsquared.gitlabjenkins.gitlab.hook.model.State;

import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.Encoded;
Expand All @@ -17,10 +27,6 @@
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import java.util.List;

import static com.dabsquared.gitlabjenkins.gitlab.api.impl.V3GitLabApiProxy.ID;


/**
* @author Robin Müller
Expand All @@ -29,6 +35,29 @@
interface V3GitLabApiProxy extends GitLabApiProxy {
String ID = "v3";

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/groups")
@Override
List<Group> getGroups(
@QueryParam("all_available") Boolean allAvailable,
@QueryParam("top_level_only") Boolean topLevelOnly,
@QueryParam("order_by") String orderBy,
@QueryParam("sort") String sort
);

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/groups/{groupId}/projects")
@Override
List<Project> getGroupProjects(
@PathParam("groupId") @Encoded String groupId,
@QueryParam("include_subgroups") Boolean includeSubgroups,
@QueryParam("visibility") String visibility,
@QueryParam("order_by") String orderBy,
@QueryParam("sort") String sort
);

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
Expand Down Expand Up @@ -67,13 +96,31 @@ Project updateProject(@PathParam("projectId") @Encoded String projectId,
@Override
void deleteProject(@PathParam("projectId") @Encoded String projectId);

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/projects/{projectName}/hooks")
@Override
List<ProjectHook> getProjectHooks(@PathParam("projectName") @Encoded String projectName);

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/projects/{projectId}/hooks")
@Override
void addProjectHook(@PathParam("projectId") @Encoded String projectId,
@FormParam("url") String url,
@FormParam("push_events") Boolean pushEvents,
@FormParam("merge_requests_events") Boolean mergeRequestEvents,
@FormParam("note_events") Boolean noteEvents);

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/projects/{projectId}/hooks")
@Override
void addProjectHook(@PathParam("projectId") @Encoded String projectId,
@FormParam("url") String url,
@FormParam("token") String secretToken,
@FormParam("push_events") Boolean pushEvents,
@FormParam("merge_requests_events") Boolean mergeRequestEvents,
@FormParam("note_events") Boolean noteEvents);
Expand Down
Loading

0 comments on commit 9d32eea

Please sign in to comment.