Package org.jamwiki.servlets

Source Code of org.jamwiki.servlets.ItemsServlet

/**
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, version 2.1, dated February 1999.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the latest version of the GNU Lesser General
* Public License as published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program (LICENSE.txt); if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package org.jamwiki.servlets;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jamwiki.WikiBase;
import org.jamwiki.WikiMessage;
import org.jamwiki.model.SearchResultEntry;
import org.jamwiki.model.Topic;
import org.jamwiki.parser.ParserInput;
import org.jamwiki.parser.ParserOutput;
import org.jamwiki.parser.ParserUtil;
import org.jamwiki.utils.NamespaceHandler;
import org.jamwiki.utils.Pagination;
import org.jamwiki.utils.WikiLogger;
import org.springframework.web.servlet.ModelAndView;

/**
* Used to build Special: pages that display lists of topics on the Wiki, such
* as when displaying lists of all existing images or topics.
*/
public class ItemsServlet extends JAMWikiServlet {

  /** Logger for this class and subclasses. */
  private static final WikiLogger logger = WikiLogger
      .getLogger(ItemsServlet.class.getName());
  /** The name of the JSP file used to render the servlet output. */
  protected static final String JSP_ITEMS = "items.jsp";

  /**
   * This method handles the request after its parent class receives control. It
   * gets the topic's name and the virtual wiki name from the uri, loads the
   * topic and returns a view to the end user.
   *
   * @param request
   *          - Standard HttpServletRequest object.
   * @param response
   *          - Standard HttpServletResponse object.
   * @return A <code>ModelAndView</code> object to be handled by the rest of the
   *         Spring framework.
   */
  protected ModelAndView handleJAMWikiRequest(HttpServletRequest request,
      HttpServletResponse response, ModelAndView next, WikiPageInfo pageInfo)
      throws Exception {
    if (ServletUtil.isTopic(request, "Special:Imagelist")) {
      viewImages(request, next, pageInfo);
    } else if (ServletUtil.isTopic(request, "Special:Filelist")) {
      viewFiles(request, next, pageInfo);
    } else if (ServletUtil.isTopic(request, "Special:Listusers")) {
      viewUsers(request, next, pageInfo);
    } else if (ServletUtil.isTopic(request, "Special:OrphanedPages")) {
      viewOrphanedPages(request, next, pageInfo);
    } else if (ServletUtil.isTopic(request, "Special:TopicsAdmin")) {
      viewTopicsAdmin(request, next, pageInfo);
    } else {
      viewTopics(request, next, pageInfo);
    }
    return next;
  }

