View Javadoc

1   package com.sri.emo.controller;
2   
3   import com.jcorporate.expresso.core.controller.ExpressoResponse;
4   import com.sri.common.taglib.TreeNode;
5   import com.sri.emo.dbobj.Node;
6   import com.sri.emo.dbobj.model_tree.DefaultModelFactory;
7   import com.sri.emo.dbobj.model_tree.Model;
8   
9   /***
10   * A factory for building the data structure needed for a tree view.  It does
11   * so by first building a 'tree' model of the database node, and then using
12   * a visitor to transform it into something useful for the TreeView
13   * control.
14   *
15   * @author Michael Rimov
16   */
17  public class TreeViewFactory {
18  
19      /***
20       * Root node instance to the hierarchy.
21       */
22      private final Node root;
23  
24      /***
25       * ControllerResponse used to set for Transitions.
26       */
27      private final ExpressoResponse response;
28  
29      /***
30       * Maximum levels to recurse.
31       */
32      private final int MAX_LEVELS;
33  
34      /***
35       * Constructs a tree view factory.
36       *
37       * @param rootNode         Node
38       * @param response         ControllerResponse
39       * @param maxNestingLevels int
40       */
41      public TreeViewFactory(final Node rootNode, final ExpressoResponse response, int maxNestingLevels) {
42          super();
43          assert maxNestingLevels > 0;
44          assert rootNode != null;
45          assert response != null;
46  
47          MAX_LEVELS = maxNestingLevels;
48          this.response = response;
49          root = rootNode;
50      }
51  
52      /***
53       * Builds a Tree for the Tree node.  It is the callers responsibility to
54       * save the Nodes to the request, session or wherever.
55       *
56       * @return TreeNode the tree node.
57       */
58      public TreeNode buildTree() {
59          DefaultModelFactory modelFactory = new DefaultModelFactory(root, response, MAX_LEVELS);
60          Model model = modelFactory.buildModel();
61          TreeViewVisitor visitor = new TreeViewVisitor(response);
62  
63          return visitor.traverseModelTree(model);
64      }
65  
66  
67  }