Dissolve gerrit-server top-level directory
Change-Id: I538512dfe0f1bea774c01fdd45fa410a45634011
This commit is contained in:
committed by
Dave Borowitz
parent
472396c797
commit
376a7bbb64
108
java/com/google/gerrit/server/account/InternalGroupBackend.java
Normal file
108
java/com/google/gerrit/server/account/InternalGroupBackend.java
Normal file
@@ -0,0 +1,108 @@
|
||||
// Copyright (C) 2012 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.account;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.gerrit.common.data.GroupDescription;
|
||||
import com.google.gerrit.common.data.GroupReference;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
import com.google.gerrit.server.group.InternalGroup;
|
||||
import com.google.gerrit.server.group.InternalGroupDescription;
|
||||
import com.google.gerrit.server.group.db.Groups;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.SchemaFactory;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import java.util.Collection;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
|
||||
/** Implementation of GroupBackend for the internal group system. */
|
||||
@Singleton
|
||||
public class InternalGroupBackend implements GroupBackend {
|
||||
private final GroupControl.Factory groupControlFactory;
|
||||
private final GroupCache groupCache;
|
||||
private final Groups groups;
|
||||
private final SchemaFactory<ReviewDb> schema;
|
||||
private final IncludingGroupMembership.Factory groupMembershipFactory;
|
||||
|
||||
@Inject
|
||||
InternalGroupBackend(
|
||||
GroupControl.Factory groupControlFactory,
|
||||
GroupCache groupCache,
|
||||
Groups groups,
|
||||
SchemaFactory<ReviewDb> schema,
|
||||
IncludingGroupMembership.Factory groupMembershipFactory) {
|
||||
this.groupControlFactory = groupControlFactory;
|
||||
this.groupCache = groupCache;
|
||||
this.groups = groups;
|
||||
this.schema = schema;
|
||||
this.groupMembershipFactory = groupMembershipFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handles(AccountGroup.UUID uuid) {
|
||||
// See AccountGroup.isInternalGroup
|
||||
return ObjectId.isId(uuid.get()); // [0-9a-f]{40};
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupDescription.Internal get(AccountGroup.UUID uuid) {
|
||||
if (!handles(uuid)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return groupCache.get(uuid).map(InternalGroupDescription::new).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<GroupReference> suggest(String name, ProjectState project) {
|
||||
try (ReviewDb db = schema.open()) {
|
||||
return groups
|
||||
.getAll(db)
|
||||
// TODO(aliceks): Filter the groups by name before loading them (if possible with NoteDb).
|
||||
.filter(group -> startsWithIgnoreCase(group, name))
|
||||
.map(InternalGroupDescription::new)
|
||||
.filter(this::isVisible)
|
||||
.map(GroupReference::forGroup)
|
||||
.collect(toList());
|
||||
} catch (OrmException e) {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean startsWithIgnoreCase(InternalGroup group, String name) {
|
||||
return group.getName().regionMatches(true, 0, name, 0, name.length());
|
||||
}
|
||||
|
||||
private boolean isVisible(GroupDescription.Internal group) {
|
||||
return groupControlFactory.controlFor(group).isVisible();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupMembership membershipsOf(IdentifiedUser user) {
|
||||
return groupMembershipFactory.create(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisibleToAll(AccountGroup.UUID uuid) {
|
||||
GroupDescription.Internal g = get(uuid);
|
||||
return g != null && g.isVisibleToAll();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user