Author: kmorin Date: 2014-08-07 18:57:09 +0200 (Thu, 07 Aug 2014) New Revision: 495 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/495 Log: fusion des dossiers dont un parent est deja racine lisible de l'arbre Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchAction.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-07 16:11:14 UTC (rev 494) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-07 16:57:09 UTC (rev 495) @@ -96,8 +96,24 @@ @Override public Email getEmailById(String id) { - Email email = getPersistenceContext().getEmailDao().forTopiaIdEquals(id).findUnique(); - fetchEmailData(email); + Email email = getPersistenceContext().getEmailDao() + .forTopiaIdEquals(id) + .addAllFetches(Email.PROPERTY_DEMAND_TYPE, + Email.PROPERTY_DEMAND_TYPE + "." + DemandType.PROPERTY_FIELDS, + Email.PROPERTY_RANGE_ROW, + Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE, + Email.PROPERTY_HISTORY, + Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER, + Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS, + Email.PROPERTY_REPLIES, + Email.PROPERTY_ATTACHMENT, + Email.PROPERTY_TAKEN_BY, + Email.PROPERTY_CLIENT, + Email.PROPERTY_EMAIL_GROUP, + Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL, + Email.PROPERTY_ETAT_ATTENTE, + Email.PROPERTY_PRIORITY).findUnique(); +// fetchEmailData(email); return email; } @@ -684,9 +700,22 @@ EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); PaginationResult<Email> result = emailDao.search(emailFilter, readMailFolders, pagination); + MailFolderService mailFolderService = serviceContext.getMailFolderService(); // Fetch lazy field for list display for (Email email : result.getElements()) { fetchEmailData(email); + MailFolder folder = email.getMailFolder(); + while (folder != null) { + Hibernate.initialize(folder); + //TODO 20140807 kmorin : is folder readable + folder.setFolderReadable(false); + folder.setFolderWritable(false); + + mailFolderService.fetchFolderAttributes(folder); + + folder = folder.getParent(); + } + } return result; Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-08-07 16:11:14 UTC (rev 494) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderService.java 2014-08-07 16:57:09 UTC (rev 495) @@ -46,6 +46,8 @@ List<MailFolder> getRootMailFolders(); + void fetchFolderAttributes(MailFolder folder); + List<MailFolder> getRootMailFoldersWithReadingRights(FaxToMailUser user); List<MailFolder> getRootMailFoldersWithMoveRights(FaxToMailUser user); Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java 2014-08-07 16:11:14 UTC (rev 494) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/MailFolderServiceImpl.java 2014-08-07 16:57:09 UTC (rev 495) @@ -108,24 +108,38 @@ @Override public List<MailFolder> getRootMailFoldersWithReadingRights(FaxToMailUser user) { MailFolderTopiaDao dao = getPersistenceContext().getMailFolderDao(); - List<MailFolder> result = new ArrayList<>(dao.getReadableFolders(user)); - for (MailFolder f : result) { - findReadableFolders(f, user, false); + List<MailFolder> folders = new ArrayList<>(dao.getReadableFolders(user)); + // copy the list to be able to remove the folders whose parent is already in the list + List<MailFolder> result = new ArrayList<>(folders); + + for (MailFolder folder : folders) { + MailFolder f = folder; while (f.getParent() != null) { f = f.getParent(); + // if the parent is already in the readable roots, remove the current folder from the roots + if (result.contains(f)) { + result.remove(folder); + folder = null; + break; + } + Hibernate.initialize(f); f.setFolderReadable(false); f.setFolderWritable(false); fetchFolderAttributes(f); } + + if (folder != null) { + browseReadableFolders(folder, result, user, false); + } } return result; } - protected void findReadableFolders(MailFolder folder, FaxToMailUser user, boolean writable) { + protected void browseReadableFolders(MailFolder folder, List<MailFolder> readableRoots, FaxToMailUser user, boolean writable) { folder.setFolderReadable(true); if (!writable && folder.sizeWriteRightGroups() > 0) { @@ -136,16 +150,21 @@ } folder.setFolderWritable(writable); - fetchFolderAttributes(folder); - if (folder.isChildrenNotEmpty()) { for (MailFolder child : folder.getChildren()) { - findReadableFolders(child, user, writable); + // if the child is in the readable roots, rmeove it to merge the branches + if (!readableRoots.remove(child)) { + browseReadableFolders(child, readableRoots, user, writable); + } } } + + fetchFolderAttributes(folder); + } - protected void fetchFolderAttributes(MailFolder folder) { + @Override + public void fetchFolderAttributes(MailFolder folder) { Hibernate.initialize(folder.getFolderTableColumns()); Hibernate.initialize(folder.getRanges()); Hibernate.initialize(folder.getReplyAddresses()); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchAction.java 2014-08-07 16:11:14 UTC (rev 494) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchAction.java 2014-08-07 16:57:09 UTC (rev 495) @@ -65,6 +65,7 @@ for (Email email : emails) { DemandeUIModel demand = new DemandeUIModel(); demand.fromEntity(email); + demand.setMailFolder(email.getMailFolder()); demand.setValid(handler.isDemandeValid(demand)); result.add(demand);