1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package de.jaret.util.ui.timebars.model;
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import de.jaret.util.date.Interval;
26 import de.jaret.util.date.IntervalImpl;
27 import de.jaret.util.date.JaretDate;
28
29
30
31
32
33
34
35 public class AddingTimeBarRowModel extends AbstractTimeBarRowModel implements TimeBarRowListener {
36
37 protected List<Interval> _intervals = new ArrayList<Interval>();
38
39
40 protected MergedInterval _mergedInterval;
41
42
43 protected List<TimeBarRow> _rows = new ArrayList<TimeBarRow>();
44
45
46
47
48
49
50 public AddingTimeBarRowModel(TimeBarRowHeader header) {
51 super(header);
52 }
53
54
55
56
57 public List<Interval> getIntervals() {
58 return _intervals;
59 }
60
61
62
63
64
65
66 public void addRow(TimeBarRow row) {
67 _rows.add(row);
68 if (row.getMinDate() != null) {
69 checkMergedInterval();
70 if (_mergedInterval.getBegin() == null || row.getMinDate().compareTo(_mergedInterval.getBegin()) < 0) {
71 _mergedInterval.setBeginX(row.getMinDate().copy());
72 _minDate = _mergedInterval.getBegin().copy();
73 }
74 if (_mergedInterval.getEnd() == null || row.getMaxDate().compareTo(_mergedInterval.getEnd()) > 0) {
75 _mergedInterval.setEndX(row.getMaxDate().copy());
76 _maxDate = _mergedInterval.getEnd().copy();
77 }
78 }
79 row.addTimeBarRowListener(this);
80 }
81
82
83
84
85
86
87 public void remRow(TimeBarRow row) {
88 if (_rows.remove(row)) {
89 row.remTimeBarRowListener(this);
90 checkBounds();
91 }
92 }
93
94
95
96
97
98 protected void checkMergedInterval() {
99 if (_mergedInterval == null) {
100 _mergedInterval = new MergedInterval();
101 _intervals.add(_mergedInterval);
102 }
103 }
104
105
106
107
108
109 public void rowDataChanged(TimeBarRow row) {
110 checkBounds();
111 }
112
113
114
115
116 public void elementAdded(TimeBarRow row, Interval element) {
117 checkBounds();
118 }
119
120
121
122
123 public void elementRemoved(TimeBarRow row, Interval element) {
124 checkBounds();
125 }
126
127
128
129
130 public void elementChanged(TimeBarRow row, Interval element) {
131 checkBounds();
132 }
133
134
135
136
137 protected void checkBounds() {
138
139 JaretDate min = null;
140 JaretDate max = null;
141 for (TimeBarRow row : _rows) {
142 if (row.getMinDate() != null && row.getIntervals().size() > 0) {
143 if (min == null || row.getMinDate().compareTo(min) < 0) {
144 min = row.getMinDate().copy();
145 }
146 }
147 if (row.getMaxDate() != null && row.getIntervals().size() > 0) {
148 if (max == null || row.getMaxDate().compareTo(max) > 0) {
149 max = row.getMaxDate().copy();
150 }
151 }
152 }
153
154 if (min == null) {
155
156 if (_mergedInterval != null) {
157 _intervals.remove(_mergedInterval);
158 fireElementRemoved(_mergedInterval);
159 _mergedInterval = null;
160 }
161
162 } else {
163 checkMergedInterval();
164
165 boolean changed = false;
166 if (_mergedInterval != null
167 && (_mergedInterval.getBegin() == null || !_mergedInterval.getBegin().equals(min))) {
168 _mergedInterval.setBeginX(min);
169 _minDate = _mergedInterval.getBegin().copy();
170 changed = true;
171 }
172 if (_mergedInterval != null && (_mergedInterval.getEnd() == null || !_mergedInterval.getEnd().equals(max))) {
173 _mergedInterval.setEndX(max);
174 _maxDate = _mergedInterval.getEnd().copy();
175 changed = true;
176 }
177 if (changed) {
178 fireElementChanged(_mergedInterval);
179 }
180 }
181 }
182
183
184
185
186 public void headerChanged(TimeBarRow row, TimeBarRowHeader newHeader) {
187
188 }
189
190
191
192
193
194
195 public class MergedInterval extends IntervalImpl {
196
197
198
199
200
201 public void setBeginX(JaretDate date) {
202 super.setBegin(date);
203 }
204
205
206
207
208
209
210 public void setEndX(JaretDate date) {
211 super.setEnd(date);
212 }
213
214
215
216
217 public void setBegin(JaretDate begin) {
218 }
219
220
221
222
223 public void setEnd(JaretDate end) {
224 }
225 }
226
227 }