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 }