Kawai Wiki

Rev

Rev 228 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.kawai.tag.kcode;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;

import org.kawai.AppManager;
import org.kawai.action.PageAction;
import org.kawai.dao.PageDAO;
import org.kawai.model.Page;
import org.mentawai.core.Action;
import org.mentawai.core.Props;
import org.mentawai.util.HttpUtils;

/**
 * KCode class PageLink.
 *
 * @author Sergio Oliveira
 *
 */

public class PageLink extends AbstractKCode {
       
        private static final String PRETTY_URL_OPTION = "use_pretty_urls";
        private static final String INCLUDE_TITLE_OPTION = "include_title_in_page_links";

    /**
     * {@inheritDoc}
     */

    @Override
    public boolean hasBody() {
        return false;
    }

    /**
     * {@inheritDoc}
     */

    @Override
    public String getTag() {
        return "pageLink";
    }

    /**
     * {@inheritDoc}
     */

    @Override
    public String process(PageContext pageContext, Map<String, String> attrs, String html) throws JspException {

        HttpServletRequest req = getRequest(pageContext);

        String name = attrs.get("name");
        if (name == null) throw new JspException("Name attribute is mandatory for tag pageLink!");

        String text = attrs.get("text");
        if (text == null) throw new JspException("Text attribute is mandatory for tag pageLink!");

        String pretty = attrs.get("pretty");
        boolean isPretty;
       
        if (pretty != null) {
                isPretty = Boolean.parseBoolean(pretty);
        } else {
                Props props = AppManager.getInstance().getProps();
            isPretty = props.has(PRETTY_URL_OPTION) && props.getBoolean(PRETTY_URL_OPTION);
        }

        String linkClass = attrs.get("linkClass");
        String clickedClass = attrs.get("clickedClass");

        String sizeClass = attrs.get("class");
        if (sizeClass != null) {
            linkClass = sizeClass;
            clickedClass = sizeClass + "Clicked";
        }

        // check if we are displaying that page...
        Page page = (Page) pageContext.findAttribute(PageAction.BODY_COLUMN_KEY);
        if (page != null && page.getName().equals(name)) {
            return "<span" + (clickedClass != null ? " class=\"" + clickedClass + "\"" : "") + ">" + text + "</span>";
        } else {
                if (isPretty) {
                       
                        Props props = AppManager.getInstance().getProps();
                boolean includeTitle = props.has(INCLUDE_TITLE_OPTION) && props.getBoolean(INCLUDE_TITLE_OPTION);
                       
                String prettyURL;
               
                if (!includeTitle) {
                       
                        prettyURL = HttpUtils.getPrettyURL("Page", null, name);                
                       
                } else {
               
                        // load page title from DB:
                       
                        Action action = getAction(pageContext);
                       
                        if (!(action instanceof PageAction)) {

                                prettyURL = HttpUtils.getPrettyURL("Page", null, name);        
                               
                        } else {
                       
                                PageDAO pageDAO = (PageDAO) action.getInput().getValue("pageDAO");
                               
                                PageAction pageAction = (PageAction) action;
                       
                       
                                page = pageDAO.loadWithTitleOnly(name, pageAction.getLanguage());
                               
                                if (page != null) {
                                        prettyURL = HttpUtils.getPrettyURL("Page", null, name, pageAction.getLanguage().getLocale().toString(), page.getPrettyURLFormattedTitle());
                                } else {
                                        prettyURL = HttpUtils.getPrettyURL("Page", null, name, pageAction.getLanguage().getLocale().toString());        
                                }
                        }
                }
                       
                        return "<a href=\"" + req.getContextPath() + prettyURL + "\"" + (linkClass != null ? " class=\"" + linkClass + "\"" : "") + ">" + text + "</a>";
                } else {
                        return "<a href=\"" + req.getContextPath() + "/Page." + AppManager.EXTENSION + "?name=" + name + "\"" + (linkClass != null ? " class=\"" + linkClass + "\"" : "") + ">" + text + "</a>";
                }
        }
    }

}