Skip to content

Commit

Permalink
Merge branch 'lonfee88-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
gmessner committed May 15, 2015
2 parents 83365b1 + cb0fee1 commit 6b73b77
Show file tree
Hide file tree
Showing 7 changed files with 314 additions and 4 deletions.
24 changes: 24 additions & 0 deletions src/main/java/com/messners/gitlab/api/GitLabApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class GitLabApi {
private RepositoryApi repositoryApi;
private SessionApi sessoinApi;
private UserApi userApi;
private RepositoryFileApi repositoryFileApi;

/**
* Logs into GitLab using provided {@code username} and {@code password}, and creates a new
Expand Down Expand Up @@ -48,6 +49,7 @@ public GitLabApi (String hostUrl, String privateToken) {
repositoryApi = new RepositoryApi(this);
sessoinApi = new SessionApi(this);
userApi = new UserApi(this);
repositoryFileApi = new RepositoryFileApi(this);
}


Expand Down Expand Up @@ -137,4 +139,26 @@ public SessionApi getSessionApi () {
public UserApi getUserApi () {
return (userApi);
}


/**
* Gets the RepositoryFileApi instance owned by this GitLabApi instance. The RepositoryFileApi is used
* to perform all repository files related API calls.
*
* @return the RepositoryFileApi instance owned by this GitLabApi instance
*/
public RepositoryFileApi getRepositoryFileApi() {
return repositoryFileApi;
}

/**
* Gets the RepositoryFileApi instance owned by this GitLabApi instance. The RepositoryFileApi is used
* to perform all repository files related API calls.
*
* @return the RepositoryFileApi instance owned by this GitLabApi instance
*/
public void setRepositoryFileApi(RepositoryFileApi repositoryFileApi) {
this.repositoryFileApi = repositoryFileApi;
}

}
2 changes: 1 addition & 1 deletion src/main/java/com/messners/gitlab/api/GitLabApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ protected Response put (MultivaluedMap<String, String> queryParams, Object ...
* @return a ClientResponse instance with the data returned from the endpoint
*/
protected Response put (MultivaluedMap<String, String> queryParams, URL url) {
return invocation(url, queryParams).put(null);
return invocation(url, null).put(Entity.entity(queryParams, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
}


Expand Down
39 changes: 39 additions & 0 deletions src/main/java/com/messners/gitlab/api/ProjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,45 @@ public Project createProject (Project project, String importUrl) throws GitLabAp
return (response.readEntity(Project.class));
}

/**
* Creates a Project
*
* @param name The name of the project
* @param namespaceId The Namespace for the new project, otherwise null indicates to use the GitLab default (user)
* @param description A description for the project, null otherwise
* @param issuesEnabled Whether Issues should be enabled, otherwise null indicates to use GitLab default
* @param wallEnabled Whether The Wall should be enabled, otherwise null indicates to use GitLab default
* @param mergeRequestsEnabled Whether Merge Requests should be enabled, otherwise null indicates to use GitLab default
* @param wikiEnabled Whether a Wiki should be enabled, otherwise null indicates to use GitLab default
* @param snippetsEnabled Whether Snippets should be enabled, otherwise null indicates to use GitLab default
* @param publik Whether the project is public or private, if true same as setting visibilityLevel = 20, otherwise null indicates to use GitLab default
* @param visibilityLevel The visibility level of the project, otherwise null indicates to use GitLab default
* @param importUrl The Import URL for the project, otherwise null
* @return the Gitlab Project
* @throws GitLabApiException
*/
public Project createProject(String name, Integer namespaceId, String description, Boolean issuesEnabled, Boolean wallEnabled, Boolean mergeRequestsEnabled, Boolean wikiEnabled, Boolean snippetsEnabled, Boolean publik, Integer visibilityLevel, String importUrl) throws GitLabApiException{

if (name == null || name.trim().length() == 0) {
return (null);
}

Form formData = new Form();
addFormParam(formData, "name", name, true);
addFormParam(formData, "namespace_id", namespaceId);
addFormParam(formData, "description", description);
addFormParam(formData, "issues_enabled", issuesEnabled);
addFormParam(formData, "wall_enabled", wallEnabled);
addFormParam(formData, "merge_requests_enabled", mergeRequestsEnabled);
addFormParam(formData, "wiki_enabled", wikiEnabled);
addFormParam(formData, "snippets_enabled", snippetsEnabled);
addFormParam(formData, "public", publik);
addFormParam(formData, "visibility_level", visibilityLevel);
addFormParam(formData, "import_url", importUrl);

Response response = post(Response.Status.CREATED, formData, "projects");
return (response.readEntity(Project.class));
}

/**
* Removes project with all resources(issues, merge requests etc).
Expand Down
18 changes: 17 additions & 1 deletion src/main/java/com/messners/gitlab/api/RepositoryApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public List<Tag> getTags (Integer projectId) throws GitLabApiException {
* GET /projects/:id/repository/tree
*
* @param projectId
* @return a tree with the diurectories and files of a project
* @return a tree with the directories and files of a project
* @throws GitLabApiException
*/
public List<TreeItem> getTree (Integer projectId) throws GitLabApiException {
Expand All @@ -154,4 +154,20 @@ public String getRawFileContent (Integer projectId, String commitOrBranchName, S
Response response = get(Response.Status.OK, formData.asMap(), "projects", projectId, "repository", "blobs", commitOrBranchName);
return (response.readEntity(String.class));
}

/**
* Get the raw file contents for a blob by blob SHA.
*
* GET /projects/:id/repository/raw_blobs/:sha
*
* @param projectId
* @param sha
* @return the raw file contents for the blob
* @throws GitLabApiException
*/
public String getRawBlobCotent(Integer projectId, String sha) throws GitLabApiException{
Response response = get(Response.Status.OK, null, "projects", projectId, "repository", "raw_blobs", sha);
return (response.readEntity(String.class));
}

}
127 changes: 127 additions & 0 deletions src/main/java/com/messners/gitlab/api/RepositoryFileApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package com.messners.gitlab.api;

import javax.ws.rs.core.Form;
import javax.ws.rs.core.Response;

import com.messners.gitlab.api.models.RepositoryFile;


/**
* This class provides an entry point to all the GitLab API repository files calls.
*
* @author lonfee88 <[email protected]>
*/
public class RepositoryFileApi extends AbstractApi {

public RepositoryFileApi (GitLabApi gitLabApi) {
super(gitLabApi);
}

/**
* Get file from repository
* Allows you to receive information about file in repository like name, size, content.
* Note that file content is Base64 encoded.
*
* GET /projects/:id/repository/files
*
* @param file_path (required) - Full path to new file. Ex. lib/class.rb
* @param projectId
* @param ref (required) - The name of branch, tag or commit
* @return
* @throws GitLabApiException
*/
public RepositoryFile getFile(String filePath, Integer projectId, String ref) throws GitLabApiException {
Form form = new Form();
addFormParam(form, "file_path", filePath, true);
addFormParam(form, "ref", ref, true);
Response response = get(Response.Status.OK, form.asMap(),"projects", projectId, "repository", "files");
return (response.readEntity(RepositoryFile.class));
}

/**
* Create new file in repository
*
* POST /projects/:id/repository/files
*
* file_path (required) - Full path to new file. Ex. lib/class.rb
* branch_name (required) - The name of branch
* encoding (optional) - 'text' or 'base64'. Text is default.
* content (required) - File content
* commit_message (required) - Commit message
*
* @param file
* @param projectId
* @param branchName
* @param commitMessage
* @return
* @throws GitLabApiException
*/
public RepositoryFile createFile (RepositoryFile file, Integer projectId, String branchName, String commitMessage) throws GitLabApiException {
Form formData = file2form(file, branchName, commitMessage);
Response response = post(Response.Status.CREATED, formData, "projects", projectId, "repository", "files");
return (response.readEntity(RepositoryFile.class));
}

/**
* Update existing file in repository
*
* PUT /projects/:id/repository/files
*
* file_path (required) - Full path to new file. Ex. lib/class.rb
* branch_name (required) - The name of branch
* encoding (optional) - 'text' or 'base64'. Text is default.
* content (required) - File content
* commit_message (required) - Commit message
*
* @param file
* @param projectId
* @param branchName
* @param commitMessage
* @return
* @throws GitLabApiException
*/
public RepositoryFile updateFile (RepositoryFile file, Integer projectId, String branchName, String commitMessage) throws GitLabApiException {
Form form = file2form(file, branchName, commitMessage);
Response response = put(Response.Status.OK, form.asMap(), "projects", projectId, "repository", "files");
return (response.readEntity(RepositoryFile.class));
}

/**
* Delete existing file in repository
*
* DELETE /projects/:id/repository/files
*
* file_path (required) - Full path to file. Ex. lib/class.rb
* branch_name (required) - The name of branch
* commit_message (required) - Commit message
*
* @param filePath
* @param projectId
* @param branchName
* @param commitMessage
* @throws GitLabApiException
*/
public void deleteFile (String filePath, Integer projectId, String branchName, String commitMessage) throws GitLabApiException {

if (filePath == null) {
throw new RuntimeException("filePath cannot be null");
}

Form form = new Form();
addFormParam(form, "file_path", filePath, true);
addFormParam(form, "branch_name", branchName, true);
addFormParam(form, "commit_message", commitMessage, true);
delete(Response.Status.OK, form.asMap(), "projects", projectId, "repository", "files");
}

private Form file2form(RepositoryFile file, String branchName, String commitMessage){
Form form = new Form();
addFormParam(form, "file_path", file.getFilePath(), true);
addFormParam(form, "branch_name", branchName, true);
addFormParam(form, "encoding", file.getEncoding(), false);
addFormParam(form, "content", file.getContent(), true);
addFormParam(form, "commit_message", commitMessage, true);
return form;
}

}
23 changes: 21 additions & 2 deletions src/main/java/com/messners/gitlab/api/UserApi.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.messners.gitlab.api;

import com.messners.gitlab.api.models.User;
import java.util.List;

import javax.ws.rs.core.Form;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
import java.util.List;

import com.messners.gitlab.api.models.User;

public class UserApi extends AbstractApi {

Expand Down Expand Up @@ -62,6 +63,24 @@ public User getUser (int userId) throws GitLabApiException {
return (response.readEntity(User.class));
}

// Search users by Email or username
// GET /users?search=:email_or_username

/**
* Search users by Email or username
*
* GET /users?search=:email_or_username
*
* @param emailOrUsername
* @return the User List with the email or username like emailOrUsername
* @throws GitLabApiException
*/
public List<User> findUsers(String emailOrUsername) throws GitLabApiException {
Form formData = new Form();
addFormParam(formData, "search", emailOrUsername, true);
Response response = get(Response.Status.OK, formData.asMap(), "users");
return (response.readEntity(new GenericType<List<User>>() {}));
}

/**
* Creates a new user. Note only administrators can create new users.
Expand Down
85 changes: 85 additions & 0 deletions src/main/java/com/messners/gitlab/api/models/RepositoryFile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@

package com.messners.gitlab.api.models;


import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class RepositoryFile {

private String fileName; //file name only, Ex. lib/class.rb
private String filePath; //full path to file. Ex. lib/class.rb
private Integer size;
private String encoding;
private String content;
private String ref;
private String blobId;
private String commitId;

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public String getFilePath() {
return filePath;
}

public void setFilePath(String filePath) {
this.filePath = filePath;
}

public Integer getSize() {
return size;
}

public void setSize(Integer size) {
this.size = size;
}

public String getEncoding() {
return encoding;
}

public void setEncoding(String encoding) {
this.encoding = encoding;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getRef() {
return ref;
}

public void setRef(String ref) {
this.ref = ref;
}

public String getBlobId() {
return blobId;
}

public void setBlobId(String blobId) {
this.blobId = blobId;
}

public String getCommitId() {
return commitId;
}

public void setCommitId(String commitId) {
this.commitId = commitId;
}
}

0 comments on commit 6b73b77

Please sign in to comment.