Skip to content

Commit 82c1dee

Browse files
committed
Added support for merge_request system hook (#332).
1 parent 44b47f3 commit 82c1dee

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.gitlab4j.api.utils.HttpRequestUtils;
1616
import org.gitlab4j.api.utils.JacksonJson;
1717

18+
import com.fasterxml.jackson.databind.JsonNode;
19+
1820
/**
1921
* This class provides a handler for processing GitLab System Hook callouts.
2022
*/
@@ -77,15 +79,36 @@ public void handleEvent(HttpServletRequest request) throws GitLabApiException {
7779
try {
7880

7981
SystemHookEvent event;
82+
JsonNode tree;
8083
if (LOGGER.isLoggable(Level.FINE)) {
8184
LOGGER.fine(HttpRequestUtils.getShortRequestDump("System Hook", true, request));
8285
String postData = HttpRequestUtils.getPostDataAsString(request);
8386
LOGGER.fine("Raw POST data:\n" + postData);
84-
event = jacksonJson.unmarshal(SystemHookEvent.class, postData);
85-
LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n");
87+
tree = jacksonJson.readTree(postData);
8688
} else {
8789
InputStreamReader reader = new InputStreamReader(request.getInputStream());
88-
event = jacksonJson.unmarshal(SystemHookEvent.class, reader);
90+
tree = jacksonJson.readTree(reader);
91+
}
92+
93+
if (tree.has("object_kind")) {
94+
String objectKind = tree.asText("object_kind");
95+
switch (objectKind) {
96+
case MergeRequestSystemHookEvent.OBJECT_KIND:
97+
event = jacksonJson.unmarshal(MergeRequestSystemHookEvent.class, tree);
98+
break;
99+
100+
default:
101+
String message = "Unsupported object_kind, object_kind=" + objectKind;
102+
LOGGER.warning(message);
103+
throw new GitLabApiException(message);
104+
}
105+
106+
} else {
107+
event = jacksonJson.unmarshal(SystemHookEvent.class, tree);
108+
}
109+
110+
if (LOGGER.isLoggable(Level.FINE)) {
111+
LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n");
89112
}
90113

91114
event.setRequestUrl(request.getRequestURL().toString());
@@ -161,6 +184,8 @@ public void fireEvent(SystemHookEvent event) throws GitLabApiException {
161184
fireTagPushEvent((TagPushSystemHookEvent) event);
162185
} else if (event instanceof RepositorySystemHookEvent) {
163186
fireRepositoryEvent((RepositorySystemHookEvent) event);
187+
} else if (event instanceof MergeRequestSystemHookEvent) {
188+
fireMergeRequestEvent((MergeRequestSystemHookEvent) event);
164189
} else {
165190
String message = "Unsupported event, event_named=" + event.getEventName();
166191
LOGGER.warning(message);
@@ -221,4 +246,10 @@ protected void fireRepositoryEvent(RepositorySystemHookEvent event) {
221246
listener.onRepositoryEvent(event);
222247
}
223248
}
249+
250+
protected void fireMergeRequestEvent(MergeRequestSystemHookEvent event) {
251+
for (SystemHookListener listener : systemHookListeners) {
252+
listener.onMergeRequestEvent(event);
253+
}
254+
}
224255
}

src/test/java/org/gitlab4j/api/TestGitLabApiEvents.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.io.IOException;
66
import java.io.InputStreamReader;
77

8+
import org.gitlab4j.api.systemhooks.MergeRequestSystemHookEvent;
89
import org.gitlab4j.api.utils.JacksonJson;
910
import org.gitlab4j.api.webhook.BuildEvent;
1011
import org.gitlab4j.api.webhook.Event;
@@ -53,6 +54,13 @@ public void testMergeRequestEvent() throws Exception {
5354
assertTrue(compareJson(mergeRequestEvent, "merge-request-event"));
5455
}
5556

57+
@Test
58+
public void testMergeRequestSystemHookEvent() throws Exception {
59+
60+
MergeRequestSystemHookEvent mergeRequestEvent = makeFakeApiCall(MergeRequestSystemHookEvent.class, "merge-request-system-hook-event");
61+
assertTrue(compareJson(mergeRequestEvent, "merge-request-system-hook-event"));
62+
}
63+
5664
@Test
5765
public void testPipelineEvent() throws Exception {
5866

0 commit comments

Comments
 (0)