@Transactional public Set<Document> retrieveAllDocumentsInFolder(String folderName, User user) throws InsufficientPrivilagesException { Folder f = folderDao.getFolderByPath(folderName, user); if (!f.canRead(user)) throw new InsufficientPrivilagesException(); Set<Document> docs = f.getDocs(); return docs; }
@Transactional public void createDocument(Document info, String folder, InputStream docData, User user) throws IOException { boolean created = false; File file = null; try { info.setId(null); documentDao.makePersistent(info); String uuid = UUID.randomUUID().toString(); file = new File(docsFolderPath + uuid); while (file.exists()) { uuid = UUID.randomUUID().toString(); file = new File(docsFolderPath + uuid); } created = file.createNewFile(); info.setUuid(uuid); Folder f = folderDao.getFolderByPath(folder, user); if (f == null) { if (folder != null && !folder.equals("")) { f = new Folder(); f.setPath(folder); folderDao.makePersistent(f); } } if (f == null) { throw new IOException("Internal Error"); } if (!f.canWrite(user)) throw new InsufficientPrivilagesException(); f.getDocs().add(info); Integer id = info.getId(); OutputStream out = new FileOutputStream(file); ByteUtils.write(docData, out); out.flush(); out.close(); File fi = new File(docsFolderPath + id); info.setSize((int) fi.length()); documentDao.makePersistent(info); } catch (Throwable t) { if (created && file != null) { file.delete(); } throw new RuntimeException(t); } }