1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.disid.fiebdc3;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24
25
26
27
28
29
30
31
32 public class ConceptBreakdown {
33
34 private String parentConceptCode;
35
36 private String conceptCode;
37
38 private Float factor = 1.0f;
39
40 private Float performance = 1.0f;
41
42 private List<ConceptBreakdown> childBreakdown;
43
44 private Measurement measurement;
45
46
47
48
49
50
51
52 ConceptBreakdown(String conceptCode) {
53 this.parentConceptCode = null;
54 this.conceptCode = cleanCode(conceptCode);
55 }
56
57
58
59
60
61
62
63
64
65 ConceptBreakdown(String parentConceptCode, String conceptCode) {
66 this.parentConceptCode = cleanCode(parentConceptCode);
67 this.conceptCode = cleanCode(conceptCode);
68 }
69
70
71
72
73
74
75 public String getConceptCode() {
76 return conceptCode;
77 }
78
79 public void setConceptCode(String code) {
80 this.conceptCode = cleanCode(code);
81 }
82
83
84
85
86
87 public String getParentConceptCode() {
88 return parentConceptCode;
89 }
90
91 public void setParentConceptCode(String parentConceptCode) {
92 this.parentConceptCode = parentConceptCode;
93 }
94
95
96
97
98
99 public Float getFactor() {
100 return factor;
101 }
102
103 public void setFactor(Float factor) {
104 this.factor = factor;
105 }
106
107
108
109
110
111
112 public Float getPerformance() {
113 return performance;
114 }
115
116 public void setPerformance(Float performance) {
117 this.performance = performance;
118 }
119
120 protected boolean isMyConceptCode(String code) {
121 String cleanedCode = cleanCode(code);
122
123 return (this.conceptCode != null && this.conceptCode
124 .equals(cleanedCode));
125 }
126
127 private String cleanCode(String code) {
128 if (code == null) {
129 return null;
130 }
131 while (code.endsWith("#")) {
132 code = code.substring(0, code.length() - 1);
133 }
134 return code;
135 }
136
137
138
139
140
141
142 public Iterable<ConceptBreakdown> getChildBreakdownInfos() {
143 return childBreakdown;
144 }
145
146
147
148
149
150
151
152
153 boolean addChildBreakdownInfo(ConceptBreakdown breakdownInfo) {
154 if (childBreakdown == null) {
155 childBreakdown = new ArrayList<ConceptBreakdown>();
156 }
157 return childBreakdown.add(breakdownInfo);
158 }
159
160
161
162
163
164
165
166
167
168 public ConceptBreakdown getCodeBreakdown(String conceptCode) {
169 ConceptBreakdown bdinfo = isMyConceptCode(conceptCode) ? this : null;
170
171 if (bdinfo != null) {
172 return bdinfo;
173 }
174
175
176
177 int pathPosition = conceptCode.indexOf('\\');
178 if (pathPosition > 0) {
179 String parentCode = conceptCode.substring(0, pathPosition);
180 String childCode = conceptCode.substring(pathPosition + 1);
181 if (isMyConceptCode(parentCode)) {
182 return getChildBreakdown(childCode);
183 }
184 } else {
185 return getChildBreakdown(conceptCode);
186 }
187
188 return null;
189 }
190
191 private ConceptBreakdown getChildBreakdown(String childCode) {
192 if (childBreakdown != null) {
193 for (ConceptBreakdown childBreakdownInfo : getChildBreakdownInfos()) {
194 ConceptBreakdown foundBreakdownInfo = childBreakdownInfo
195 .getCodeBreakdown(childCode);
196 if (foundBreakdownInfo != null) {
197 return foundBreakdownInfo;
198 }
199 }
200 }
201 return null;
202 }
203
204 public Measurement getMeasurement() {
205 return measurement;
206 }
207
208 public void setMeasurement(Measurement measurement) {
209 this.measurement = measurement;
210 }
211
212 public boolean isWorkPackage() {
213 return measurement != null;
214 }
215
216 @Override
217 public String toString() {
218 return "ConceptBreakdown {" + "Parent concept code: "
219 + parentConceptCode
220 + ", Concept code: " + conceptCode + ", Factor: " + factor
221 + ", Performance: " + performance + ", Measurement: "
222 + measurement + ", Child BreakdownInfos: \n\t" + childBreakdown
223 + "}";
224 }
225 }