From 4c13c7324a920f5cca9601154e5224e5d7484fa9 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Fri, 12 Dec 2014 18:09:27 +0000
Subject: [PATCH] #2140 fix - Many changes related with cahce and JPA cycling relationships

---
 securis/src/main/resources/META-INF/persistence.xml                          |    5 
 securis/src/main/webapp/js/catalogs.js                                       |   41 +++++---
 securis/src/main/webapp/js/admin.js                                          |   19 ++-
 securis/src/main/java/net/curisit/securis/db/Application.java                |   25 ++--
 securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java        |   20 ---
 securis/src/main/java/net/curisit/securis/services/BasicServices.java        |    3 
 securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java        |   23 ---
 securis/src/main/java/net/curisit/securis/services/ApplicationResource.java  |   45 ++++++--
 securis/src/main/java/net/curisit/securis/services/PackResource.java         |    6 
 securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java  |    9 +
 securis/src/main/java/net/curisit/securis/db/Organization.java               |   14 +-
 securis/src/main/java/net/curisit/securis/services/UserResource.java         |   15 ++-
 securis/src/main/java/net/curisit/securis/services/LicenseResource.java      |    3 
 securis/src/main/java/net/curisit/securis/db/LicenseType.java                |    5 
 securis/src/main/java/net/curisit/securis/services/OrganizationResource.java |   20 ++--
 15 files changed, 141 insertions(+), 112 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/db/Application.java b/securis/src/main/java/net/curisit/securis/db/Application.java
