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.Collections;
24 import java.util.Comparator;
25 import java.util.List;
26
27 import de.jaret.util.date.Interval;
28
29
30
31
32
33
34
35
36
37 public class DefaultTimeBarRowModel extends AbstractTimeBarRowModel {
38
39 protected List<Interval> _intervals = new ArrayList<Interval>();
40
41
42
43
44
45 public DefaultTimeBarRowModel() {
46 }
47
48
49
50
51
52
53 public DefaultTimeBarRowModel(TimeBarRowHeader header) {
54 setRowHeader(header);
55 }
56
57
58
59
60 public List<Interval> getIntervals() {
61 return _intervals;
62 }
63
64
65
66
67
68
69 public void addInterval(Interval interval) {
70 _intervals.add(interval);
71
72
73 Collections.sort(_intervals, new Comparator<Interval>() {
74 public int compare(Interval i1, Interval i2) {
75 return i1.getBegin().compareTo(i2.getBegin());
76 }
77 });
78
79 if (_minDate == null || _intervals.size() == 1) {
80 _minDate = interval.getBegin().copy();
81 _maxDate = interval.getEnd().copy();
82 } else {
83 if (_minDate.compareTo(interval.getBegin()) > 0) {
84 _minDate = interval.getBegin().copy();
85 }
86 if (_maxDate.compareTo(interval.getEnd()) < 0) {
87 _maxDate = interval.getEnd().copy();
88 }
89 }
90 interval.addPropertyChangeListener(this);
91 fireElementAdded(interval);
92 }
93
94
95
96
97
98
99 public void addIntervals(List<Interval> intervals) {
100 _intervals.addAll(intervals);
101
102
103 Collections.sort(_intervals, new Comparator<Interval>() {
104 public int compare(Interval i1, Interval i2) {
105 return i1.getBegin().compareTo(i2.getBegin());
106 }
107 });
108
109
110 _minDate = _intervals.get(0).getBegin().copy();
111
112 _maxDate = _minDate.copy();
113 for (Interval interval : _intervals) {
114 if (interval.getEnd().compareTo(_maxDate) > 0) {
115 _maxDate = interval.getEnd();
116 }
117 }
118
119 _maxDate = _maxDate.copy();
120
121
122 _maxDate = _intervals.get(_intervals.size() - 1).getEnd().copy();
123 for (Interval interval : intervals) {
124 interval.addPropertyChangeListener(this);
125 }
126
127 fireRowDataChanged();
128 }
129
130
131
132
133
134
135 public void remInterval(Interval interval) {
136 if (_intervals.contains(interval)) {
137 _intervals.remove(interval);
138
139 updateMinMax();
140 interval.removePropertyChangeListener(this);
141 fireElementRemoved(interval);
142 }
143 }
144
145
146
147
148
149
150 public void remIntervals(List<Interval> intervals) {
151 boolean hasChanges = false;
152 for (Interval interval : intervals) {
153 if (_intervals.contains(interval)) {
154 _intervals.remove(interval);
155 interval.removePropertyChangeListener(this);
156 hasChanges = true;
157 }
158 }
159 if (hasChanges) {
160
161 updateMinMax();
162
163 fireRowDataChanged();
164 }
165 }
166
167
168
169
170 public void clear() {
171 for (Interval interval : _intervals) {
172 interval.removePropertyChangeListener(this);
173 }
174 _intervals.clear();
175 _minDate = null;
176 _maxDate = null;
177
178 fireRowDataChanged();
179 }
180
181 }