View Javadoc

1   /*
2    *  File: AddingTimeBarNode.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation; either version 2 of the License, or
9    *  (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   *  GNU General Public License for more details.
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19   */
20  package de.jaret.util.ui.timebars.model;
21  
22  import java.util.ArrayList;
23  import java.util.List;
24  import java.util.Vector;
25  
26  /**
27   * An implementation of a TimeBarNode that adds up all children. It also may carry an object.
28   * 
29   * @author Peter Kliem
30   * @version $Id: AddingTimeBarNode.java 800 2008-12-27 22:27:33Z kliem $
31   */
32  public class AddingTimeBarNode extends AddingTimeBarRowModel implements TimeBarNode {
33      /** children. */
34      protected List<TimeBarNode> _children = new ArrayList<TimeBarNode>();
35  
36      /** level of the node. */
37      protected int _level = -1;
38  
39      /** NodeListeners regsitered. */
40      protected List<TimeBarNodeListener> _nodeListeners;
41  
42      /** carried object. */
43      protected Object _object;
44  
45      /**
46       * Constructor.
47       * 
48       * @param header required header
49       */
50      public AddingTimeBarNode(TimeBarRowHeader header) {
51          super(header);
52      }
53  
54      /**
55       * Set the carried object.
56       * 
57       * @param o object to store
58       */
59      public void setObject(Object o) {
60          _object = o;
61      }
62  
63      /**
64       * Retrieve the stored object.
65       * 
66       * @return the stored object
67       */
68      public Object getObject() {
69          return _object;
70      }
71  
72      /**
73       * {@inheritDoc}
74       */
75      public List<TimeBarNode> getChildren() {
76          return _children;
77      }
78  
79      /**
80       * {@inheritDoc}
81       */
82      public void addNode(TimeBarNode node) {
83          node.setLevel(getLevel() + 1); // set the level of the added node to be under the current node
84          _children.add(node);
85          this.addRow(node);
86          fireNodeAdded(node);
87      }
88  
89      /**
90       * {@inheritDoc}
91       */
92      public void remNode(TimeBarNode node) {
93          if (_children.remove(node)) {
94              this.remRow(node);
95              fireNodeRemoved(node);
96          }
97      }
98  
99      /**
100      * {@inheritDoc}
101      */
102     public int getLevel() {
103         return _level;
104     }
105 
106     /**
107      * {@inheritDoc}
108      */
109     public void setLevel(int level) {
110         _level = level;
111         if (_children != null) {
112             for (TimeBarNode node : _children) {
113                 node.setLevel(level + 1);
114             }
115         }
116     }
117 
118     /**
119      * {@inheritDoc}
120      */
121     public synchronized void addTimeBarNodeListener(TimeBarNodeListener tbnl) {
122         if (_nodeListeners == null) {
123             _nodeListeners = new Vector<TimeBarNodeListener>();
124         }
125         _nodeListeners.add(tbnl);
126         super.addTimeBarRowListener(tbnl);
127     }
128 
129     /**
130      * {@inheritDoc}
131      */
132     public void removeTimeBarNodeListener(TimeBarNodeListener tbnl) {
133         if (_nodeListeners == null) {
134             return;
135         }
136         _nodeListeners.remove(tbnl);
137         super.remTimeBarRowListener(tbnl);
138     }
139 
140     /**
141      * Inform listeners about a new child.
142      * 
143      * @param newNode new child node
144      */
145     protected void fireNodeAdded(TimeBarNode newNode) {
146         if (_nodeListeners != null) {
147             for (TimeBarNodeListener listener : _nodeListeners) {
148                 listener.nodeAdded(this, newNode);
149             }
150         }
151     }
152 
153     /**
154      * Inform listeners about a removed child.
155      * 
156      * @param removedNode removed child node
157      */
158     protected void fireNodeRemoved(TimeBarNode removedNode) {
159         if (_nodeListeners != null) {
160             for (TimeBarNodeListener listener : _nodeListeners) {
161                 listener.nodeRemoved(this, removedNode);
162             }
163         }
164     }
165 
166 }