index 49dd65c..b70867e 100644
--- a/securis/src/main/java/net/curisit/securis/db/Application.java
+++ b/securis/src/main/java/net/curisit/securis/db/Application.java
@@ -22,6 +22,7 @@
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 /**
@@ -56,13 +57,14 @@
     @JsonProperty("creation_timestamp")
     private Date creationTimestamp;
 
-    @JsonIgnore
     // We don't include the referenced entities to limit the size of each row at
-    // the listing
+    // // the listing
+    @JsonIgnore
     @OneToMany(fetch = FetchType.LAZY, mappedBy = "application")
     private Set<LicenseType> licenseTypes;
 
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "application")
+    @JsonManagedReference
     private Set<ApplicationMetadata> metadata;
 
     public Integer getId() {
@@ -90,7 +92,6 @@
     }
 
     public Date getCreationTimestamp() {
-        LOG.info("APP {} TS: {}", this.id, this.creationTimestamp);
         return creationTimestamp;
     }
 
@@ -98,16 +99,9 @@
         this.creationTimestamp = creationTimestamp;
     }
 
-    public Set<LicenseType> getLicenseTypes() {
-        return licenseTypes;
-    }
-
-    public void setLicenseTypes(Set<LicenseType> licenseTypes) {
-        this.licenseTypes = licenseTypes;
-    }
-
     @JsonProperty("metadata")
     public Set<ApplicationMetadata> getApplicationMetadata() {
+        LOG.info("Getting metadata from app: {}", metadata);
         return metadata;
     }
 
@@ -137,4 +131,13 @@
     public void setLicenseFilename(String licenseFilename) {
         this.licenseFilename = licenseFilename;
     }
+
+    public Set<LicenseType> getLicenseTypes() {
+        LOG.info("Getting list license types!!!!");
+        return licenseTypes;
+    }
+
+    public void setLicenseTypes(Set<LicenseType> licenseTypes) {
+        this.licenseTypes = licenseTypes;
+    }
 }
diff --git a/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java b/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
index fc42d08..c17a3e8 100644
--- a/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
@@ -16,7 +16,7 @@
 import org.apache.logging.log4j.Logger;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -38,10 +38,10 @@
 
     private static final long serialVersionUID = 1L;
 
-    @JsonIgnore
     @Id
     @ManyToOne
     @JoinColumn(name = "application_id")
+    @JsonBackReference
     private Application application;
 
     @Id
@@ -65,6 +65,7 @@
     }
 
     public Application getApplication() {
+        LOG.info("Getting application from app metadata: {}", application);
         return application;
     }
 
@@ -73,27 +74,11 @@
     }
 
     public Date getCreationTimestamp() {
-        LOG.info("APP_MD (app: {}) {} TS: {}", this.application.getId(), this.key, this.creationTimestamp);
         return creationTimestamp;
     }
 
     public void setCreationTimestamp(Date creationTimestamp) {
         this.creationTimestamp = creationTimestamp;
-    }
-
-    @JsonProperty("application_id")
-    public Integer getApplicationId() {
-        return application == null ? null : application.getId();
-    }
-
-    @JsonProperty("application_id")
-    public void setApplicationId(Integer idApplication) {
-        if (idApplication == null) {
-            application = null;
-        } else {
-            application = new Application();
-            application.setId(idApplication);
-        }
     }
 
     public String getValue() {
@@ -129,7 +114,7 @@
     @Override
     public String toString() {
 
-        return String.format("ApplicationMetadata (%s - %s)", this.application == null ? null : application.getId(), this.key);
+        return String.format("ApplicationMetadata (%s)", this.key);
     }
 
 }
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 c42353b..cfaef9d 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseType.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseType.java
@@ -25,6 +25,7 @@
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 /**
@@ -59,11 +60,12 @@
     private Date creationTimestamp;
 
     @JsonIgnore
-    @ManyToOne
+    @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "application_id")
     private Application application;
 
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "licenseType")
+    @JsonManagedReference
     private Set<LicenseTypeMetadata> metadata;
 
     public Set<LicenseTypeMetadata> getMetadata() {
@@ -107,6 +109,7 @@
     }
 
     public Application getApplication() {
+        LOG.info("Getting APP from LicType");
         return application;
     }
 
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 d9ba048..f6c263e 100644
--- a/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
+++ b/securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
@@ -12,10 +12,10 @@
 import javax.persistence.Table;
 
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.annotation.JsonProperty;
 
 /**
  * Entity implementation class for Entity: licensetype_metadata
@@ -32,10 +32,11 @@
 
     private static final long serialVersionUID = 1L;
 
-    @Id
     @JsonIgnore
+    @Id
     @ManyToOne
     @JoinColumn(name = "license_type_id")
+    @JsonBackReference
     private LicenseType licenseType;
 
     @Id
@@ -45,21 +46,6 @@
     private String value;
 
     private boolean mandatory;
-
-    @JsonProperty("licensetype_id")
-    public Integer getLicenseTypeId() {
-        return licenseType == null ? null : licenseType.getId();
-    }
-
-    @JsonProperty("licensetype_id")
-    public void setLicenseTypeId(Integer idLicenseType) {
-        if (idLicenseType == null) {
-            licenseType = null;
-        } else {
-            licenseType = new LicenseType();
-            licenseType.setId(idLicenseType);
-        }
-    }
 
     public LicenseType getLicenseType() {
         return licenseType;
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 56a42a9..78c8ced 100644
--- a/securis/src/main/java/net/curisit/securis/db/Organization.java
+++ b/securis/src/main/java/net/curisit/securis/db/Organization.java
@@ -1,8 +1,8 @@
 package net.curisit.securis.db;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -72,7 +72,7 @@
     inverseJoinColumns = {
         @JoinColumn(name = "username", referencedColumnName = "username")
     })
-    private List<User> users;
+    private Set<User> users;
 
     @JsonIgnore
     // We don't include the users to limit the size of each row a the listing
@@ -125,11 +125,11 @@
         this.creationTimestamp = creationTimestamp;
     }
 
-    public List<User> getUsers() {
+    public Set<User> getUsers() {
         return users;
     }
 
-    public void setUsers(List<User> users) {
+    public void setUsers(Set<User> users) {
         this.users = users;
     }
 
@@ -166,7 +166,7 @@
 
     @JsonProperty("users_ids")
     public void setUsersIds(List<String> usersIds) {
-        users = new ArrayList<>();
+        users = new HashSet<>();
         if (usersIds != null) {
             for (String userid : usersIds) {
                 User u = new User();
@@ -177,11 +177,11 @@
     }
 
     @JsonProperty("users_ids")
-    public List<String> getUsersIds() {
+    public Set<String> getUsersIds() {
         if (users == null) {
             return null;
         }
-        List<String> ids = new ArrayList<>();
+        Set<String> ids = new HashSet<>();
         for (User user : users) {
             ids.add(user.getUsername());
         }
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 916511f..db7bf67 100644
--- a/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
@@ -26,10 +26,14 @@
 
 import net.curisit.integrity.commons.Utils;
 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.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
+import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
+import net.curisit.securis.utils.JsonUtils;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
@@ -71,6 +75,7 @@
         LOG.info("Getting applications list ");
 
         EntityManager em = emProvider.get();
+        em.clear();
         TypedQuery<Application> q = em.createNamedQuery("list-applications", Application.class);
         List<Application> list = q.getResultList();
 
@@ -80,6 +85,7 @@
     /**
      * 
      * @return the server version in format majorVersion.minorVersion
+     * @throws SeCurisServiceException
      */
     @GET
     @Path("/{appid}")
