From 973ee9056995d1c9e7a533d9999329a70f0d2b2d Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Wed, 15 Oct 2014 07:49:46 +0000
Subject: [PATCH] #2021 config - Added pack and LicenseType Metadata management

---
 securis/src/main/resources/static/admin.html                                |    4 
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java |   26 ++++++
 securis/src/main/resources/static/licenses.html                             |    5 -
 securis/src/main/resources/static/js/catalogs.json                          |    3 
 securis/src/main/resources/static/main.html                                 |    2 
 securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java       |   29 ++++---
 securis/src/main/java/net/curisit/securis/db/LicenseType.java               |   15 +++
 securis/src/main/java/net/curisit/securis/db/PackMetadata.java              |   33 ++++---
 securis/src/main/resources/static/js/admin.js                               |   19 ++++
 securis/src/main/java/net/curisit/securis/db/Pack.java                      |   23 +++++
 securis/src/main/resources/db/schema.sql                                    |    6 -
 securis/src/main/java/net/curisit/securis/services/PackResource.java        |   26 ++++++
 12 files changed, 148 insertions(+), 43 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseType.java b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
index 41874fe..b483db2 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseType.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
@@ -45,7 +45,7 @@
 
     @Id
     @GeneratedValue
-    private int id;
+    private Integer id;
 
     private String code;
     private String name;
@@ -138,4 +138,17 @@
         this.creationTimestamp = creationTimestamp;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LicenseType))
+            return false;
+        LicenseType other = (LicenseType)obj; 
+        return id.equals(other.id);
+    }
+    
+    @Override
+    public int hashCode() {
+     
+        return (id == null ? 0 : id.hashCode());
+    }
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java b/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
index 3473d6c..b82a400 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
@@ -32,25 +32,15 @@
     private static final long serialVersionUID = 1L;
 
     @Id
-    @GeneratedValue
-    private int id;
-
-    private String key;
-
-    private String value;
-
     @JsonIgnore
     @ManyToOne
     @JoinColumn(name = "license_type_id")
     private LicenseType licenseType;
 
-    public int getId() {
-        return id;
-    }
+    @Id
+    private String key;
 
-    public void setId(int id) {
-        this.id = id;
-    }
+    private String value;
 
     @JsonProperty("licensetype_id")
     public Integer getLicenseTypeId() {
@@ -91,4 +81,17 @@
         this.key = key;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof LicenseTypeMetadata))
+            return false;
+        LicenseTypeMetadata other = (LicenseTypeMetadata)obj; 
+        return key.equals(other.key) && (licenseType == null || licenseType.equals(other.licenseType));
+    }
+    
+    @Override
+    public int hashCode() {
+     
+        return key.hashCode() + (licenseType == null ? 0 : licenseType.hashCode());
+    }
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/Pack.java b/securis/src/main/java/net/curisit/securis/db/Pack.java
index 5dd9993..6e89e47 100644
--- a/securis/src/main/java/net/curisit/securis/db/Pack.java
+++ b/securis/src/main/java/net/curisit/securis/db/Pack.java
@@ -42,7 +42,7 @@
 
     @Id
     @GeneratedValue
-    private int id;
+    private Integer id;
 
     private String code;
 
@@ -263,4 +263,25 @@
         this.licensePreactivation = licensePreactivation;
     }
 
+    public Set<PackMetadata> getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(Set<PackMetadata> metadata) {
+        this.metadata = metadata;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Pack))
+            return false;
+        Pack other = (Pack)obj; 
+        return id.equals(other.id);
+    }
+    
+    @Override
+    public int hashCode() {
+     
+        return (id == null ? 0 : id.hashCode());
+    }
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/PackMetadata.java b/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
index 7545457..a99a045 100644
--- a/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/PackMetadata.java
@@ -32,27 +32,18 @@
     private static final long serialVersionUID = 1L;
 
     @Id
-    @GeneratedValue
-    private int id;
+    @JsonIgnore
+    @ManyToOne
+    @JoinColumn(name = "pack_id")
+    private Pack pack;
 
+    @Id
     private String key;
 
     private String value;
 
     private boolean readonly;
 
-    @JsonIgnore
-    @ManyToOne
-    @JoinColumn(name = "pack_id")
-    private Pack pack;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
 
     @JsonProperty("pack_id")
     public Integer getPackId() {
@@ -100,5 +91,19 @@
     public void setReadonly(boolean readonly) {
         this.readonly = readonly;
     }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof PackMetadata))
