View Javadoc

1   /* ------------------------------------
2    * � Kaamelot - 2006
3    * ------------------------------------
4    * Projet  : projectName
5    * Fichier : AGroupData.java
6    * $Id$ 
7    * $Date$ 
8    * $Log$
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   * @author Kaamelot - 2006
22   * <b>Description :</b>
23   * @version $Id$
24   * @history <ul>
25   * <li/>Date    		- UserId   - Observations
26   * <li/>22 jun. 2006 - Kaamelot - Initialisation de la classe.
27   * </ul>
28   * 
29   */
30  public abstract class AGroupData {
31  	
32  	/** Root Parent Group */
33  	private AGroupData rootParent = null;
34  	
35  	/** Parent Group */
36  	private AGroupData parent = null;
37  
38  	//	/** Full Group Name */
39  	//	private String groupName = null;
40  
41  	/** Elementary Group Name */
42  	private String name = null;
43  
44  	/** Elementary Group Path */
45  	private String path = null;
46  
47  	/** Other Included Group Data */
48  	private LinkedMap groupDatas = new LinkedMap();
49  
50  	/** Detailed Datas */
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 	 * @param _searchPath
104 	 * @param _sT 
105 	 * @return
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 	 * @param _name
125 	 * @return 
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 	 * @param _data
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 	 * @param _data
149 	 */
150 	protected abstract void evaluateData(final IMappable _data) throws DataEvaluationException; 
151 
152 	/**
153 	 * @param _GroupData
154 	 * @return
155 	 */
156 	public AGroupData addGroupData(final AGroupData _groupData) {
157 		groupDatas.put(_groupData.getPath(), _groupData);
158 		return _groupData;
159 	}
160 
161 	/**
162 	 * @return
163 	 */
164 	public AGroupData getParent() {
165 		return parent;
166 	}
167 
168 	/**
169 	 * @return
170 	 */
171 	public boolean hasParent() {
172 		return getParent()!=null;
173 	}
174 
175 	/**
176 	 * @return
177 	 */
178 	public LinkedMap getGroupDatas() {
179 		return groupDatas;
180 	}
181 
182 	/**
183 	 * @param data
184 	 */
185 	public void setParent(AGroupData data) {
186 		parent = data;
187 	}
188 
189 	/**
190 	 * @param map
191 	 */
192 	public void setGroupDatas(LinkedMap _linkedMap) {
193 		groupDatas = _linkedMap;
194 	}
195 
196 	/**
197 	 * @return a Path based on Index of Data in Parent Group 
198 	 */
199 	public String getIndexPath(AGroupData _Data) {
200 	   return getIndexPath() + "_" + String.valueOf(getGroupDatas().indexOf(_Data.getPath()));
201 	}
202 
203 	/**
204 	 * @return a Path based on Index of Data in Parent Group 
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 	 * @return
216 	 */
217 	public String getPath() {
218 		return path;
219 	}
220 
221 	/**
222 	 * @param string
223 	 */
224 	public void setPath(String string) {
225 		path = string;
226 	}
227 
228 	/**
229 	 * @return
230 	 */
231 	private Map getDatas() {
232 		return datas;
233 	}
234 
235 	/**
236 	 * @return
237 	 */
238 	public int getLevel() {
239 		return level;
240 	}
241 
242 	/**
243 	 * @return
244 	 */
245 	public IPathProvider getPathProvider() {
246 		return pathProvider;
247 	}
248 
249 	/**
250 	 * @param provider
251 	 */
252 	public void setPathProvider(final IPathProvider _provider) {
253 		pathProvider = _provider;
254 	}
255 
256 	/**
257 	 * @return
258 	 */
259 	public String getName() {
260 		return name;
261 	}
262 
263 	/**
264 	 * @return
265 	 */
266 	public String getTranslatedName() {
267 		if (getNameTranslator()==null) {
268 			return name;
269 		}
270 		return getNameTranslator().translate(name,this);
271 	}
272 
273 	/**
274 	 * @param string
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 	 * @return
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 	 * @param translator
307 	 */
308 	public void setNameTranslator(INameTranslator translator) {
309 		nameTranslator = translator;
310 	}
311 
312 	/**
313 	 * @return
314 	 */
315 	public int getDepth() {
316 		return depth;
317 	}
318 
319 	/**
320 	 * @param i
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 }