Example #1
0
  /**
   * Returns the first OK response from member repositories or {@link HttpResponses#notFound()} if
   * none of the members responded with OK.
   */
  protected Response getFirst(
      final @Nonnull Request request,
      final @Nonnull List<Repository> members,
      final @Nonnull DispatchedRepositories dispatched)
      throws Exception {
    for (Repository member : members) {
      log.trace("Trying member: {}", member);
      // track repositories we have dispatched to, prevent circular dispatch for nested groups
      if (dispatched.contains(member)) {
        log.trace("Skipping already dispatched member: {}", member);
        continue;
      }
      dispatched.add(member);

      final ViewFacet view = member.facet(ViewFacet.class);
      final Response response = view.dispatch(request);
      if (response.getStatus().isSuccessful()) {
        return response;
      }
    }
    return HttpResponses.notFound();
  }
Example #2
0
  /** Returns all responses from all members as a linked map, where order is group member order. */
  protected LinkedHashMap<Repository, Response> getAll(
      final @Nonnull Request request,
      final @Nonnull List<Repository> members,
      final @Nonnull DispatchedRepositories dispatched)
      throws Exception {
    final LinkedHashMap<Repository, Response> responses = Maps.newLinkedHashMap();
    for (Repository member : members) {
      log.trace("Trying member: {}", member);
      // track repositories we have dispatched to, prevent circular dispatch for nested groups
      if (dispatched.contains(member)) {
        log.trace("Skipping already dispatched member: {}", member);
        continue;
      }
      dispatched.add(member);

      final ViewFacet view = member.facet(ViewFacet.class);
      final Response response = view.dispatch(request);

      responses.put(member, response);
    }
    return responses;
  }