+            return false;
+        PackMetadata other = (PackMetadata)obj; 
+        return key.equals(other.key) && (pack == null || pack.equals(other.pack));
+    }
+    
+    @Override
+    public int hashCode() {
+     
+        return key.hashCode() + (pack == null ? 0 : pack.hashCode());
+    }
 
 }
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 23eafa8..385a35c 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -2,6 +2,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.inject.Provider;
@@ -26,7 +27,9 @@
 import net.curisit.securis.DefaultExceptionHandler;
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.Application;
+import net.curisit.securis.db.ApplicationMetadata;
 import net.curisit.securis.db.LicenseType;
+import net.curisit.securis.db.LicenseTypeMetadata;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
@@ -123,6 +126,15 @@
 
         lt.setCreationTimestamp(new Date());
         em.persist(lt);
+        Set<LicenseTypeMetadata> newMD = lt.getMetadata(); 
+        
+        if (newMD != null) {
+            for (LicenseTypeMetadata md : newMD) {
+                md.setLicenseType(lt);
+                em.persist(md);
+            }
+        }
+        lt.setMetadata(newMD);
 
         return Response.ok(lt).build();
     }
@@ -155,6 +167,20 @@
         currentlt.setName(lt.getName());
         currentlt.setDescription(lt.getDescription());
         em.persist(currentlt);
+        
+        Set<LicenseTypeMetadata> newMD = lt.getMetadata(); 
+        for (LicenseTypeMetadata currentMd : currentlt.getMetadata()) {
+            if (newMD == null || !newMD.contains(currentMd));
+                em.remove(currentMd);
+        }
+        
+        if (newMD != null) {
+            for (LicenseTypeMetadata md : newMD) {
+                md.setLicenseType(currentlt);
+                em.persist(md);
+            }
+        }
+        currentlt.setMetadata(newMD);
 
         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 45c5bd9..39ac56d 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -3,6 +3,7 @@
 import java.security.Principal;
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 import javax.annotation.security.RolesAllowed;
 import javax.inject.Inject;
@@ -26,8 +27,10 @@
 import net.curisit.securis.DefaultExceptionHandler;
 import net.curisit.securis.SeCurisException;
 import net.curisit.securis.db.LicenseType;
+import net.curisit.securis.db.PackMetadata;
 import net.curisit.securis.db.Organization;
 import net.curisit.securis.db.Pack;
+import net.curisit.securis.db.PackMetadata;
 import net.curisit.securis.db.User;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
@@ -155,7 +158,15 @@
         pack.setCreatedBy(user);
         pack.setCreationTimestamp(new Date());
         em.persist(pack);
-
+        Set<PackMetadata> newMD = pack.getMetadata(); 
+        
+        if (newMD != null) {
+            for (PackMetadata md : newMD) {
+                md.setPack(pack);
+                em.persist(md);
+            }
+        }
+        pack.setMetadata(newMD);
         return Response.ok(pack).build();
     }
 
@@ -205,6 +216,19 @@
 
         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) {
+            for (PackMetadata md : newMD) {
+                md.setPack(currentPack);
+                em.persist(md);
+            }
+        }
+        currentPack.setMetadata(newMD);
         return Response.ok(pack).build();
     }
 
diff --git a/securis/src/main/resources/db/schema.sql b/securis/src/main/resources/db/schema.sql
index c52b116..d3fdf49 100644
--- a/securis/src/main/resources/db/schema.sql
+++ b/securis/src/main/resources/db/schema.sql
@@ -48,11 +48,10 @@
 
 drop table IF EXISTS licensetype_metadata;
 CREATE TABLE IF NOT EXISTS licensetype_metadata (
-  id INT NOT NULL auto_increment,
   license_type_id INT NOT NULL ,
   key VARCHAR(100) NOT NULL ,
   value VARCHAR(200) NULL ,
-  PRIMARY KEY (id));
+  PRIMARY KEY (license_type_id, key));
 
 drop table IF EXISTS organization;
 CREATE  TABLE IF NOT EXISTS organization (
@@ -85,12 +84,11 @@
   
 drop table IF EXISTS pack_metadata;
 CREATE TABLE IF NOT EXISTS pack_metadata (
-  id INT NOT NULL auto_increment,
   pack_id INT NOT NULL ,
   key VARCHAR(100) NOT NULL ,
   value VARCHAR(200) NULL ,
   readonly BOOlEAN NOT NULL default false,
-  PRIMARY KEY (id));
+  PRIMARY KEY (pack_id, key));
   
   
 drop table IF EXISTS license;
diff --git a/securis/src/main/resources/static/admin.html b/securis/src/main/resources/static/admin.html
index 37c07ef..4782cff 100644
--- a/securis/src/main/resources/static/admin.html
+++ b/securis/src/main/resources/static/admin.html
@@ -52,8 +52,8 @@
 									<p ng-switch-when="readonly" class="form-control-static">{{formu[field.name]}}</p>
 									<p ng-switch-when="readonly_date" class="form-control-static">{{formu[field.name] | date:'medium'}}</p>
 									<select ng-switch-when="select" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]"
