package com.flextrade.jfixture.behaviours.recursion;
import com.flextrade.jfixture.exceptions.ObjectCreationException;
import java.util.Collection;
import java.util.List;
class ThrowingRecursionHandler implements RecursionHandler {
@Override
public Object handleRecursiveRequest(Object request, List<Object> recordedRequests) {
String errorMessage = String.format(
"Unable to create an instance of %s because it contains a circular reference.\n%s",
recordedRequests.get(0), getRecursiveStack(request, recordedRequests));
throw new ObjectCreationException(errorMessage);
}
private String getRecursiveStack(Object request, Collection<Object> requests) {
StringBuilder msg = new StringBuilder();
for (Object r : requests) {
msg.append("\t\t");
msg.append(r.toString());
msg.append(" --> ");
msg.append("\n");
}
msg.append("\t\t");
msg.append(request);
msg.append("\n");
return msg.toString();
}
}