View Javadoc

1   /*
2    * @(#)$Id: ExplorerTreeModel.java 689 2009-07-22 00:10:27Z bsigner $
3    *
4    * Author   : Ueli Kurmann, igesture@uelikurmann.ch
5    *                                   
6    *                                   
7    * Purpose  : 
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date       Who     Reason
14   *
15   * 23.03.2008 ukurmann  Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
23   * 
24   */
25  
26  
27  package org.ximtec.igesture.tool.explorer;
28  
29  import java.util.HashMap;
30  import java.util.List;
31  import java.util.Map;
32  
33  import javax.swing.event.TreeModelListener;
34  import javax.swing.tree.TreeModel;
35  import javax.swing.tree.TreePath;
36  
37  import org.ximtec.igesture.tool.explorer.core.NodeInfo;
38  
39  
40  /**
41   * Explorer Tree Model. NodeMappings are used to dynamically build up the tree in
42   * a generic manner. The tree structure is defined with NodeInfo instances. 
43   * 
44   * @author UeliKurmann
45   * @version 1.0
46   * @since igesture
47   */
48  public class ExplorerTreeModel implements TreeModel {
49  
50     /**
51      * The root element of the tree.
52      */
53     private Object rootElement;
54  
55     /**
56      * Node Info Map
57      */
58     private Map<Class< ? >, NodeInfo> nodeInfos;
59  
60  
61     /**
62      * Explorer Tree Model Model
63      * @param rootElement the root node
64      * @param nodeInfos a map of NodeInfo instances defining the tree layout. 
65      */
66     public ExplorerTreeModel(Object rootElement,
67           Map<Class< ? >, NodeInfo> nodeInfos) {
68        this.rootElement = rootElement;
69        this.nodeInfos = nodeInfos;
70     }
71     
72     /**
73      * Explorer Tree Model
74      * @param rootElement the Root Element of the Explorer Tree
75      * @param nodeInfos a list of NodeInfo instances defining the tree layout. 
76      */
77     public ExplorerTreeModel(Object rootElement, List<NodeInfo> nodeInfos){
78        this(rootElement, createNodeInfoMap(nodeInfos));
79     }
80     
81     /**
82      * Transforms a list of NodeInfo instances into a map.
83      * Left side: the class
84      * Right side: corresponding NodeInfo instance
85      * @param nodeInfos
86      * @return a map of NodeInfo instances
87      */
88     private static Map<Class<?>, NodeInfo> createNodeInfoMap(List<NodeInfo> nodeInfos){
89        Map<Class<?>, NodeInfo> nodeInfoMap = new HashMap<Class<?>, NodeInfo>();
90        for(NodeInfo nodeInfo:nodeInfos){
91           nodeInfoMap.put(nodeInfo.getType(), nodeInfo);
92        }
93        return nodeInfoMap;
94     }
95  
96  
97     @Override
98     public Object getChild(Object node, int index) {
99        NodeInfo nodeInfo = nodeInfos.get(node.getClass());
100       return nodeInfo.getChildren(node).get(index);
101    }
102 
103 
104    @Override
105    public int getChildCount(Object node) {
106       NodeInfo nodeInfo = nodeInfos.get(node.getClass());
107       return nodeInfo.getChildren(node).size();
108    }
109 
110 
111    @Override
112    public int getIndexOfChild(Object node, Object child) {
113       NodeInfo nodeInfo = nodeInfos.get(node.getClass());
114       return nodeInfo.getChildren(node).indexOf(child);
115    }
116 
117 
118    @Override
119    public Object getRoot() {
120       return rootElement;
121    }
122 
123 
124    @Override
125    public boolean isLeaf(Object node) {
126       NodeInfo nodeInfo = nodeInfos.get(node.getClass());
127       if(nodeInfo != null){
128          return nodeInfo.isLeaf(node);
129       }
130       return true;
131    }
132 
133 
134    @Override
135    public void addTreeModelListener(TreeModelListener arg0) {
136       // TODO Auto-generated method stub
137    }
138 
139 
140    @Override
141    public void removeTreeModelListener(TreeModelListener arg0) {
142 
143    }
144 
145 
146    @Override
147    public void valueForPathChanged(TreePath arg0, Object arg1) {
148 
149    }
150    
151    public Map<Class<?>, NodeInfo> getNodeInfos(){
152       return nodeInfos;
153    }
154 
155 }