public Response apply()

in src/main/java/com/googlesource/gerrit/plugins/replicationstatus/ReplicationStatusAction.java [56:94]


  public Response<ProjectReplicationStatus> apply(ReplicationStatusProjectRemoteResource resource)
      throws AuthException, PermissionBackendException, BadRequestException,
          ResourceConflictException, IOException {

    Project.NameKey projectNameKey = resource.getProjectNameKey();
    String remoteURL = resource.getRemoteUrl();

    checkIsOwnerOrAdmin(projectNameKey);

    ProjectReplicationStatus.ProjectReplicationStatusResult overallStatus =
        ProjectReplicationStatus.ProjectReplicationStatusResult.OK;
    Map<String, RemoteReplicationStatus> remoteStatuses = new HashMap<>();
    try (Repository git = repoManager.openRepository(projectNameKey)) {

      Map<String, ReplicationStatus> refStatuses = new HashMap<>();
      for (Ref r : git.getRefDatabase().getRefs()) {
        ReplicationStatus replicationStatus =
            replicationStatusCache.getIfPresent(
                ReplicationStatus.Key.create(projectNameKey, remoteURL, r.getName()));

        if (replicationStatus != null) {
          refStatuses.put(r.getName(), replicationStatus);
          if (replicationStatus.isFailure()) {
            overallStatus = ProjectReplicationStatus.ProjectReplicationStatusResult.FAILED;
          }
        }
      }
      remoteStatuses.put(remoteURL, RemoteReplicationStatus.create(refStatuses));

      ProjectReplicationStatus projectStatus =
          ProjectReplicationStatus.create(remoteStatuses, overallStatus, projectNameKey.get());

      return Response.ok(projectStatus);

    } catch (RepositoryNotFoundException e) {
      throw new BadRequestException(
          String.format("Project %s does not exist", projectNameKey.get()));
    }
  }