Revision 58708
Added by Konstantina Galouni almost 4 years ago
IndicatorController.java | ||
---|---|---|
12 | 12 |
import java.io.UnsupportedEncodingException; |
13 | 13 |
import java.net.URLEncoder; |
14 | 14 |
import java.util.ArrayList; |
15 |
import java.util.HashMap; |
|
15 | 16 |
import java.util.List; |
16 | 17 |
import java.util.Map; |
17 | 18 |
|
... | ... | |
51 | 52 |
|
52 | 53 |
Section<String> section = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId, sectionId, indicator.getType()); |
53 | 54 |
|
55 |
Indicator oldIndicator = null; |
|
56 |
if(indicator.getId() != null) { |
|
57 |
oldIndicator = indicatorDAO.findById(indicator.getId()); |
|
58 |
} |
|
59 |
|
|
54 | 60 |
String indicatorId = indicator.getId(); |
55 | 61 |
indicatorDAO.save(indicator); |
56 | 62 |
|
... | ... | |
61 | 67 |
onSaveDefaultIndicator(indicator, sectionId); |
62 | 68 |
} |
63 | 69 |
else { |
64 |
onUpdateDefaultIndicator(indicator, stakeholder); |
|
70 |
onUpdateDefaultIndicator(indicator, stakeholder, oldIndicator);
|
|
65 | 71 |
} |
66 | 72 |
} |
67 | 73 |
|
... | ... | |
100 | 106 |
} |
101 | 107 |
} |
102 | 108 |
|
103 |
public void onUpdateDefaultIndicator(Indicator indicator, Stakeholder stakeholder) throws UnsupportedEncodingException { |
|
109 |
public void onUpdateDefaultIndicator(Indicator indicator, Stakeholder stakeholder, Indicator oldIndicator) throws UnsupportedEncodingException {
|
|
104 | 110 |
log.debug("On update default indicator"); |
105 | 111 |
|
106 | 112 |
// indicator already exists - check if changed and update all indicators based on it |
... | ... | |
109 | 115 |
List<Indicator> indicators = indicatorDAO.findByDefaultId(indicator.getId()); |
110 | 116 |
|
111 | 117 |
for(Indicator indicatorBasedOnDefault : indicators) { |
118 |
if(indicator.getName() != null && !indicator.getName().equals(indicatorBasedOnDefault.getName()) |
|
119 |
&& (oldIndicator.getName() == null || oldIndicator.getName().equals(indicatorBasedOnDefault.getName()))) { |
|
120 |
|
|
121 |
indicatorBasedOnDefault.setName(indicator.getName()); |
|
122 |
changed = true; |
|
123 |
} |
|
124 |
|
|
125 |
if(indicator.getDescription() != null && !indicator.getDescription().equals(indicatorBasedOnDefault.getDescription()) |
|
126 |
&& (oldIndicator.getDescription() == null || oldIndicator.getDescription().equals(indicatorBasedOnDefault.getDescription()))) { |
|
127 |
|
|
128 |
indicatorBasedOnDefault.setName(indicator.getName()); |
|
129 |
changed = true; |
|
130 |
} |
|
131 |
|
|
112 | 132 |
int i = 0; |
113 | 133 |
List<IndicatorPath> indicatorPaths = indicatorBasedOnDefault.getIndicatorPaths(); |
114 | 134 |
|
... | ... | |
122 | 142 |
indicatorPaths.add(indicatorPathNew); |
123 | 143 |
changed = true; |
124 | 144 |
} else { |
145 |
IndicatorPath oldIndicatorPath = oldIndicator.getIndicatorPaths().get(i); |
|
146 |
|
|
125 | 147 |
// Check if there are changes in indicator path and update existing indicators if needed |
126 |
if(!indicatorPath.getType().equals(indicatorPathBasedOnDefault.getType())) { |
|
148 |
log.debug("update indicator path: "+i); |
|
149 |
if(!indicatorPath.getType().equals(indicatorPathBasedOnDefault.getType()) |
|
150 |
&& (oldIndicatorPath.getType().equals(indicatorPathBasedOnDefault.getType()))) { |
|
151 |
|
|
127 | 152 |
indicatorPathBasedOnDefault.setType(indicatorPath.getType()); |
128 |
changed = true; |
|
153 |
changed = true; // parameter "type" needs to be changed as well
|
|
129 | 154 |
} |
130 |
if(!indicatorPath.getSource().equals(indicatorPathBasedOnDefault.getSource())) { |
|
155 |
log.debug("After type check: "+changed); |
|
156 |
|
|
157 |
if(!indicatorPath.getSource().equals(indicatorPathBasedOnDefault.getSource()) |
|
158 |
&& (oldIndicatorPath.getSource().equals(indicatorPathBasedOnDefault.getSource()))) { |
|
159 |
|
|
131 | 160 |
indicatorPathBasedOnDefault.setSource(indicatorPath.getSource()); |
132 | 161 |
changed = true; |
133 | 162 |
} |
134 |
if(!indicatorPath.getUrl().equals(indicatorPathBasedOnDefault.getUrl())) { |
|
163 |
log.debug("After source check: "+changed); |
|
164 |
|
|
165 |
if(!indicatorPath.getUrl().equals(indicatorPathBasedOnDefault.getUrl()) |
|
166 |
&& (oldIndicatorPath.getUrl().equals(indicatorPathBasedOnDefault.getUrl()))) { |
|
167 |
|
|
135 | 168 |
indicatorPathBasedOnDefault.setUrl(indicatorPath.getUrl()); |
136 | 169 |
changed = true; |
137 | 170 |
} |
138 |
if(!indicatorPath.getChartObject().equals(indicatorPathBasedOnDefault.getChartObject())) { |
|
171 |
log.debug("After url check: "+changed); |
|
172 |
|
|
173 |
if(!indicatorPath.getChartObject().equals(indicatorPathBasedOnDefault.getChartObject()) |
|
174 |
&& (oldIndicatorPath.getChartObject().equals(indicatorPathBasedOnDefault.getChartObject()))) { |
|
175 |
|
|
139 | 176 |
indicatorPathBasedOnDefault.setChartObject(indicatorPath.getChartObject()); |
140 | 177 |
changed = true; |
141 | 178 |
} |
142 |
if(indicatorPath.getParameters().size() != indicatorPathBasedOnDefault.getParameters().size()) { |
|
143 |
for (Map.Entry<String, String> parameter : indicatorPath.getParameters().entrySet()) { |
|
144 |
if(!indicatorPathBasedOnDefault.getParameters().containsKey(parameter.getKey())) { |
|
145 |
indicatorPathBasedOnDefault.getParameters().put(parameter.getKey(), parameter.getValue()); |
|
179 |
log.debug("After chartObject check: "+changed); |
|
180 |
|
|
181 |
if(indicatorPath.getParameters() != null) { |
|
182 |
if (indicatorPathBasedOnDefault.getParameters() == null) { |
|
183 |
indicatorPathBasedOnDefault.setParameters(new HashMap<>()); |
|
184 |
} |
|
185 |
//if (indicatorPath.getParameters().size() != indicatorPathBasedOnDefault.getParameters().size()) { |
|
186 |
//log.debug("Different number of parameters"); |
|
187 |
for (Map.Entry<String, String> parameter : indicatorPath.getParameters().entrySet()) { |
|
188 |
log.debug("\nindicatorPath: parameter.getKey(): "+parameter.getKey()+" - value: "+parameter.getValue() |
|
189 |
+"\nindicatorPathBasedOnDefault:parameters:key: "+ indicatorPathBasedOnDefault.getParameters().get(parameter.getKey()) |
|
190 |
+"\noldIndicatorPath:parameters:key: "+ oldIndicatorPath.getParameters().get(parameter.getKey())); |
|
191 |
if (!indicatorPathBasedOnDefault.getParameters().containsKey(parameter.getKey()) |
|
192 |
|| (oldIndicatorPath.getParameters() == null |
|
193 |
|| (oldIndicatorPath.getParameters().get(parameter.getKey()).equals(indicatorPathBasedOnDefault.getParameters().get(parameter.getKey())) |
|
194 |
&& !parameter.getValue().equals(indicatorPathBasedOnDefault.getParameters().get(parameter.getKey())))) |
|
195 |
) { |
|
196 |
indicatorPathBasedOnDefault.getParameters().put(parameter.getKey(), parameter.getValue()); |
|
197 |
changed = true; |
|
198 |
} |
|
199 |
// else if(parameter.getKey().equals("type")) { |
|
200 |
// indicatorPathBasedOnDefault.getParameters().put(parameter.getKey(), parameter.getValue()); |
|
201 |
// changed = true; |
|
202 |
// } |
|
146 | 203 |
} |
147 |
}
|
|
148 |
parameterMapping(indicatorPathBasedOnDefault, stakeholder);
|
|
149 |
changed = true;
|
|
204 |
parameterMapping(indicatorPathBasedOnDefault, stakeholder);
|
|
205 |
//}
|
|
206 |
log.debug("After parameters check: " + changed);
|
|
150 | 207 |
} |
151 |
int j=0; |
|
152 |
for(String jsonString : indicatorPath.getJsonPath()) { |
|
153 |
String jsonStringBasedOnDefault = indicatorPathBasedOnDefault.getJsonPath().get(j); |
|
154 |
if(!jsonString.equals(jsonStringBasedOnDefault)) { |
|
155 |
indicatorPathBasedOnDefault.getJsonPath().set(j, jsonString); |
|
156 |
changed = true; |
|
208 |
|
|
209 |
if(indicatorPath.getJsonPath() != null) { |
|
210 |
int j = 0; |
|
211 |
for (String jsonString : indicatorPath.getJsonPath()) { |
|
212 |
log.debug("indicatorPath.getJsonPath(): " + jsonString); |
|
213 |
String jsonStringBasedOnDefault = null; |
|
214 |
if(indicatorPathBasedOnDefault.getJsonPath() != null ) { |
|
215 |
jsonStringBasedOnDefault = indicatorPathBasedOnDefault.getJsonPath().get(j); |
|
216 |
} else { |
|
217 |
indicatorPathBasedOnDefault.setJsonPath(new ArrayList<>()); |
|
218 |
} |
|
219 |
log.debug("indicatorPathBasedOnDefault.getJsonPath().get(" + j + "): " + jsonStringBasedOnDefault); |
|
220 |
|
|
221 |
if (!jsonString.equals(jsonStringBasedOnDefault) |
|
222 |
&& (oldIndicatorPath.getJsonPath() == null |
|
223 |
|| oldIndicatorPath.getJsonPath().get(i).equals(jsonStringBasedOnDefault)) |
|
224 |
) { |
|
225 |
indicatorPathBasedOnDefault.getJsonPath().set(j, jsonString); |
|
226 |
changed = true; |
|
227 |
} |
|
228 |
j++; |
|
157 | 229 |
} |
158 |
j++;
|
|
230 |
log.debug("After jsonPath check: " + changed);
|
|
159 | 231 |
} |
160 | 232 |
} |
161 | 233 |
i++; |
162 | 234 |
} |
235 |
|
|
163 | 236 |
if(!changed) { |
164 |
break; |
|
237 |
// break; |
|
238 |
continue; |
|
165 | 239 |
} |
240 |
|
|
166 | 241 |
indicatorDAO.save(indicatorBasedOnDefault); |
167 | 242 |
} |
168 | 243 |
} |
Also available in: Unified diff
[Trunk | Monitor Service]:
1. Stakeholder.java: Field 'name' added.
2. Section.java: In method 'copyFromDefault()' initialize indicators (empty list).
3. StakeholderDAO.java & MongoDBStakeholderDAO.java: Added method 'Stakeholder findByTopicsContaining(String topic);' (needed to find in which Stakeholder a Topic belongs - section needs stakeholderAlias).
4. TopicDAO.java & MongoDBTopicDAO.java: Added method 'Topic findByCategoriesContaining(String category);' (needed to find in which Topic a Category belongs - section needs stakeholderAlias).
5. CategoryDAO.java & MongoDBCategoryDAO.java: Added method 'Category findBySubCategoriesContaining(String subCategory);' (needed to find in which Category a SubCategory belongs - section needs stakeholderAlias).
6. TopicController.java & CategoryController.java & SubCategoryController.java & SectionController.java & IndicatorController.java:
Bug fixes & changed logic for updates on default profile: When a value in a profile is same as the value in default, inherit changes in default value, otherwise keep local profile's options.