From 04f9a9d2dbd2d79bfffea9c5a6b7ba1b32c5f42b Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 17 Nov 2014 15:29:03 +0000
Subject: [PATCH] #396 fix - Supporting MySQL, changed "persist()" by "merge()"

---
 securis/src/main/resources/META-INF/persistence.xml                           |    5 +-
 securis/src/main/java/net/curisit/securis/db/License.java                     |    4 ++
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java   |   26 ++++++++----
 securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java |    2 
 securis/src/main/resources/log4j2.xml                                         |    1 
 securis/src/main/java/net/curisit/securis/db/LicenseHistory.java              |   21 ++++++----
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java       |    8 +++-
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java   |   21 ++++++----
 securis/src/main/java/net/curisit/securis/services/PackResource.java          |   21 ++++++----
 9 files changed, 69 insertions(+), 40 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/License.java b/securis/src/main/java/net/curisit/securis/db/License.java
index 5d28362..c8e1e1a 100644
--- a/securis/src/main/java/net/curisit/securis/db/License.java
+++ b/securis/src/main/java/net/curisit/securis/db/License.java
@@ -16,6 +16,7 @@
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
+import javax.persistence.NoResultException;
 import javax.persistence.NonUniqueResultException;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@@ -349,6 +350,9 @@
             LOG.error("There are more than 1 active license for request data: {}\nHash: {}", requestData, BlockedRequest.generateHash(requestData));
             throw new SeCurisServiceException(ErrorCodes.DUPLICATED_REQUEST_DATA, "There are more than 1 active license for request data hash: "
                     + BlockedRequest.generateHash(requestData));
+        } catch (NoResultException e) {
+            // There is no license for request data
+            return null;
         }
     }
 
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java b/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
index 3666c03..e44e236 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseHistory.java
@@ -3,6 +3,7 @@
 import java.io.Serializable;
 import java.util.Date;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
@@ -52,7 +53,9 @@
     private String action;
     private String comments;
 
-    private Date timestamp;
+    @Column(name = "creation_timestamp")
+    @JsonProperty("creation_timestamp")
+    private Date creationTimestamp;
 
     public int getId() {
         return id;
@@ -95,18 +98,18 @@
         this.comments = comments;
     }
 
-    public Date getTimestamp() {
-        return timestamp;
-    }
-
-    public void setTimestamp(Date timestamp) {
-        this.timestamp = timestamp;
-    }
-
     public void setId(int id) {
         this.id = id;
     }
 
+    public Date getCreationTimestamp() {
+        return creationTimestamp;
+    }
+
+    public void setCreationTimestamp(Date creationTimestamp) {
+        this.creationTimestamp = creationTimestamp;
+    }
+
     public static class Actions {
         public static final String CREATE = "creation";
         public static final String ADD_REQUEST = "request";
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 c399160..28e3625 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -154,22 +154,27 @@
         }
         currentapp.setName(app.getName());
         currentapp.setDescription(app.getDescription());
-        em.persist(currentapp);
+        em.merge(currentapp);
 
         Set<ApplicationMetadata> newMD = app.getApplicationMetadata();
         for (ApplicationMetadata currentMd : currentapp.getApplicationMetadata()) {
-            if (newMD == null || !newMD.contains(currentMd))
-                ;
-            em.remove(currentMd);
+            if (newMD == null || !newMD.contains(currentMd)) {
+                em.remove(currentMd);
+            }
         }
 
         if (newMD != null) {
+            Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
             for (ApplicationMetadata md : newMD) {
-                md.setApplication(app);
-                if (md.getCreationTimestamp() == null) {
-                    md.setCreationTimestamp(app.getCreationTimestamp());
+                if (oldMD.contains(md)) {
+                    em.merge(md);
+                } else {
+                    md.setApplication(app);
+                    if (md.getCreationTimestamp() == null) {
+                        md.setCreationTimestamp(app.getCreationTimestamp());
+                    }
+                    em.persist(md);
                 }
-                em.persist(md);
             }
         }
         currentapp.setApplicationMetadata(app.getApplicationMetadata());
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
index e338592..2428bb1 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -358,11 +358,11 @@
             try {
                 lic.setRequestData(JsonUtils.toJSON((RequestBean) signedLicense));
                 if (BlockedRequest.isRequestBlocked(lic.getRequestData(), em)) {
-                    throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activate");
+                    throw new SeCurisServiceException(ErrorCodes.BLOCKED_REQUEST_DATA, "Given request data is blocked and cannot be activated");
                 }
                 lic.setLicenseData(JsonUtils.toJSON(signedLicense));
             } catch (SeCurisException e) {
-                LOG.error("Error generaing license JSON", e);
+                LOG.error("Error generating license JSON", e);
                 throw new SeCurisServiceException(ErrorCodes.INVALID_FORMAT, "Error generating license JSON");
             }
         } else {
@@ -371,11 +371,15 @@
         lic.setCreatedBy(createdBy);
         lic.setCreationTimestamp(new Date());
         lic.setModificationTimestamp(lic.getCreationTimestamp());
+        LOG.info("LICENSE: {}", lic);
         em.persist(lic);
+        LOG.info("LICENSE on HISTORY create");
         em.persist(licenseHelper.createLicenseHistoryAction(lic, createdBy, LicenseHistory.Actions.CREATE));
         if (lic.getStatus() == LicenseStatus.ACTIVE) {
+            LOG.info("LICENSE ACTIVATION on HISTORY create");
             em.persist(licenseHelper.createLicenseHistoryAction(lic, createdBy, LicenseHistory.Actions.CREATE, "Activated on creation"));
         }
+        LOG.info("LICENSE created oK ??");
 
         return Response.ok(lic).build();
     }