  /**
   *
   */
  private void viewFiles(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    String virtualWiki = pageInfo.getVirtualWikiName();
    Pagination pagination = ServletUtil.loadPagination(request, next);
    List<String> items = WikiBase.getDataHandler().lookupTopicByType(
        virtualWiki, Topic.TYPE_FILE, Topic.TYPE_FILE, pagination);
    next.addObject("itemCount", items.size());
    next.addObject("items", items);
    next.addObject("rootUrl", "Special:Filelist");
    pageInfo.setPageTitle(new WikiMessage("allfiles.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }

  /**
   *
   */
  private void viewOrphanedPages(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    String virtualWiki = pageInfo.getVirtualWikiName();
    Pagination pagination = ServletUtil.loadPagination(request, next);
    Set<String> allItems = new TreeSet<String>();
    List<String> unlinkedTopics = WikiBase.getDataHandler().getAllTopicNames(
        virtualWiki);
    Topic topic;
    List<SearchResultEntry> topicLinks = null;
    ParserInput parserInput;
    ParserOutput parserOutput;
    for (String topicName : unlinkedTopics) {
      topic = WikiBase.getDataHandler().lookupTopic(virtualWiki, topicName,
          true, null);
      if (topic == null) {
        logger.warning("No topic found: " + virtualWiki + " / " + topicName);
        continue;
      }
      if (topic.getTopicType() != Topic.TYPE_ARTICLE) {
        continue;
      }
      // only mark them orphaned if there is neither category defined in it, nor
      // a link to it!
      // topicLinks = WikiBase.getSearchEngine().findLinkedTo(virtualWiki,
      // topicName);
      if (topicLinks == null || !topicLinks.isEmpty()) {
        continue;
      }
      parserInput = new ParserInput();
      parserInput.setContext(request.getContextPath());
      parserInput.setLocale(request.getLocale());
      parserInput.setWikiUser(ServletUtil.currentWikiUser());
      parserInput.setTopicName(topicName);
      parserInput.setUserDisplay(ServletUtil.getIpAddress(request));
      parserInput.setVirtualWiki(virtualWiki);
      parserInput.setAllowSectionEdit(false);
      parserOutput = new ParserOutput();
      ParserUtil.parse(parserInput, parserOutput, topic.getTopicContent());
      if (parserOutput.getCategories().size() == 0) {
        allItems.add(topic.getName());
      }
    }
    // FIXME - this is a nasty hack until data can be retrieved properly for
    // pagination
    Set<String> items = new TreeSet<String>();
    int count = 0;
    for (String topicName : allItems) {
      count++;
      if (count < (pagination.getOffset() + 1)) {
        continue;
      }
      if (count > (pagination.getOffset() + pagination.getNumResults())) {
        break;
      }
      items.add(topicName);
    }
    next.addObject("itemCount", items.size());
    next.addObject("items", items);
    next.addObject("rootUrl", "Special:OrphanedPages");
    pageInfo.setPageTitle(new WikiMessage("orphaned.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }

  /**
   *
   */
  private void viewUsers(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    Pagination pagination = ServletUtil.loadPagination(request, next);
    List<String> items = WikiBase.getDataHandler().lookupWikiUsers(pagination);
    List<String> links = new ArrayList<String>();
    for (String link : items) {
      links.add(NamespaceHandler.NAMESPACE_USER
          + NamespaceHandler.NAMESPACE_SEPARATOR + link);
    }
    next.addObject("itemCount", items.size());
    next.addObject("items", links);
    next.addObject("rootUrl", "Special:Listusers");
    pageInfo.setPageTitle(new WikiMessage("allusers.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }

  /**
   *
   */
  private void viewImages(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    String virtualWiki = pageInfo.getVirtualWikiName();
    Pagination pagination = ServletUtil.loadPagination(request, next);
    List<String> items = WikiBase.getDataHandler().lookupTopicByType(
        virtualWiki, Topic.TYPE_IMAGE, Topic.TYPE_IMAGE, pagination);
    next.addObject("itemCount", items.size());
    next.addObject("items", items);
    next.addObject("rootUrl", "Special:Imagelist");
    pageInfo.setPageTitle(new WikiMessage("allimages.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }

  /**
   *
   */
  private void viewTopics(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    String virtualWiki = pageInfo.getVirtualWikiName();
    Pagination pagination = ServletUtil.loadPagination(request, next);
    List<String> items = WikiBase.getDataHandler().lookupTopicByType(
        virtualWiki, Topic.TYPE_ARTICLE, Topic.TYPE_TEMPLATE, pagination);
    next.addObject("itemCount", items.size());
    next.addObject("items", items);
    next.addObject("rootUrl", "Special:Allpages");
    pageInfo.setPageTitle(new WikiMessage("alltopics.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }

  /**
   *
   */
  private void viewTopicsAdmin(HttpServletRequest request, ModelAndView next,
      WikiPageInfo pageInfo) throws Exception {
    String virtualWiki = pageInfo.getVirtualWikiName();
    Pagination pagination = ServletUtil.loadPagination(request, next);
    List<String> items = WikiBase.getDataHandler().getTopicsAdmin(virtualWiki,
        pagination);
    next.addObject("itemCount", items.size());
    next.addObject("items", items);
    next.addObject("rootUrl", "Special:TopicsAdmin");
    pageInfo.setPageTitle(new WikiMessage("topicsadmin.title"));
    pageInfo.setContentJsp(JSP_ITEMS);
    pageInfo.setSpecial(true);
  }
}
TOP

Related Classes of org.jamwiki.servlets.ItemsServlet

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.