From: koutsoub Date: Mon, 28 Feb 2011 13:02:57 +0000 (+0200) Subject: Merge with 2ad3c504ee5d73982c0ef23336276dc1fc9e165f X-Git-Tag: pithos/v0.7.8~323^2~14^2~22^2~28 X-Git-Url: https://code.grnet.gr/git/pithos/commitdiff_plain/c4a1323760135e13d4a41e4bc80371056919f510 Merge ... 2ad3c504ee5d73982c0ef23336276dc1fc9e165f --- c4a1323760135e13d4a41e4bc80371056919f510 diff --cc .classpath index 0ea8fc3,c578ff7..15aab67 --- a/.classpath +++ b/.classpath @@@ -26,7 -26,7 +26,7 @@@ - - ++ @@@ -180,16 -180,20 +180,23 @@@ - ++ + + + - + + + + + + + diff --cc build.xml index ca26a77,e2d905d..e0734b4 --- a/build.xml +++ b/build.xml @@@ -139,6 -115,8 +139,8 @@@ - ++ + @@@ -150,6 -128,8 +152,8 @@@ - ++ + @@@ -158,8 -138,10 +162,10 @@@ - - - + + ++ + diff --cc src/gr/ebs/gss/client/FileContextMenu.java index 6fe9334,b6cae47..81148a8 --- a/src/gr/ebs/gss/client/FileContextMenu.java +++ b/src/gr/ebs/gss/client/FileContextMenu.java @@@ -220,10 -219,14 +220,10 @@@ public class FileContextMenu extends Po contextMenu.addItem(trashItem); contextMenu.addItem(deleteItem); - MenuItem refreshItem = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - refreshItem.getElement().setId("fileContextMenu.refresh"); + MenuItem refresh = new MenuItem("" + AbstractImagePrototype.create(images.refresh()).getHTML() + " Refresh", true, new RefreshCommand(this, images)); - // refresh.getElement().setId("fileContextMenu.refresh"); ++ refresh.getElement().setId("fileContextMenu.refresh"); + contextMenu.addItem(refresh); - contextMenu.addItem(refreshItem); contextMenu.addItem(sharingItem); contextMenu.addItem(propItem); } diff --cc src/gr/ebs/gss/server/ejb/ExternalAPI.java index 5db1f17,3b39d8a..48b817d --- a/src/gr/ebs/gss/server/ejb/ExternalAPI.java +++ b/src/gr/ebs/gss/server/ejb/ExternalAPI.java @@@ -1293,11 -1206,81 +1206,90 @@@ public interface ExternalAPI public void postFileToSolr(CommonsHttpSolrServer solr, Long id); /** + * @param folder + * @throws ObjectNotFoundException + */ + public Folder expandFolder(Folder folder) throws ObjectNotFoundException; + + /** + * @param folder + * @return + * @throws ObjectNotFoundException + */ + FileHeader expandFile(FileHeader folder) throws ObjectNotFoundException; + + /** + * @param folder + * @return + * @throws ObjectNotFoundException + */ + Group expandGroup(Group folder) throws ObjectNotFoundException; + + /** + * @param username + * @return + */ + User getUserByUserName(String username); + + /** + * @param lock + * @return + */ + FileLock saveOrUpdateLock(FileLock lock); + + /** + * @param lock + */ + void removeLock(FileLock lock); + + /** + * @param tokenId + * @return + */ + FileLock getLockByToken(String tokenId); + + /** + * @param id + * @return + */ + FileLock getLockById(String id); + + /** + * @param userId + * @param folderId + * @param name + * @return + * @throws DuplicateNameException + * @throws ObjectNotFoundException + * @throws GSSIOException + * @throws InsufficientPermissionsException + * @throws QuotaExceededException + */ + FileHeader createEmptyFile(Long userId, Long folderId, String name) throws DuplicateNameException, ObjectNotFoundException, GSSIOException, InsufficientPermissionsException, QuotaExceededException; + + /** + * @param nonce + * @return + */ + WebDavNonce saveOrUpdateWebDavNonce(WebDavNonce nonce); + + /** + * @param nonce + */ + void removeWebDavNonce(WebDavNonce nonce); + + /** + * @param tokenId + * @return + */ + WebDavNonce getWebDavNonce(String tokenId); ++ ++ /** + * Returns a user that matches the given full username + * + * @param username the username of the User + * @return UserDTO + */ + public UserDTO getUserByUserName(String username); + } diff --cc src/gr/ebs/gss/server/ejb/ExternalAPIBean.java index ff8ec1d,aa740b6..88059a0 --- a/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java +++ b/src/gr/ebs/gss/server/ejb/ExternalAPIBean.java @@@ -2761,13 -2599,184 +2599,194 @@@ public class ExternalAPIBean implement 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; + } + + /* (non-Javadoc) + * @see gr.ebs.gss.server.ejb.ExternalAPI#getUsersByUserNameLike(java.lang.String) + */ + @Override + public User getUserByUserName(String username) { + User result = dao.getUserByUserName(username); + return result; + } + + /*WEBDAV CREATE EMPTY FILE*/ + @Override + public FileHeader createEmptyFile(Long userId, Long folderId, String name) + throws DuplicateNameException, ObjectNotFoundException, GSSIOException, + InsufficientPermissionsException, QuotaExceededException { + // Validate. + if (userId == null) + throw new ObjectNotFoundException("No user specified"); + if (folderId == null) + throw new ObjectNotFoundException("No folder specified"); + String contentType = DEFAULT_MIME_TYPE; + if (StringUtils.isEmpty(name)) + throw new ObjectNotFoundException("No file name specified"); + if (dao.existsFolderOrFile(folderId, name)) + throw new DuplicateNameException("A folder or file with the name '" + name + + "' already exists at this level"); + + // Do the actual work. + Folder parent = null; + try { + parent = dao.getEntityById(Folder.class, folderId); + } catch (final ObjectNotFoundException onfe) { + // Supply a more accurate problem description. + throw new ObjectNotFoundException("Parent folder not found"); + } + final User owner = dao.getEntityById(User.class, userId); + if (!parent.hasWritePermission(owner)) + throw new InsufficientPermissionsException("You don't have the permissions to write to this folder"); + final FileHeader file = new FileHeader(); + file.setName(name); + parent.addFile(file); + // set file owner to folder owner + file.setOwner(parent.getOwner()); + //set file's readForAll value according to parent folder readForAll value + file.setReadForAll(parent.isReadForAll()); + + final Date now = new Date(); + final AuditInfo auditInfo = new AuditInfo(); + auditInfo.setCreatedBy(owner); + auditInfo.setCreationDate(now); + auditInfo.setModifiedBy(owner); + auditInfo.setModificationDate(now); + file.setAuditInfo(auditInfo); + // TODO set the proper versioning flag on creation + file.setVersioned(false); + + for (final Permission p : parent.getPermissions()) { + final Permission permission = new Permission(); + permission.setGroup(p.getGroup()); + permission.setUser(p.getUser()); + permission.setRead(p.getRead()); + permission.setWrite(p.getWrite()); + permission.setModifyACL(p.getModifyACL()); + file.addPermission(permission); + } + // Create the file body. + try { + createEmptyFileBody(name, contentType, 0, file, auditInfo); + } catch (FileNotFoundException e) { + throw new GSSIOException(e); + } + touchParentFolders(parent, owner, new Date()); + dao.flush(); + return file; + } + + private void createEmptyFileBody(String name, String mimeType, long fileSize, + FileHeader header, AuditInfo auditInfo) + throws FileNotFoundException, QuotaExceededException, ObjectNotFoundException { + + long currentTotalSize = 0; + if (!header.isVersioned() && header.getCurrentBody() != null && header.getBodies() != null) + currentTotalSize = header.getTotalSize(); + Long quotaLeft = getQuotaLeft(header.getOwner().getId()); + + + FileBody body = new FileBody(); + + // if no mime type or the generic mime type is defined by the client, then try to identify it from the filename extension + if (StringUtils.isEmpty(mimeType) || "application/octet-stream".equals(mimeType) + || "application/download".equals(mimeType) || "application/force-download".equals(mimeType) + || "octet/stream".equals(mimeType) || "application/unknown".equals(mimeType)) + body.setMimeType(identifyMimeType(name)); + else + body.setMimeType(mimeType); + body.setAuditInfo(auditInfo); + body.setFileSize(fileSize); + body.setOriginalFilename(name); + body.setStoredFilePath(generateRepositoryFilePath()); + //CLEAR OLD VERSION IF FILE IS NOT VERSIONED AND GETS UPDATED + if(!header.isVersioned() && header.getCurrentBody() != null){ + header.setCurrentBody(null); + if (header.getBodies() != null) { + Iterator it = header.getBodies().iterator(); + while(it.hasNext()){ + FileBody bo = it.next(); + deleteActualFile(bo.getStoredFilePath()); + it.remove(); + dao.delete(bo); + } + } + } + + dao.flush(); + header.addBody(body); + header.setAuditInfo(auditInfo); + + dao.create(body); + } + /*** WEBDAV LOCK **/ + @Override + public FileLock getLockById(String id) { + return dao.getLockById(id); + } + + @Override + public FileLock getLockByToken(String tokenId) { + return dao.getLockByToken(tokenId); + } + + @Override + public void removeLock(FileLock lock) { + dao.removeLock(lock); + } + + @Override + public FileLock saveOrUpdateLock(FileLock lock) { + return dao.saveOrUpdateLock(lock); + } + + @Override + public WebDavNonce getWebDavNonce(String tokenId) { + return dao.getWebDavNonce(tokenId); + } + + @Override + public void removeWebDavNonce(WebDavNonce nonce) { + dao.removeWebDavNonce(nonce); + } + + @Override + public WebDavNonce saveOrUpdateWebDavNonce(WebDavNonce nonce) { + return dao.saveOrUpdateWebDavNonce(nonce); + } ++ + /* (non-Javadoc) + * @see gr.ebs.gss.server.ejb.ExternalAPI#getUsersByUserNameLike(java.lang.String) + */ + @Override + public UserDTO getUserByUserName(String username) { + User result = dao.getUserByUserName(username); + return result.getDTO(); + } + } diff --cc src/gr/ebs/gss/server/ejb/GSSDAOBean.java index ac01be6,4815518..f06c373 --- a/src/gr/ebs/gss/server/ejb/GSSDAOBean.java +++ b/src/gr/ebs/gss/server/ejb/GSSDAOBean.java @@@ -797,11 -799,62 +799,69 @@@ public class GSSDAOBean implements GSSD .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; + } + + @Override + public User getUserByUserName(String username) { + return (User) manager.createQuery("select u from User u where u.username=:username"). + setParameter("username", username).getSingleResult(); + + } }