diff --git a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
index 2a800e0..79f4e5c 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -132,8 +132,8 @@
 
         lt.setCreationTimestamp(new Date());
         em.persist(lt);
-        Set<LicenseTypeMetadata> newMD = lt.getMetadata(); 
-        
+        Set<LicenseTypeMetadata> newMD = lt.getMetadata();
+
         if (newMD != null) {
             for (LicenseTypeMetadata md : newMD) {
                 md.setLicenseType(lt);
@@ -174,21 +174,29 @@
         currentlt.setCode(lt.getCode());
         currentlt.setName(lt.getName());
         currentlt.setDescription(lt.getDescription());
-        em.persist(currentlt);
-        
-        Set<LicenseTypeMetadata> newMD = lt.getMetadata(); 
+
+        Set<LicenseTypeMetadata> newMD = lt.getMetadata();
         for (LicenseTypeMetadata currentMd : currentlt.getMetadata()) {
-            if (newMD == null || !newMD.contains(currentMd));
+            if (newMD == null || !newMD.contains(currentMd)) {
                 em.remove(currentMd);
+                LOG.info("Removing MD: {}", currentMd);
+            }
         }
-        
+
         if (newMD != null) {
+            Set<LicenseTypeMetadata> oldMD = currentlt.getMetadata();
+
             for (LicenseTypeMetadata md : newMD) {
-                md.setLicenseType(currentlt);
-                em.persist(md);
+                if (oldMD.contains(md)) {
+                    em.merge(md);
+                } else {
+                    md.setLicenseType(currentlt);
+                    em.persist(md);
+                }
             }
         }
         currentlt.setMetadata(newMD);
+        em.merge(currentlt);
 
         return Response.ok(currentlt).build();
     }
diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index cd18426..8a29756 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -225,23 +225,28 @@
         currentPack.setComments(pack.getComments());
         currentPack.setNumLicenses(pack.getNumLicenses());
 
-        em.persist(currentPack);
-
         Set<PackMetadata> newMD = pack.getMetadata();
         for (PackMetadata currentMd : currentPack.getMetadata()) {
-            if (newMD == null || !newMD.contains(currentMd))
-                ;
-            em.remove(currentMd);
+            if (newMD == null || !newMD.contains(currentMd)) {
+                em.remove(currentMd);
+            }
         }
 
         if (newMD != null) {
+            Set<PackMetadata> oldMD = currentPack.getMetadata();
             for (PackMetadata md : newMD) {
-                md.setPack(currentPack);
-                em.persist(md);
+                if (oldMD.contains(md)) {
+                    em.merge(md);
+                } else {
+                    md.setPack(currentPack);
+                    em.persist(md);
+                }
             }
         }
         currentPack.setMetadata(newMD);
-        return Response.ok(pack).build();
+        em.merge(currentPack);
+
+        return Response.ok(currentPack).build();
     }
 
     @POST
diff --git a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
index 191e53d..e3346b2 100644
--- a/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
+++ b/securis/src/main/java/net/curisit/securis/services/helpers/LicenseHelper.java
@@ -45,7 +45,7 @@
         LicenseHistory lh = new LicenseHistory();
         lh.setLicense(lic);
         lh.setUser(user);
-        lh.setTimestamp(new Date());
+        lh.setCreationTimestamp(new Date());
         lh.setAction(action);
         lh.setComments(comments);
         return lh;
diff --git a/securis/src/main/resources/META-INF/persistence.xml b/securis/src/main/resources/META-INF/persistence.xml
index 69af565..92977c8 100644
--- a/securis/src/main/resources/META-INF/persistence.xml
+++ b/securis/src/main/resources/META-INF/persistence.xml
@@ -14,8 +14,9 @@
 			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
 			<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/SeCurisDS" />
 
-<!-- 			<property name="hibernate.show_sql" value="true" />
-			<property name="hibernate.format_sql" value="true"/>
+ 			<property name="hibernate.show_sql" value="true" />
+ 			
+ 			<!-- 			<property name="hibernate.format_sql" value="true"/>
  -->			
 		</properties>
 
diff --git a/securis/src/main/resources/log4j2.xml b/securis/src/main/resources/log4j2.xml
index c78efd8..b8b903c 100644
--- a/securis/src/main/resources/log4j2.xml
+++ b/securis/src/main/resources/log4j2.xml
@@ -23,7 +23,6 @@
 		<Console name="console" target="SYSTEM_OUT">
 			<PatternLayout pattern="%m%n" />
 		</Console>
-
 	</Appenders>
 	<Loggers>
 

--
Gitblit v1.3.2