/*
* Copyright 2010 Nabeel Mukhtar
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.github.api.v2.services.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.github.api.v2.schema.Organization;
import com.github.api.v2.schema.Permission;
import com.github.api.v2.schema.Repository;
import com.github.api.v2.schema.Team;
import com.github.api.v2.schema.User;
import com.github.api.v2.services.OrganizationService;
import com.github.api.v2.services.constant.GitHubApiUrls;
import com.github.api.v2.services.constant.ParameterNames;
import com.github.api.v2.services.constant.GitHubApiUrls.GitHubApiUrlBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
/**
* The Class OrganizationServiceImpl.
*/
public class OrganizationServiceImpl extends BaseGitHubService implements
OrganizationService {
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#addTeamMember(java.lang.String, java.lang.String)
*/
@Override
public void addTeamMember(String teamId, String userName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.ADD_TEAM_MEMBER_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ParameterNames.NAME, userName);
unmarshall(callApiPost(apiUrl, parameters));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#addTeamRepository(java.lang.String, java.lang.String)
*/
@Override
public void addTeamRepository(String teamId, String userName, String repositoryName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.ADD_TEAM_REPOSITORY_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(ParameterNames.NAME, userName + "/" + repositoryName);
unmarshall(callApiPost(apiUrl, parameters));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#createTeam(com.github.api.v2.schema.Team)
*/
@Override
public Team createTeam(String organizationName, String teamName, Permission permission, List<String> repoNames) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.CREATE_TEAM_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organizationName).buildUrl();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("team[" + ParameterNames.NAME + "]", teamName);
parameters.put("team[" + ParameterNames.PERMISSION + "]", permission.value());
for (String repoName : repoNames) {
parameters.put("team[" + ParameterNames.REPO_NAMES + "][]", repoName);
}
JsonObject json = unmarshall(callApiPost(apiUrl, parameters));
return unmarshall(new TypeToken<Team>(){}, json.get("team"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#deleteTeam(java.lang.String)
*/
@Override
public void deleteTeam(String teamId) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.DELETE_TEAM_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
callApiDelete(apiUrl);
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getAllOrganizationRepositories()
*/
@Override
public List<Repository> getAllOrganizationRepositories() {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_ALL_REPOSITORIES_URL);
String apiUrl = builder.buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<Repository>>(){}, json.get("repositories"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getOrganization(java.lang.String)
*/
@Override
public Organization getOrganization(String name) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_ORGANIZATION_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, name).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
Gson gson = getGsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
return gson.fromJson(json.get("organization"), new TypeToken<Organization>(){}.getType());
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getPublicMembers(java.lang.String)
*/
@Override
public List<User> getPublicMembers(String organizationName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_PUBLIC_MEMBERS_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organizationName).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<User>>(){}, json.get("users"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getOwners(java.lang.String)
*/
public List<User> getOwners(String organizationName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_OWNERS_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organizationName).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<User>>(){}, json.get("users"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getPublicRepositories(java.lang.String)
*/
@Override
public List<Repository> getPublicRepositories(String organizationName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_PUBLIC_REPOSITORIES_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organizationName).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<Repository>>(){}, json.get("repositories"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getTeam(java.lang.String)
*/
@Override
public Team getTeam(String teamId) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_TEAM_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<Team>(){}, json.get("team"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getTeamMembers(java.lang.String)
*/
@Override
public List<User> getTeamMembers(String teamId) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_TEAM_MEMBERS_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<User>>(){}, json.get("users"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getTeamRepositories(java.lang.String)
*/
@Override
public List<Repository> getTeamRepositories(String teamId) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_TEAM_REPOSITORIES_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<Repository>>(){}, json.get("repositories"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getTeams(java.lang.String)
*/
@Override
public List<Team> getTeams(String organizationName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_TEAMS_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organizationName).buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<Team>>(){}, json.get("teams"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#getUserOrganizations()
*/
@Override
public List<Organization> getUserOrganizations() {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.GET_ORGANIZATIONS_URL);
String apiUrl = builder.buildUrl();
JsonObject json = unmarshall(callApiGet(apiUrl));
return unmarshall(new TypeToken<List<Organization>>(){}, json.get("organizations"));
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#removeTeamMember(java.lang.String, java.lang.String)
*/
@Override
public void removeTeamMember(String teamId, String userName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.REMOVE_TEAM_MEMBER_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).withParameter(ParameterNames.NAME, userName).buildUrl();
callApiDelete(apiUrl);
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#removeTeamRepository(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void removeTeamRepository(String teamId, String userName, String repositoryName) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.REMOVE_TEAM_REPOSITORY_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, teamId).withParameter(ParameterNames.NAME, userName + "/" + repositoryName).buildUrl();
callApiDelete(apiUrl);
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#updateOrganization(com.github.api.v2.schema.Organization)
*/
@Override
public void updateOrganization(Organization organization) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.UPDATE_ORGANIZATION_URL);
String apiUrl = builder.withField(ParameterNames.ORGANIZATION_NAME, organization.getName()).buildUrl();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("organization[" + ParameterNames.NAME + "]", organization.getName());
parameters.put("organization[" + ParameterNames.EMAIL + "]", organization.getEmail());
parameters.put("organization[" + ParameterNames.BLOG + "]", organization.getBlog());
parameters.put("organization[" + ParameterNames.COMPANY + "]", organization.getCompany());
parameters.put("organization[" + ParameterNames.LOCATION + "]", organization.getLocation());
parameters.put("organization[" + ParameterNames.BILLING_EMAIL + "]", organization.getBillingEmail());
callApiPost(apiUrl, parameters);
}
/* (non-Javadoc)
* @see com.github.api.v2.services.OrganizationService#updateTeam(com.github.api.v2.schema.Team)
*/
@Override
public void updateTeam(Team team) {
GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.OrganizationApiUrls.UPDATE_TEAM_URL);
String apiUrl = builder.withField(ParameterNames.TEAM_ID, team.getId()).buildUrl();
callApiMethod(apiUrl, getGsonBuilder().create().toJson(team), "application/json", "PUT", 200);
}
}