Java tutorial
/** * 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.text.MessageFormat; import java.util.LinkedHashMap; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.jamwiki.Environment; import org.jamwiki.WikiBase; import org.jamwiki.WikiMessage; import org.jamwiki.utils.LinkUtil; import org.jamwiki.utils.NamespaceHandler; import org.jamwiki.utils.WikiLink; import org.jamwiki.utils.WikiLogger; import org.jamwiki.utils.WikiUtil; /** * The <code>WikiPageInfo</code> class provides an object containing common data * used for generating wiki page display. */ public class WikiPageInfo { private static final WikiLogger logger = WikiLogger.getLogger(WikiPageInfo.class.getName()); /** The name of the JSP file used to render the servlet output. */ protected static final String JSP_TOPIC = "topic.jsp"; private boolean admin = false; private String contentJsp = JSP_TOPIC; private WikiMessage pageTitle = null; private String redirectName = null; private String redirectUrl = null; private boolean special = false; private LinkedHashMap tabMenu = new LinkedHashMap(); private String topicName = ""; private LinkedHashMap userMenu = new LinkedHashMap(); private String virtualWikiName = null; /** * */ public WikiPageInfo(HttpServletRequest request) { // TODO get virtual wiki this.virtualWikiName = WikiUtil.getVirtualWikiFromURI(request); if (this.virtualWikiName == null) { logger.severe("No virtual wiki available for page request " + request.getRequestURI()); this.virtualWikiName = WikiBase.DEFAULT_VWIKI; } } /** * Reset all parameters of the current <code>WikiPageInfo</code> object to * default values. */ protected void reset() { this.admin = false; this.contentJsp = JSP_TOPIC; this.pageTitle = null; this.redirectName = null; this.special = false; this.tabMenu = new LinkedHashMap(); this.topicName = ""; this.userMenu = new LinkedHashMap(); } /** * If a page is a part of the admin tool then this method will return * <code>true</code>. * * @return <code>true</code> if a page is part of the admin tool, * <code>false</code> otherwise. */ public boolean getAdmin() { return this.admin; } /** * Set a flag indicating whether or not the page being displayed is a part of * the admin tool. * * @param admin * <code>true</code> if a page is part of the admin tool, * <code>false</code> otherwise. */ public void setAdmin(boolean admin) { this.admin = admin; } /** * Retrieve the name of the JSP page that will be used to display the results * of this page request. * * @return The name of the JSP page that will be used to display the results * of the page request. */ public String getContentJsp() { return this.contentJsp; } /** * Set the JSP page that will display the results of this page request. If no * value is specified then the default is to display the request using the * topic display JSP. * * @param contentJsp * The JSP page that should be used to display the results of the * page request. */ public void setContentJsp(String contentJsp) { this.contentJsp = contentJsp; } /** * Return a description for the current page that can be used in an HTML meta * tag. * * @return A description for the current page that can be used in an HTML meta * tag. */ public String getMetaDescription() { String pattern = Environment.getValue(Environment.PROP_BASE_META_DESCRIPTION); if (StringUtils.isBlank(pattern)) { return ""; } MessageFormat formatter = new MessageFormat(pattern); Object params[] = new Object[1]; params[0] = (this.topicName == null) ? "" : this.topicName; return formatter.format(params); } /** * Return the title for the current page. * * @return The title for the current page. */ public WikiMessage getPageTitle() { return this.pageTitle; } /** * Set the title for the current page. * * @param pageTitle * A <code>WikiMessage</code> object that contains a translatable * page title value. */ public void setPageTitle(WikiMessage pageTitle) { this.pageTitle = pageTitle; } /** * If printable pages should open in a new window then this method will return * the HTML target "_blank", otherwise this method returns an empty String. * * @return The HTML target "_blank" if printable pages should open in a new * window, otherwise an empty String. */ public String getPrintTarget() { return (Environment.getBooleanValue(Environment.PROP_PRINT_NEW_WINDOW)) ? "_blank" : ""; } /** * If the topic currently being displayed is the result of a redirect from * another topic, return the name of the topic that is being redirected from. * * @return The name of the topic being redirected from, or <code>null</code> * if the current page is not the result of a redirect. */ public String getRedirectName() { return this.redirectName; } /** * If the topic currently being displayed is the result of a redirect from * another topic, return the full (relative) URL back to the redirection * topic. * * @return The full (relative) URL of the topic being redirected from, or * <code>null</code> if the current page is not the result of a * redirect. */ public String getRedirectUrl() { return this.redirectUrl; } /** * If the topic currently being displayed is the result of a redirect from * another topic, set the name and full (relative) URL of the topic that is * being redirected from. * * @param redirectUrl * The full (relative) URL of the topic being redirected from, or * <code>null</code> if the current page is not the result of a * redirect. * @param redirectName * The name of the topic being redirected from, or <code>null</code> * if the current page is not the result of a redirect. */ public void setRedirectInfo(String redirectUrl, String redirectName) { this.redirectName = redirectName; this.redirectUrl = redirectUrl; } /** * Return the base title used with RSS feeds. * * @return The base title used with RSS feeds. */ public String getRSSTitle() { return Environment.getValue("rss-title"); } /** * Return the property value set for the site name. This value is appended to * page titles and used in XML exports. * * @return The property value corresponding to the configured name for the * wiki. This value is configurable through the Special:Admin * interface. */ public String getSiteName() { return Environment.getValue(Environment.PROP_SITE_NAME); } /** * Return a flag indicating whether or not the current page is a "Special:" * page, as opposed to a standard topic. * * @return <code>true</code> if the current page is a "Special:" page, * <code>false</code> otherwise. */ public boolean getSpecial() { return this.special; } /** * Set a flag indicating whether or not the current page is a "Special:" page, * as opposed to a standard topic. * * @param special * Set to <code>true</code> if the current page is a "Special:" page, * <code>false</code> otherwise. */ public void setSpecial(boolean special) { this.special = special; } /** * Return the namespace of the topic displayed by the current page. The * namespace is the part of topic name, up to the colon. For regular articles * the namespace is an empty string. * * The namespace cannot be set directly, only the topic name can be set. * * @return The wiki namespace of this page, or an empty string for pages in * the main namespace. * @see #getPagename * @see #getTopicName */ public String getNamespace() { WikiLink wikiLink = LinkUtil.parseWikiLink(this.getTopicName()); return wikiLink.getNamespace(); } /** * Return the name of the current page, which is the name of the topic being * viewed (without the namespace). * * @return Name of the page. */ public String getPagename() { WikiLink wikiLink = LinkUtil.parseWikiLink(this.getTopicName()); return wikiLink.getArticle(); } /** * Return a LinkedHashMap containing the topic and text for all links that * should appear for the tab menu. * * @return A LinkedHashMap containing the topic and text for all links that * should appear for the tab menu. */ public LinkedHashMap getTabMenu() { return this.tabMenu; } /** * Set a LinkedHashMap containing the topic and text for all links that should * appear for the tab menu. * * @param tabMenu * A LinkedHashMap containing the topic and text for all links that * should appear for the tab menu. */ public void setTabMenu(LinkedHashMap tabMenu) { this.tabMenu = tabMenu; } /** * Return the name of the topic being displayed by the current page. * * @return The name of the topic being displayed by the current page. */ public String getTopicName() { return this.topicName; } /** * Set the name of the topic being displayed by the current page. * * @param topicName * The name of the topic being displayed by the current page. */ public void setTopicName(String topicName) { this.topicName = topicName; } /** * Return a LinkedHashMap containing the topic and text for all links that * should appear for the user menu. * * @return A LinkedHashMap containing the topic and text for all links that * should appear for the user menu. */ public LinkedHashMap getUserMenu() { return this.userMenu; } /** * Set a LinkedHashMap containing the topic and text for all links that should * appear for the user menu. * * @param userMenu * A LinkedHashMap containing the topic and text for all links that * should appear for the user menu. */ public void setUserMenu(LinkedHashMap userMenu) { this.userMenu = userMenu; } /** * Return the name of the virtual wiki associated with the page info being * created. This will normally be taken directly from the request and default * to the wiki default virtual wiki, although in rare cases (such as redirects * to other virtual wikis) it may differ. */ public String getVirtualWikiName() { if (StringUtils.isBlank(virtualWikiName)) { return ""; // throw new IllegalArgumentException( // "Cannot pass a null or empty virtual wiki name"); } return this.virtualWikiName; } /** * Return the name of the virtual wiki associated with the page info being * created. This will normally be taken directly from the request and default * to the wiki default virtual wiki, although in rare cases (such as redirects * to other virtual wikis) it may differ. * * @param virtualWikiName * The name of the virtual wiki to set. */ public void setVirtualWikiName(String virtualWikiName) { this.virtualWikiName = virtualWikiName; } /** * If the page currently being viewed is a user page or a user comments page * return <code>true</code> * * @return <code>true</code> if the page currently being viewed is a user * page, otherwise <code>false</code>. */ public boolean isUserPage() { WikiLink wikiLink = LinkUtil.parseWikiLink(this.getTopicName()); if (wikiLink.getNamespace().equals(NamespaceHandler.NAMESPACE_USER)) { return true; } if (wikiLink.getNamespace().equals(NamespaceHandler.NAMESPACE_USER_COMMENTS)) { return true; } return false; } }