package fitnesse.responders.testHistory;
import java.io.File;
import fitnesse.FitNesseContext;
import fitnesse.authentication.AlwaysSecureOperation;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.reporting.history.HistoryPurger;
import fitnesse.responders.ErrorResponder;
public class PurgeHistoryResponder implements SecureResponder {
@Override
public Response makeResponse(FitNesseContext context, Request request) throws Exception {
if (hasValidInputs(request)) {
purgeHistory(request, context);
return makeValidResponse();
} else {
return makeErrorResponse(context, request);
}
}
private SimpleResponse makeValidResponse() {
SimpleResponse response = new SimpleResponse();
response.redirect("", "?testHistory");
return response;
}
private void purgeHistory(Request request, FitNesseContext context) {
File resultsDirectory = context.getTestHistoryDirectory();
int days = getDaysInput(request);
deleteTestHistoryOlderThanDays(resultsDirectory, days);
}
public void deleteTestHistoryOlderThanDays(File resultsDirectory, int days) {
new HistoryPurger(resultsDirectory, days).deleteTestHistoryOlderThanDays();
}
private Integer getDaysInput(Request request) {
String daysInput = request.getInput("days");
return parseInt(daysInput);
}
private Integer parseInt(String daysInput) {
try {
return Integer.parseInt(daysInput);
}
catch (Exception e) {
return -1;
}
}
private boolean hasValidInputs(Request request) {
return request.getInput("days") != null && getDaysInput(request) >= 0;
}
private Response makeErrorResponse(FitNesseContext context, Request request) throws Exception {
return new ErrorResponder("Invalid Amount Of Days").makeResponse(context, request);
}
@Override
public SecureOperation getSecureOperation() {
return new AlwaysSecureOperation();
}
}