@@ -87,7 +93,7 @@
         MediaType.APPLICATION_JSON
     })
     @Securable
-    public Response get(@PathParam("appid") String appid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+    public Response get(@PathParam("appid") String appid) throws SeCurisServiceException {
         LOG.info("Getting application data for id: {}: ", appid);
         if (appid == null || "".equals(appid)) {
             LOG.error("Application ID is mandatory");
@@ -95,12 +101,28 @@
         }
 
         EntityManager em = emProvider.get();
-        Application app = em.find(Application.class, Integer.parseInt(appid));
+        em.clear();
+
+        Application app = null;
+        try {
+            LOG.info("READY to GET app: {}", appid);
+            app = em.find(Application.class, Integer.parseInt(appid));
+        } catch (Exception e) {
+            LOG.info("ERROR GETTING app: {}", e);
+        }
         if (app == null) {
             LOG.error("Application with id {} not found in DB", appid);
+            throw new SeCurisServiceException(ErrorCodes.NOT_FOUND, "Application not found with ID: " + appid);
+        }
 
-            return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Application not found with ID: " + appid)
-                    .build();
+        try {
+            LOG.info("JSON for APP:\n\n\n");
+            LOG.info(JsonUtils.toJSON(app));
+        } catch (SeCurisException e) {
+            LOG.info("ERROR {}", e);
+
+        } catch (Exception e) {
+            LOG.info("ERROR??? {}", e);
         }
         return Response.ok(app).build();
     }
@@ -199,14 +221,13 @@
             return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "Application not found with ID: " + appid)
                     .build();
         }
-
-        if (app.getLicenseTypes() != null && !app.getLicenseTypes().isEmpty()) {
-            return Response
-                    .status(Status.FORBIDDEN)
-                    .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER,
-                            "Application can not be deleted becasue has assigned one or more License types, ID: " + appid).build();
-        }
-
+        /*
+         * if (app.getLicenseTypes() != null &&
+         * !app.getLicenseTypes().isEmpty()) { throw new
+         * SeCurisServiceException(ErrorCodes.NOT_FOUND,
+         * "Application can not be deleted becasue has assigned one or more License types, ID: "
+         * + appid); }
+         */
         em.remove(app);
         return Response.ok(Utils.createMap("success", true, "id", appid)).build();
     }
diff --git a/securis/src/main/java/net/curisit/securis/services/BasicServices.java b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
index 40ad38d..4500539 100644
--- a/securis/src/main/java/net/curisit/securis/services/BasicServices.java
+++ b/securis/src/main/java/net/curisit/securis/services/BasicServices.java
@@ -27,6 +27,8 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import com.google.inject.persist.Transactional;
+
 /**
  * Basic services for login and basic app wrkflow
  * 
@@ -98,6 +100,7 @@
     @Produces({
         MediaType.APPLICATION_JSON
     })
+    @Transactional
     public Response check(@HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token, @QueryParam("token") String token2) {
         if (token == null) {
             token = token2;
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 6456bf5..cf10c6b 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseResource.java
@@ -107,6 +107,7 @@
         LOG.info("Getting licenses list ");
 
         EntityManager em = emProvider.get();
+        em.clear();
 
         if (!bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
             Pack pack = em.find(Pack.class, packId);
@@ -141,6 +142,7 @@
         LOG.info("Getting organization data for id: {}: ", licId);
 
         EntityManager em = emProvider.get();
+        em.clear();
         License lic = getCurrentLicense(licId, bsc, em);
         return Response.ok(lic).build();
     }
@@ -156,6 +158,7 @@
     @Produces({
         MediaType.APPLICATION_OCTET_STREAM
     })
+    @Transactional
     public Response download(@PathParam("licId") Integer licId, @Context BasicSecurityContext bsc) throws SeCurisServiceException {
 
         EntityManager em = emProvider.get();
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 79f4e5c..dd92706 100644
--- a/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/LicenseTypeResource.java
@@ -32,6 +32,8 @@
 import net.curisit.securis.db.LicenseTypeMetadata;
 import net.curisit.securis.security.BasicSecurityContext;
 import net.curisit.securis.security.Securable;
+import net.curisit.securis.services.exception.SeCurisServiceException;
+import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 import net.curisit.securis.utils.TokenHelper;
 
 import org.apache.logging.log4j.LogManager;
@@ -73,6 +75,7 @@
         LOG.info("Getting license types list ");
 
         EntityManager em = emProvider.get();
+        em.clear();
         TypedQuery<LicenseType> q = em.createNamedQuery("list-license_types", LicenseType.class);
         List<LicenseType> list = q.getResultList();
 
@@ -82,6 +85,7 @@
     /**
      * 
      * @return the server version in format majorVersion.minorVersion
+     * @throws SeCurisServiceException
      */
     @GET
     @Path("/{ltid}")
