View Javadoc

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       * (non-Javadoc)
44       * @see de.matthias_burbach.deputy.swing.BaseMutableTreeNode#initChildren()
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      /*(non-Javadoc)
62       * @see de.matthias_burbach.deputy.core.ProjectChangeListener
63       *          #addedDependency(de.matthias_burbach.deputy.core.Project, int)
64       */
65      /***
66       * {@inheritDoc}
67       */
68      public void addedDependency(
69              final Project addedDependency, final int index) {
70          // ignore, this node does not display direct dependencies
71      }
72  
73      /*(non-Javadoc)
74       * @see de.matthias_burbach.deputy.core.ProjectChangeListener
75       *          #removedDependency(de.matthias_burbach.deputy.core.Project)
76       */
77      /***
78       * {@inheritDoc}
79       */
80      public void removedDependency(final Project removedDependency) {
81          // ignore, this node does not display direct dependencies
82      }
83  
84      /*(non-Javadoc)
85       * @see de.matthias_burbach.deputy.core.ProjectChangeListener
86       *          #removedIndirectDependency(
87       *              de.matthias_burbach.deputy.core.Project)
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     /*(non-Javadoc)
119      * @see java.lang.Object#toString()
120      */
121     /***
122      * {@inheritDoc}
123      */
124     public String toString() {
125         return "indirect dependencies";
126     }
127 }