From fc256f48aa7e1a378f540fc1fdbde46739ff903c Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Wed, 28 Jan 2015 23:12:42 +0000
Subject: [PATCH] #0 fix - Fixed Application modification service

---
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
index 872dfa6..e103f1a 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -1,7 +1,9 @@
 package net.curisit.securis.services;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.annotation.security.RolesAllowed;
@@ -177,19 +179,24 @@
         currentapp.setDescription(app.getDescription());
 
         Set<ApplicationMetadata> newMD = app.getApplicationMetadata();
-        for (ApplicationMetadata currentMd : currentapp.getApplicationMetadata()) {
-            if (newMD == null || !newMD.contains(currentMd)) {
+        Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
+        Map<String, ApplicationMetadata> directOldMD = getMapMD(oldMD);
+        Map<String, ApplicationMetadata> directNewMD = getMapMD(newMD);
+        for (ApplicationMetadata currentMd : oldMD) {
+            if (newMD == null || !directNewMD.containsKey(currentMd.getKey())) {
                 em.remove(currentMd);
             }
         }
 
         if (newMD != null) {
-            Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
             for (ApplicationMetadata md : newMD) {
-                if (oldMD.contains(md)) {
-                    em.merge(md);
+                if (directOldMD.containsKey(md.getKey())) {
+                    ApplicationMetadata amd = directOldMD.get(md.getKey());
+                    amd.setValue(md.getValue());
+                    amd.setMandatory(md.isMandatory());
+                    em.merge(amd);
                 } else {
-                    md.setApplication(app);
+                    md.setApplication(currentapp);
                     if (md.getCreationTimestamp() == null) {
                         md.setCreationTimestamp(app.getCreationTimestamp());
                     }
@@ -202,6 +209,16 @@
         return Response.ok(currentapp).build();
     }
 
+    private Map<String, ApplicationMetadata> getMapMD(Set<ApplicationMetadata> amd) {
+        Map<String, ApplicationMetadata> map = new HashMap<String, ApplicationMetadata>();
+        if (amd != null) {
+            for (ApplicationMetadata applicationMetadata : amd) {
+                map.put(applicationMetadata.getKey(), applicationMetadata);
+            }
+        }
+        return map;
+    }
+
     @DELETE
     @Path("/{appid}")
     @EnsureTransaction

--
Gitblit v1.3.2