Commit 82c1deea authored by Greg Messner's avatar Greg Messner
Browse files

Added support for merge_request system hook (#332).

parent 44b47f3a
......@@ -15,6 +15,8 @@ import org.gitlab4j.api.HookManager;
import org.gitlab4j.api.utils.HttpRequestUtils;
import org.gitlab4j.api.utils.JacksonJson;
import com.fasterxml.jackson.databind.JsonNode;
/**
* This class provides a handler for processing GitLab System Hook callouts.
*/
......@@ -77,15 +79,36 @@ public class SystemHookManager extends HookManager {
try {
SystemHookEvent event;
JsonNode tree;
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine(HttpRequestUtils.getShortRequestDump("System Hook", true, request));
String postData = HttpRequestUtils.getPostDataAsString(request);
LOGGER.fine("Raw POST data:\n" + postData);
event = jacksonJson.unmarshal(SystemHookEvent.class, postData);
LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n");
tree = jacksonJson.readTree(postData);
} else {
InputStreamReader reader = new InputStreamReader(request.getInputStream());
event = jacksonJson.unmarshal(SystemHookEvent.class, reader);
tree = jacksonJson.readTree(reader);
}
if (tree.has("object_kind")) {
String objectKind = tree.asText("object_kind");
switch (objectKind) {
case MergeRequestSystemHookEvent.OBJECT_KIND:
event = jacksonJson.unmarshal(MergeRequestSystemHookEvent.class, tree);
break;
default:
String message = "Unsupported object_kind, object_kind=" + objectKind;
LOGGER.warning(message);
throw new GitLabApiException(message);
}
} else {
event = jacksonJson.unmarshal(SystemHookEvent.class, tree);
}
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n");
}
event.setRequestUrl(request.getRequestURL().toString());
......@@ -161,6 +184,8 @@ public class SystemHookManager extends HookManager {
fireTagPushEvent((TagPushSystemHookEvent) event);
} else if (event instanceof RepositorySystemHookEvent) {
fireRepositoryEvent((RepositorySystemHookEvent) event);
} else if (event instanceof MergeRequestSystemHookEvent) {
fireMergeRequestEvent((MergeRequestSystemHookEvent) event);
} else {
String message = "Unsupported event, event_named=" + event.getEventName();
LOGGER.warning(message);
......@@ -221,4 +246,10 @@ public class SystemHookManager extends HookManager {
listener.onRepositoryEvent(event);
}
}
protected void fireMergeRequestEvent(MergeRequestSystemHookEvent event) {
for (SystemHookListener listener : systemHookListeners) {
listener.onMergeRequestEvent(event);
}
}
}
......@@ -5,6 +5,7 @@ import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStreamReader;
import org.gitlab4j.api.systemhooks.MergeRequestSystemHookEvent;
import org.gitlab4j.api.utils.JacksonJson;
import org.gitlab4j.api.webhook.BuildEvent;
import org.gitlab4j.api.webhook.Event;
......@@ -53,6 +54,13 @@ public class TestGitLabApiEvents {
assertTrue(compareJson(mergeRequestEvent, "merge-request-event"));
}
@Test
public void testMergeRequestSystemHookEvent() throws Exception {
MergeRequestSystemHookEvent mergeRequestEvent = makeFakeApiCall(MergeRequestSystemHookEvent.class, "merge-request-system-hook-event");
assertTrue(compareJson(mergeRequestEvent, "merge-request-system-hook-event"));
}
@Test
public void testPipelineEvent() throws Exception {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment