}
}
protected final void process( FederatedRequest forked ) {
// Determine whether this is a single mirror request ...
Request original = forked.original();
ProjectedRequest projectedRequest = forked.getFirstProjectedRequest();
boolean sameLocation = projectedRequest != null && !projectedRequest.hasNext() && projectedRequest.isSameLocation();
// Set the cachable information ...
if (original instanceof CacheableRequest) {
CacheableRequest cacheableOriginal = (CacheableRequest)original;
cacheableOriginal.setCachePolicy(getDefaultCachePolicy());
while (projectedRequest != null) {
Request requestToSource = projectedRequest.getRequest();
if (cacheableOriginal != null) {
setCacheableInfo(cacheableOriginal, ((CacheableRequest)requestToSource).getCachePolicy());
}
projectedRequest = projectedRequest.next();
}
}
// Now do the join on this request ...
if (sameLocation) {
Request sourceRequest = forked.getFirstProjectedRequest().getRequest();
if (sourceRequest.hasError()) {
original.setError(sourceRequest.getError());
} else if (sourceRequest.isCancelled()) {
original.cancel();
}
mirrorProcessor.setFederatedRequest(forked);
mirrorProcessor.process(original);
} else {