summaryrefslogtreecommitdiffstats
path: root/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java
diff options
context:
space:
mode:
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.java76
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;
}
});