ResultResponder.java :  » Wiki-Engine » fitnesse » fitnesse » responders » search » Java Open Source

Java Open Source » Wiki Engine » fitnesse 
fitnesse » fitnesse » responders » search » ResultResponder.java
// Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the GNU General Public License version 2 or later.
package fitnesse.responders.search;

import fitnesse.html.*;
import fitnesse.components.SearchObserver;
import fitnesse.wiki.*;
import fitnesse.responders.*;
import fitnesse.authentication.*;

public abstract class ResultResponder extends ChunkingResponder implements SearchObserver, SecureResponder
{
  private int hits = 0;

  protected PageCrawler getPageCrawler()
  {
    return root.getPageCrawler();
  }

  protected void doSending() throws Exception
  {
    HtmlPage page = context.htmlPageFactory.newPage();
    String renderedPath = getRenderedPath();
    page.title.use(getTitle() + ": " + renderedPath);
    page.header.use(HtmlUtil.makeBreadCrumbsWithPageType(renderedPath, getTitle()));
    page.main.use(HtmlPage.BreakPoint);
    page.divide();

    response.add(page.preDivision);
    response.add(buildClientSideSortScriptTag().html());
    response.add(buildFeedbackDiv().html());
    response.add(getTableOpen());
    response.add(buildHeaderRow().html());
    response.add(getTbodyOpen());
    startSearching();
    response.add(getTbodyClose());
    response.add(getTableClose());
    response.add(buildTableSorterScript().html());
    response.add(buildFeedbackModificationScript().html());
    response.add(page.postDivision);
    response.closeAll();
  }

  private String getTbodyClose()
  {
    return "</tbody>";
  }

  private String getTbodyOpen()
  {
    return "<tbody>";
  }

  private HtmlTag buildClientSideSortScriptTag()
  {
    HtmlTag tag = new HtmlTag("script");
    tag.addAttribute("src", "/files/javascript/clientSideSort.js");
    tag.add(" ");
    return tag;
  }

  private String getTableClose()
  {
    return ChunkedResultsListingUtil.getTableCloseHtml();
  }

  private String getTableOpen()
  {
    return ChunkedResultsListingUtil.getTableOpenHtml("searchResultsTable");
  }

  private HtmlTag buildFeedbackModificationScript() throws Exception
  {
    HtmlTag script = new HtmlTag("script");
    script.addAttribute("language", "javascript");
    script.add("document.getElementById(\"feedback\").innerHTML = '" + getPageFooterInfo(hits) + "'");
    return script;
  }

  private HtmlTag buildTableSorterScript() throws Exception
  {
    HtmlTag script = new HtmlTag("script");
    script.addAttribute("language", "javascript");
    script.add("tableSorter = new TableSorter('searchResultsTable', new DateParser(" + getDateFormatJavascriptRegex() + ",8,2,3,4,5,6));");
    return script;
  }

  public static String getDateFormatJavascriptRegex()
  {
    return "/^(\\w+) (jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec) (\\d+) (\\d+).(\\d+).(\\d+) (\\w+) (\\d+)$/";
  }

  private HtmlTag buildHeaderRow()
  {
    HtmlTag thead = new HtmlTag("thead");
    HtmlTag headerRow = new HtmlTag("tr");
    headerRow.add(buildPageColumnHeader());
    headerRow.add(buildLastModifiedColumnHeader());
    thead.add(headerRow);
    return thead;
  }

  private HtmlTag buildLastModifiedColumnHeader()
  {
    HtmlTag lastModifiedColumnHeader = new HtmlTag("td", buildSortLink("LastModified", "1, 'date'"));
    lastModifiedColumnHeader.addAttribute("class", "resultsHeader");
    return lastModifiedColumnHeader;
  }

  private HtmlTag buildPageColumnHeader()
  {
    HtmlTag pageColumnHeader = new HtmlTag("td", buildSortLink("Page", "0"));
    pageColumnHeader.addAttribute("class", "resultsHeader");
    return pageColumnHeader;
  }

  private HtmlTag buildSortLink(String text, String args)
  {
    HtmlTag link = new HtmlTag("a");
    link.addAttribute("href", "javascript:void(tableSorter.sort(" + args + "));");
    link.add(text);
    return link;
  }

  private HtmlTag buildFeedbackDiv()
  {
    HtmlTag feedback = new HtmlTag("div", "Searching...");
    feedback.addAttribute("id", "feedback");
    return feedback;
  }

  public void hit(WikiPage page) throws Exception
  {
    hits++;
    String fullPathName = PathParser.render(getPageCrawler().getFullPath(page));

    HtmlTag row = new HtmlTag("tr");
    row.addAttribute("class", "resultsRow" + getRow());

    HtmlTag link = new HtmlTag("a", fullPathName) ;
    link.addAttribute("href", fullPathName);

    row.add(new HtmlTag("td", link));
    row.add(new HtmlTag("td", "" + page.getData().getProperties().getLastModificationTime()));
    response.add(row.html());
  }

  private int nextRow = 0;

  private int getRow()
  {
    return (nextRow++ % 2) + 1;
  }

  protected abstract String getTitle() throws Exception;


    protected abstract String getPageFooterInfo(int hits) throws Exception;

  protected abstract void startSearching() throws Exception;

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

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.