Fixed query syntax in case of empty group list
authorChristos V. Stathis <chstath@ebs.gr>
Fri, 10 Dec 2010 13:42:20 +0000 (15:42 +0200)
committerChristos V. Stathis <chstath@ebs.gr>
Fri, 10 Dec 2010 13:42:20 +0000 (15:42 +0200)
src/gr/ebs/gss/server/ejb/GSSDAOBean.java

index 23cfd05..a3a6af3 100644 (file)
@@ -45,6 +45,7 @@ import javax.ejb.Stateless;
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -345,22 +346,26 @@ public class GSSDAOBean implements GSSDAO {
        
        @Override
        public List<User> getUsersSharingFoldersForUser(Long userId) {
-               return manager.createQuery("select distinct f.owner from Folder f " +
+        List<Long> groupIds = getGroupIdsForUserId(userId);
+               Query q = manager.createQuery("select distinct f.owner from Folder f " +
                                        "LEFT JOIN f.permissions p where f.owner.id != :userId and f.deleted=false " +
-                                       "and (p.user.id=:userId or p.group.id in (:groupIds))").
-                                       setParameter("groupIds", getGroupIdsForUserId(userId)).
-                                       setParameter("userId", userId).getResultList();
+                                       "and (p.user.id=:userId "+ (groupIds.isEmpty() ? "" : "or p.group.id in (:groupIds)") +")").
+                                       setParameter("userId", userId);
+        if (!groupIds.isEmpty())
+            q.setParameter("groupIds", groupIds);
+        return q.getResultList();            
        }
 
        @Override
        public List<User> getUsersSharingFilesForUser(Long userId) {
-               List<User> users = manager.createQuery("select distinct f.owner from FileHeader f " +
+        List<Long> groupIds = getGroupIdsForUserId(userId);
+               Query q = manager.createQuery("select distinct f.owner from FileHeader f " +
                                        "LEFT JOIN f.permissions p where f.owner.id != :userId and f.deleted=false " +
-                                       "and (p.user.id=:userId or p.group.id in (:groupIds))").
-                                       setParameter("userId", userId).
-                                       setParameter("groupIds", getGroupIdsForUserId(userId)).
-                                       getResultList();
-               return users;
+                                       "and (p.user.id=:userId " + (groupIds.isEmpty() ? "" : "or p.group.id in (:groupIds)") + ")").
+                                       setParameter("userId", userId);
+        if (!groupIds.isEmpty())
+            q.setParameter("groupIds", groupIds);
+        return q.getResultList();
        }
 
        @Override