O'Reilly logo

JavaServer Faces by Hans Bergsten

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

The TreeModel Class

The com.mycompany.jsf.model.TreeModel class is the model class for the tree component. It provides random access to nodes in a tree made up of instances of the TreeNode class we looked at in Chapter 12:

package com.mycompany.jsf.model;

import java.util.StringTokenizer;
import javax.faces.component.NamingContainer;

public class TreeModel {
    private final static String SEPARATOR = 
        String.valueOf(NamingContainer.SEPARATOR_CHAR);

    private TreeNode root;
    private TreeNode currentNode;

    public TreeModel(TreeNode root) {
        this.root = root;
    }

    public TreeNode getNode( ) {
        return currentNode;
    }

    public void setNodeId(String nodeId) {
        if (nodeId == null) {
            currentNode = null;
            return;
        }
        
        TreeNode node = root;
        StringBuffer sb = new StringBuffer( );
        StringTokenizer st = 
            new StringTokenizer(nodeId, SEPARATOR);

        sb.append(st.nextToken( )).append(SEPARATOR);
        while (st.hasMoreTokens( )) {
            int nodeIndex = Integer.parseInt(st.nextToken( ));
            sb.append(nodeIndex);
            try {
                node = (TreeNode) node.getChildren( ).get(nodeIndex);
            }
            catch (IndexOutOfBoundsException e) {
                String msg = "Node node with ID " + sb.toString( ) +
                    ". Failed to parse " + nodeId;
                throw new IllegalArgumentException(msg);
            }
            sb.append(SEPARATOR);
        }
        currentNode = node;
    }
}

The TreeModel constructor takes the root TreeNode reference as its single argument and saves it in an instance variable. The setNodeId() method sets the current node to the specified node ID, which is a colon-separated list of node indexes. For instance, “0:0:1” ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required