diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java | 76 |
1 files changed, 39 insertions, 37 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java index 577c5af92a..4d8e806bbe 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeQueryBuilder.java @@ -15,26 +15,27 @@ package com.google.gerrit.server.query.change; import com.google.gerrit.common.data.ApprovalTypes; -import com.google.gerrit.reviewdb.Account; -import com.google.gerrit.reviewdb.AccountGroup; -import com.google.gerrit.reviewdb.Change; -import com.google.gerrit.reviewdb.Project; -import com.google.gerrit.reviewdb.RevId; -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.Change; +import com.google.gerrit.reviewdb.client.Project; +import com.google.gerrit.reviewdb.client.RevId; +import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.account.AccountResolver; +import com.google.gerrit.server.account.CapabilityControl; import com.google.gerrit.server.account.GroupCache; -import com.google.gerrit.server.config.AuthConfig; -import com.google.gerrit.server.config.WildProjectName; +import com.google.gerrit.server.config.AllProjectsName; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.project.ChangeControl; +import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.query.IntPredicate; import com.google.gerrit.server.query.Predicate; import com.google.gerrit.server.query.QueryBuilder; import com.google.gerrit.server.query.QueryParseException; -import com.google.gwtorm.client.OrmException; +import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; @@ -98,39 +99,43 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { final Provider<ReviewDb> dbProvider; final Provider<ChangeQueryRewriter> rewriter; final IdentifiedUser.GenericFactory userFactory; + final CapabilityControl.Factory capabilityControlFactory; final ChangeControl.Factory changeControlFactory; final ChangeControl.GenericFactory changeControlGenericFactory; final AccountResolver accountResolver; final GroupCache groupCache; - final AuthConfig authConfig; final ApprovalTypes approvalTypes; - final Project.NameKey wildProjectName; + final AllProjectsName allProjectsName; final PatchListCache patchListCache; final GitRepositoryManager repoManager; + final ProjectCache projectCache; @Inject Arguments(Provider<ReviewDb> dbProvider, Provider<ChangeQueryRewriter> rewriter, IdentifiedUser.GenericFactory userFactory, + CapabilityControl.Factory capabilityControlFactory, ChangeControl.Factory changeControlFactory, ChangeControl.GenericFactory changeControlGenericFactory, AccountResolver accountResolver, GroupCache groupCache, - AuthConfig authConfig, ApprovalTypes approvalTypes, - @WildProjectName Project.NameKey wildProjectName, + ApprovalTypes approvalTypes, + AllProjectsName allProjectsName, PatchListCache patchListCache, - GitRepositoryManager repoManager) { + GitRepositoryManager repoManager, + ProjectCache projectCache) { this.dbProvider = dbProvider; this.rewriter = rewriter; this.userFactory = userFactory; + this.capabilityControlFactory = capabilityControlFactory; this.changeControlFactory = changeControlFactory; this.changeControlGenericFactory = changeControlGenericFactory; this.accountResolver = accountResolver; this.groupCache = groupCache; - this.authConfig = authConfig; this.approvalTypes = approvalTypes; - this.wildProjectName = wildProjectName; + this.allProjectsName = allProjectsName; this.patchListCache = patchListCache; this.repoManager = repoManager; + this.projectCache = projectCache; } } @@ -340,17 +345,18 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { // AccountGroup g = args.groupCache.get(new AccountGroup.NameKey(who)); if (g != null) { - return visibleto(new SingleGroupUser(args.authConfig, g.getId())); + return visibleto(new SingleGroupUser(args.capabilityControlFactory, + g.getGroupUUID())); } Collection<AccountGroup> matches = args.groupCache.get(new AccountGroup.ExternalNameKey(who)); if (matches != null && !matches.isEmpty()) { - HashSet<AccountGroup.Id> ids = new HashSet<AccountGroup.Id>(); + HashSet<AccountGroup.UUID> ids = new HashSet<AccountGroup.UUID>(); for (AccountGroup group : matches) { - ids.add(group.getId()); + ids.add(group.getGroupUUID()); } - return visibleto(new SingleGroupUser(args.authConfig, ids)); + return visibleto(new SingleGroupUser(args.capabilityControlFactory, ids)); } throw error("No user or group matches \"" + who + "\"."); @@ -391,7 +397,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { if (g == null) { throw error("Group " + group + " not found"); } - return new OwnerinPredicate(args.dbProvider, args.userFactory, g.getId()); + return new OwnerinPredicate(args.dbProvider, args.userFactory, g.getGroupUUID()); } @Operator @@ -419,7 +425,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { if (g == null) { throw error("Group " + group + " not found"); } - return new ReviewerinPredicate(args.dbProvider, args.userFactory, g.getId()); + return new ReviewerinPredicate(args.dbProvider, args.userFactory, g.getGroupUUID()); } @Operator @@ -508,23 +514,19 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData> { // Try to match a project name by substring query. final List<ProjectPredicate> predicate = new ArrayList<ProjectPredicate>(); - try { - for (final Project p : args.dbProvider.get().projects().all()) { - if (p.getName().toLowerCase().contains(query.toLowerCase())) { - predicate.add(new ProjectPredicate(args.dbProvider, p.getName())); - } + for (Project.NameKey name : args.projectCache.all()) { + if (name.get().toLowerCase().contains(query.toLowerCase())) { + predicate.add(new ProjectPredicate(args.dbProvider, name.get())); } + } - // If two or more projects contains "query" as substring create an - // OrPredicate holding predicates for all these projects, otherwise if - // only one contains that, return only that one predicate by itself. - if (predicate.size() == 1) { - return predicate.get(0); - } else if (predicate.size() > 1) { - return Predicate.or(predicate); - } - } catch (OrmException e) { - throw error("Cannot lookup project.", e); + // If two or more projects contains "query" as substring create an + // OrPredicate holding predicates for all these projects, otherwise if + // only one contains that, return only that one predicate by itself. + if (predicate.size() == 1) { + return predicate.get(0); + } else if (predicate.size() > 1) { + return Predicate.or(predicate); } throw error("Unsupported query:" + query); |