X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/6a8b8972d7c29b1674599a76c17f91a020df1513..3efe89839014b451b4b44001aba801ee35687c23:/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java diff --git a/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java b/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java index fecf7e6..d81de62 100644 --- a/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java +++ b/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java @@ -19,6 +19,8 @@ package gr.ebs.gss.server.ejb; import static gr.ebs.gss.server.configuration.GSSConfigurationFactory.getConfiguration; + +import gr.ebs.gss.admin.client.ui.UsersTable; import gr.ebs.gss.client.exceptions.DuplicateNameException; import gr.ebs.gss.client.exceptions.GSSIOException; import gr.ebs.gss.client.exceptions.InsufficientPermissionsException; @@ -38,11 +40,6 @@ import gr.ebs.gss.server.domain.Permission; 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.dto.FileBodyDTO; -import gr.ebs.gss.server.domain.dto.FileHeaderDTO; -import gr.ebs.gss.server.domain.dto.FolderDTO; -import gr.ebs.gss.server.domain.dto.GroupDTO; -import gr.ebs.gss.server.domain.dto.PermissionDTO; import gr.ebs.gss.server.domain.dto.StatsDTO; import gr.ebs.gss.server.domain.dto.UserDTO; @@ -58,7 +55,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Random; @@ -153,16 +149,22 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } } + private Long getRootFolderId(Long userId) throws ObjectNotFoundException { + if (userId == null) + throw new ObjectNotFoundException("No user specified"); + return dao.getRootFolderId(userId); + } + @Override - public FolderDTO getRootFolder(Long userId) throws ObjectNotFoundException { + public Folder getRootFolder(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); Folder folder = dao.getRootFolder(userId); - return folder.getDTO(); + return folder; } @Override - public FolderDTO getFolder(final Long userId, final Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { + public Folder getFolder(final Long userId, final Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (folderId == null) @@ -172,7 +174,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { // Check permissions if (!folder.hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the permissions to read this folder"); - return folder.getDTO(); + return folder; } @Override @@ -188,15 +190,15 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public GroupDTO getGroup(final Long groupId) throws ObjectNotFoundException { + public Group getGroup(final Long groupId) throws ObjectNotFoundException { if (groupId == null) throw new ObjectNotFoundException("No group specified"); final Group group = dao.getEntityById(Group.class, groupId); - return group.getDTO(); + return group; } @Override - public GroupDTO getGroup(Long userId, String name) throws ObjectNotFoundException { + public Group getGroup(Long userId, String name) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (name == null) @@ -205,23 +207,20 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { List groups = user.getGroupsSpecified(); for (Group group: groups) if (group.getName().equals(name)) - return group.getDTO(); + return group; throw new ObjectNotFoundException("Group " + name + " not found"); } @Override - public List getGroups(final Long userId) throws ObjectNotFoundException { + public List getGroups(final Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); final List groups = dao.getGroups(userId); - final List result = new ArrayList(); - for (final Group g : groups) - result.add(g.getDTO()); - return result; + return groups; } @Override - public List getFiles(Long userId, Long folderId, boolean ignoreDeleted) + public List getFiles(Long userId, Long folderId, boolean ignoreDeleted) throws ObjectNotFoundException, InsufficientPermissionsException { // Validate. if (userId == null) @@ -232,16 +231,12 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { Folder folder = dao.getEntityById(Folder.class, folderId); if (!folder.hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the permissions to read this folder"); - // Do the actual work. - List result = new ArrayList(); List files = dao.getFiles(folderId, userId, ignoreDeleted); - for (FileHeader f : files) - result.add(f.getDTO()); - return result; + return files; } @Override - public List getUsers(final Long userId, final Long groupId) throws ObjectNotFoundException { + public List getUsers(final Long userId, final Long groupId) throws ObjectNotFoundException { // Validate. if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -250,14 +245,11 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { // Do the actual work. final List users = dao.getUsers(groupId); - final List result = new ArrayList(); - for (final User u : users) - result.add(u.getDTO()); - return result; + return users; } @Override - public FolderDTO createFolder(Long userId, Long parentId, String name) + public Folder createFolder(Long userId, Long parentId, String name) throws DuplicateNameException, ObjectNotFoundException, InsufficientPermissionsException { // Validate. if (userId == null) @@ -295,7 +287,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * @param creator * @return the new folder */ - private FolderDTO createFolder(String name, Folder parent, User creator) { + private Folder createFolder(String name, Folder parent, User creator) { Folder folder = new Folder(); folder.setName(name); if (parent != null) { @@ -336,7 +328,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { folder.setReadForAll(parent.isReadForAll()); dao.create(folder); - return folder.getDTO(); + return folder; } @Override @@ -383,7 +375,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { @Override @SuppressWarnings("unchecked") - public List getSubfolders(Long userId, Long folderId) + public List getSubfolders(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -393,18 +385,18 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { Folder folder = dao.getEntityById(Folder.class, folderId); if (!folder.hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the permissions to read this folder"); - List result = new ArrayList(); + List result = new ArrayList(); if (folder.hasReadPermission(user)) for (Folder f : folder.getSubfolders()) if (f.hasReadPermission(user) && !f.isDeleted()) - result.add(f.getDTO()); + result.add(f); return result; } @Override - public FolderDTO updateFolder(Long userId, Long folderId, String folderName, + public Folder updateFolder(Long userId, Long folderId, String folderName, Boolean readForAll, - Set permissions) + Set permissions) throws InsufficientPermissionsException, ObjectNotFoundException, DuplicateNameException { @@ -441,9 +433,21 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { folder.getAuditInfo().setModifiedBy(user); dao.update(folder); touchParentFolders(folder, user, new Date()); - return folder.getDTO(); + // Re-index the folder contents if it was modified. + if ((permissions != null && !permissions.isEmpty()) || readForAll != null) { + indexFolder(folder); + } + + return folder; } + private void indexFolder(Folder folder) { + for (FileHeader fh : folder.getFiles()) + indexFile(fh.getId(), false); + for (Folder f : folder.getSubfolders()) + indexFolder(f); + } + @Override public void createGroup(final Long userId, final String name) throws ObjectNotFoundException, DuplicateNameException { // Validate. @@ -481,16 +485,13 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { List folders = dao.getFoldersPermittedForGroup(userId, groupId); for (Folder f : folders){ f.getPermissions().removeAll(group.getPermissions()); - touchFolder(f, owner, now); for(FileHeader file : f.getFiles()){ file.getPermissions().removeAll(group.getPermissions()); - touchFile(file, owner, now); } } List files = dao.getFilesPermittedForGroup(userId, groupId); for(FileHeader h : files){ h.getPermissions().removeAll(group.getPermissions()); - touchFile(h, owner, now); } owner.removeSpecifiedGroup(group); dao.delete(group); @@ -499,7 +500,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public FileHeaderDTO createFile(Long userId, Long folderId, String name, String mimeType, InputStream stream) + public FileHeader createFile(Long userId, Long folderId, String name, String mimeType, InputStream stream) throws DuplicateNameException, ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { File file = null; @@ -639,7 +640,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { @Override public void updateFile(Long userId, Long fileId, String name, String tagSet, Date modificationDate, Boolean versioned, - Boolean readForAll, Set permissions) + Boolean readForAll, Set permissions) throws DuplicateNameException, ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -717,7 +718,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { touchParentFolders(parent, user, new Date()); // Re-index the file if it was modified. - if (name != null || tagSet != null) + if (name != null || tagSet != null || (permissions != null && !permissions.isEmpty()) || readForAll != null) indexFile(fileId, false); } @@ -775,7 +776,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public FileHeaderDTO getFile(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException { + public FileHeader getFile(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (fileId == null) @@ -784,11 +785,11 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { final FileHeader file = dao.getEntityById(FileHeader.class, fileId); if (!file.hasReadPermission(user) && !file.getFolder().hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the necessary permissions"); - return file.getDTO(); + return file; } @Override - public FileBodyDTO getFileBody(Long userId, Long fileId, Long bodyId) throws ObjectNotFoundException, InsufficientPermissionsException { + public FileBody getFileBody(Long userId, Long fileId, Long bodyId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (fileId == null) @@ -798,7 +799,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if (!file.hasReadPermission(user) && !file.getFolder().hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the necessary permissions"); FileBody body = dao.getEntityById(FileBody.class, bodyId); - return body.getDTO(); + return body; } @Override @@ -818,10 +819,12 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { return getRootFolder(owner.getId()); // Store the last element, since it requires special handling. String lastElement = pathElements.remove(pathElements.size() - 1); - FolderDTO cursor = getRootFolder(owner.getId()); + + Folder cursor = null; + Long rootFolderId = getRootFolderId(owner.getId()); // Traverse and verify the specified folder path. for (String pathElement : pathElements) { - cursor = getFolder(cursor.getId(), pathElement); + cursor = getFolder(cursor==null ? rootFolderId : cursor.getId(), pathElement); if (cursor.isDeleted()) throw new ObjectNotFoundException("Folder " + cursor.getPath() + " not found"); } @@ -829,14 +832,14 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { // Use the lastElement to retrieve the actual resource. Object resource = null; try { - FileHeaderDTO file = getFile(cursor.getId(), lastElement); + FileHeader file = getFile(cursor==null ? rootFolderId : cursor.getId(), lastElement); if (ignoreDeleted && file.isDeleted()) throw new ObjectNotFoundException("Resource not found"); resource = file; } catch (ObjectNotFoundException e) { // Perhaps the requested resource is not a file, so // check for folders as well. - FolderDTO folder = getFolder(cursor.getId(), lastElement); + Folder folder = getFolder(cursor==null ? rootFolderId : cursor.getId(), lastElement).getDTO(); if (ignoreDeleted && folder.isDeleted()) throw new ObjectNotFoundException("Resource not found"); resource = folder; @@ -855,14 +858,14 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * found, with the exception message mentioning the precise * problem */ - private FileHeaderDTO getFile(Long folderId, String name) throws ObjectNotFoundException { + private FileHeader getFile(Long folderId, String name) throws ObjectNotFoundException { if (folderId == null) throw new ObjectNotFoundException("No parent folder specified"); if (StringUtils.isEmpty(name)) throw new ObjectNotFoundException("No file specified"); FileHeader file = dao.getFile(folderId, name); - return file.getDTO(); + return file; } /** @@ -876,17 +879,17 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * found, with the exception message mentioning the precise * problem */ - private FolderDTO getFolder(Long parentId, String name) throws ObjectNotFoundException { + private Folder getFolder(Long parentId, String name) throws ObjectNotFoundException { if (parentId == null) throw new ObjectNotFoundException("No parent folder specified"); if (StringUtils.isEmpty(name)) throw new ObjectNotFoundException("No folder specified"); Folder folder = dao.getFolder(parentId, name); - return folder.getDTO(); + return folder; } - private FileHeaderDTO updateFileContents(Long userId, Long fileId, String mimeType, InputStream resourceInputStream) throws ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { + private FileHeader updateFileContents(Long userId, Long fileId, String mimeType, InputStream resourceInputStream) throws ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { File file = null; try { file = uploadFile(resourceInputStream, userId); @@ -907,9 +910,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(userId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination parent folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; copyFile(userId, fileId, parent.getId(), getLastElement(dest)); } @@ -925,9 +928,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(ownerId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination parent folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; copyFile(userId, fileId, parent.getId(), getLastElement(dest)); } @@ -984,9 +987,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(userId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; copyFolder(userId, folderId, parent.getId(), getLastElement(dest)); } @@ -1020,9 +1023,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(ownerId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; copyFolderStructure(userId, folderId, parent.getId(), getLastElement(dest)); } @@ -1123,14 +1126,17 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if (parent == null) throw new ObjectNotFoundException("The specified file has no parent folder"); User user = dao.getEntityById(User.class, userId); - if (!file.hasDeletePermission(user)) - throw new InsufficientPermissionsException("User " + user.getId() + " cannot delete file " + file.getName() + "(" + file.getId() + ")"); - - file.setDeleted(true); - dao.update(file); - touchParentFolders(parent, user, new Date()); + trashFile(user, file); + touchParentFolders(parent, user, new Date()); } + private void trashFile(User user, FileHeader file) throws InsufficientPermissionsException { + if (!file.hasDeletePermission(user)) + throw new InsufficientPermissionsException("User " + user.getId() + " cannot delete file " + file.getName() + "(" + file.getId() + ")"); + + file.setDeleted(true); + } + @Override public void moveFileToPath(Long userId, Long ownerId, Long fileId, String dest) throws ObjectNotFoundException, InsufficientPermissionsException, QuotaExceededException { if (userId == null) @@ -1143,9 +1149,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(ownerId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination parent folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; moveFile(userId, fileId, parent.getId(), getLastElement(dest)); } @@ -1211,9 +1217,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No destination specified"); Object destination = getResourceAtPath(ownerId, getParentPath(dest), true); - if (!(destination instanceof FolderDTO)) + if (!(destination instanceof Folder)) throw new ObjectNotFoundException("Destination parent folder not found"); - FolderDTO parent = (FolderDTO) destination; + Folder parent = (Folder) destination; moveFolder(userId, folderId, parent.getId(), getLastElement(dest)); } @@ -1274,17 +1280,14 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public List getDeletedFiles(Long userId) throws ObjectNotFoundException { + public List getDeletedFiles(Long userId) throws ObjectNotFoundException { // Validate. if (userId == null) throw new ObjectNotFoundException("No user specified"); // Do the actual work. - final List result = new ArrayList(); final List files = dao.getDeletedFiles(userId); - for (final FileHeader f : files) - result.add(f.getDTO()); - return result; + return files; } @Override @@ -1301,34 +1304,39 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if (parent == null) throw new ObjectNotFoundException("The specified file has no parent folder"); User user = dao.getEntityById(User.class, userId); - if (!file.hasDeletePermission(user)) - throw new InsufficientPermissionsException("User " + user.getUsername() + - " cannot restore file " + file.getName()); - - file.setDeleted(false); - dao.update(file); + untrashFile(user, file); touchParentFolders(parent, user, new Date()); } + private void untrashFile(User user, FileHeader file) throws InsufficientPermissionsException { + if (!file.hasDeletePermission(user)) + throw new InsufficientPermissionsException("User " + user.getUsername() + + " cannot restore file " + file.getName()); + + file.setDeleted(false); + } + @Override public void moveFolderToTrash(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - if (folderId == null) - throw new ObjectNotFoundException("No folder specified"); - Folder folder = dao.getEntityById(Folder.class, folderId); - User user = dao.getEntityById(User.class, userId); - if (!folder.hasDeletePermission(user)) - throw new InsufficientPermissionsException("You don't have the necessary permissions"); - folder.setDeleted(true); - dao.update(folder); - touchParentFolders(folder, user, new Date()); - for (FileHeader file : folder.getFiles()) - moveFileToTrash(userId, file.getId()); - for (Folder subFolder : folder.getSubfolders()) - moveFolderToTrash(userId, subFolder.getId()); - - } + if (userId == null) + throw new ObjectNotFoundException("No user specified"); + if (folderId == null) + throw new ObjectNotFoundException("No folder specified"); + Folder folder = dao.getEntityById(Folder.class, folderId); + User user = dao.getEntityById(User.class, userId); + trashFolder(user, folder); + touchParentFolders(folder, user, new Date()); + } + + private void trashFolder(User user, Folder folder) throws ObjectNotFoundException, InsufficientPermissionsException { + if (!folder.hasDeletePermission(user)) + throw new InsufficientPermissionsException("You don't have the necessary permissions"); + folder.setDeleted(true); + for (FileHeader file : folder.getFiles()) + trashFile(user, file); + for (Folder subFolder : folder.getSubfolders()) + trashFolder(user, subFolder); + } @Override public void removeFolderFromTrash(Long userId, Long folderId) @@ -1339,45 +1347,45 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No folder specified"); Folder folder = dao.getEntityById(Folder.class, folderId); User user = dao.getEntityById(User.class, userId); - if (!folder.hasDeletePermission(user)) - throw new InsufficientPermissionsException("User " + user.getUsername() + - " cannot restore folder " + folder.getName()); - folder.setDeleted(false); - for (FileHeader file : folder.getFiles()) - removeFileFromTrash(userId, file.getId()); - for (Folder subFolder : folder.getSubfolders()) - removeFolderFromTrash(userId, subFolder.getId()); - dao.update(folder); + untrashFolder(user, folder); touchParentFolders(folder, user, new Date()); } + private void untrashFolder(User user, Folder folder) throws ObjectNotFoundException, InsufficientPermissionsException { + if (!folder.hasDeletePermission(user)) + throw new InsufficientPermissionsException("User " + user.getUsername() + + " cannot restore folder " + folder.getName()); + folder.setDeleted(false); + for (FileHeader file : folder.getFiles()) + untrashFile(user, file); + for (Folder subFolder : folder.getSubfolders()) + untrashFolder(user, subFolder); + } + @Override - public List getDeletedRootFolders(Long userId) throws ObjectNotFoundException { + public List getDeletedRootFolders(Long userId) throws ObjectNotFoundException { List folders = dao.getDeletedRootFolders(userId); - List result = new ArrayList(); - for (Folder folder : folders) - result.add(folder.getDTO()); - return result; + return folders; } @Override public void emptyTrash(Long userId) throws ObjectNotFoundException, InsufficientPermissionsException { - List deletedRootFolders = getDeletedRootFolders(userId); - for (FolderDTO fdto : deletedRootFolders) - deleteFolder(userId, fdto.getId()); - List deletedFiles = getDeletedFiles(userId); - for (FileHeaderDTO filedto : deletedFiles) - deleteFile(userId, filedto.getId()); + List deletedRootFolders = getDeletedRootFolders(userId); + for (Folder folder : deletedRootFolders) + deleteFolder(userId, folder.getId()); + List deletedFiles = getDeletedFiles(userId); + for (FileHeader file : deletedFiles) + deleteFile(userId, file.getId()); } @Override public void restoreTrash(Long userId) throws ObjectNotFoundException, InsufficientPermissionsException { - List deletedRootFolders = getDeletedRootFolders(userId); - for (FolderDTO fdto : deletedRootFolders) - removeFolderFromTrash(userId, fdto.getId()); - List deletedFiles = getDeletedFiles(userId); - for (FileHeaderDTO filedto : deletedFiles) - removeFileFromTrash(userId, filedto.getId()); + List deletedRootFolders = getDeletedRootFolders(userId); + for (Folder folder : deletedRootFolders) + removeFolderFromTrash(userId, folder.getId()); + List deletedFiles = getDeletedFiles(userId); + for (FileHeader file : deletedFiles) + removeFileFromTrash(userId, file.getId()); } @Override @@ -1461,7 +1469,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public Set getFolderPermissions(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { + public Set getFolderPermissions(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (folderId == null) @@ -1471,14 +1479,14 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if(!folder.hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the necessary permissions"); Set perms = folder.getPermissions(); - Set result = new LinkedHashSet(); + Set result = new LinkedHashSet(); for (Permission perm : perms) if (perm.getUser() != null && perm.getUser().getId().equals(folder.getOwner().getId())) - result.add(perm.getDTO()); + result.add(perm); for (Permission perm : perms) if (perm.getUser() != null && perm.getUser().getId().equals(folder.getOwner().getId())) { } else - result.add(perm.getDTO()); + result.add(perm); return result; } @@ -1493,13 +1501,13 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * @throws ObjectNotFoundException * @throws InsufficientPermissionsException */ - private void setFolderPermissions(User user, Folder folder, Set permissions) throws ObjectNotFoundException, InsufficientPermissionsException { + private void setFolderPermissions(User user, Folder folder, Set permissions) throws ObjectNotFoundException, InsufficientPermissionsException { if (permissions != null && !permissions.isEmpty()) { User owner = folder.getOwner(); - PermissionDTO ownerPerm = null; - for (PermissionDTO dto : permissions) - if (dto.getUser() != null && dto.getUser().getId().equals(owner.getId())) { - ownerPerm = dto; + Permission ownerPerm = null; + for (Permission perm : permissions) + if (perm.getUser() != null && perm.getUser().getId().equals(owner.getId())) { + ownerPerm = perm; break; } if (ownerPerm == null || !ownerPerm.hasRead() || !ownerPerm.hasWrite() || !ownerPerm.hasModifyACL()) @@ -1508,10 +1516,10 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { for (Permission perm: folder.getPermissions()) dao.delete(perm); folder.getPermissions().clear(); - for (PermissionDTO dto : permissions) { + for (Permission p : permissions) { // Skip 'empty' permission entries. - if (!dto.getRead() && !dto.getWrite() && !dto.getModifyACL()) continue; - folder.addPermission(getPermission(dto)); + if (!p.getRead() && !p.getWrite() && !p.getModifyACL()) continue; + folder.addPermission(getPermission(p)); } dao.update(folder); for (FileHeader file : folder.getFiles()) { @@ -1525,18 +1533,18 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } } - private Permission getPermission(PermissionDTO dto) throws ObjectNotFoundException { + private Permission getPermission(Permission perm) throws ObjectNotFoundException { Permission res = new Permission(); - if (dto.getGroup() != null) - res.setGroup(dao.getEntityById(Group.class, dto.getGroup().getId())); - else if (dto.getUser() != null) - if (dto.getUser().getId() == null) - res.setUser(dao.getUser(dto.getUser().getUsername())); + if (perm.getGroup() != null) + res.setGroup(dao.getEntityById(Group.class, perm.getGroup().getId())); + else if (perm.getUser() != null) + if (perm.getUser().getId() == null) + res.setUser(dao.getUser(perm.getUser().getUsername())); else - res.setUser(dao.getEntityById(User.class, dto.getUser().getId())); - res.setRead(dto.hasRead()); - res.setWrite(dto.hasWrite()); - res.setModifyACL(dto.hasModifyACL()); + res.setUser(dao.getEntityById(User.class, perm.getUser().getId())); + res.setRead(perm.hasRead()); + res.setWrite(perm.hasWrite()); + res.setModifyACL(perm.hasModifyACL()); return res; } @@ -1544,12 +1552,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * @see gr.ebs.gss.server.ejb.ExternalAPI#getUsersByUserNameLike(java.lang.String) */ @Override - public List getUsersByUserNameLike(String username) { + public List getUsersByUserNameLike(String username) { List users = dao.getUsersByUserNameLike(username); - List result = new ArrayList(); - for (User u : users) - result.add(u.getDTO()); - return result; + return users; } @@ -1583,15 +1588,15 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public List getSharedRootFolders(Long userId) throws ObjectNotFoundException { + public List getSharedRootFolders(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); List folders = dao.getSharedRootFolders(userId); - List result = new ArrayList(); + List result = new ArrayList(); for (Folder f : folders) { - FolderDTO dto = f.getDTO(); - dto.setSubfolders(getSharedSubfolders(userId, f.getId())); - result.add(dto); + Folder lf = f; + lf.setSubfolders(getSharedSubfolders(userId, f.getId())); + result.add(lf); } return result; } @@ -1615,20 +1620,20 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public List getUsersSharingFoldersForUser(Long userId) throws ObjectNotFoundException { + public List getUsersSharingFoldersForUser(Long userId) throws ObjectNotFoundException { List users = dao.getUsersSharingFoldersForUser(userId); List usersFiles = dao.getUsersSharingFilesForUser(userId); - List res = new ArrayList(); + List result = new ArrayList(); for (User u : users) - res.add(u.getDTO()); + result.add(u); for(User fu : usersFiles) if(!users.contains(fu)) - res.add(fu.getDTO()); - return res; + result.add(fu); + return result; } @Override - public Set getFilePermissions(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException { + public Set getFilePermissions(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (fileId == null) @@ -1638,14 +1643,14 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if(!folder.hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the necessary permissions"); Set perms = folder.getPermissions(); - Set result = new LinkedHashSet(); + Set result = new LinkedHashSet(); for (Permission perm : perms) if (perm.getUser() != null && perm.getUser().getId().equals(folder.getOwner().getId())) - result.add(perm.getDTO()); + result.add(perm); for (Permission perm : perms) if (perm.getUser() != null && perm.getUser().getId().equals(folder.getOwner().getId())) { } else - result.add(perm.getDTO()); + result.add(perm); return result; } @@ -1660,13 +1665,13 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * @throws InsufficientPermissionsException */ private void setFilePermissions(FileHeader file, - Set permissions) + Set permissions) throws ObjectNotFoundException, InsufficientPermissionsException { if (permissions != null && !permissions.isEmpty()) { - PermissionDTO ownerPerm = null; - for (PermissionDTO dto : permissions) - if (dto.getUser() != null && dto.getUser().getId().equals(file.getOwner().getId())) { - ownerPerm = dto; + Permission ownerPerm = null; + for (Permission perm : permissions) + if (perm.getUser() != null && perm.getUser().getId().equals(file.getOwner().getId())) { + ownerPerm = perm; break; } if (ownerPerm == null || !ownerPerm.hasRead() || !ownerPerm.hasWrite() || !ownerPerm.hasModifyACL()) @@ -1675,96 +1680,84 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { for (Permission perm: file.getPermissions()) dao.delete(perm); file.getPermissions().clear(); - for (PermissionDTO dto : permissions) { + for (Permission perm : permissions) { // Skip 'empty' permission entries. - if (!dto.getRead() && !dto.getWrite() && !dto.getModifyACL()) continue; - file.addPermission(getPermission(dto)); + if (!perm.getRead() && !perm.getWrite() && !perm.getModifyACL()) continue; + file.addPermission(getPermission(perm)); } dao.flush(); } } @Override - public List getSharedFilesNotInSharedFolders(Long userId) throws ObjectNotFoundException { + public List getSharedFilesNotInSharedFolders(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); List files = dao.getSharedFilesNotInSharedFolders(userId); - List result = new ArrayList(); - for (FileHeader f : files) - result.add(f.getDTO()); - return result; + return files; } @Override - public List getSharedFiles(Long userId) throws ObjectNotFoundException { + public List getSharedFiles(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); List files = dao.getSharedFiles(userId); - List result = new ArrayList(); - for (FileHeader f : files) - result.add(f.getDTO()); - return result; + return files; } @Override - public List getSharedFolders(Long userId) throws ObjectNotFoundException { + public List getSharedFolders(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); List folders = dao.getSharedFolders(userId); - List result = new ArrayList(); - for (Folder f : folders) - result.add(f.getDTO()); - return result; + return folders; } @Override - public List getSharedFiles(Long ownerId, Long callingUserId) throws ObjectNotFoundException { + public List getSharedFiles(Long ownerId, Long callingUserId) throws ObjectNotFoundException { if (ownerId == null) throw new ObjectNotFoundException("No owner specified"); if (callingUserId == null) throw new ObjectNotFoundException("No calling user specified"); List folders = dao.getSharedFiles(ownerId, callingUserId); - List result = new ArrayList(); - for (FileHeader f : folders) - result.add(f.getDTO()); - return result; + return folders; } @Override - public List getSharedRootFolders(Long ownerId, Long callingUserId) throws ObjectNotFoundException { + public List getSharedRootFolders(Long ownerId, Long callingUserId) throws ObjectNotFoundException { if (ownerId == null) throw new ObjectNotFoundException("No owner specified"); if (callingUserId == null) throw new ObjectNotFoundException("No calling user specified"); List folders = dao.getSharedRootFolders(ownerId, callingUserId); - List result = new ArrayList(); + List result = new ArrayList(); for (Folder f : folders) { - FolderDTO dto = f.getDTO(); - dto.setSubfolders(getSharedSubfolders(ownerId, callingUserId, f.getId())); - result.add(dto); + Folder lf = f; + lf.setSubfolders(getSharedSubfolders(ownerId, callingUserId, f.getId())); + result.add(lf); } return result; } @Override - public List getSharedSubfolders(Long userId, Long folderId) throws ObjectNotFoundException { + public List getSharedSubfolders(Long userId, Long folderId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (folderId == null) throw new ObjectNotFoundException("No folder specified"); User user = dao.getEntityById(User.class, userId); Folder folder = dao.getEntityById(Folder.class, folderId); - List result = new ArrayList(); + List result = new ArrayList(); if (folder.isShared(user) || folder.isReadForAll()) for (Folder f : folder.getSubfolders()) if ((f.isShared(user) || f.isReadForAll()) && !f.isDeleted()) - result.add(f.getDTO()); + result.add(f); return result; } @Override - public List getSharedSubfolders(Long userId, Long callingUserId, Long folderId) throws ObjectNotFoundException { + public List getSharedSubfolders(Long userId, Long callingUserId, Long folderId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (callingUserId == null) @@ -1773,13 +1766,13 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { throw new ObjectNotFoundException("No folder specified"); User user = dao.getEntityById(User.class, callingUserId); Folder folder = dao.getEntityById(Folder.class, folderId); - List result = new ArrayList(); + List result = new ArrayList(); if (folder.isSharedForOtherUser(user)) for (Folder f : folder.getSubfolders()) if (f.isSharedForOtherUser(user) && !f.isDeleted()){ - FolderDTO dto = f.getDTO(); - dto.setSubfolders(getSharedSubfolders(userId, callingUserId, dto.getId())); - result.add(dto); + Folder lf = f; + lf.setSubfolders(getSharedSubfolders(userId, callingUserId, lf.getId())); + result.add(lf); } return result; @@ -1812,7 +1805,20 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { List result = new ArrayList(); try { CommonsHttpSolrServer solr = new CommonsHttpSolrServer(getConfiguration().getString("solr.url")); - SolrQuery solrQuery = new SolrQuery(escapeCharacters(normalizeSearchQuery(query))); + List groups = dao.getGroupsContainingUser(userId); + String constructedQuery = escapeCharacters(normalizeSearchQuery(query)) + " AND (public: true OR ureaders: " + userId; + if (!groups.isEmpty()) { + constructedQuery += " OR ("; + for (int i=0; i fileIds) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - final User user = dao.getEntityById(User.class, userId); - List filesToRemove = new ArrayList(); - //first delete database objects - for(Long fileId : fileIds){ - if (fileId == null) - throw new ObjectNotFoundException("No file specified"); - final FileHeader file = dao.getEntityById(FileHeader.class, fileId); - final Folder parent = file.getFolder(); - if (parent == null) - throw new ObjectNotFoundException("The specified file has no parent folder"); - if (!file.hasDeletePermission(user)) - throw new InsufficientPermissionsException("User " + user.getId() + " cannot delete file " + file.getName() + "(" + file.getId() + ")"); - - parent.removeFile(file); - for (final FileBody body : file.getBodies()) - filesToRemove.add(body.getStoredFilePath()); - dao.delete(file); - touchParentFolders(parent, user, new Date()); - } - //then remove physical files if everything is ok - for(String physicalFileName : filesToRemove) - deleteActualFile(physicalFileName); - //then unindex deleted files - for(Long fileId : fileIds) - indexFile(fileId, true); - - } - - @Override - public void moveFilesToTrash(Long userId, List fileIds) throws ObjectNotFoundException, InsufficientPermissionsException { - for(Long l : fileIds) - moveFileToTrash(userId, l); - - } - - @Override - public void removeFilesFromTrash(Long userId, List fileIds) throws ObjectNotFoundException, InsufficientPermissionsException { - for(Long l : fileIds) - removeFileFromTrash(userId, l); - - } - - @Override public Nonce createNonce(Long userId) throws ObjectNotFoundException { if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -1967,51 +1926,6 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public List getVersions(Long userId, Long fileId) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - if (fileId == null) - throw new ObjectNotFoundException("No file specified"); - User user = dao.getEntityById(User.class, userId); - FileHeader header = dao.getEntityById(FileHeader.class, fileId); - if(!header.hasReadPermission(user)) - throw new InsufficientPermissionsException("You don't have the necessary permissions"); - List result = new LinkedList(); - for(int i = header.getBodies().size()-1 ; i>=0; i--) - result.add(header.getBodies().get(i).getDTO()); - return result; - } - - @Override - public void removeVersion(Long userId, Long fileId, Long bodyId) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - if (fileId == null) - throw new ObjectNotFoundException("No file specified"); - if (bodyId == null) - throw new ObjectNotFoundException("No body specified"); - User user = dao.getEntityById(User.class, userId); - FileHeader header = dao.getEntityById(FileHeader.class, fileId); - if(!header.hasWritePermission(user)) - throw new InsufficientPermissionsException("You don't have the necessary permissions"); - FileBody body = dao.getEntityById(FileBody.class, bodyId); - if(body.equals(header.getCurrentBody())){ - - if(header.getBodies().size() == 1) - throw new InsufficientPermissionsException("You cant delete this version, Delete file instead!"); - for(FileBody b : header.getBodies()) - if(b.getVersion() == body.getVersion()-1) - header.setCurrentBody(b); - } - deleteActualFile(body.getStoredFilePath()); - header.getBodies().remove(body); - - Folder parent = header.getFolder(); - touchParentFolders(parent, user, new Date()); - - } - - @Override public void restoreVersion(Long userId, Long fileId, int version) throws ObjectNotFoundException, InsufficientPermissionsException, GSSIOException, QuotaExceededException { if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -2094,7 +2008,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { for (Long id : fileIds) { postFileToSolr(solr, id); i++; - if (i % 100 == 0) { + if (i % 10 == 0) { solr.commit(); logger.info("Sent commit to solr at file " + i); } @@ -2123,9 +2037,9 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { postFileToSolr(solr, id); i++; } - if (i % 100 == 0) { + if (i % 10 == 0) { solr.commit(); - logger.debug("Sent commit to solr at file " + i); + logger.info("Sent commit to solr at file " + i); } solr.optimize(); solr.commit(); @@ -2139,7 +2053,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public FileHeaderDTO createFile(Long userId, Long folderId, String name, String mimeType, long fileSize, String filePath) + public FileHeader createFile(Long userId, Long folderId, String name, String mimeType, long fileSize, String filePath) throws DuplicateNameException, ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { // Validate. @@ -2205,11 +2119,11 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { dao.flush(); indexFile(file.getId(), false); - return file.getDTO(); + return file; } @Override - public FileHeaderDTO updateFileContents(Long userId, Long fileId, String mimeType, long fileSize, String filePath) throws ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { + public FileHeader updateFileContents(Long userId, Long fileId, String mimeType, long fileSize, String filePath) throws ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException { if (userId == null) throw new ObjectNotFoundException("No user specified"); if (fileId == null) @@ -2242,7 +2156,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { touchParentFolders(parent, owner, new Date()); indexFile(fileId, false); - return file.getDTO(); + return file; } /** @@ -2412,45 +2326,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } @Override - public FolderDTO getFolderWithSubfolders(Long userId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - if (folderId == null) - throw new ObjectNotFoundException("No folder specified"); - final User user = dao.getEntityById(User.class, userId); - final Folder folder = dao.getEntityById(Folder.class, folderId); - // Check permissions - if (!folder.hasReadPermission(user)) - throw new InsufficientPermissionsException("You don't have the permissions to read this folder"); - List subfolders = new ArrayList(); - if (folder.hasReadPermission(user)) - for (Folder f : folder.getSubfolders()) - if (f.hasReadPermission(user) && !f.isDeleted()) - subfolders.add(f.getDTO()); - FolderDTO result = folder.getDTO(); - result.setSubfolders(subfolders); - return folder.getDTO(); - } - - @Override - public FolderDTO getFolderWithSubfolders(Long userId, Long callingUserId, Long folderId) throws ObjectNotFoundException, InsufficientPermissionsException { - if (userId == null) - throw new ObjectNotFoundException("No user specified"); - if (folderId == null) - throw new ObjectNotFoundException("No folder specified"); - User user = dao.getEntityById(User.class, callingUserId); - Folder folder = dao.getEntityById(Folder.class, folderId); - // Check permissions - if (!folder.hasReadPermission(user)) - throw new InsufficientPermissionsException("You don't have the permissions to read this folder"); - - FolderDTO result = folder.getDTO(); - result.setSubfolders(getSharedSubfolders(userId, callingUserId, folder.getId())); - return result; - } - - @Override - public FileBodyDTO getFileVersion(Long userId, Long fileId, int version) + public FileBody getFileVersion(Long userId, Long fileId, int version) throws ObjectNotFoundException, InsufficientPermissionsException { if (userId == null) throw new ObjectNotFoundException("No user specified"); @@ -2463,7 +2339,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { if (!file.hasReadPermission(user) && !file.getFolder().hasReadPermission(user)) throw new InsufficientPermissionsException("You don't have the necessary permissions"); FileBody body = dao.getFileVersion(fileId, version); - return body.getDTO(); + return body; } @Override @@ -2558,26 +2434,6 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { } /** - * Mark the folder as modified from the specified user and change it's modification date. - */ - private void touchFolder(Folder f, User _user, Date now){ - final AuditInfo auditInfo = f.getAuditInfo(); - auditInfo.setModificationDate(now); - auditInfo.setModifiedBy(_user); - f.setAuditInfo(auditInfo); - } - - /** - * Mark the file as modified from the specified user and change it's modification date. - */ - private void touchFile(FileHeader f, User _user, Date now){ - final AuditInfo auditInfo = f.getAuditInfo(); - auditInfo.setModificationDate(now); - auditInfo.setModifiedBy(_user); - f.setAuditInfo(auditInfo); - } - - /** * Set the provided readForAll as the new readforAll value of the specified * folder and sub-folders. * @@ -2619,7 +2475,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { * @throws ObjectNotFoundException */ - public List getUserLogins(Long userId) throws ObjectNotFoundException{ + public List getLastUserLogins(Long userId) throws ObjectNotFoundException{ List userLoginResults = new ArrayList(); userLoginResults = dao.getLoginsForUser(userId); if(userLoginResults.size() == 0) @@ -2656,24 +2512,33 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { for (FileTag t : file.getFileTags()) { solrRequest.getParams().add("literal.tag", t.getTag()); } + for (Permission p : file.getPermissions()) { + if (p.getRead()) { + if (p.getUser() != null) + solrRequest.setParam("literal.ureaders", p.getUser().getId().toString()); + else if (p.getGroup() != null) + solrRequest.setParam("literal.greaders", p.getGroup().getId().toString()); + } + } + solrRequest.setParam("literal.owner", file.getOwner().getId().toString()); + solrRequest.setParam("literal.public", String.valueOf(file.isReadForAll())); File fsFile = new File(body.getStoredFilePath()); solrRequest.addFile(fsFile); -// solrRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); try { solr.request(solrRequest); } catch (SolrException e) { - logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file"); + logger.warn("File " + id + " failed with SolrException: " + e.getLocalizedMessage() + ". Retrying without the file"); //Let 's try without the file sendMetaDataOnly(solr, file); } catch (NullPointerException e) { - logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file"); + logger.warn("File " + id + " failed with NullPointerException: " + e.getLocalizedMessage() + ". Retrying without the file"); //Let 's try without the file sendMetaDataOnly(solr, file); } catch (SolrServerException e) { - logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file"); + logger.warn("File " + id + " failed with SolrServerException: " + e.getLocalizedMessage() + ". Retrying without the file"); //Let 's try without the file sendMetaDataOnly(solr, file); } @@ -2696,6 +2561,16 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { for (FileTag t : file.getFileTags()) { solrDoc.addField("tag", t.getTag()); } + for (Permission p : file.getPermissions()) { + if (p.getRead()) { + if (p.getUser() != null) + solrDoc.addField("ureaders", p.getUser().getId()); + else if (p.getGroup() != null) + solrDoc.addField("greaders", p.getGroup().getId()); + } + } + solrDoc.addField("owner", file.getOwner().getId()); + solrDoc.addField("public", file.isReadForAll()); solr.add(solrDoc); } @@ -2721,4 +2596,31 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote { private String escapeCharacters(String text) { return text.replaceAll(":", "\\\\:"); } + + /*** NEW METHODS IN ORDER TO AVOID LAZY loading exception in json render + ****/ + @Override + public Folder expandFolder(Folder folder) throws ObjectNotFoundException{ + Folder result = dao.getEntityById(Folder.class, folder.getId()); + result.getSubfolders().size(); + result.getFiles().size(); + result.getPermissions().size(); + return result; +} + + @Override + public FileHeader expandFile(FileHeader folder) throws ObjectNotFoundException{ + FileHeader result = dao.getEntityById(FileHeader.class, folder.getId()); + result.getFolder(); + result.getPermissions().size(); + result.getFileTags().size(); + return result; + } + + @Override + public Group expandGroup(Group folder) throws ObjectNotFoundException{ + Group result = dao.getEntityById(Group.class, folder.getId()); + result.getMembers().size(); + return result; + } }