From 41f6f41f2f1cc7de02c7091c7687519fad8914a3 Mon Sep 17 00:00:00 2001 From: Greg Messner Date: Tue, 4 Mar 2014 22:33:21 -0800 Subject: [PATCH] Added support for create user API call. --- .../com/messners/gitlab/api/AbstractApi.java | 29 ++++++- .../java/com/messners/gitlab/api/UserApi.java | 87 +++++++++++++++++++ .../com/messners/gitlab/api/models/User.java | 4 +- 3 files changed, 117 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/messners/gitlab/api/AbstractApi.java b/src/main/java/com/messners/gitlab/api/AbstractApi.java index 3fb560f7..15c066a4 100644 --- a/src/main/java/com/messners/gitlab/api/AbstractApi.java +++ b/src/main/java/com/messners/gitlab/api/AbstractApi.java @@ -120,5 +120,32 @@ public abstract class AbstractApi { throws UniformInterfaceException, ClientHandlerException { return (getApiClient().delete(queryParams, url)); - } + } + + + /** + * + * @param formData + * @param string + * @param email + * @param required + */ + protected void addFormParam(Form formData, String name, Object value, boolean required) throws IllegalArgumentException { + + if (value == null) { + + if (required) { + throw new IllegalArgumentException(name + " cannot be empty or null"); + } + + return; + } + + String stringValue = value.toString().trim(); + if (required && stringValue.length() == 0) { + throw new IllegalArgumentException(name + " cannot be empty or null"); + } + + formData.add(name, stringValue); + } } \ No newline at end of file diff --git a/src/main/java/com/messners/gitlab/api/UserApi.java b/src/main/java/com/messners/gitlab/api/UserApi.java index 1ab5c27a..672cbd1e 100644 --- a/src/main/java/com/messners/gitlab/api/UserApi.java +++ b/src/main/java/com/messners/gitlab/api/UserApi.java @@ -1,9 +1,13 @@ package com.messners.gitlab.api; import java.io.IOException; +import java.util.List; +import com.messners.gitlab.api.models.ErrorMessage; import com.messners.gitlab.api.models.User; import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.GenericType; +import com.sun.jersey.api.representation.Form; public class UserApi extends AbstractApi { @@ -11,6 +15,18 @@ public class UserApi extends AbstractApi { super(gitLabApi); } + + /** + * GET /users + * + * @return + * @throws IOException + */ + public List getProjects () throws IOException { + ClientResponse response = get(null, "users"); + return (response.getEntity(new GenericType>() {})); + } + /** * GET /users/:id @@ -23,4 +39,75 @@ public class UserApi extends AbstractApi { ClientResponse response = get(null, "users", userId); return (response.getEntity(User.class)); } + + + /** + * POST /users + * + * email (required) - Email + * password (required) - Password + * username (required) - Username + * name (required) - Name + * skype (optional) - Skype ID + * linkedin (optional) - Linkedin + * twitter (optional) - Twitter account + * website_url (optional) - Website url + * projects_limit (optional) - Number of projects user can create + * extern_uid (optional) - External UID + * provider (optional) - External provider name + * bio (optional) - User's bio + * admin (optional) - User is admin - true or false (default) + * can_create_group (optional) - User can create groups - true or false + * + * @param user + * @return + * @throws IOException + */ + public User createUser (User user, String password, Integer projectsLimit) throws IOException { + + Form formData = new Form(); + addFormParam(formData, "email", user.getEmail(), true); + addFormParam(formData, "password", password, true); + addFormParam(formData, "username", user.getUsername(), true); + addFormParam(formData, "name", user.getName(), true); + addFormParam(formData, "skype", user.getSkype(), false); + addFormParam(formData, "linkedin", user.getLinkedin(), false); + addFormParam(formData, "twitter", user.getTwitter(), false); + addFormParam(formData, "website_url", user.getWebsiteUrl(), false); + addFormParam(formData, "projects_limit", projectsLimit, false); + addFormParam(formData, "extern_uid", user.getExternUid(), false); + addFormParam(formData, "provider", user.getProvider(), false); + addFormParam(formData, "bio", user.getBio(), false); + addFormParam(formData, "admin", user.getIsAdmin(), false); + addFormParam(formData, "can_create_group", user.getCanCreateGroup(), false); + + ClientResponse response = post(formData, "users"); + if (response.getStatus() != ClientResponse.Status.CREATED.getStatusCode()) { + ErrorMessage errorMessage = response.getEntity(ErrorMessage.class); + throw new RuntimeException(errorMessage.getMessage()); + } + + return (response.getEntity(User.class)); + } + + + /** + * DELETE /users/:id + * + * @param userId + */ + public boolean deleteUser (Integer userId) throws IOException { + + if (userId == null) { + throw new RuntimeException("userId cannot be null"); + } + + ClientResponse response = delete(null, "users", userId); + return (response.getStatus() == ClientResponse.Status.OK.getStatusCode()); + } + + + public boolean deleteProject (User user) throws IOException { + return (deleteUser(user.getId())); + } } diff --git a/src/main/java/com/messners/gitlab/api/models/User.java b/src/main/java/com/messners/gitlab/api/models/User.java index 5d04b16c..04b7c61d 100644 --- a/src/main/java/com/messners/gitlab/api/models/User.java +++ b/src/main/java/com/messners/gitlab/api/models/User.java @@ -11,13 +11,13 @@ import javax.xml.bind.annotation.XmlRootElement; public class User { private String bio; - private boolean canCreateGroup; + private Boolean canCreateGroup; private Integer colorSchemeId; private Date createdAt; private String email; private String externUid; private Integer id; - private boolean isAdmin; + private Boolean isAdmin; private String linkedin; private String name; private String provider; -- GitLab