-										ng-options="o.id as o.label for o in refs[field.name]" >
-										<option selected="true" ng-if="!field.mandatory" value=""></option>
+										ng-options="o.id as o.label for o in refs[field.name]" ng-change="selectFieldChanged(field.onchange)">
+										<option value="-1" selected></option>
 									</select>
 									<select chosen multiple ng-switch-when="multiselect" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]"
 										ng-options="o.id as o.label for o in refs[field.name]" data-placeholder="...">
diff --git a/securis/src/main/resources/static/js/admin.js b/securis/src/main/resources/static/js/admin.js
index a433436..53f9a70 100644
--- a/securis/src/main/resources/static/js/admin.js
+++ b/securis/src/main/resources/static/js/admin.js
@@ -66,7 +66,7 @@
 				$scope.edit = function(data) {
 					$scope.showForm = true;
 					$scope.isNew = false;
-					// Next line is a wirkaround due to some issues with values with ID == 0
+					// Next line is a workaround due to some issues with values with ID == 0
 					$('select').val(null);
 					$scope.formu = {}
 					var fields = Catalogs.getMetadata().fields;
@@ -130,6 +130,10 @@
 					$scope.$parent.showForm = true;
 					$('select').val(null);
 					$scope.$parent.formu = {};
+					
+					console.log("Refs:");
+					console.log($scope.refs);
+					
 					setTimeout(function() {
 						$('#'+Catalogs.getFFF()).focus();
 					}, 0);
@@ -165,6 +169,11 @@
 					}
 				}
 				
+				$scope.selectFieldChanged = function(onchangehandler) {
+					if (onchangehandler) {
+						$scope[onchangehandler]();
+					}
+				}
 				// Metadata management
 				
 				$scope.createMetadataRow = function() {
@@ -176,6 +185,14 @@
 				$scope.removeMetadataKey = function(row_md) {
 					$scope.formu.metadata.splice( $scope.formu.metadata.indexOf(row_md), 1 );
 				}
+				$scope.updateMetadata = function() {
+					// Called when Application ID change in current field
+					var newAppId = $scope.formu['application_id'];
+					console.log('Ready to get metadata from application: ' + newAppId);
+					Catalogs.getResource('application').get({appId: newAppId}).$promise.then(function(app) {
+						$scope.formu.metadata = app.metadata;
+					});
+				}
 				
 			} ]);
 
diff --git a/securis/src/main/resources/static/js/catalogs.json b/securis/src/main/resources/static/js/catalogs.json
index 2135103..bb11315 100644
--- a/securis/src/main/resources/static/js/catalogs.json
+++ b/securis/src/main/resources/static/js/catalogs.json
@@ -67,7 +67,8 @@
 		"display" : "Application",
 		"resource" : "application",
 		"mandatory" : true,
-		"type" : "select"
+		"type" : "select",
+		"onchange": "updateMetadata"
 	}, {
 		"name" : "creationTimestamp",
 		"display" : "Creation date",
diff --git a/securis/src/main/resources/static/licenses.html b/securis/src/main/resources/static/licenses.html
index 6ba2104..9f290c9 100644
--- a/securis/src/main/resources/static/licenses.html
+++ b/securis/src/main/resources/static/licenses.html
@@ -88,8 +88,7 @@
 							ng-required="mandatory.license_type_id"
 							ng-model="pack.license_type_id"
 							ng-options="o.id as o.label for o in refs.license_type_id">
-							<option selected="true" ng-if="!mandatory.license_type_id"
-								value=""></option>
+							
 						</select>
 						<div class="alert inline-alert alert-warning"
 							ng-show="packForm.license_type_id.$invalid">
@@ -106,8 +105,6 @@
 						<select class="form-control" ng-required="field.mandatory"
 							ng-model="pack.organization_id"
 							ng-options="o.id as o.label for o in refs.organization_id">
-							<option selected="true" ng-if="!mandatory.organization_id"
-								value=""></option>
 						</select>
 						<div class="alert inline-alert alert-warning"
 							ng-show="packForm.organization_id.$invalid">
diff --git a/securis/src/main/resources/static/main.html b/securis/src/main/resources/static/main.html
index a8d9bff..45e27e9 100644
--- a/securis/src/main/resources/static/main.html
+++ b/securis/src/main/resources/static/main.html
@@ -41,7 +41,7 @@
 	<script type="text/javascript"
 		src="/js/vendor/bootstrap-dialog.js"></script>
 	<script type="text/javascript"
-		src="/js/angular/angular.min.js"></script>
+		src="/js/angular/angular.js"></script>
 	<script type="text/javascript"
 		src="/js/angular/angular-route.min.js"></script>
 	<script type="text/javascript"

--
Gitblit v1.3.2