public PagedResult<Repository> readRepositories(String source) throws ReviewboardException {

    try {
      JSONObject rootObject = checkedGetJSonRootObject(source);

      int totalResults = rootObject.getInt("total_results");

      JSONArray jsonRepositories = rootObject.getJSONArray("repositories");

      List<Repository> repositories = new ArrayList<Repository>();

      for (int i = 0; i < jsonRepositories.length(); i++) {

        JSONObject jsonRepository = jsonRepositories.getJSONObject(i);

        Repository repository = new Repository();
        repository.setId(jsonRepository.getInt("id"));
        repository.setName(jsonRepository.getString("name"));
        repository.setTool(RepositoryType.fromDisplayName(jsonRepository.getString("tool")));
        repository.setPath(jsonRepository.getString("path"));

        repositories.add(repository);
      }

      return PagedResult.create(repositories, totalResults);
    } catch (JSONException e) {
      throw new ReviewboardException(e.getMessage(), e);
    }
  }