@@ -89,7 +93,7 @@
         MediaType.APPLICATION_JSON
     })
     @Securable
-    public Response get(@PathParam("ltid") String ltid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) {
+    public Response get(@PathParam("ltid") String ltid, @HeaderParam(TokenHelper.TOKEN_HEADER_PÀRAM) String token) throws SeCurisServiceException {
         LOG.info("Getting license type data for id: {}: ", ltid);
         if (ltid == null || "".equals(ltid)) {
             LOG.error("LicenseType ID is mandatory");
@@ -97,10 +101,11 @@
         }
 
         EntityManager em = emProvider.get();
+        em.clear();
         LicenseType lt = em.find(LicenseType.class, Integer.parseInt(ltid));
         if (lt == null) {
             LOG.error("LicenseType with id {} not found in DB", ltid);
-            return Response.status(Status.NOT_FOUND).build();
+            throw new SeCurisServiceException(ErrorCodes.NOT_FOUND, "LicenseType was not found in DB");
         }
         return Response.ok(lt).build();
     }
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 27e956c..25a5b07 100644
--- a/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
@@ -1,8 +1,9 @@
 package net.curisit.securis.services;
 
-import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.annotation.security.RolesAllowed;
 import javax.inject.Inject;
@@ -35,7 +36,6 @@
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.jboss.resteasy.spi.ResteasyProviderFactory;
 
 import com.google.inject.persist.Transactional;
 
@@ -69,9 +69,8 @@
     public Response index(@Context BasicSecurityContext bsc) {
         LOG.info("Getting organizations list ");
 
-        BasicSecurityContext bsc2 = ResteasyProviderFactory.getContextData(BasicSecurityContext.class);
-        LOG.debug("securityContext ROL_ADMIN?: {}", bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN));
         EntityManager em = emProvider.get();
+        em.clear();
         TypedQuery<Organization> q;
         if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
             LOG.info("GEtting all orgs for user: " + bsc.getUserPrincipal());
@@ -103,6 +102,7 @@
         }
 
         EntityManager em = emProvider.get();
+        em.clear();
         Organization org = em.find(Organization.class, Integer.parseInt(orgid));
         if (org == null) {
             LOG.error("Organization with id {} not found in DB", orgid);
@@ -141,10 +141,10 @@
             return Response.status(Status.NOT_FOUND).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, e.getMessage()).build();
         }
 
