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 import java.util.Vector;
25
26 import de.jaret.util.date.Interval;
27
28
29
30
31
32
33
34 public class TimeBarSelectionModelImpl implements TimeBarSelectionModel {
35
36 protected List<TimeBarSelectionListener> _listenerList;
37
38
39 protected List<Interval> _selectedIntervals = new ArrayList<Interval>();
40
41
42 protected List<TimeBarRow> _selectedRows = new ArrayList<TimeBarRow>();
43
44
45 protected List<IIntervalRelation> _selectedRelations = new ArrayList<IIntervalRelation>();
46
47
48 protected boolean _rowSelectAllowed = true;
49
50
51 protected boolean _intervalSelectAllow = true;
52
53
54 protected boolean _relationSelectAllow = true;
55
56
57 protected boolean _multiAllowed = true;
58
59
60 protected boolean _rowSelectionToggleMode = false;
61
62
63
64
65 public boolean isEmpty() {
66 return _selectedIntervals.size() == 0 && _selectedRows.size() == 0 && _selectedRelations.size() == 0;
67 }
68
69
70
71
72 public boolean hasRowSelection() {
73 return _selectedRows.size() != 0;
74 }
75
76
77
78
79 public boolean hasIntervalSelection() {
80 return _selectedIntervals.size() != 0;
81 }
82
83
84
85
86 public boolean hasRelationSelection() {
87 return _selectedRelations.size() != 0;
88 }
89
90
91
92
93 public List<TimeBarRow> getSelectedRows() {
94 return _selectedRows;
95 }
96
97
98
99
100 public List<Interval> getSelectedIntervals() {
101 return _selectedIntervals;
102 }
103
104
105
106
107 public List<IIntervalRelation> getSelectedRelations() {
108 return _selectedRelations;
109 }
110
111
112
113
114 public void setRowSelectionAllowed(boolean allowed) {
115 _rowSelectAllowed = allowed;
116 }
117
118
119
120
121 public boolean isRowSelectionAllowed() {
122 return _rowSelectAllowed;
123 }
124
125
126
127
128 public void setIntervalSelectionAllowed(boolean allowed) {
129 _intervalSelectAllow = allowed;
130 }
131
132
133
134
135 public boolean isIntervalSelectionAllowed() {
136 return _intervalSelectAllow;
137 }
138
139
140
141
142 public void setRelationSelectionAllowed(boolean allowed) {
143 _relationSelectAllow = allowed;
144 }
145
146
147
148
149 public boolean isRelationSelectionAllowed() {
150 return _relationSelectAllow;
151 }
152
153
154
155
156 public void setMultipleSelectionAllowed(boolean allowed) {
157 _multiAllowed = allowed;
158 }
159
160
161
162
163 public boolean getMultipleSelectionAllowed() {
164 return _multiAllowed;
165 }
166
167
168
169
170 public void clearSelection() {
171 if (!isEmpty()) {
172 _selectedIntervals.clear();
173 _selectedRows.clear();
174 _selectedRelations.clear();
175 fireSelectionChanged();
176 }
177 }
178
179
180
181
182 public void clearIntervalSelection() {
183 if (hasIntervalSelection()) {
184 _selectedIntervals.clear();
185 fireSelectionChanged();
186 }
187 }
188
189
190
191
192 public void clearRowSelection() {
193 if (hasRowSelection()) {
194 _selectedRows.clear();
195 fireSelectionChanged();
196 }
197 }
198
199
200
201
202 public void clearRelationSelection() {
203 if (hasRelationSelection()) {
204 _selectedRelations.clear();
205 fireSelectionChanged();
206 }
207 }
208
209
210
211
212 public void setSelectedRow(TimeBarRow row) {
213 if (_rowSelectAllowed) {
214 _selectedRows.clear();
215 _selectedRows.add(row);
216 fireSelectionChanged();
217 }
218 }
219
220
221
222
223 public void addSelectedRow(TimeBarRow row) {
224 if (_rowSelectAllowed) {
225 if (!_multiAllowed) {
226 _selectedRows.clear();
227 fireSelectionChanged();
228 }
229 if (!_selectedRows.contains(row)) {
230 _selectedRows.add(row);
231 fireElementAdded(row);
232 }
233 }
234 }
235
236
237
238
239 public void remSelectedRow(TimeBarRow row) {
240 if (isSelected(row)) {
241 _selectedRows.remove(row);
242 fireElementRemoved(row);
243 }
244 }
245
246
247
248
249 public boolean isSelected(TimeBarRow row) {
250 return _selectedRows.contains(row);
251 }
252
253
254
255
256 public void setSelectedInterval(Interval interval) {
257 if (_intervalSelectAllow) {
258 boolean hasSelection = hasIntervalSelection();
259 _selectedIntervals.clear();
260 _selectedIntervals.add(interval);
261 if (hasSelection) {
262 fireSelectionChanged();
263 } else {
264 fireElementAdded(interval);
265 }
266 }
267 }
268
269
270
271
272 public void addSelectedInterval(Interval interval) {
273 if (_intervalSelectAllow) {
274 if (!_multiAllowed) {
275 _selectedIntervals.clear();
276 fireSelectionChanged();
277 }
278 if (!_selectedIntervals.contains(interval)) {
279 _selectedIntervals.add(interval);
280 fireElementAdded(interval);
281 }
282 }
283 }
284
285
286
287
288 public void remSelectedInterval(Interval interval) {
289 if (isSelected(interval)) {
290 _selectedIntervals.remove(interval);
291 fireElementRemoved(interval);
292 }
293 }
294
295
296
297
298 public void remSelectedIntervals(List<Interval> intervals) {
299 _selectedIntervals.removeAll(intervals);
300 fireSelectionChanged();
301 }
302
303
304
305
306 public boolean isSelected(Interval interval) {
307 return _selectedIntervals.contains(interval);
308 }
309
310
311
312
313 public void setSelectedRelation(IIntervalRelation relation) {
314 if (_relationSelectAllow) {
315 _selectedRelations.clear();
316 _selectedRelations.add(relation);
317 fireSelectionChanged();
318 }
319 }
320
321
322
323
324 public void addSelectedRelation(IIntervalRelation relation) {
325 if (_relationSelectAllow) {
326 if (!_multiAllowed) {
327 _selectedRelations.clear();
328 fireSelectionChanged();
329 }
330 if (!_selectedRelations.contains(relation)) {
331 _selectedRelations.add(relation);
332 fireElementAdded(relation);
333 }
334 }
335 }
336
337
338
339
340 public void remSelectedRelation(IIntervalRelation relation) {
341 if (isSelected(relation)) {
342 _selectedRelations.remove(relation);
343 fireElementRemoved(relation);
344 }
345 }
346
347
348
349
350 public void remSelectedRelations(List<IIntervalRelation> relations) {
351 _selectedRelations.removeAll(relations);
352 fireSelectionChanged();
353 }
354
355
356
357
358 public boolean isSelected(IIntervalRelation relation) {
359 return _selectedRelations.contains(relation);
360 }
361
362
363
364
365 public synchronized void addTimeBarSelectionListener(TimeBarSelectionListener tbsl) {
366 if (_listenerList == null) {
367 _listenerList = new Vector<TimeBarSelectionListener>();
368 }
369 _listenerList.add(tbsl);
370 }
371
372
373
374
375 public void remTimeBarSelectionListener(TimeBarSelectionListener tbsl) {
376 if (_listenerList != null) {
377 _listenerList.remove(tbsl);
378 }
379 }
380
381
382
383
384
385 protected void fireSelectionChanged() {
386 if (_listenerList != null) {
387 for (TimeBarSelectionListener listener : _listenerList) {
388 listener.selectionChanged(this);
389 }
390 }
391 }
392
393
394
395
396
397
398 protected void fireElementAdded(Object element) {
399 if (_listenerList != null) {
400 for (TimeBarSelectionListener listener : _listenerList) {
401 listener.elementAddedToSelection(this, element);
402 }
403 }
404 }
405
406
407
408
409
410
411 protected void fireElementRemoved(Object element) {
412 if (_listenerList != null) {
413 for (TimeBarSelectionListener listener : _listenerList) {
414 listener.elementRemovedFromSelection(this, element);
415 }
416 }
417 }
418
419
420
421
422 public boolean getRowSelectionToggleMode() {
423 return _rowSelectionToggleMode;
424 }
425
426
427
428
429 public void setRowSelectionToggleMode(boolean activated) {
430 _rowSelectionToggleMode = activated;
431 }
432
433 }