com.redhat.rhn.frontend.nav.DialognavRenderer.java Source code

Java tutorial

Introduction

Here is the source code for com.redhat.rhn.frontend.nav.DialognavRenderer.java

Source

/**
 * Copyright (c) 2009--2016 Red Hat, Inc.
 *
 * This software is licensed to you under the GNU General Public License,
 * version 2 (GPLv2). There is NO WARRANTY for this software, express or
 * implied, including the implied warranties of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
 * along with this software; if not, see
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
 *
 * Red Hat trademarks are not licensed under GPLv2. No permission is
 * granted to use or replicate Red Hat trademarks that are incorporated
 * in this software or its documentation.
 */

package com.redhat.rhn.frontend.nav;

import java.util.Map;
import java.util.StringTokenizer;

import org.apache.commons.lang.StringEscapeUtils;

import com.redhat.rhn.frontend.html.HtmlTag;

/**
 * DialognavRenderer - renders a navigation bar
 *
 * Renders the navigation inside the content, which is implemented
 * as rows of Twitter Bootstrap tabs (nav-tabs)
 *
 * The navigation is enclosed in a div styled with class
 * 'spacewalk-content-nav' and the individual rows can be styled by
 * ul:nth-child selectors.
 *
 * @version $Rev$
 */

public class DialognavRenderer extends Renderable {
    private final StringBuffer titleBuf;

    /**
     * Public constructor
     */
    public DialognavRenderer() {
        // empty
        titleBuf = new StringBuffer();
    }

    /** {@inheritDoc} */
    @Override
    public void preNav(StringBuffer sb) {
        HtmlTag div = new HtmlTag("div");
        div.setAttribute("class", "spacewalk-content-nav");
        sb.append(div.renderOpenTag());
    }

    /** {@inheritDoc} */
    @Override
    public void preNavLevel(StringBuffer sb, int depth) {
        if (!canRender(null, depth)) {
            return;
        }

        HtmlTag ul = new HtmlTag("ul");
        if (depth == 0) {
            ul.setAttribute("class", "nav nav-tabs");
        } else {
            ul.setAttribute("class", "nav nav-tabs nav-tabs-pf");
        }
        sb.append(ul.renderOpenTag());
    }

    /** {@inheritDoc} */
    @Override
    public void preNavNode(StringBuffer sb, int depth) {
    }

    /** {@inheritDoc} */
    @Override
    public void navNodeActive(StringBuffer sb, NavNode node, NavTreeIndex treeIndex, Map parameters, int depth) {
        if (!canRender(node, depth)) {
            return;
        }

        titleBuf.append(" - " + node.getName());

        renderNode(sb, node, treeIndex, parameters, "active");
    }

    /** {@inheritDoc} */
    @Override
    public void navNodeInactive(StringBuffer sb, NavNode node, NavTreeIndex treeIndex, Map parameters, int depth) {
        if (!canRender(node, depth)) {
            return;
        }

        renderNode(sb, node, treeIndex, parameters, "");
    }

    private void renderNode(StringBuffer sb, NavNode node, NavTreeIndex treeIndex, Map parameters,
            String cssClass) {
        HtmlTag li = new HtmlTag("li");

        if (!cssClass.equals("")) {
            li.setAttribute("class", cssClass);
        }

        String href = node.getPrimaryURL();
        String allowedFormVars = treeIndex.getTree().getFormvar();
        if (allowedFormVars != null) {
            StringBuilder formVars;
            if (href.indexOf('?') == -1) {
                formVars = new StringBuilder("?");
            } else {
                formVars = new StringBuilder("&");
            }

            StringTokenizer st = new StringTokenizer(allowedFormVars);
            while (st.hasMoreTokens()) {
                if (formVars.length() > 1) {
                    formVars.append("&");
                }
                String currentVar = st.nextToken();
                String[] values = (String[]) parameters.get(currentVar);

                // if currentVar is null, values will be null too, so we can
                // just check values.
                if (values != null) {
                    formVars.append(currentVar + "=" + StringEscapeUtils.escapeHtml(values[0]));
                }
            }
            href += formVars.toString();
        }

        li.addBody(aHref(href, node.getName(), node.getTarget()));
        sb.append(li.render());
        sb.append("\n");
    }

    /** {@inheritDoc} */
    @Override
    public void postNavNode(StringBuffer sb, int depth) {
    }

    /** {@inheritDoc} */
    @Override
    public void postNavLevel(StringBuffer sb, int depth) {
        if (!canRender(null, depth)) {
            return;
        }

        HtmlTag ul = new HtmlTag("ul");
        sb.append(ul.renderCloseTag());
        sb.append("\n");
    }

    /** {@inheritDoc} */
    @Override
    public void postNav(StringBuffer sb) {
        HtmlTag div = new HtmlTag("div");
        sb.append(div.renderCloseTag());
        sb.append("\n");
    }

    /** {@inheritDoc} */
    @Override
    public boolean nodeRenderInline(int depth) {
        return false;
    }

    private static String aHref(String url, String text, String target) {
        HtmlTag a = new HtmlTag("a");

        if (target != null && !target.equals("")) {
            a.setAttribute("target", target);
        }

        a.setAttribute("href", url);
        a.addBody(text);
        return a.render();
    }
}