Package fitnesse.responders.editing

Source Code of fitnesse.responders.editing.EditResponder

// 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.editing;

import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
import fitnesse.authentication.SecureResponder;
import fitnesse.html.HtmlUtil;
import fitnesse.http.Request;
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.html.template.HtmlPage;
import fitnesse.html.template.PageTitle;
import fitnesse.wiki.MockingPageCrawler;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPagePath;

public class EditResponder implements SecureResponder {
  public static final String CONTENT_INPUT_NAME = "pageContent";
  public static final String TIME_STAMP = "editTime";
  public static final String TICKET_ID = "ticketId";
  public static final String HELP_TEXT = "helpText";
  public static final String SUITES = "suites";
  public static final String PAGE_TYPE = "pageType";
  public static final String PAGE_NAME = "pageName";
  public static final String TEMPLATE_MAP = "templateMap";

  protected String content;
  protected WikiPage page;
  protected WikiPage root;
  protected PageData pageData;
  protected Request request;

  public EditResponder() {
  }

  public Response makeResponse(FitNesseContext context, Request request) {
    boolean nonExistent = request.hasInput("nonExistent");
    return doMakeResponse(context, request, nonExistent);
  }

  public Response makeResponseForNonExistentPage(FitNesseContext context, Request request) {
    return doMakeResponse(context, request, true);
  }

  protected Response doMakeResponse(FitNesseContext context, Request request, boolean firstTimeForNewPage) {
    initializeResponder(context.root, request);

    SimpleResponse response = new SimpleResponse();
    String resource = request.getResource();
    WikiPagePath path = PathParser.parse(resource);
    PageCrawler crawler = context.root.getPageCrawler();

    page = crawler.getPage(path, new MockingPageCrawler());
    pageData = page.getData();
    content = createPageContent();

    String html = doMakeHtml(resource, context, firstTimeForNewPage);

    response.setContent(html);
    response.setMaxAge(0);

    return response;
  }


  protected void initializeResponder(WikiPage root, Request request) {
    this.root = root;
    this.request = request;
  }

  protected String createPageContent() {
    return pageData.getContent();
  }

  private String doMakeHtml(String resource, FitNesseContext context, boolean firstTimeForNewPage) {
    HtmlPage html = context.pageFactory.newPage();
    String title = firstTimeForNewPage ? "Page doesn't exist. Edit: " : "Edit: ";
    html.setTitle(title + resource);

    html.setPageTitle(new PageTitle(title + " Page:", PathParser.parse(resource), pageData.getAttribute(PageData.PropertySUITES)));
    html.setMainTemplate("editPage");
    makeEditForm(html, resource, firstTimeForNewPage, NewPageResponder.getDefaultContent(page));

    return html.html();
  }

  private void makeEditForm(HtmlPage html, String resource, boolean firstTimeForNewPage, String defaultNewPageContent) {
    html.put("resource", resource);
    html.put(TIME_STAMP, String.valueOf(SaveRecorder.timeStamp()));
    html.put(TICKET_ID, String.valueOf(SaveRecorder.newTicket()));

    if (request.hasInput("redirectToReferer") && request.hasHeader("Referer")) {
      String redirectUrl = request.getHeader("Referer").toString();
      int questionMarkIndex = redirectUrl.indexOf("?");
      if (questionMarkIndex > 0)
        redirectUrl = redirectUrl.substring(0, questionMarkIndex);
      redirectUrl += "?" + request.getInput("redirectAction").toString();
      html.put("redirect", redirectUrl);
    }

    html.put(HELP_TEXT, pageData.getAttribute(PageData.PropertyHELP));
    html.put(TEMPLATE_MAP, TemplateUtil.getTemplateMap(page));
    html.put("suites", pageData.getAttribute(PageData.PropertySUITES));
    html.put(CONTENT_INPUT_NAME, HtmlUtil.escapeHTML(firstTimeForNewPage ? defaultNewPageContent : content));
  }

  public SecureOperation getSecureOperation() {
    return new SecureReadOperation();
  }
}
TOP

Related Classes of fitnesse.responders.editing.EditResponder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.