From edd47c68c6a08bd756d96213c38e896a0a257bd1 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Mon, 13 Jan 2014 18:12:51 +0000
Subject: [PATCH] #394 feature - Several fixes related with form management
---
securis/src/main/resources/static/admin.html | 3 ++-
securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java | 3 +++
securis/src/main/resources/static/js/catalogs.json | 1 +
securis/src/main/java/net/curisit/securis/db/Organization.java | 8 ++++++--
securis/src/main/java/net/curisit/securis/services/UserResource.java | 4 ++--
securis/src/main/resources/static/js/catalogs.js | 6 ++++--
securis/src/main/java/net/curisit/securis/services/OrganizationResource.java | 17 +++++++++++++++--
securis/src/main/resources/static/js/admin.js | 14 +++++++++++---
8 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/securis/src/main/java/net/curisit/securis/db/Organization.java b/securis/src/main/java/net/curisit/securis/db/Organization.java
index fd107b9..57e536a 100644
--- a/securis/src/main/java/net/curisit/securis/db/Organization.java
+++ b/securis/src/main/java/net/curisit/securis/db/Organization.java
@@ -136,8 +136,12 @@
// information about the referenced entities.
@JsonProperty("org_parent_id")
public void setParentOrgId(Integer orgId) {
- parentOrganization = new Organization();
- parentOrganization.setId(orgId);
+ if (orgId != null) {
+ parentOrganization = new Organization();
+ parentOrganization.setId(orgId);
+ } else {
+ parentOrganization = null;
+ }
}
@JsonProperty("org_parent_id")
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 b229507..e805b47 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -111,6 +111,9 @@
log.error("LicenseType application with id {} not found in DB", lt.getApplicationId());
return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "License type's app not found with ID: " + lt.getApplicationId()).build();
}
+ } else {
+ log.error("Application is missing for current license type data");
+ return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Application is missing for current license type data").build();
}
lt.setApplication(app);
diff --git a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
index b8b8cc3..a7cbbcf 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -96,6 +96,15 @@
return Response.ok(lt).build();
}
+ private boolean isCyclicalRelationship(int currentId, Organization parent) {
+ while (parent != null) {
+ if (parent.getId() == currentId)
+ return true;
+ parent = parent.getParentOrganization();
+ }
+ return false;
+ }
+
@POST
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
@@ -157,6 +166,10 @@
log.error("Organization parent with id {} not found in DB", org.getParentOrgId());
return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Organization's parent not found with ID: " + org.getParentOrgId()).build();
}
+ if (isCyclicalRelationship(currentOrg.getId(), parentOrg)) {
+ log.error("Organization parent generate a cyclical relationship, parent id {}, current id: {}", org.getParentOrgId(), currentOrg.getId());
+ return Response.status(Status.FORBIDDEN).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Cyclical relationships are not allowed, please change the parent organization, current Parent: " + parentOrg.getName()).build();
+ }
}
List<User> users = null;
@@ -165,8 +178,8 @@
users = new ArrayList<>();
for (String username : usersIds) {
User user = em.find(User.class, username);
- if (parentOrg == null) {
- log.error("Organization user with id {} not found in DB", username);
+ if (user == null) {
+ log.error("Organization user with id '{}' not found in DB", username);
return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Organization's user not found with ID: " + username).build();
}
users.add(user);
diff --git a/securis/src/main/java/net/curisit/securis/services/UserResource.java b/securis/src/main/java/net/curisit/securis/services/UserResource.java
index 25d2445..28fab1d 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -89,7 +89,7 @@
}
EntityManager em = emProvider.get();
- User lt = em.find(User.class, Integer.parseInt(uid));
+ User lt = em.find(User.class, uid);
if (lt == null) {
log.error("User with id {} not found in DB", uid);
return Response.status(Status.NOT_FOUND).build();
@@ -187,7 +187,7 @@
public Response delete(@PathParam("uid") String uid, @Context HttpServletRequest request) {
log.info("Deleting app with id: {}", uid);
EntityManager em = emProvider.get();
- User app = em.find(User.class, Integer.parseInt(uid));
+ User app = em.find(User.class, uid);
if (app == null) {
log.error("User with id {} can not be deleted, It was not found in DB", uid);
return Response.status(Status.NOT_FOUND).build();
diff --git a/securis/src/main/resources/static/admin.html b/securis/src/main/resources/static/admin.html
index c68eaac..3c313a2 100644
--- a/securis/src/main/resources/static/admin.html
+++ b/securis/src/main/resources/static/admin.html
@@ -154,7 +154,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]">
+ ng-options="o.id as o.label for o in refs[field.name]" >
+ <option selected="true" ng-if="!field.mandatory" value=""></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 53b2125..5953c1c 100644
--- a/securis/src/main/resources/static/js/admin.js
+++ b/securis/src/main/resources/static/js/admin.js
@@ -62,10 +62,15 @@
$scope.edit = function(data) {
$scope.showForm = true;
$scope.isNew = false;
+ // Next line is a wirkaround due to some issues with values with ID == 0
+ $('select').val(null);
$scope.formu = {}
- for (var k in data) {
- if (k.indexOf('$') !== 0 && k.indexOf('_') !== 0 && !Catalogs.getField(k).listingOnly) $scope.formu[k] = data[k]
- }
+ var fields = Catalogs.getMetadata().fields;
+ console.log($scope);
+
+ fields.forEach(function(field) {
+ if (!field.listingOnly) $scope.formu[field.name] = data[field.name] || null;
+ })
setTimeout(function() {
$('#'+Catalogs.getFFF()).focus();
@@ -117,6 +122,7 @@
$scope.editNew = function() {
$scope.$parent.isNew = true;
$scope.$parent.showForm = true;
+ $('select').val(null);
$scope.$parent.formu = {};
setTimeout(function() {
$('#'+Catalogs.getFFF()).focus();
@@ -125,6 +131,7 @@
}
$scope.cancel = function() {
$scope.$parent.showForm = false;
+ $scope.catalogForm.$setPristine();
}
$scope.saveCatalog = function() {
@@ -134,6 +141,7 @@
var promise = Catalogs.save($scope.formu).$promise;
promise.then(function(data, otro) {
if ($scope.isNew) {
+ $scope.catalogForm.$setPristine();
$scope.$parent.formu = {}
$('#'+ Catalogs.getFFF()).focus();
} else {
diff --git a/securis/src/main/resources/static/js/catalogs.js b/securis/src/main/resources/static/js/catalogs.js
index 518fd65..77ad975 100644
--- a/securis/src/main/resources/static/js/catalogs.js
+++ b/securis/src/main/resources/static/js/catalogs.js
@@ -183,13 +183,15 @@
$q.all(promises).then(function() {
for (var k in refs) {
- var pk = that.getPk(that.getMetadata(that.getField(k).resource))
+ var field = that.getField(k);
+ var pk = that.getPk(that.getMetadata(field.resource))
console.log('PK field for ' + k + ' is ' + pk)
var comboData = []
refs[k].forEach(function(row) {
+ console.log('field.resource !== _current.resource: ' + field.resource +' '+ _current.resource)
comboData.push({
id: row[pk],
- label: row.label || row.name || row.code || row.first_name + ' ' + row.last_name
+ label: row.label || row.name || row.code || row.first_name + ' ' + (row.last_name || '')
});
})
refs[k] = comboData;
diff --git a/securis/src/main/resources/static/js/catalogs.json b/securis/src/main/resources/static/js/catalogs.json
index c2efe6b..a2c24d9 100644
--- a/securis/src/main/resources/static/js/catalogs.json
+++ b/securis/src/main/resources/static/js/catalogs.json
@@ -61,6 +61,7 @@
"name" : "application_id",
"display" : "Application",
"resource" : "application",
+ "mandatory" : true,
"type" : "select"
}, {
"name" : "creationTimestamp",
--
Gitblit v1.3.2