From f08aab5c5e632431635e73b47b6096dc47243755 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 13 Dec 2011 08:37:02 -0500 Subject: [PATCH] Teams JSON-RPC support --- src/com/gitblit/client/GitblitClient.java | 93 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 85 insertions(+), 8 deletions(-) diff --git a/src/com/gitblit/client/GitblitClient.java b/src/com/gitblit/client/GitblitClient.java index c027537..b944486 100644 --- a/src/com/gitblit/client/GitblitClient.java +++ b/src/com/gitblit/client/GitblitClient.java @@ -37,6 +37,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.ServerSettings; import com.gitblit.models.ServerStatus; +import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; import com.gitblit.utils.RpcUtils; import com.gitblit.utils.StringUtils; @@ -63,6 +64,8 @@ private final char[] password; + private volatile int protocolVersion; + private volatile boolean allowManagement; private volatile boolean allowAdministration; @@ -72,6 +75,8 @@ private final List<RepositoryModel> allRepositories; private final List<UserModel> allUsers; + + private final List<TeamModel> allTeams; private final List<FederationModel> federationRegistrations; @@ -90,6 +95,7 @@ this.password = reg.password; this.allUsers = new ArrayList<UserModel>(); + this.allTeams = new ArrayList<TeamModel>(); this.allRepositories = new ArrayList<RepositoryModel>(); this.federationRegistrations = new ArrayList<FederationModel>(); this.availableFeeds = new ArrayList<FeedModel>(); @@ -98,6 +104,7 @@ } public void login() throws IOException { + protocolVersion = RpcUtils.getProtocolVersion(url, account, password); refreshSettings(); refreshAvailableFeeds(); refreshRepositories(); @@ -107,6 +114,9 @@ // credentials may not have administrator access // or server may have disabled rpc management refreshUsers(); + if (protocolVersion > 1) { + refreshTeams(); + } allowManagement = true; } catch (UnauthorizedException e) { } catch (ForbiddenException e) { @@ -128,6 +138,10 @@ } catch (IOException e) { e.printStackTrace(); } + } + + public int getProtocolVersion() { + return protocolVersion; } public boolean allowManagement() { @@ -198,6 +212,13 @@ return allUsers; } + public List<TeamModel> refreshTeams() throws IOException { + List<TeamModel> teams = RpcUtils.getTeams(url, account, password); + allTeams.clear(); + allTeams.addAll(teams); + return allTeams; + } + public ServerSettings refreshSettings() throws IOException { settings = RpcUtils.getSettings(url, account, password); return settings; @@ -253,8 +274,8 @@ for (FeedModel feed : reg.feeds) { feed.lastRefreshDate = feed.currentRefreshDate; feed.currentRefreshDate = new Date(); - List<FeedEntryModel> entries = SyndicationUtils.readFeed(url, - feed.repository, feed.branch, -1, page, account, password); + List<FeedEntryModel> entries = SyndicationUtils.readFeed(url, feed.repository, + feed.branch, -1, page, account, password); allEntries.addAll(entries); } } @@ -301,8 +322,8 @@ return syndicatedEntries; } - public List<FeedEntryModel> log(String repository, String branch, int numberOfEntries, - int page) throws IOException { + public List<FeedEntryModel> log(String repository, String branch, int numberOfEntries, int page) + throws IOException { return SyndicationUtils.readFeed(url, repository, branch, numberOfEntries, page, account, password); } @@ -343,6 +364,29 @@ return usernames; } + public List<TeamModel> getTeams() { + return allTeams; + } + + public List<String> getTeamnames() { + List<String> teamnames = new ArrayList<String>(); + for (TeamModel team : this.allTeams) { + teamnames.add(team.name); + } + Collections.sort(teamnames); + return teamnames; + } + + public List<String> getPermittedTeamnames(RepositoryModel repository) { + List<String> teamnames = new ArrayList<String>(); + for (TeamModel team : this.allTeams) { + if (team.repositories.contains(repository.name)) { + teamnames.add(team.name); + } + } + return teamnames; + } + public List<String> getFederationSets() { return settings.get(Keys.federation.sets).getStrings(); } @@ -353,11 +397,21 @@ public boolean createRepository(RepositoryModel repository, List<String> permittedUsers) throws IOException { + return createRepository(repository, permittedUsers, null); + } + + public boolean createRepository(RepositoryModel repository, List<String> permittedUsers, + List<String> permittedTeams) throws IOException { boolean success = true; success &= RpcUtils.createRepository(repository, url, account, password); - if (permittedUsers.size() > 0) { + if (permittedUsers != null && permittedUsers.size() > 0) { // if new repository has named members, set them success &= RpcUtils.setRepositoryMembers(repository, permittedUsers, url, account, + password); + } + if (permittedTeams != null && permittedTeams.size() > 0) { + // if new repository has named teams, set them + success &= RpcUtils.setRepositoryTeams(repository, permittedTeams, url, account, password); } return success; @@ -365,11 +419,22 @@ public boolean updateRepository(String name, RepositoryModel repository, List<String> permittedUsers) throws IOException { + return updateRepository(name, repository, permittedUsers, null); + } + + public boolean updateRepository(String name, RepositoryModel repository, + List<String> permittedUsers, List<String> permittedTeams) throws IOException { boolean success = true; success &= RpcUtils.updateRepository(name, repository, url, account, password); - // always set the repository members - success &= RpcUtils - .setRepositoryMembers(repository, permittedUsers, url, account, password); + // set the repository members + if (permittedUsers != null) { + success &= RpcUtils.setRepositoryMembers(repository, permittedUsers, url, account, + password); + } + if (permittedTeams != null) { + success &= RpcUtils.setRepositoryTeams(repository, permittedTeams, url, account, + password); + } return success; } @@ -389,6 +454,18 @@ return RpcUtils.deleteUser(user, url, account, password); } + public boolean createTeam(TeamModel team) throws IOException { + return RpcUtils.createTeam(team, url, account, password); + } + + public boolean updateTeam(String name, TeamModel team) throws IOException { + return RpcUtils.updateTeam(name, team, url, account, password); + } + + public boolean deleteTeam(TeamModel team) throws IOException { + return RpcUtils.deleteTeam(team, url, account, password); + } + public boolean updateSettings(Map<String, String> newSettings) throws IOException { return RpcUtils.updateSettings(newSettings, url, account, password); } -- Gitblit v1.9.1