-        List<User> users = null;
-        List<String> usersIds = org.getUsersIds();
+        Set<User> users = null;
+        Set<String> usersIds = org.getUsersIds();
         if (usersIds != null && !usersIds.isEmpty()) {
-            users = new ArrayList<>();
+            users = new HashSet<>();
             for (String username : usersIds) {
                 User user = em.find(User.class, username);
                 if (user == null) {
@@ -176,10 +176,10 @@
         org.setParentOrganization(parentOrg);
     }
 
-    private void setOrgUsers(Organization org, List<String> usersIds, EntityManager em) throws SeCurisException {
-        List<User> users = null;
+    private void setOrgUsers(Organization org, Set<String> usersIds, EntityManager em) throws SeCurisException {
+        Set<User> users = null;
         if (usersIds != null && !usersIds.isEmpty()) {
-            users = new ArrayList<>();
+            users = new HashSet<>();
             for (String username : usersIds) {
                 User user = em.find(User.class, username);
                 if (user == null) {
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 f5cb7d3..31840e5 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -40,7 +40,6 @@
 import net.curisit.securis.services.exception.SeCurisServiceException;
 import net.curisit.securis.services.exception.SeCurisServiceException.ErrorCodes;
 import net.curisit.securis.services.helpers.LicenseHelper;
-import net.curisit.securis.services.helpers.UserHelper;
 import net.curisit.securis.utils.LicUtils;
 import net.curisit.securis.utils.TokenHelper;
 
@@ -67,9 +66,6 @@
     Provider<EntityManager> emProvider;
 
     @Inject
-    private UserHelper userHelper;
-
-    @Inject
     private LicenseHelper licenseHelper;
 
     /**
@@ -86,6 +82,7 @@
         LOG.info("Getting packs list ");
 
         EntityManager em = emProvider.get();
+        em.clear();
 
         TypedQuery<Pack> q;
         if (bsc.isUserInRole(BasicSecurityContext.ROL_ADMIN)) {
@@ -127,6 +124,7 @@
         }
 
         EntityManager em = emProvider.get();
+        em.clear();
         Pack pack = em.find(Pack.class, packId);
         if (pack == null) {
             LOG.error("Pack with id {} not found in DB", packId);
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 f2e8b89..3169039 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -76,6 +76,7 @@
         LOG.info("Getting users list ");
 
         EntityManager em = emProvider.get();
+        em.clear();
         TypedQuery<User> q = em.createNamedQuery("list-users", User.class);
 
         List<User> list = q.getResultList();
@@ -102,6 +103,7 @@
         }
 
         EntityManager em = emProvider.get();
+        em.clear();
         User lt = em.find(User.class, uid);
         if (lt == null) {
             LOG.error("User with id {} not found in DB", uid);
@@ -136,7 +138,8 @@
         if (user.getPassword() != null && !"".equals(user.getPassword())) {
             user.setPassword(Utils.sha256(user.getPassword()));
         } else {
-            return Response.status(DefaultExceptionHandler.DEFAULT_APP_ERROR_STATUS_CODE).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "User password is mandatory").build();
+            return Response.status(DefaultExceptionHandler.DEFAULT_APP_ERROR_STATUS_CODE)
+                    .header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "User password is mandatory").build();
         }
         user.setModificationTimestamp(new Date());
         user.setLastLogin(null);
@@ -197,7 +200,9 @@
             currentUser.setPassword(Utils.sha256(user.getPassword()));
         } else {
             // Password has not been modified
-            //return Response.status(DefaultExceptionHandler.DEFAULT_APP_ERROR_STATUS_CODE).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER, "User password is mandatory").build();
+            // return
+            // Response.status(DefaultExceptionHandler.DEFAULT_APP_ERROR_STATUS_CODE).header(DefaultExceptionHandler.ERROR_MESSAGE_HEADER,
+            // "User password is mandatory").build();
         }
 
         currentUser.setLastLogin(user.getLastLogin());
@@ -238,7 +243,7 @@
         LOG.info("user: {}, pass: {}", username, password);
         LOG.info("is user in role: {} == {} ? ", "advance", request.isUserInRole("advance"));
         LOG.info("is user in role: {} == {} ? ", "admin", request.isUserInRole("admin"));
-        
+
         EntityManager em = emProvider.get();
         User user = em.find(User.class, username);
         if (user == null) {
@@ -246,7 +251,7 @@
             return Response.status(Status.UNAUTHORIZED).build();
         }
         String securedPassword = Utils.sha256(password);
-        
+
         if (securedPassword == null || !securedPassword.equals(user.getPassword())) {
             // TODO: Code to test exception handling
             return Response.status(Status.UNAUTHORIZED).build();
@@ -256,7 +261,7 @@
         try {
             em.persist(user);
             em.getTransaction().commit();
-        } catch(PersistenceException ex) {
+        } catch (PersistenceException ex) {
             LOG.error("Error updating last login date for user: {}", username);
             LOG.error(ex);
             em.getTransaction().rollback();
diff --git a/securis/src/main/resources/META-INF/persistence.xml b/securis/src/main/resources/META-INF/persistence.xml
index 478499c..3f8e643 100644
--- a/securis/src/main/resources/META-INF/persistence.xml
+++ b/securis/src/main/resources/META-INF/persistence.xml
@@ -17,10 +17,9 @@
 			<property name="hibernate.connection.datasource" value="java:comp/env/jdbc/SeCurisDS" />
 
  			<property name="hibernate.cache.use_second_level_cache" value="false" />
- 			<property name="hibernate.show_sql" value="false" />
+  			<property name="hibernate.show_sql" value="true" /> 
  			
- 			<!-- 			<property name="hibernate.format_sql" value="true"/>
- -->			
+ 			<property name="hibernate.format_sql" value="false"/>
 		</properties>
 
 	</persistence-unit>
diff --git a/securis/src/main/webapp/js/admin.js b/securis/src/main/webapp/js/admin.js
index 3d320fa..387a333 100644
--- a/securis/src/main/webapp/js/admin.js
+++ b/securis/src/main/webapp/js/admin.js
@@ -69,10 +69,7 @@
 
 				$scope.selectCatalog = _changeCatalog;
 				
-				$scope.edit = function(data) {
-					$scope.showForm = true;
-					$scope.isNew = false;
-					// Next line is a workaround due to some issues with values with ID == 0
+				$scope._loadFormu = function(elementData) {
 					$('select').val(null);
 					$scope.formu = {}
 					var fields = Catalogs.getMetadata().fields;
@@ -83,13 +80,23 @@
 							// next lines are a workaround to avoid an issue where we try to show a form with "select" fields (if select field value doesn't change
 							$scope.formu[field.name] = null;
 							setTimeout(function() {
-								$scope.formu[field.name] = data[field.name];
+								$scope.formu[field.name] = elementData[field.name];
 								$scope.$apply();
 							}, 0);
 						} else {
-							if (!field.listingOnly) $scope.formu[field.name] = data[field.name] || null;
+							if (!field.listingOnly) $scope.formu[field.name] = elementData[field.name] || null;
 						}
 					})
+				}
+				
+				$scope.edit = function(data) {
+					$scope.showForm = true;
+					$scope.isNew = false;
+					$scope._loadFormu(data);
+					Catalogs.get(data[Catalogs.getPk()], function(eleData) {
+						$scope._loadFormu(eleData);
+					});
+					// Next line is a workaround due to some issues with values with ID == 0
 					setTimeout(function() {
 						$('#'+Catalogs.getFFF()).focus();
 					}, 0);
diff --git a/securis/src/main/webapp/js/catalogs.js b/securis/src/main/webapp/js/catalogs.js
index e1d458f..bfef4a8 100644
--- a/securis/src/main/webapp/js/catalogs.js
+++ b/securis/src/main/webapp/js/catalogs.js
@@ -18,19 +18,19 @@
 							function($rootScope, $http, $resource, $q) {
 								var resources = {
 									application : $resource(
-											'application/:appId', {
-												appId : '@id'
+											'application/:id', {
+												id : '@id'
 											}),
-									user : $resource('user/:userId', {
-										userId : '@username'
+									user : $resource('user/:id', {
+										id : '@username'
 									}),
 									organization : $resource(
-											'organization/:orgId', {
-												orgId : '@id'
+											'organization/:id', {
+												id : '@id'
 											}),
 									licensetype : $resource(
-											'licensetype/:licenseTypeId', {
-												licenseTypeId : '@id'
+											'licensetype/:id', {
+												id : '@id'
 											})
 								}
 
@@ -68,12 +68,15 @@
 									return resources[res];
 								}
 								this.getPk = function(catalogMetadata) {
-									if (!catalogMetadata)
+									if (!catalogMetadata) {
 										catalogMetadata = _current;
+									}
 
-									for (var i = 0; i < catalogMetadata.fields.length; i++)
-										if (catalogMetadata.fields[i].pk)
+									for (var i = 0; i < catalogMetadata.fields.length; i++) {
+										if (catalogMetadata.fields[i].pk) {
 											return catalogMetadata.fields[i].name;
+										}
+									}
 
 									return null;
 								}
@@ -167,19 +170,27 @@
 								}
 
 								this.save = function(data) {
-									if (!_current)
+									if (!_current) {
 										throw new Error('There is no current catalog selected');
-
+									}
 									var resource = this.getResource();
 									return resource.save(data, _success, _fail);
+								}
+								this.get = function(id, _onsuccess, _onfail) {
+									if (!_current) {
+										throw new Error('There is no current catalog selected');
+									}
+									var resource = this.getResource();
+									return resource.get({id: id}, _onsuccess, _onfail);
 								}
 								this.remove = function(data) {
 									return this.getResource().remove({}, data,
 											_success, _fail)
 								}
 								this.query = function() {
-									return this.getResource().query({},
-											_success, _fail);
+									var list = this.getResource().query();
+									list.$promise.then(_success, _fail);
+									return list;
 								}
 								this.refreshRef = function(refs, res,
 										preloadedData) {

--
Gitblit v1.3.2