/** * 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(); }
/** 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; }