// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.responders.versions;
import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.html.HtmlTag;
import fitnesse.html.HtmlUtil;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.responders.ErrorResponder;
import fitnesse.responders.NotFoundResponder;
import fitnesse.responders.templateUtilities.HtmlPage;
import fitnesse.responders.templateUtilities.PageTitle;
import fitnesse.wiki.*;
public class VersionResponder implements SecureResponder {
private String version;
private String resource;
public Response makeResponse(FitNesseContext context, Request request) {
resource = request.getResource();
version = (String) request.getInput("version");
if (version == null)
return new ErrorResponder("No version specified.").makeResponse(context, request);
PageCrawler pageCrawler = context.root.getPageCrawler();
WikiPagePath path = PathParser.parse(resource);
WikiPage page = pageCrawler.getPage(context.root, path);
if (page == null)
return new NotFoundResponder().makeResponse(context, request);
String fullPathName = PathParser.render(pageCrawler.getFullPath(page));
HtmlPage html = makeHtml(fullPathName, page, context);
SimpleResponse response = new SimpleResponse();
response.setContent(html.html());
return response;
}
private HtmlPage makeHtml(String name, WikiPage page, FitNesseContext context) {
PageData pageData = page.getDataVersion(version);
HtmlPage html = context.pageFactory.newPage();
html.setTitle("Version " + version + ": " + name);
html.setPageTitle(new PageTitle("Version " + version, PathParser.parse(resource)));
// TODO: subclass actions for specific rollback behaviour.
html.setNavTemplate("versionNav.vm");
html.put("rollbackVersion", version);
html.put("localPath", name);
html.setMainTemplate("wikiPage");
html.put("content", new VersionRenderer(pageData));
return html;
}
public SecureOperation getSecureOperation() {
return new SecureReadOperation();
}
public class VersionRenderer {
private PageData pageData;
public VersionRenderer(PageData pageData) {
super();
this.pageData = pageData;
}
public String render() {
return HtmlUtil.makeNormalWikiPageContent(pageData);
}
}
}