1
2
3
4
5
6
7
8
9
10
11 package fr.kaamelot.reporter;
12
13 import java.util.Map;
14 import java.util.StringTokenizer;
15
16 import org.apache.commons.collections.map.LinkedMap;
17
18 import fr.kaamelot.reporter.exception.DataEvaluationException;
19
20
21
22
23
24
25
26
27
28
29
30 public abstract class AGroupData {
31
32
33 private AGroupData rootParent = null;
34
35
36 private AGroupData parent = null;
37
38
39
40
41
42 private String name = null;
43
44
45 private String path = null;
46
47
48 private LinkedMap groupDatas = new LinkedMap();
49
50
51 private Map datas = new LinkedMap();
52
53 private IPathProvider pathProvider;
54
55 private INameTranslator nameTranslator;
56
57 private int level = 0;
58
59 private int depth = 0;
60
61 private boolean firstEvaluation = false;
62
63
64 protected AGroupData() {
65 }
66
67
68
69 public AGroupData(final String _path, final AGroupData _parent) {
70 setPath(_path);
71 if (_parent != null) {
72 setPathProvider(_parent.getPathProvider());
73 }
74 if (_path!=null) {
75 setName(_path.substring(_path.lastIndexOf(getPathProvider().getPathDelimiter())+1));
76 }
77 setParent(_parent);
78 if (_parent != null) {
79 level = _parent.getLevel() + 1;
80 _parent.setDepth(level);
81 }
82 }
83
84 public abstract AGroupData getNewGroupData(final String _path ,final AGroupData _parent);
85
86 public AGroupData getGroupData(final IMappable _data) throws Exception {
87 AGroupData grpData = null;
88
89 String path = getPathProvider().getPath(_data);
90 StringBuffer searchPath = new StringBuffer();
91
92 StringTokenizer st = new StringTokenizer(path, getPathProvider().getPathDelimiter());
93 if (st.hasMoreTokens()) {
94 searchPath.append(st.nextToken());
95 grpData = searchGroupData(searchPath,st);
96 } else {
97 throw new Exception("");
98 }
99 return grpData;
100 }
101
102
103
104
105
106
107 protected AGroupData searchGroupData(StringBuffer _searchPath, final StringTokenizer _sT) {
108 AGroupData grpData = getGroupData(_searchPath.toString());
109 if (grpData == null) {
110 grpData = addGroupData(getNewGroupData(_searchPath.toString(), this));
111 grpData.setPathProvider(getPathProvider());
112 grpData.setNameTranslator(getNameTranslator());
113 grpData.setRootParent(this);
114 }
115 if (_sT.hasMoreTokens()) {
116 _searchPath.append(getPathProvider().getPathDelimiter());
117 _searchPath.append(_sT.nextToken());
118 grpData = grpData.searchGroupData(_searchPath,_sT);
119 }
120 return grpData;
121 }
122
123
124
125
126
127 public AGroupData getGroupData(final String _name) {
128 return (AGroupData) groupDatas.get(_name);
129 }
130
131 private boolean hasData() {
132 return (datas != null && datas.size() > 0);
133 }
134
135
136
137
138 public void addData(final IMappable _data) throws Exception {
139 AGroupData targetGroup = getGroupData(_data);
140
141 if (targetGroup != null) {
142 targetGroup.evaluateData(_data);
143 targetGroup.getDatas().put(_data.getKey(), _data);
144 }
145 }
146
147
148
149
150 protected abstract void evaluateData(final IMappable _data) throws DataEvaluationException;
151
152
153
154
155
156 public AGroupData addGroupData(final AGroupData _groupData) {
157 groupDatas.put(_groupData.getPath(), _groupData);
158 return _groupData;
159 }
160
161
162
163
164 public AGroupData getParent() {
165 return parent;
166 }
167
168
169
170
171 public boolean hasParent() {
172 return getParent()!=null;
173 }
174
175
176
177
178 public LinkedMap getGroupDatas() {
179 return groupDatas;
180 }
181
182
183
184
185 public void setParent(AGroupData data) {
186 parent = data;
187 }
188
189
190
191
192 public void setGroupDatas(LinkedMap _linkedMap) {
193 groupDatas = _linkedMap;
194 }
195
196
197
198
199 public String getIndexPath(AGroupData _Data) {
200 return getIndexPath() + "_" + String.valueOf(getGroupDatas().indexOf(_Data.getPath()));
201 }
202
203
204
205
206 public String getIndexPath() {
207 String indexPath="";
208 if (parent!=null) {
209 indexPath = parent.getIndexPath(this);
210 }
211 return indexPath;
212 }
213
214
215
216
217 public String getPath() {
218 return path;
219 }
220
221
222
223
224 public void setPath(String string) {
225 path = string;
226 }
227
228
229
230
231 private Map getDatas() {
232 return datas;
233 }
234
235
236
237
238 public int getLevel() {
239 return level;
240 }
241
242
243
244
245 public IPathProvider getPathProvider() {
246 return pathProvider;
247 }
248
249
250
251
252 public void setPathProvider(final IPathProvider _provider) {
253 pathProvider = _provider;
254 }
255
256
257
258
259 public String getName() {
260 return name;
261 }
262
263
264
265
266 public String getTranslatedName() {
267 if (getNameTranslator()==null) {
268 return name;
269 }
270 return getNameTranslator().translate(name,this);
271 }
272
273
274
275
276 protected void setName(String string) {
277 name = string;
278 }
279
280
281 public void enableGraphicalRenderer() {
282 getNameTranslator().enableGraphicalRenderer();
283 }
284
285
286 public void disableGraphicalRenderer() {
287 getNameTranslator().disableGraphicalRenderer();
288 }
289
290
291
292
293 public INameTranslator getNameTranslator() {
294 return nameTranslator;
295 }
296
297 protected void setRootParent(AGroupData _rootParent) {
298 rootParent = _rootParent;
299 }
300
301 public AGroupData getRootParent() {
302 return rootParent;
303 }
304
305
306
307
308 public void setNameTranslator(INameTranslator translator) {
309 nameTranslator = translator;
310 }
311
312
313
314
315 public int getDepth() {
316 return depth;
317 }
318
319
320
321
322 protected void setDepth(int i) {
323 depth = Math.max(i,depth);
324 if (parent!=null) {
325 parent.setDepth(depth);
326 }
327 }
328
329 public boolean isFirstEvaluation() {
330 return firstEvaluation;
331 }
332
333 public void setFirstEvaluation(boolean firstEvaluation) {
334 this.firstEvaluation = firstEvaluation;
335 }
336
337 }