rsanchez
2015-01-28 fc256f48aa7e1a378f540fc1fdbde46739ff903c
securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
....@@ -1,7 +1,9 @@
11 package net.curisit.securis.services;
22
33 import java.util.Date;
4
+import java.util.HashMap;
45 import java.util.List;
6
+import java.util.Map;
57 import java.util.Set;
68
79 import javax.annotation.security.RolesAllowed;
....@@ -177,19 +179,24 @@
177179 currentapp.setDescription(app.getDescription());
178180
179181 Set<ApplicationMetadata> newMD = app.getApplicationMetadata();
180
- for (ApplicationMetadata currentMd : currentapp.getApplicationMetadata()) {
181
- if (newMD == null || !newMD.contains(currentMd)) {
182
+ Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
183
+ Map<String, ApplicationMetadata> directOldMD = getMapMD(oldMD);
184
+ Map<String, ApplicationMetadata> directNewMD = getMapMD(newMD);
185
+ for (ApplicationMetadata currentMd : oldMD) {
186
+ if (newMD == null || !directNewMD.containsKey(currentMd.getKey())) {
182187 em.remove(currentMd);
183188 }
184189 }
185190
186191 if (newMD != null) {
187
- Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
188192 for (ApplicationMetadata md : newMD) {
189
- if (oldMD.contains(md)) {
190
- em.merge(md);
193
+ if (directOldMD.containsKey(md.getKey())) {
194
+ ApplicationMetadata amd = directOldMD.get(md.getKey());
195
+ amd.setValue(md.getValue());
196
+ amd.setMandatory(md.isMandatory());
197
+ em.merge(amd);
191198 } else {
192
- md.setApplication(app);
199
+ md.setApplication(currentapp);
193200 if (md.getCreationTimestamp() == null) {
194201 md.setCreationTimestamp(app.getCreationTimestamp());
195202 }
....@@ -202,6 +209,16 @@
202209 return Response.ok(currentapp).build();
203210 }
204211
212
+ private Map<String, ApplicationMetadata> getMapMD(Set<ApplicationMetadata> amd) {
213
+ Map<String, ApplicationMetadata> map = new HashMap<String, ApplicationMetadata>();
214
+ if (amd != null) {
215
+ for (ApplicationMetadata applicationMetadata : amd) {
216
+ map.put(applicationMetadata.getKey(), applicationMetadata);
217
+ }
218
+ }
219
+ return map;
220
+ }
221
+
205222 @DELETE
206223 @Path("/{appid}")
207224 @EnsureTransaction