Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
TreeModelComposite |
|
| 2.25;2.25 |
1 | /* $Id: TreeModelComposite.java 17841 2010-01-12 19:17:52Z linus $ | |
2 | ***************************************************************************** | |
3 | * Copyright (c) 2009 Contributors - see below | |
4 | * All rights reserved. This program and the accompanying materials | |
5 | * are made available under the terms of the Eclipse Public License v1.0 | |
6 | * which accompanies this distribution, and is available at | |
7 | * http://www.eclipse.org/legal/epl-v10.html | |
8 | * | |
9 | * Contributors: | |
10 | * tfmorris | |
11 | ***************************************************************************** | |
12 | * | |
13 | * Some portions of this file was previously release using the BSD License: | |
14 | */ | |
15 | ||
16 | // Copyright (c) 1996-2006 The Regents of the University of California. All | |
17 | // Rights Reserved. Permission to use, copy, modify, and distribute this | |
18 | // software and its documentation without fee, and without a written | |
19 | // agreement is hereby granted, provided that the above copyright notice | |
20 | // and this paragraph appear in all copies. This software program and | |
21 | // documentation are copyrighted by The Regents of the University of | |
22 | // California. The software program and documentation are supplied "AS | |
23 | // IS", without any accompanying services from The Regents. The Regents | |
24 | // does not warrant that the operation of the program will be | |
25 | // uninterrupted or error-free. The end-user understands that the program | |
26 | // was developed for research purposes and is advised not to rely | |
27 | // exclusively on the program for any reason. IN NO EVENT SHALL THE | |
28 | // UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, | |
29 | // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, | |
30 | // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF | |
31 | // THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF | |
32 | // SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY | |
33 | // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
34 | // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE | |
35 | // PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF | |
36 | // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, | |
37 | // UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | |
38 | ||
39 | package org.argouml.ui; | |
40 | ||
41 | import javax.swing.tree.TreeModel; | |
42 | import javax.swing.tree.TreePath; | |
43 | ||
44 | import org.apache.log4j.Logger; | |
45 | ||
46 | /** | |
47 | * This class is the TreeModel for the navigator and todo list panels.<p> | |
48 | * | |
49 | * It is called <strong>Composite</strong> because there are a set of rules | |
50 | * that determine how to link parents to children in the tree. Those | |
51 | * rules can now be found in PerspectiveSupport.<p> | |
52 | */ | |
53 | public class TreeModelComposite extends TreeModelSupport implements TreeModel { | |
54 | ||
55 | 900 | private static final Logger LOG = |
56 | Logger.getLogger(TreeModelComposite.class); | |
57 | ||
58 | /** The root of the model. */ | |
59 | private Object root; | |
60 | ||
61 | /** | |
62 | * The constructor. | |
63 | * | |
64 | * @param name the name that will be localized | |
65 | */ | |
66 | public TreeModelComposite(String name) { | |
67 | 5400 | super(name); |
68 | 5400 | } |
69 | ||
70 | ||
71 | /* | |
72 | * @see javax.swing.tree.TreeModel#getRoot() | |
73 | */ | |
74 | public Object getRoot() { | |
75 | 13323 | return root; |
76 | } | |
77 | ||
78 | /* | |
79 | * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int) | |
80 | */ | |
81 | public Object getChild(Object parent, int index) { | |
82 | 6791 | for (TreeModel tm : getGoRuleList()) { |
83 | 6791 | int childCount = tm.getChildCount(parent); |
84 | 6791 | if (index < childCount) { |
85 | 6791 | return tm.getChild(parent, index); |
86 | } | |
87 | 0 | index -= childCount; |
88 | 0 | } |
89 | 0 | return null; |
90 | } | |
91 | ||
92 | /* | |
93 | * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) | |
94 | */ | |
95 | public int getChildCount(Object parent) { | |
96 | 10223 | int childCount = 0; |
97 | 10223 | for (TreeModel tm : getGoRuleList()) { |
98 | 10223 | childCount += tm.getChildCount(parent); |
99 | } | |
100 | 10223 | return childCount; |
101 | } | |
102 | ||
103 | /* | |
104 | * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, | |
105 | * java.lang.Object) | |
106 | */ | |
107 | public int getIndexOfChild(Object parent, Object child) { | |
108 | 1967 | int childCount = 0; |
109 | 1967 | for (TreeModel tm : getGoRuleList()) { |
110 | 1967 | int childIndex = tm.getIndexOfChild(parent, child); |
111 | 1967 | if (childIndex != -1) { |
112 | 1967 | return childIndex + childCount; |
113 | } | |
114 | 0 | childCount += tm.getChildCount(parent); |
115 | 0 | } |
116 | 0 | LOG.debug("child not found!"); |
117 | ||
118 | //The child is sometimes not found when the tree is being updated | |
119 | 0 | return -1; |
120 | } | |
121 | ||
122 | /* | |
123 | * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) | |
124 | */ | |
125 | public boolean isLeaf(Object node) { | |
126 | 15966 | for (TreeModel tm : getGoRuleList()) { |
127 | 15966 | if (!tm.isLeaf(node)) { |
128 | 8305 | return false; |
129 | } | |
130 | } | |
131 | 7661 | return true; |
132 | } | |
133 | ||
134 | ||
135 | /* | |
136 | * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, java.lang.Object) | |
137 | */ | |
138 | public void valueForPathChanged(TreePath path, Object newValue) { | |
139 | // Empty implementation - not used. | |
140 | 0 | } |
141 | ||
142 | ||
143 | /** | |
144 | * @param r the root of the model | |
145 | */ | |
146 | public void setRoot(Object r) { | |
147 | 1800 | root = r; |
148 | 1800 | } |
149 | ||
150 | } |