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

Java tutorial

Introduction

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

Source

/**
 * Copyright (c) 2009--2010 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 org.apache.commons.digester.Digester;

import java.net.URL;

/**
 * Helper class to parse a sitenav.xml file, returning the tree
 * @version $Rev$
 */
public class NavDigester {
    // no contruction, please
    private NavDigester() {
    }

    /**
     * buildTree, method to take a url and parse the contents
     * into a NavTree
     * @param url the file to parse
     * @return NavTree the tree represented by the file
     * @throws Exception if something breaks. XXX: fix to be tighter
     */
    public static NavTree buildTree(URL url) throws Exception {
        if (url == null) {
            throw new IllegalArgumentException(
                    "URL is null, your definition tag " + "probably points to a non existing file.");
        }
        Digester digester = new Digester();
        digester.setValidating(false);

        digester.addObjectCreate("rhn-navi-tree", NavTree.class);
        digester.addSetProperties("rhn-navi-tree");
        digester.addSetProperties("rhn-navi-tree", "acl_mixins", "aclMixins");

        digester.addObjectCreate("*/rhn-tab", NavNode.class);
        digester.addSetProperties("*/rhn-tab", "active-image", "activeImage");
        digester.addSetProperties("*/rhn-tab", "inactive-image", "inactiveImage");
        digester.addSetProperties("*/rhn-tab", "target", "target");

        digester.addCallMethod("*/rhn-tab", "addPrimaryURL", 1);
        digester.addCallParam("*/rhn-tab", 0, "url");

        digester.addCallMethod("*/rhn-tab/rhn-tab-url", "addURL", 0);
        digester.addCallMethod("*/rhn-tab/rhn-tab-directory", "addDirectory", 0);

        digester.addSetNext("*/rhn-tab", "addNode");
        return (NavTree) digester.parse(url.openStream());
    }
}