import gr.ebs.gss.server.domain.FileUploadStatus;
import gr.ebs.gss.server.domain.Folder;
import gr.ebs.gss.server.domain.Group;
+import gr.ebs.gss.server.domain.FileLock;
import gr.ebs.gss.server.domain.Invitation;
import gr.ebs.gss.server.domain.Nonce;
import gr.ebs.gss.server.domain.User;
import gr.ebs.gss.server.domain.UserClass;
+import gr.ebs.gss.server.domain.UserLogin;
+import gr.ebs.gss.server.domain.WebDavNonce;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
import org.apache.commons.lang.StringUtils;
private EntityManager manager;
@Override
+ public Long getRootFolderId(final Long userId) throws ObjectNotFoundException {
+ try {
+ if (userId == null)
+ throw new ObjectNotFoundException("No user specified");
+ return (Long) manager .createQuery("select f.id from Folder f " +
+ "where f.owner.id=:ownerId and f.parent is null")
+ .setParameter("ownerId", userId)
+ .getSingleResult();
+ } catch (final NoResultException e) {
+ throw new ObjectNotFoundException("Root folder not found for user with id=" + userId);
+ }
+ }
+
+ @Override
public Folder getRootFolder(final Long userId) throws ObjectNotFoundException {
try {
if (userId == null)
setParameter("userId", userId).setParameter("groupId", groupId).getResultList();
}
+ private List<Long> getGroupIdsForUserId(Long userId) {
+ List<BigInteger> groups = manager.createNativeQuery("select distinct groupsmember_id " +
+ "from GSS_Group_GSS_User where members_id=:userId")
+ .setParameter("userId", userId)
+ .getResultList();
+ List<Long> groupIds = new ArrayList<Long>();
+ for (BigInteger id : groups)
+ groupIds.add(id.longValue());
+ return groupIds;
+ }
+
@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 (select distinct gg.id " +
- "from Group gg join gg.members memb where memb.id=: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 (select distinct gg.id from Group gg " +
- "join gg.members memb where memb.id=:userId)))").
- setParameter("userId", 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
}
@Override
- public FileHeader getFileForIndexing(Long id) throws ObjectNotFoundException {
- FileHeader h = getEntityById(FileHeader.class, id);
- h.getFileTags().size();
- return h;
- }
-
- @Override
public Long getFileCount(Long userId) {
Long singleResult = (Long) manager.createQuery("select count(f) from FileHeader f where f.owner.id=:ownerId")
.setParameter("ownerId", userId)
@Override
public Long getCountUsersByLastLogin(Date lastLoginDate) {
- return (Long) manager.createQuery("select count(u) from User u where " +
- " u.lastLogin >= :ldate ").setParameter("ldate", lastLoginDate).getSingleResult();
+ return (Long) manager.createQuery(
+ " select count(distinct ul.user.id) from UserLogin ul " +
+ " where ul.loginDate >=:ldate"
+ ).setParameter("ldate", lastLoginDate).getSingleResult();
}
-
+
@Override
public List<User> getUsersByLastLogin(Date lastLoginDate) {
- return manager.createQuery("select u from User u where " +
- " u.lastLogin >= :ldate order by u.lastLogin desc").
- setParameter("ldate", lastLoginDate).getResultList();
+ return manager.createQuery(" select distinct ul.user from UserLogin ul " +
+ " where ul.loginDate >=:ldate ")
+ .setParameter("ldate", lastLoginDate)
+ .getResultList();
}
@Override
public List<User> getUsersByLastLogin(Date lastLoginDate, int firstResult, int maxResult) {
- return manager.createQuery("select u from User u where " +
- " u.lastLogin >= :ldate order by u.lastLogin desc").
+ return manager.createQuery("" +
+ " select ul from UserLogin ul " +
+ " where ul.loginDate >= :ldate " +
+ " order by ul.loginDate desc "
+ ).
setParameter("ldate", lastLoginDate).setFirstResult(firstResult).setMaxResults(maxResult).getResultList();
}
}
return ai;
}
+
+ @Override
+ public List<FileHeader> getFilesPermittedForGroup(Long userId, Long groupId) {
+ return manager.createQuery("select distinct f from FileHeader f LEFT JOIN f.permissions p " +
+ "where f.owner.id=:userId and f.deleted = false and p.group.id=:groupId ").
+ setParameter("userId", userId).setParameter("groupId", groupId).getResultList();
+ }
+
+ @Override
+ public List<Folder> getSharingFoldersForUser(Long userId) {
+ return manager.createQuery("select distinct f from Folder f " +
+ "LEFT JOIN f.permissions p where " +
+ " (p.user.id=:userId or p.group.id in (select distinct gg.id " +
+ "from Group gg join gg.members memb where memb.id=:userId))) ").
+ setParameter("userId", userId).getResultList();
+ }
+
+ @Override
+ public List<FileHeader> getSharingFilesForUser(Long userId) {
+ List<FileHeader> users = manager.createQuery("select distinct f from FileHeader f " +
+ "LEFT JOIN f.permissions p where " +
+ " (p.user.id=:userId or p.group.id in (select distinct gg.id from Group gg " +
+ "join gg.members memb where memb.id=:userId)))").
+ setParameter("userId", userId).getResultList();
+ return users;
+ }
+
+ @Override
+ public FileHeader getFileForIndexing(Long id) throws ObjectNotFoundException {
+ FileHeader h = getEntityById(FileHeader.class, id);
+ h.getFileTags().size();
+ h.getPermissions().size();
+ return h;
+ }
+
+ @Override
+ public List<Group> getGroupsContainingUser(Long userId){
+ List<Group> groups = manager.createQuery("select distinct gg " +
+ "from Group gg join gg.members memb where memb.id=:userId)").setParameter("userId", userId).getResultList();
+ return groups;
+ }
+
+ @Override
+ public List<FileUploadStatus> getUploadStatus(Long userId){
+ List<FileUploadStatus> res = manager.createQuery("select f from FileUploadStatus f where f.owner.id=:userId").setParameter("userId", userId).getResultList();
+ return res;
+ }
+ @Override
+ public int deletePermissionsNotCorrespondingToFilesAndFolders(Long userId){
+ return manager.createNativeQuery("delete from permission where user_id=:userId and id not in(select permissions_id from fileheader_permission) and id not in(select permissions_id from folder_permission)").setParameter("userId", userId).executeUpdate();
+ }
+
+ public List<UserLogin> getLoginsForUser (Long userId){
+ List<UserLogin> res = manager
+ .createQuery("select ul from UserLogin ul where ul.user.id=:userId " +
+ " order by ul.loginDate desc")
+ .setParameter("userId", userId)
+ .setMaxResults(2)
+ .getResultList();
+ return res;
+ }
+
+ public List<UserLogin> getAllLoginsForUser (Long userId){
+ List<UserLogin> res = manager
+ .createQuery("select ul from UserLogin ul where ul.user.id=:userId ")
+ .setParameter("userId", userId)
+ .getResultList();
+ return res;
+ }
+
+ @Override
+ public User getUserByUserName(String username) {
+ return (User) manager.createQuery("select u from User u where u.username=:username").
+ setParameter("username", username).getSingleResult();
+
+ }
+
+
+ /** WEBDAV LOCK API **/
+ @Override
+ public FileLock getLockById(String id) {
+ return manager.find(FileLock.class, id);
+ }
+
+ @Override
+ public FileLock getLockByToken(String tokenId) {
+ return (FileLock) manager.createQuery("select c from FileLock c where c.tokenId=:tokenId").setParameter("tokenId", tokenId).getSingleResult();
+ }
+
+ @Override
+ public void removeLock(FileLock lock) {
+ lock =getLockById(lock.getId());
+ if(lock!=null)
+ manager.remove(lock);
+ }
+
+ @Override
+ public FileLock saveOrUpdateLock(FileLock lock) {
+ if(getLockById(lock.getId())!=null)
+ manager.merge(lock);
+ else
+ manager.persist(lock);
+ manager.flush();
+ return lock;
+ }
+
+ @Override
+ public WebDavNonce getWebDavNonce(String tokenId) {
+ return manager.find(WebDavNonce.class, tokenId);
+ }
+
+ @Override
+ public void removeWebDavNonce(WebDavNonce nonce) {
+ nonce =getWebDavNonce(nonce.getId());
+ if(nonce!=null)
+ manager.remove(nonce);
+ }
+
+ @Override
+ public WebDavNonce saveOrUpdateWebDavNonce(WebDavNonce nonce) {
+ if(getWebDavNonce(nonce.getId())!=null)
+ manager.merge(nonce);
+ else
+ manager.persist(nonce);
+ manager.flush();
+ return nonce;
+ }
+
+
}