package fitnesse.revisioncontrol.responders;
import fitnesse.responders.NotFoundResponder;
import fitnesse.responders.BasicResponder;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.AlwaysSecureOperation;
import fitnesse.http.Response;
import fitnesse.http.Request;
import fitnesse.http.SimpleResponse;
import fitnesse.FitNesseContext;
import fitnesse.revisioncontrol.State;
import fitnesse.revisioncontrol.RevisionControllable;
import fitnesse.revisioncontrol.RevisionControlOperation;
import fitnesse.html.*;
import fitnesse.wiki.WikiPagePath;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
public class RevisionsResponder extends BasicResponder {
private static final String TITLE = "Revision Control";
private String resource;
public SecureOperation getSecureOperation() {
return new AlwaysSecureOperation();
}
public Response makeResponse(FitNesseContext context, Request request) throws Exception {
resource = request.getResource();
WikiPagePath path = PathParser.parse(resource);
WikiPage page = context.root.getPageCrawler().getPage(context.root, path);
if (page == null) {
return new NotFoundResponder().makeResponse(context, request);
}
SimpleResponse response = new SimpleResponse();
response.setContent(makeHtml(context, page).html());
return response;
}
protected HtmlElement makeHtml(FitNesseContext context, WikiPage wikiPage) throws Exception {
HtmlPage htmlPage = context.htmlPageFactory.newPage();
htmlPage.title.use(TITLE + ": " + resource);
htmlPage.header.use(HtmlUtil.makeBreadCrumbsWithPageType(resource, TITLE));
htmlPage.main.use(makePageHtml(wikiPage));
return htmlPage;
}
protected HtmlTag makePageHtml(WikiPage wikiPage) {
TagGroup group = new TagGroup();
final State state = ((RevisionControllable) wikiPage).getState();
final RevisionControlOperation[] operations = state.operations();
for (final RevisionControlOperation operation : operations) {
group.add(operation.makeHtml(resource));
}
return group;
}
}