Show the approval rights for a project in the project admin screen

This way its clear what rights have been granted out on this project
to any existing groups.

If the right isn't given to the magic wildcard project then the right
can be deleted from the project.  Wildcard rights must be managed by
the site administrators only, and may initially only be available from
within the raw database.

Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce
2009-01-03 14:57:28 -08:00
parent a26dc96cf8
commit d0207f556a
15 changed files with 376 additions and 16 deletions

View File

@@ -19,6 +19,7 @@ import com.google.gerrit.client.admin.ProjectDetail;
import com.google.gerrit.client.reviewdb.Account;
import com.google.gerrit.client.reviewdb.AccountGroup;
import com.google.gerrit.client.reviewdb.Project;
import com.google.gerrit.client.reviewdb.ProjectRight;
import com.google.gerrit.client.reviewdb.ReviewDb;
import com.google.gerrit.client.rpc.BaseServiceImplementation;
import com.google.gerrit.client.rpc.NoSuchEntityException;
@@ -28,9 +29,12 @@ import com.google.gwtjsonrpc.client.VoidResult;
import com.google.gwtorm.client.OrmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ProjectAdminServiceImpl extends BaseServiceImplementation
implements ProjectAdminService {
@@ -116,6 +120,33 @@ public class ProjectAdminServiceImpl extends BaseServiceImplementation
});
}
public void deleteRight(final Set<ProjectRight.Key> keys,
final AsyncCallback<VoidResult> callback) {
run(callback, new Action<VoidResult>() {
public VoidResult run(final ReviewDb db) throws OrmException, Failure {
final Set<Project.Id> owned = ids(myOwnedProjects(db));
Boolean amAdmin = null;
for (final ProjectRight.Key k : keys) {
if (!owned.contains(k.getProjectId())) {
if (amAdmin == null) {
amAdmin = groupCache.isAdministrator(RpcUtil.getAccountId());
}
if (!amAdmin) {
throw new Failure(new NoSuchEntityException());
}
}
}
for (final ProjectRight.Key k : keys) {
final ProjectRight m = db.projectRights().get(k);
if (m != null) {
db.projectRights().delete(Collections.singleton(m));
}
}
return VoidResult.INSTANCE;
}
});
}
private void assertAmProjectOwner(final ReviewDb db,
final Project.Id projectId) throws OrmException, Failure {
final Project project = db.projects().get(projectId);
@@ -139,4 +170,12 @@ public class ProjectAdminServiceImpl extends BaseServiceImplementation
}
return own;
}
private static Set<Project.Id> ids(final Collection<Project> projectList) {
final HashSet<Project.Id> r = new HashSet<Project.Id>();
for (final Project project : projectList) {
r.add(project.getId());
}
return r;
}
}