| .. | .. |
|---|
| 1 | 1 | package net.curisit.securis.services; |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | import java.util.Date; |
|---|
| 4 | +import java.util.HashMap; |
|---|
| 4 | 5 | import java.util.List; |
|---|
| 6 | +import java.util.Map; |
|---|
| 5 | 7 | import java.util.Set; |
|---|
| 6 | 8 | |
|---|
| 7 | 9 | import javax.annotation.security.RolesAllowed; |
|---|
| .. | .. |
|---|
| 177 | 179 | currentapp.setDescription(app.getDescription()); |
|---|
| 178 | 180 | |
|---|
| 179 | 181 | 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())) { |
|---|
| 182 | 187 | em.remove(currentMd); |
|---|
| 183 | 188 | } |
|---|
| 184 | 189 | } |
|---|
| 185 | 190 | |
|---|
| 186 | 191 | if (newMD != null) { |
|---|
| 187 | | - Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata(); |
|---|
| 188 | 192 | 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); |
|---|
| 191 | 198 | } else { |
|---|
| 192 | | - md.setApplication(app); |
|---|
| 199 | + md.setApplication(currentapp); |
|---|
| 193 | 200 | if (md.getCreationTimestamp() == null) { |
|---|
| 194 | 201 | md.setCreationTimestamp(app.getCreationTimestamp()); |
|---|
| 195 | 202 | } |
|---|
| .. | .. |
|---|
| 202 | 209 | return Response.ok(currentapp).build(); |
|---|
| 203 | 210 | } |
|---|
| 204 | 211 | |
|---|
| 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 | + |
|---|
| 205 | 222 | @DELETE |
|---|
| 206 | 223 | @Path("/{appid}") |
|---|
| 207 | 224 | @EnsureTransaction |
|---|