// 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 java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiImportProperty;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPagePath;
public class ImportAndViewResponder implements SecureResponder, WikiImporterClient {
private static final Logger LOG = Logger.getLogger(ImportAndViewResponder.class.getName());
private WikiPage page;
@Override
public Response makeResponse(FitNesseContext context, Request request) throws Exception {
String resource = request.getResource();
if ("".equals(resource))
resource = "FrontPage";
loadPage(resource, context);
if (page == null)
return new NotFoundResponder().makeResponse(context, request);
loadPageData();
SimpleResponse response = new SimpleResponse();
response.redirect(context.contextRoot, resource);
return response;
}
protected void loadPage(String resource, FitNesseContext context) {
WikiPagePath path = PathParser.parse(resource);
PageCrawler crawler = context.getRootPage().getPageCrawler();
page = crawler.getPage(path);
}
protected void loadPageData() throws IOException {
PageData pageData = page.getData();
WikiImportProperty importProperty = WikiImportProperty.createFrom(pageData.getProperties());
if (importProperty != null) {
WikiImporter importer = new WikiImporter();
importer.setWikiImporterClient(this);
importer.parseUrl(importProperty.getSourceUrl());
importer.importRemotePageContent(page);
}
}
@Override
public void pageImported(WikiPage localPage) {
}
@Override
public void pageImportError(WikiPage localPage, Exception e) {
LOG.log(Level.WARNING, "Page import error", e);
}
@Override
public SecureOperation getSecureOperation() {
return new SecureReadOperation();
}
}