diff options
Diffstat (limited to 'gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java')
-rw-r--r-- | gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java | 76 |
1 files changed, 33 insertions, 43 deletions
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java index a564907a73..e90c2bffda 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java @@ -16,6 +16,7 @@ package com.google.gerrit.httpd.rpc.account; import com.google.gerrit.common.data.GroupAdminService; import com.google.gerrit.common.data.GroupDetail; +import com.google.gerrit.common.data.GroupList; import com.google.gerrit.common.data.GroupOptions; import com.google.gerrit.common.errors.InactiveAccountException; import com.google.gerrit.common.errors.NameAlreadyUsedException; @@ -23,13 +24,13 @@ import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.common.errors.NoSuchEntityException; import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.httpd.rpc.BaseServiceImplementation; -import com.google.gerrit.reviewdb.Account; -import com.google.gerrit.reviewdb.AccountGroup; -import com.google.gerrit.reviewdb.AccountGroupInclude; -import com.google.gerrit.reviewdb.AccountGroupIncludeAudit; -import com.google.gerrit.reviewdb.AccountGroupMember; -import com.google.gerrit.reviewdb.AccountGroupMemberAudit; -import com.google.gerrit.reviewdb.ReviewDb; +import com.google.gerrit.reviewdb.client.Account; +import com.google.gerrit.reviewdb.client.AccountGroup; +import com.google.gerrit.reviewdb.client.AccountGroupInclude; +import com.google.gerrit.reviewdb.client.AccountGroupIncludeAudit; +import com.google.gerrit.reviewdb.client.AccountGroupMember; +import com.google.gerrit.reviewdb.client.AccountGroupMemberAudit; +import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountResolver; @@ -37,21 +38,21 @@ import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.account.GroupControl; import com.google.gerrit.server.account.GroupIncludeCache; import com.google.gerrit.server.account.Realm; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwtjsonrpc.client.VoidResult; -import com.google.gwtorm.client.OrmException; +import com.google.gwtjsonrpc.common.AsyncCallback; +import com.google.gwtjsonrpc.common.VoidResult; +import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.List; import java.util.Set; class GroupAdminServiceImpl extends BaseServiceImplementation implements GroupAdminService { - private final Provider<IdentifiedUser> identifiedUser; private final AccountCache accountCache; private final AccountResolver accountResolver; private final Realm accountRealm; @@ -61,7 +62,8 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements private final CreateGroup.Factory createGroupFactory; private final RenameGroup.Factory renameGroupFactory; - private final GroupDetailFactory.Factory groupDetailFactory; + private final GroupDetailHandler.Factory groupDetailFactory; + private final VisibleGroupsHandler.Factory visibleGroupsFactory; @Inject GroupAdminServiceImpl(final Provider<ReviewDb> schema, @@ -73,9 +75,9 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements final GroupControl.Factory groupControlFactory, final CreateGroup.Factory createGroupFactory, final RenameGroup.Factory renameGroupFactory, - final GroupDetailFactory.Factory groupDetailFactory) { + final GroupDetailHandler.Factory groupDetailFactory, + final VisibleGroupsHandler.Factory visibleGroupsFactory) { super(schema, currentUser); - this.identifiedUser = currentUser; this.accountCache = accountCache; this.groupIncludeCache = groupIncludeCache; this.accountResolver = accountResolver; @@ -85,32 +87,11 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements this.createGroupFactory = createGroupFactory; this.renameGroupFactory = renameGroupFactory; this.groupDetailFactory = groupDetailFactory; + this.visibleGroupsFactory = visibleGroupsFactory; } - public void visibleGroups(final AsyncCallback<List<AccountGroup>> callback) { - run(callback, new Action<List<AccountGroup>>() { - public List<AccountGroup> run(ReviewDb db) throws OrmException { - final IdentifiedUser user = identifiedUser.get(); - final List<AccountGroup> result; - if (user.isAdministrator()) { - result = db.accountGroups().all().toList(); - } else { - result = new ArrayList<AccountGroup>(); - for(final AccountGroup group : db.accountGroups().all().toList()) { - final GroupControl c = groupControlFactory.controlFor(group); - if (c.isVisible()) { - result.add(c.getAccountGroup()); - } - } - } - Collections.sort(result, new Comparator<AccountGroup>() { - public int compare(final AccountGroup a, final AccountGroup b) { - return a.getName().compareTo(b.getName()); - } - }); - return result; - } - }); + public void visibleGroups(final AsyncCallback<GroupList> callback) { + visibleGroupsFactory.create().to(callback); } public void createGroup(final String newName, @@ -118,8 +99,14 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements createGroupFactory.create(newName).to(callback); } - public void groupDetail(final AccountGroup.Id groupId, - final AsyncCallback<GroupDetail> callback) { + public void groupDetail(AccountGroup.Id groupId, AccountGroup.UUID groupUUID, + AsyncCallback<GroupDetail> callback) { + if (groupId == null && groupUUID != null) { + AccountGroup g = groupCache.get(groupUUID); + if (g != null) { + groupId = g.getId(); + } + } groupDetailFactory.create(groupId).to(callback); } @@ -144,7 +131,6 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements final AccountGroup group = db.accountGroups().get(groupId); assertAmGroupOwner(db, group); group.setVisibleToAll(groupOptions.isVisibleToAll()); - group.setEmailOnlyAuthors(groupOptions.isEmailOnlyAuthors()); db.accountGroups().update(Collections.singleton(group)); groupCache.evict(group); return VoidResult.INSTANCE; @@ -281,7 +267,7 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements Collections.singleton(new AccountGroupIncludeAudit(m, getAccountId()))); db.accountGroupIncludes().insert(Collections.singleton(m)); - groupIncludeCache.evictInclude(a.getId()); + groupIncludeCache.evictInclude(a.getGroupUUID()); } return groupDetailFactory.create(groupId).call(); @@ -361,6 +347,7 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements } final Account.Id me = getAccountId(); + final Set<AccountGroup.Id> groupsToEvict = new HashSet<AccountGroup.Id>(); for (final AccountGroupInclude.Key k : keys) { final AccountGroupInclude m = db.accountGroupIncludes().get(k); @@ -385,9 +372,12 @@ class GroupAdminServiceImpl extends BaseServiceImplementation implements Collections.singleton(audit)); } db.accountGroupIncludes().delete(Collections.singleton(m)); - groupIncludeCache.evictInclude(m.getIncludeId()); + groupsToEvict.add(k.getIncludeId()); } } + for (AccountGroup group : db.accountGroups().get(groupsToEvict)) { + groupIncludeCache.evictInclude(group.getGroupUUID()); + } return VoidResult.INSTANCE; } }); |