// 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;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.authentication.SecureWriteOperation;
import fitnesse.http.ChunkedResponse;
import fitnesse.html.template.HtmlPage;
import fitnesse.html.template.PageTitle;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiImportProperty;
import fitnesse.wiki.WikiPage;
public class WikiImportingResponder extends ChunkingResponder implements SecureResponder {
private final WikiImporter importer;
public PageData data;
private WikiImportingTraverser wikiImportingTraverser;
public WikiImportingResponder() {
this(new WikiImporter());
}
public WikiImportingResponder(WikiImporter wikiImporter) {
this.importer = wikiImporter;
}
public static void handleImportProperties(HtmlPage html, WikiPage page) {
PageData pageData = page.getData();
if (WikiImportProperty.isImportedSubWiki(pageData)) {
html.setBodyClass("imported");
WikiImportProperty importProperty = WikiImportProperty.createFrom(pageData.getProperties());
html.put("sourceUrl", importProperty.getSourceUrl());
}
}
@Override
protected void doSending() throws Exception {
data = page.getData();
wikiImportingTraverser = initializeImporter();
HtmlPage htmlPage = makeHtml();
htmlPage.render(response.getWriter());
response.close();
}
public WikiImportingTraverser initializeImporter() throws Exception {
String remoteUrl = request.getInput("remoteUrl");
setRemoteUserCredentialsOnImporter(importer);
importer.setAutoUpdateSetting(request.hasInput("autoUpdate"));
return new WikiImportingTraverser(importer, page, remoteUrl);
}
private void setRemoteUserCredentialsOnImporter(WikiImporter importer) {
if (request.hasInput("remoteUsername"))
importer.setRemoteUsername(request.getInput("remoteUsername"));
if (request.hasInput("remotePassword"))
importer.setRemotePassword(request.getInput("remotePassword"));
}
private HtmlPage makeHtml() throws Exception {
HtmlPage html = context.pageFactory.newPage();
String title = "Wiki Import";
if (wikiImportingTraverser.isUpdate())
title += " Update";
String localPathName = PathParser.render(path);
html.setTitle(title + ": " + localPathName);
html.setPageTitle(new PageTitle(title, path));
html.setMainTemplate("wikiImportingPage");
html.put("isUpdate", wikiImportingTraverser.isUpdate());
String pageName = PathParser.render(path);
html.put("pageName", pageName);
html.put("remoteUrl", importer.remoteUrl());
html.put("importer", importer);
html.put("PathParser", PathParser.class);
html.put("importTraverser", wikiImportingTraverser);
return html;
}
@Override
protected PageCrawler getPageCrawler() {
return root.getPageCrawler();
}
public void setResponse(ChunkedResponse response) {
this.response = response;
}
@Override
public SecureOperation getSecureOperation() {
return new SecureWriteOperation();
}
}