1 package de.matthias_burbach.deputy.swing;
2
3 import java.util.Enumeration;
4 import java.util.Iterator;
5
6 import javax.swing.tree.DefaultTreeModel;
7
8 import de.matthias_burbach.deputy.core.project.Project;
9 import de.matthias_burbach.deputy.core.project.ProjectChangeListener;
10
11 /***
12 * @author Matthias Burbach
13 */
14 public class IndirectDependenciesTreeNode
15 extends BaseMutableTreeNode
16 implements ProjectChangeListener {
17
18 /***
19 * The project whose indirect dependencies to display.
20 */
21 private Project project;
22
23 /***
24 * The tree model to delegate change operations to.
25 */
26 private DefaultTreeModel treeModel;
27
28 /***
29 * @param project The project whose indirect dependencies to display.
30 * @param treeModel The tree model to delegate change operations to.
31 */
32 public IndirectDependenciesTreeNode(
33 final Project project,
34 final DefaultTreeModel treeModel) {
35 this.project = project;
36 if (this.project.isRootProject()) {
37 this.project.addChangeListener(this);
38 }
39 this.treeModel = treeModel;
40 }
41
42
43
44
45
46 /***
47 * {@inheritDoc}
48 */
49 protected void initChildren() {
50 for (Iterator iter = project.getIndirectDependencies();
51 iter.hasNext();) {
52 Project childProject = (Project) iter.next();
53 ProjectTreeNode childNode =
54 new ProjectTreeNode(
55 childProject,
56 treeModel);
57 add(childNode);
58 }
59 }
60
61
62
63
64
65 /***
66 * {@inheritDoc}
67 */
68 public void addedDependency(
69 final Project addedDependency, final int index) {
70
71 }
72
73
74
75
76
77 /***
78 * {@inheritDoc}
79 */
80 public void removedDependency(final Project removedDependency) {
81
82 }
83
84
85
86
87
88
89 /***
90 * {@inheritDoc}
91 */
92 public void removedIndirectDependency(final Project removedDependency) {
93 if (childrenAreInitialized()) {
94 ProjectTreeNode childNode
95 = findChildNodeForDependency(removedDependency);
96 treeModel.removeNodeFromParent(childNode);
97 }
98 }
99
100 /***
101 * @param dependency The dependency to find the corresponding tree node for.
102 * @return The tree node found or <code>null</code>.
103 */
104 private ProjectTreeNode findChildNodeForDependency(
105 final Project dependency) {
106 ProjectTreeNode result = null;
107 for (Enumeration nodes = children(); nodes.hasMoreElements();) {
108 ProjectTreeNode childNode =
109 (ProjectTreeNode) nodes.nextElement();
110 if (childNode.getProject().equals(dependency)) {
111 result = childNode;
112 break;
113 }
114 }
115 return result;
116 }
117
118
119
120
121 /***
122 * {@inheritDoc}
123 */
124 public String toString() {
125 return "indirect dependencies";
126 }
127 }