r32 - in trunk: . faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-persistence/src/main/resources/i18n faxtomail-persistence/src/main/xmi faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content faxtomail-ui-sw
Author: kmorin Date: 2014-04-10 14:18:23 +0200 (Thu, 10 Apr 2014) New Revision: 32 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/32 Log: fixes #4668 [ECRAN] Grouper Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchToGroupAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/ButtonEmailGroup.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java Removed: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/ Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/HistoryType.java trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_en_GB.properties trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellEditor.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellRenderer.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentItem.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentModelAware.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/ButtonHistory.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryItemModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_en_GB.properties trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties trunk/pom.xml Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/HistoryType.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/HistoryType.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/HistoryType.java 2014-04-10 12:18:23 UTC (rev 32) @@ -39,6 +39,7 @@ REPLY(n("faxtomail.historyType.reply")), PRINTING(n("faxtomail.historyType.printing")), ARCHIVED(n("faxtomail.historyType.archive")), + GROUP(n("faxtomail.historyType.group")), ATTACHMENT_OPENING(n("faxtomail.historyType.attachmentOpening")), ATTACHMENT_MODIFICATION(n("faxtomail.historyType.attachmentModification")); Modified: trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_en_GB.properties =================================================================== --- trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_en_GB.properties 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_en_GB.properties 2014-04-10 12:18:23 UTC (rev 32) @@ -30,6 +30,7 @@ faxtomail.historyType.attachmentModification= faxtomail.historyType.attachmentOpening= faxtomail.historyType.creation= +faxtomail.historyType.group= faxtomail.historyType.modification= faxtomail.historyType.opening= faxtomail.historyType.printing= Modified: trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties =================================================================== --- trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties 2014-04-10 12:18:23 UTC (rev 32) @@ -29,6 +29,7 @@ faxtomail.historyType.attachmentModification=Modification de pièce jointe faxtomail.historyType.attachmentOpening=Ouverture de pièce jointe faxtomail.historyType.creation=Création +faxtomail.historyType.group= faxtomail.historyType.modification=Modification faxtomail.historyType.opening=Ouverture faxtomail.historyType.printing=Impression Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-04-10 12:18:23 UTC (rev 32) @@ -4,6 +4,9 @@ import com.franciaflex.faxtomail.persistence.entities.AttachmentTopiaDao; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.EmailGroup; +import com.franciaflex.faxtomail.persistence.entities.EmailGroupImpl; +import com.franciaflex.faxtomail.persistence.entities.EmailGroupTopiaDao; import com.franciaflex.faxtomail.persistence.entities.EmailTopiaDao; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.History; @@ -13,6 +16,7 @@ import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.persistence.entities.RangeRowTopiaDao; import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -39,6 +43,10 @@ private static final Log log = LogFactory.getLog(EmailService.class); + public Email getRandomEmail() { + return getPersistenceContext().getEmailDao().forArchiveDateEquals(null).findAny(); + } + public Email getEmailById(String id) { Email email = getPersistenceContext().getEmailDao().findByTopiaId(id); return email; @@ -186,6 +194,7 @@ .addContainsText(Email.PROPERTY_SENDER, emailLike.getSender()) // .addContainsText(Email.PROPERTY_CLIENT_CODE, emailLike.getClientCode()) .addContainsText(Email.PROPERTY_PROJECT_REFERENCE, emailLike.getProjectReference()) + .addContainsText(Email.PROPERTY_COMPANY_REFERENCE, emailLike.getCompanyReference()) .addEqualsIfNotNull(Email.PROPERTY_TAKEN_BY, emailLike.getTakenBy()) .addEqualsIfNotNull(Email.PROPERTY_DEMAND_TYPE, emailLike.getDemandType()) .addEqualsIfNotNull(Email.PROPERTY_PRIORITY, emailLike.getPriority()) @@ -194,4 +203,62 @@ .findAll()); return result; } + + public Email groupEmails(Email email1, Email email2, FaxToMailUser user) { + EmailGroupTopiaDao groupDao = getPersistenceContext().getEmailGroupDao(); + + EmailGroup group1 = email1.getEmailGroup(); + EmailGroup group2 = email2.getEmailGroup(); + + // if both groups are null + if (group1 == null && group2 == null) { + EmailGroup group = groupDao.create(EmailGroup.PROPERTY_EMAIL, Lists.newArrayList(email1, email2)); + email1.setEmailGroup(group); + email2.setEmailGroup(group); + + // if only group 1 is null + } else if (group1 == null) { + email1.setEmailGroup(group2); + group2.addEmail(email1); + groupDao.update(group2); + + // if only group 2 is null + } else if (group2 == null) { + email2.setEmailGroup(group1); + group1.addEmail(email2); + groupDao.update(group1); + + // if the groups are equals, do nothing + } else if (group1.equals(group2)) { + return email1; + + // if both groups exist, merge them + } else { + group1.addAllEmail(group2.getEmail()); + email2.setEmailGroup(group1); + group2.clearEmail(); + groupDao.delete(group2); + groupDao.update(group1); + } + + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); + Date now = new Date(); + + email1.addHistory(historyDao.create(History.PROPERTY_TYPE, HistoryType.GROUP, + History.PROPERTY_FAX_TO_MAIL_USER, user, + History.PROPERTY_FIELDS, Sets.newHashSet(email2.getObject()), + History.PROPERTY_MODIFICATION_DATE, now)); + Email result = emailDao.update(email1); + + email2.addHistory(historyDao.create(History.PROPERTY_TYPE, HistoryType.GROUP, + History.PROPERTY_FAX_TO_MAIL_USER, user, + History.PROPERTY_FIELDS, Sets.newHashSet(email1.getObject()), + History.PROPERTY_MODIFICATION_DATE, now)); + emailDao.update(email2); + + getPersistenceContext().commit(); + + return result; + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-04-10 12:18:23 UTC (rev 32) @@ -194,6 +194,8 @@ private ApplicationActionUI actionUI; + private JFrame secondaryFrame; + /** * Flag to know if there is an exsiting db. * @@ -569,6 +571,14 @@ this.mainUI = mainUI; } + public JFrame getSecondaryFrame() { + return secondaryFrame; + } + + public void setSecondaryFrame(JFrame secondaryFrame) { + this.secondaryFrame = secondaryFrame; + } + @Override public ApplicationActionUI getActionUI() { return actionUI; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -93,7 +93,8 @@ if (getUI() != null) { if (previousScreen == null) { PREVIOUS_SCREEN.removeContextValue(getUI()); - } else { + + } else if (screen != previousScreen) { PREVIOUS_SCREEN.setContextValue(getUI(), previousScreen); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GenerateAnnotatedAttachmentAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,13 +1,13 @@ package com.franciaflex.faxtomail.ui.swing.actions; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorCrossUI; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorNoteUI; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUI; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUIModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentEditorUI; -import com.franciaflex.faxtomail.ui.swing.util.attachment.PDFEditorCrossUI; -import com.franciaflex.faxtomail.ui.swing.util.attachment.PDFEditorNoteUI; -import com.franciaflex.faxtomail.ui.swing.util.attachment.PDFEditorUI; -import com.franciaflex.faxtomail.ui.swing.util.attachment.PDFEditorUIHandler; -import com.franciaflex.faxtomail.ui.swing.util.attachment.PDFEditorUIModel; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUI; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.Image; Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,71 @@ +package com.franciaflex.faxtomail.ui.swing.actions; + +import com.franciaflex.faxtomail.persistence.entities.DemandStatus; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.services.service.EmailService; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchToGroupUI; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchToGroupUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchUI; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchUIModel; +import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; +import org.jdesktop.swingx.JXTable; + +import javax.swing.*; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class GroupAction extends AbstractFaxToMailAction<SearchUIModel, SearchToGroupUI, SearchToGroupUIHandler> { + + public GroupAction(SearchToGroupUIHandler handler) { + super(handler, false); + } + + protected DemandeUIModel currentEmail; + protected DemandeUIModel selectedEmail; + + @Override + public boolean prepareAction() throws Exception { + + JXTable dataTable = getUI().getDataTable(); + int rowIndex = dataTable.getSelectedRow(); + rowIndex = dataTable.convertRowIndexToModel(rowIndex); + selectedEmail = ((DemandeTableModel) dataTable.getModel()).getEntry(rowIndex); + + currentEmail = getContext().getCurrentEmail(); + + int i = JOptionPane.showConfirmDialog( + null, + t("faxtomail.alert.groupConfirmation.message", currentEmail.getObject(), selectedEmail.getObject()), + t("faxtomail.alert.groupConfirmation.title"), + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + boolean result = i == JOptionPane.YES_OPTION; + return result; + } + + @Override + public void doAction() throws Exception { + EmailService emailService = getContext().getEmailService(); + + Email email2 = emailService.getEmailById(selectedEmail.getTopiaId()); + Email email1 = emailService.getEmailById(currentEmail.getTopiaId()); + + FaxToMailUser currentUser = getContext().getCurrentUser(); + email1 = emailService.groupEmails(email1, email2, currentUser); + currentEmail.fromEntity(email1); + currentEmail.setGroupedDemandes(email1.getEmailGroup()); + + handler.showInformationMessage(t("faxtomail.demande.group.successful", email2.getObject())); + + handler.closeFrame(); + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -73,7 +73,8 @@ Email email = model.toEntity(persistedEmail); String[] modifiedProperties = getHandler().getMonitor().getModifiedProperties(); - context.getEmailService().saveEmail(email, currentUser, modifiedProperties); + email = context.getEmailService().saveEmail(email, currentUser, modifiedProperties); + model.fromEntity(email); } } Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchToGroupAction.java (from rev 30, 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/SearchToGroupAction.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchToGroupAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,42 @@ +package com.franciaflex.faxtomail.ui.swing.actions; + +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchToGroupUI; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchToGroupUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchUI; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchUIModel; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class SearchToGroupAction extends AbstractFaxToMailAction<SearchUIModel, SearchToGroupUI, SearchToGroupUIHandler> { + + public SearchToGroupAction(SearchToGroupUIHandler handler) { + super(handler, false); + } + + @Override + public void doAction() throws Exception { + SearchUIModel model = getModel(); + getContext().setSearch(model); + + Email email = model.toEntity(); + List<Email> emails = getContext().getEmailService().search(email, model.getMinReceptionDate(), model.getMaxReceptionDate(), + model.getMinModificationDate(), model.getMaxModificationDate(), model.getModifiedBy(), + model.getMinPrintingDate(), model.getMaxPrintingDate()); + List<DemandeUIModel> result = new ArrayList<>(); + for (Email mail : emails) { + DemandeUIModel demand = new DemandeUIModel(); + demand.fromEntity(mail); + demand.setValid(handler.isDemandeValid(demand)); + result.add(demand); + } + model.setResults(result); + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -49,6 +49,15 @@ } @Override + public void doAction() throws Exception { + super.doAction(); + + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + Email email = getContext().getEmailService().getEmailById(currentEmail.getTopiaId()); + currentEmail.setGroupedDemandes(email.getEmailGroup()); + } + + @Override public void postSuccessAction() { super.postSuccessAction(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-04-10 12:18:23 UTC (rev 32) @@ -3,8 +3,8 @@ import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.franciaflex.faxtomail.ui.swing.content.demande.MailFolderChooserUI; -import com.franciaflex.faxtomail.ui.swing.content.demande.MailFolderChooserUIHandler; +import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; +import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIHandler; import jaxx.runtime.JAXXContext; import jaxx.runtime.JAXXUtil; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellEditor.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentCellEditor.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellEditor.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,4 +1,4 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; /* * #%L Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellRenderer.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentCellRenderer.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentCellRenderer.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,4 +1,4 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; import com.franciaflex.faxtomail.persistence.entities.Attachment; import jaxx.runtime.SwingUtil; @@ -7,7 +7,6 @@ import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; -import java.awt.*; import java.util.List; import static org.nuiton.i18n.I18n.n; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUI.css 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -1,3 +1,7 @@ +#attachmentDialog { + minimumSize: { new java.awt.Dimension(250, 0) }; +} + #body { title: "faxtomail.attachmentEditor.title"; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,8 +1,8 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.PDFEditorUI; import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupHandler; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.google.common.collect.Iterables; @@ -13,7 +13,6 @@ import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import org.nuiton.jaxx.application.ApplicationTechnicalException; -import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.util.FileUtil; import javax.swing.*; @@ -31,7 +30,6 @@ import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; -import java.util.Date; import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -119,26 +117,6 @@ return null; } - public void place(JComponent component) { - // Computes the location of bottom left corner of the cell - Component comp = component; - int x = 0; - int y = component.getHeight(); - while (comp != null) { - x += comp.getX(); - y += comp.getY(); - comp = comp.getParent(); - } - - ui.pack(); - // if the editor is too big on the right, - // then align its right side to the right side of the cell - if (x + ui.getWidth() > ui.getOwner().getX() + ui.getOwner().getWidth()) { - x = x - ui.getWidth() + component.getWidth(); - } - ui.setLocation(x, y); - } - public void addAttachment() { Attachment attachment = new AttachmentImpl(); attachment.setAddedByUser(true); @@ -257,6 +235,8 @@ label.setIcon(icon); } + attachmentItem.setEditable(getModel().isEditable()); + return attachmentItem; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentEditorUIModel.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,4 +1,4 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentItem.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentItem.css 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentItem.css 2014-04-10 12:18:23 UTC (rev 32) @@ -20,5 +20,5 @@ actionIcon: "delete"; toolTipText: "faxtomail.attachmentEditor.action.remove.tip"; enabled: { getAttachment() != null && getAttachment().getTopiaId() == null }; - visible: { Boolean.TRUE.equals(isEditable()) }; + visible: { isEditable() }; } \ No newline at end of file Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentModelAware.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/AttachmentModelAware.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentModelAware.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,10 +1,9 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; import com.franciaflex.faxtomail.persistence.entities.Attachment; import java.io.Serializable; import java.util.Collection; -import java.util.List; /** * To place on model wich supports attachments. Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/ButtonAttachment.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,4 +1,4 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; +package com.franciaflex.faxtomail.ui.swing.content.attachment; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorCrossUI.css 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -1,12 +0,0 @@ -#crossPanel { - scaleImageToFitPanel: { true }; - border: { BorderFactory.createDashedBorder(null) }; -} - -#removeButton { - text: "X"; - //borderPainted: { false }; - //border: { null }; - //opaque : { false }; - //background: { null }; -} \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorCrossUI.jaxx 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorCrossUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -1,30 +0,0 @@ -<com.franciaflex.faxtomail.ui.swing.util.JImagePanel id='crossPanel'> - - <import> - java.awt.Color - java.awt.Dimension - java.awt.Font - javax.swing.BorderFactory - com.franciaflex.faxtomail.ui.swing.util.JImagePanel - </import> - - <script><![CDATA[ - - public static final String CROSS_IMAGE_FILE = "cross_blue.png"; - - public PDFEditorCrossUI() { - setImage(SwingUtil.createImageIcon(CROSS_IMAGE_FILE).getImage()); - } - - protected void removeCross() { - JImagePanel container = getParentContainer(JImagePanel.class); - container.remove(this); - container.updateUI(); - } - - ]]></script> - - <JButton id="removeButton" - onActionPerformed="removeCross()"/> - -</com.franciaflex.faxtomail.ui.swing.util.JImagePanel> \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorNoteUI.css 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -1,30 +0,0 @@ -#notePanel { - background: { Color.YELLOW }; - border : { BorderFactory.createEmptyBorder(2, 2, 2, 2) }; -} - -#noteHeader { - background: { null }; -} - -#noteTitle { - font: { Font.decode(BaseFont.HELVETICA).deriveFont(Font.ITALIC) }; - text: { getTitle() }; -} - -#removeButton { - text: "X"; - borderPainted: { false }; - border: { null }; - opaque : { false }; - background: { null }; -} - -#noteText { - border: { null }; - opaque : { false }; - background: { null }; - font: { Font.decode(BaseFont.HELVETICA) }; - lineWrap: { false }; - wrapStyleWord: { false }; -} \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorNoteUI.jaxx 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorNoteUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -1,52 +0,0 @@ -<JPanel id='notePanel' layout='{new BorderLayout()}'> - - <import> - java.awt.Color - java.awt.Dimension - java.awt.Font - java.awt.Insets - java.awt.Point - javax.swing.BorderFactory - com.itextpdf.text.pdf.BaseFont - com.franciaflex.faxtomail.ui.swing.util.JImagePanel - </import> - - <script><![CDATA[ - - protected void textTyped() { - setText(getNoteText().getText()); - - JImagePanel container = getParentContainer(JImagePanel.class); - Point location = getLocation(); - Insets insets = container.getInsets(); - Dimension size = getPreferredSize(); - setBounds(location.x + insets.left, location.y + insets.top, - size.width, size.height); - } - - protected void removeNote() { - JImagePanel container = getParentContainer(JImagePanel.class); - container.remove(this); - container.updateUI(); - } - - ]]></script> - - <String id="title" javaBean="null"/> - <String id="text" javaBean=""/> - - <JPanel id="noteHeader" - layout='{ new BorderLayout() }' - constraints="BorderLayout.NORTH"> - <JLabel id="noteTitle" - constraints="BorderLayout.CENTER"/> - <JButton id="removeButton" - constraints="BorderLayout.EAST" - onActionPerformed="removeNote()"/> - </JPanel> - - <JTextArea id="noteText" - constraints="BorderLayout.CENTER" - onKeyTyped="textTyped()"/> - -</JPanel> \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUI.css 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -1,56 +0,0 @@ -#toolbar { - floatable: false; - margin: {new java.awt.Insets(5, 0, 0, 5)}; - borderPainted: false; -} - -#noteButton { - actionIcon: note; - toolTipText: "faxtomail.pdfEitor.button.addNote.tip"; -} - -#crossButton { - actionIcon: cross; - toolTipText: "faxtomail.pdfEitor.button.addCross.tip"; -} - -#prevPageButton { - actionIcon: left; - enabled: { getModel().getCurrentPageIndex() > 1 }; - toolTipText: "faxtomail.pdfEitor.button.previousPage"; -} - -#pageNumber { - bean: { model }; - property: "currentPageIndex"; - modelText: { String.valueOf(model.getCurrentPageIndex()) }; - useFloat: false; - useSign: false; - autoPopup: false; - showPopupButton: false; - showReset: false; - width: 50; -} - -#pageTotal { - text: { " / " + String.valueOf(model.getPages().length) }; -} - -#nextPageButton { - actionIcon: right; - enabled: { getModel().getCurrentPageIndex() < getModel().getPages().length }; - toolTipText: "faxtomail.pdfEitor.button.nextPage"; -} - -#cancelButton { - actionIcon: cancel; - text: "faxtomail.pdfEitor.action.cancel"; - toolTipText: "faxtomail.pdfEitor.action.cancel.tip"; -} - -#validateButton { - actionIcon: validate; - text: "faxtomail.pdfEitor.action.validate"; - toolTipText: "faxtomail.pdfEitor.action.validate.tip"; - _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.GenerateAnnotatedAttachmentAction.class}; -} \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUI.jaxx 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -1,56 +0,0 @@ -<JPanel id="pdfEditorUIPanel" - layout='{new BorderLayout()}' - implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<PDFEditorUIModel, PDFEditorUIHandler>'> - - <import> - com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI - com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil - - com.franciaflex.faxtomail.ui.swing.util.JImagePanel - - javax.swing.SwingConstants - - jaxx.runtime.swing.editor.NumberEditor - - </import> - - <script><![CDATA[ - - public PDFEditorUI(FaxToMailUI parentUI) { - FaxToMailUIUtil.setParentUI(this, parentUI); - } - - ]]></script> - - <PDFEditorUIModel id='model' initializer='new PDFEditorUIModel()'/> - - <JToolBar id="toolbar" - constraints='BorderLayout.NORTH'> - <JButton id='noteButton' - onActionPerformed="handler.addNote()"/> - <JButton id='crossButton' - onActionPerformed="handler.addCross()"/> - - <JSeparator constructorParams="SwingConstants.VERTICAL"/> - - <JButton id="prevPageButton" - onActionPerformed="getModel().decPageIndex()"/> - <NumberEditor id='pageNumber' - constructorParams='this' /> - <JLabel id="pageTotal"/> - <JButton id="nextPageButton" - onActionPerformed="getModel().incPageIndex()"/> - </JToolBar> - - <JScrollPane constraints='BorderLayout.CENTER'> - <JPanel> - <JImagePanel id="container"> - </JImagePanel> - </JPanel> - </JScrollPane> - - <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> - <JButton id='cancelButton' onActionPerformed='handler.closeDialog()'/> - <JButton id='validateButton'/> - </JPanel> -</JPanel> \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIHandler.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,297 +0,0 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; - -import com.franciaflex.faxtomail.persistence.entities.Attachment; -import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; -import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; -import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; -import com.itextpdf.text.Document; -import com.itextpdf.text.DocumentException; -import com.itextpdf.text.Paragraph; -import com.itextpdf.text.pdf.PdfWriter; -import com.sun.pdfview.PDFFile; -import com.sun.pdfview.PDFPage; -import jaxx.runtime.swing.ComponentMover; -import jaxx.runtime.swing.ComponentResizer; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ContainerEvent; -import java.awt.event.ContainerListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.util.Date; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class PDFEditorUIHandler extends AbstractFaxToMailUIHandler<PDFEditorUIModel, PDFEditorUI> { - - private static final Log log = LogFactory.getLog(PDFEditorUIHandler.class); - - protected ComponentMover cm = new ComponentMover(); - protected ComponentResizer cr = new ComponentResizer(); - - protected PDFFile pdf; - - @Override - public void afterInit(PDFEditorUI pdfEditorUI) { - initUI(pdfEditorUI); - - cm.setDragInsets(cr.getDragInsets()); - cm.setEdgeInsets(new Insets(0, 0, 0, 0)); - - - ui.getContainer().addContainerListener(new ContainerListener() { - @Override - public void componentAdded(ContainerEvent e) { - Component child = e.getChild(); - PDFEditorUIModel.Page currentPage = getModel().getCurrentPage(); - if (child.getClass().isAssignableFrom(PDFEditorNoteUI.class)) { - currentPage.addNote((PDFEditorNoteUI) child); - - } else if (child.getClass().isAssignableFrom(PDFEditorCrossUI.class)) { - currentPage.addCross((PDFEditorCrossUI) child); - } - } - - @Override - public void componentRemoved(ContainerEvent e) { - Component child = e.getChild(); - PDFEditorUIModel.Page currentPage = getModel().getCurrentPage(); - if (child.getClass().isAssignableFrom(PDFEditorNoteUI.class)) { - currentPage.removeNote((PDFEditorNoteUI) child); - - } else if (child.getClass().isAssignableFrom(PDFEditorCrossUI.class)) { - currentPage.removeCross((PDFEditorCrossUI) child); - } - } - }); - - getModel().addPropertyChangeListener(PDFEditorUIModel.PROPERTY_CURRENT_PAGE_INDEX, - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - Integer pageNb = (Integer) evt.getNewValue(); - Integer prevPageNb = (Integer) evt.getOldValue(); - updatePageNumber(pageNb, prevPageNb); - } - }); - - getModel().addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (Attachment.PROPERTY_ORIGINAL_FILE.equals(evt.getPropertyName()) - || Attachment.PROPERTY_EDITED_FILE.equals(evt.getPropertyName())) { - - PDFEditorUIModel model = (PDFEditorUIModel) evt.getSource(); - File file = model.getNotNullFile(); - - if (file != null) { - if (FaxToMailUIUtil.isFileATxt(file)) { - try { - file = convertTextToPdf(file); - - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("", e); - } - } catch (DocumentException e) { - if (log.isErrorEnabled()) { - log.error("", e); - } - } - } - if (FaxToMailUIUtil.isFileAPDF(file)) { - getUI().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - try { - RandomAccessFile raf = new RandomAccessFile(file, "r"); - FileChannel channel = raf.getChannel(); - ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); - pdf = new PDFFile(buf); - - model.setPageNumber(pdf.getNumPages()); - model.setCurrentPageIndex(1); - - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("", e); - } - } - getUI().setCursor(Cursor.getDefaultCursor()); - - } else { - model.setPageNumber(1); - model.setCurrentPageIndex(1); - - JImagePanel container = getUI().getContainer(); - if (FaxToMailUIUtil.isFileATxt(file)) { - JTextPane textPane = new JTextPane(); - textPane.setEditable(false); - try { - FileReader fr = new FileReader(file); - BufferedReader br = new BufferedReader(fr); - String text = new String(); - while (br.readLine() != null) { - text += br.readLine() + "\n"; - } - textPane.setText(text); - - log.debug(textPane.getText()); - - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("", e); - } - } - container.add(textPane); - - Insets insets = container.getInsets(); - Dimension size = textPane.getPreferredSize(); - - container.setPreferredSize(size); - container.setMinimumSize(size); - container.setMaximumSize(size); - container.setSize(size); - - textPane.setBounds(insets.left, insets.top, size.width, size.height); - - container.updateUI(); - - } else { - if (FaxToMailUIUtil.isFileATif(file)) { - container.setTifImage(file); - - } else { - container.setImage(file); - } - } - } - model.firePropertyChanged(PDFEditorUIModel.PROPERTY_CURRENT_PAGE_INDEX, null, 1); - } - } - } - }); - } - - @Override - protected JComponent getComponentToFocus() { - return null; - } - - @Override - public SwingValidator<PDFEditorUIModel> getValidator() { - return null; - } - - @Override - public void onCloseUI() { - - } - - public void addNote() { - PDFEditorNoteUI note = new PDFEditorNoteUI(); - String title = decorate(new Date()) + " - " + getContext().getCurrentUser().getTrigraph(); - note.setTitle(title); - addPanel(note); - } - - public void addCross() { -// java.awt.Image cross = SwingUtil.createImageIcon(CROSS_IMAGE_FILE).getImage(); -// JImagePanel panel = new JImagePanel(cross); -// panel.setScaleImageToFitPanel(true); -// panel.setBorder(BorderFactory.createDashedBorder(null)); - PDFEditorCrossUI cross = new PDFEditorCrossUI(); - addPanel(cross); - cr.registerComponent(cross); - } - - protected void addPanel(JPanel panel) { - JImagePanel container = ui.getContainer(); - container.add(panel, 0); - - Insets insets = container.getInsets(); - Dimension size = panel.getPreferredSize(); - Rectangle rect = container.getVisibleRect(); - panel.setBounds(rect.x + insets.left, rect.y + insets.top, - size.width, size.height); - - container.updateUI(); - - cm.registerComponent(panel); - } - - protected void updatePageNumber(Integer pageNb, Integer prevPageNb) { - if (pdf != null) { - if (pageNb != null) { - if (prevPageNb != null) { - PDFEditorUIModel.Page p = getModel().getPage(prevPageNb); - for (JPanel panel : p.getNotes()) { - panel.setVisible(false); - } - for (JPanel panel : p.getCrosses()) { - panel.setVisible(false); - } - } - - PDFPage page = pdf.getPage(pageNb); - // create the image - Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), - (int) page.getBBox().getHeight()); - - Image image = page.getImage(rect.width, rect.height, // width & height - rect, // clip rect - null, // null for the ImageObserver - true, // fill background with white - true // block until drawing is done - ); - JImagePanel container = getUI().getContainer(); - container.setImage(image); - - PDFEditorUIModel.Page p = getModel().getPage(pageNb); - for (JPanel panel : p.getNotes()) { - panel.setVisible(true); - } - for (JPanel panel : p.getCrosses()) { - panel.setVisible(true); - } - - container.updateUI(); - } - } - } - - public File convertTextToPdf(File file) throws IOException, DocumentException { - FileReader fr = new FileReader(file); - BufferedReader br = new BufferedReader(fr); - String text = new String(); - while (br.readLine() != null) { - text += br.readLine() + "\n"; - } - - file = File.createTempFile(file.getName(), ".pdf"); - - Document document = new Document(); - FileOutputStream fos = new FileOutputStream(file); - PdfWriter writer = PdfWriter.getInstance(document, fos); - writer.open(); - - document.open(); - document.add(new Paragraph(text)); - document.close(); - writer.close(); - return file; - } - -} Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/attachment/PDFEditorUIModel.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/PDFEditorUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,162 +0,0 @@ -package com.franciaflex.faxtomail.ui.swing.util.attachment; - -import com.franciaflex.faxtomail.persistence.entities.Attachment; -import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; -import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; -import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import javax.swing.*; -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class PDFEditorUIModel extends AbstractFaxToMailBeanUIModel<Attachment, PDFEditorUIModel> { - - public static final String PROPERTY_PAGES = "pages"; - public static final String PROPERTY_CURRENT_PAGE_INDEX = "currentPageIndex"; - - protected final Attachment editObject = new AttachmentImpl(); - - public class Page { - - protected List<PDFEditorNoteUI> notes = new ArrayList<PDFEditorNoteUI>(); - protected List<JImagePanel> crosses = new ArrayList<JImagePanel>(); - - public List<PDFEditorNoteUI> getNotes() { - return notes; - } - - public void addNote(PDFEditorNoteUI note) { - notes.add(note); - } - - public void removeNote(PDFEditorNoteUI note) { - notes.remove(note); - } - - public List<JImagePanel> getCrosses() { - return crosses; - } - - public void addCross(JImagePanel cross) { - crosses.add(cross); - } - - public void removeCross(JPanel cross) { - crosses.remove(cross); - } - } - - protected Page[] pages; - - // first page is 1 not 0 - protected int currentPageIndex = -1; - - protected static Binder<PDFEditorUIModel, Attachment> toBeanBinder = - BinderFactory.newBinder(PDFEditorUIModel.class, - Attachment.class); - - protected static Binder<Attachment, PDFEditorUIModel> fromBeanBinder = - BinderFactory.newBinder(Attachment.class, PDFEditorUIModel.class); - - public PDFEditorUIModel() { - super(fromBeanBinder, toBeanBinder); - } - - public void setOriginalFile(File file) { - Object oldValue = getOriginalFile(); - editObject.setOriginalFile(file); - firePropertyChange(Attachment.PROPERTY_ORIGINAL_FILE, oldValue, file); - } - - public File getOriginalFile() { - return editObject.getOriginalFile(); - } - - public void setEditedFile(File file) { - Object oldValue = getEditedFile(); - editObject.setEditedFile(file); - firePropertyChange(Attachment.PROPERTY_EDITED_FILE, oldValue, file); - } - - public File getEditedFile() { - return editObject.getEditedFile(); - } - - public File getNotNullFile() { - File file = getEditedFile(); - if (file == null) { - file = getOriginalFile(); - } - return file; - } - - public String getTopiaId() { - return editObject.getTopiaId(); - } - - public void setTopiaId(String id) { - Object oldValue = getTopiaId(); - editObject.setTopiaId(id); - firePropertyChange(Attachment.PROPERTY_TOPIA_ID, oldValue, id); - } - - public Page[] getPages() { - return pages; - } - - public void setPageNumber(int nb) { - pages = new Page[nb]; - for (int i = 0 ; i < nb ; i++) { - pages[i] = new Page(); - } - firePropertyChanged(PROPERTY_PAGES, null, pages); - } - - public Page getCurrentPage() { - if (pages == null || currentPageIndex < 1 || currentPageIndex > pages.length) { - return null; - } - return pages[currentPageIndex - 1]; - } - - public Page getPage(int i) { - if (pages == null || i < 1 || i > pages.length) { - return null; - } - return pages[i - 1]; - } - - public int getCurrentPageIndex() { - return currentPageIndex; - } - - public void setCurrentPageIndex(int currentPageIndex) { - Object oldValue = getCurrentPageIndex(); - currentPageIndex = Math.max(1, currentPageIndex); - if (pages != null) { - currentPageIndex = Math.min(pages.length, currentPageIndex); - } - this.currentPageIndex = currentPageIndex; - firePropertyChange(PROPERTY_CURRENT_PAGE_INDEX, oldValue, currentPageIndex); - } - - public void decPageIndex() { - setCurrentPageIndex(currentPageIndex - 1); - } - - public void incPageIndex() { - setCurrentPageIndex(currentPageIndex + 1); - } - - @Override - protected Attachment newEntity() { - return new AttachmentImpl(); - } -} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -26,8 +26,9 @@ com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil - com.franciaflex.faxtomail.ui.swing.util.attachment.ButtonAttachment - com.franciaflex.faxtomail.ui.swing.util.history.ButtonHistory + com.franciaflex.faxtomail.ui.swing.content.attachment.ButtonAttachment + com.franciaflex.faxtomail.ui.swing.content.history.ButtonHistory + com.franciaflex.faxtomail.ui.swing.content.demandgroup.ButtonEmailGroup com.franciaflex.faxtomail.persistence.entities.Email com.franciaflex.faxtomail.persistence.entities.DemandType @@ -70,6 +71,7 @@ </BeanValidator> <JToolBar id='topToolBar'> + <ButtonEmailGroup id="demandGroupButton"/> <ButtonHistory id="historyButton"/> <ButtonAttachment id="attachmentsButton" constructorParams="model"/> Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -26,19 +26,22 @@ import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.EtatAttente; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.HistoryType; import com.franciaflex.faxtomail.persistence.entities.MailFolder; -import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Range; import com.franciaflex.faxtomail.persistence.entities.RangeRow; +import com.franciaflex.faxtomail.services.service.EmailService; import com.franciaflex.faxtomail.services.service.ReferentielService; import com.franciaflex.faxtomail.ui.swing.actions.SaveDemandeAction; import com.franciaflex.faxtomail.ui.swing.content.reply.ReplyFormUI; import com.franciaflex.faxtomail.ui.swing.content.reply.ReplyFormUIModel; +import com.franciaflex.faxtomail.ui.swing.content.search.SearchToGroupUI; +import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentEditorUIModel; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUIModel; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; @@ -364,6 +367,7 @@ Set<String> result = super.getPropertiesToIgnore(); result.add(DemandeUIModel.PROPERTY_EDITABLE); result.add(Email.PROPERTY_HISTORY); + result.add(DemandeUIModel.PROPERTY_GROUPED_DEMANDES); return result; } @@ -375,6 +379,7 @@ clearValidators(); ui.getAttachmentsButton().setSelected(false); ui.getHistoryButton().setSelected(false); + ui.getGroupButton().setSelected(false); } @Override @@ -444,7 +449,16 @@ } public void group() { - //TODO + ui.getGroupButton().setSelected(false); + + if (getMonitor().wasModified()) { + getContext().getActionFactory().createUIAction(this, SaveDemandeAction.class).actionPerformed(null); + getModel().setModify(false); + getMonitor().clearModified(); + } + + SearchToGroupUI dialogContent = new SearchToGroupUI(ui); + openFrame(dialogContent, t("faxtomail.searchToGroup.title", getModel().getObject()), getContext().getMainUI().getSize()); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -27,6 +27,7 @@ import com.franciaflex.faxtomail.persistence.entities.DemandStatus; import com.franciaflex.faxtomail.persistence.entities.DemandType; import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.EmailGroup; import com.franciaflex.faxtomail.persistence.entities.EmailImpl; import com.franciaflex.faxtomail.persistence.entities.EtatAttente; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; @@ -36,7 +37,7 @@ import com.franciaflex.faxtomail.persistence.entities.Priority; import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentModelAware; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentModelAware; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.beans.Binder; @@ -47,7 +48,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -66,11 +66,14 @@ public static final String PROPERTY_CLIENT_BRAND = "clientBrand"; public static final String PROPERTY_EDITABLE = "editable"; public static final String PROPERTY_LAST_ATTACHMENT_OPENING_USER = "lastAttachmentOpeningUser"; + public static final String PROPERTY_GROUPED_DEMANDES = "groupedDemandes"; protected final Email editObject = new EmailImpl(); protected final Collection<Attachment> attachments = new ArrayList<Attachment>(); + protected final Collection<DemandeUIModel> groupedDemandes = new ArrayList<DemandeUIModel>(); + protected History firstOpeningHistory; protected History lastModificationHistory; @@ -329,6 +332,10 @@ return editObject.getHistory(); } + public int sizeHistory() { + return editObject.sizeHistory(); + } + public void findFirstOpeningHistory() { History result = null; Date date = null; @@ -425,7 +432,7 @@ @Override public Collection<Attachment> getAttachment() { - return attachments; + return new ArrayList<Attachment>(attachments); } @Override @@ -561,6 +568,39 @@ firePropertyChange(PROPERTY_EDITABLE, oldValue, editable); } + public void setGroupedDemandes(EmailGroup emailGroup) { + Object oldValue = new ArrayList<DemandeUIModel>(getGroupedDemandes()); + if (emailGroup != null) { + groupedDemandes.clear(); + Collection<Email> emails = emailGroup.getEmail(); + if (emails != null) { + for (Email email : emails) { + if (!email.getTopiaId().equals(getTopiaId())) { + DemandeUIModel demandeUIModel = new DemandeUIModel(); + demandeUIModel.fromEntity(email); + groupedDemandes.add(demandeUIModel); + } + } + } + } + firePropertyChange(PROPERTY_GROUPED_DEMANDES, oldValue, getGroupedDemandes()); + } + + public void addGroupedDemande(DemandeUIModel demand) { + Object oldValue = new ArrayList<DemandeUIModel>(getGroupedDemandes()); + groupedDemandes.add(demand); + firePropertyChange(PROPERTY_GROUPED_DEMANDES, oldValue, getGroupedDemandes()); + + } + + public Collection<DemandeUIModel> getGroupedDemandes() { + return groupedDemandes; + } + + public int sizeGroupedDemandes() { + return groupedDemandes.size(); + } + @Override protected Email newEntity() { return new EmailImpl(); Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.css 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -1,19 +0,0 @@ -#navigationTree { - font-size: "11"; - rootVisible: false; - showsRootHandles: true; -} - -#cancelButton { - actionIcon: cancel; - text: "faxtomail.chooseMailFolder.action.cancel"; - toolTipText: "faxtomail.chooseMailFolder.action.cancel.tip"; -} - -#validateButton { - actionIcon: validate; - text: "faxtomail.chooseMailFolder.action.validate"; - toolTipText: "faxtomail.chooseMailFolder.action.validate.tip"; - _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.TransmitAction.class}; - enabled: { model.getMailFolder() != null }; -} \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.jaxx 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -1,31 +0,0 @@ -<JPanel id='mailFolderChooser' layout='{new BorderLayout()}' - implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<DemandeUIModel, MailFolderChooserUIHandler>'> - - <import> - com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI - com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil - - javax.swing.tree.DefaultTreeModel - </import> - - <script><![CDATA[ - - public MailFolderChooserUI(FaxToMailUI parentUI, DemandeUIModel model) { - FaxToMailUIUtil.setParentUI(this, parentUI); - setContextValue(model); - } - - ]]></script> - - <DemandeUIModel id='model' javaBean='getContextValue(DemandeUIModel.class)'/> - - <JScrollPane constraints='BorderLayout.CENTER'> - <JTree id="navigationTree"/> - </JScrollPane> - - <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> - <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> - <JButton id='validateButton'/> - </JPanel> - -</JPanel> \ No newline at end of file Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUIHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,112 +0,0 @@ -package com.franciaflex.faxtomail.ui.swing.content.demande; - -import com.franciaflex.faxtomail.persistence.entities.Company; -import com.franciaflex.faxtomail.persistence.entities.EtatAttente; -import com.franciaflex.faxtomail.persistence.entities.MailFolder; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.franciaflex.faxtomail.ui.swing.content.demande.MailFolderChooserUI; -import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; -import com.franciaflex.faxtomail.ui.swing.util.Cancelable; -import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; -import com.franciaflex.faxtomail.ui.swing.util.FolderTreeNode; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.swing.*; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import java.awt.*; -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class MailFolderChooserUIHandler extends AbstractFaxToMailUIHandler<DemandeUIModel, MailFolderChooserUI> implements Cancelable { - - private static final Log log = LogFactory.getLog(MailFolderChooserUIHandler.class); - - @Override - public void afterInit(MailFolderChooserUI mailFolderChooserUI) { - initUI(mailFolderChooserUI); - - DemandeUIModel model = getModel(); - - EtatAttente etatAttente = model.getEtatAttente(); - final Collection<MailFolder> foldersWithEtatAttente; - if (etatAttente != null) { - foldersWithEtatAttente = getContext().getMailFolderService().getFoldersWithEtatAttente(etatAttente); - } else { - foldersWithEtatAttente = new HashSet<MailFolder>(); - } - - // init tree - Company franciaflex = getContext().getCurrentCompany(); - Collection<MailFolder> folders = franciaflex.getMailFolder(); - JTree navigationTree = ui.getNavigationTree(); - - Map<MailFolder, DefaultMutableTreeNode> nodesByFolder = - FaxToMailUIUtil.initFolderTree(getContext(), navigationTree, folders); - MailFolder currentFolder = getModel().getMailFolder(); - - for (MailFolder folder : nodesByFolder.keySet()) { - DefaultMutableTreeNode node = nodesByFolder.get(folder); - if (node.getClass().isAssignableFrom(FolderTreeNode.class)) { - FolderTreeNode folderTreeNode = (FolderTreeNode) node; - folderTreeNode.setCanSelect(!currentFolder.equals(folder) && - (foldersWithEtatAttente.isEmpty() - || foldersWithEtatAttente.contains(folder))); - } - } - - navigationTree.setCellRenderer(new DefaultTreeCellRenderer() { - @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, - boolean expanded, boolean leaf, int row, boolean hasFocus) { - Component component = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); - - FolderTreeNode node = (FolderTreeNode) value; - setEnabled(node.isCanSelect()); - - return component; - } - }); - - navigationTree.addTreeSelectionListener(new TreeSelectionListener() { - @Override - public void valueChanged(TreeSelectionEvent e) { - FolderTreeNode folderNode = (FolderTreeNode) e.getPath().getLastPathComponent(); - MailFolder folder = folderNode.getMailFolder(); - if (!folderNode.isCanSelect()) { - folder = null; - } - getModel().setMailFolder(folder); - } - }); - } - - @Override - public void onCloseUI() { - } - - @Override - public SwingValidator<DemandeUIModel> getValidator() { - return null; - } - - @Override - public void cancel() { - closeDialog(); - } - - @Override - protected JComponent getComponentToFocus() { - return ui.getNavigationTree(); - } - -} Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/ButtonEmailGroup.java (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/ButtonHistory.java) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/ButtonEmailGroup.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/ButtonEmailGroup.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,50 @@ +package com.franciaflex.faxtomail.ui.swing.content.demandgroup; + +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.History; +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.history.HistoryListUI; +import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupButton; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Collection; + +import static org.nuiton.i18n.I18n.t; + +/** + * Button to edit attachments. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class ButtonEmailGroup extends AbstractToolbarPopupButton<DemandGroupUI> { + + public ButtonEmailGroup() { + setToolTipText(t("faxtomail.demandGroup.action.tip")); + int demandNb = popup.getModel().sizeGroupedDemandes(); + setText(t("faxtomail.demandGroup.text", demandNb)); + + popup.getModel().addPropertyChangeListener(DemandeUIModel.PROPERTY_GROUPED_DEMANDES, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Collection<DemandeUIModel> demands = (Collection<DemandeUIModel>) evt.getNewValue(); + if (demands != null) { + setText(t("faxtomail.demandGroup.text", demands.size())); + } + } + }); + } + + @Override + protected String getActionIcon() { + return "group"; + } + + @Override + protected DemandGroupUI createNewPopup() { + return new DemandGroupUI(FaxToMailUIContext.getApplicationContext()); + } + +} Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.css (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryItem.css) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,17 @@ +#demandPanel { + border: { BorderFactory.createEmptyBorder(2, 3, 2, 3) }; +} + +#demandeObjectLabel { + text: { getDemande().getObject() }; +} + +#toolbar { + borderPainted: false; + floatable: false; +} + +#openDemandeButton { + actionIcon: "open-file"; + toolTipText: "faxtomail.attachmentEditor.action.open.tip"; +} \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.jaxx (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryItem.jaxx) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupItem.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,26 @@ +<JPanel id='demandPanel' layout='{new BorderLayout()}'> + + <import> + com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel + static org.nuiton.i18n.I18n.t + static jaxx.runtime.JAXXUtil.getStringValue + </import> + + <DemandeUIModel id='demande' javaBean='null'/> + + <DemandGroupUIHandler id='handler' javaBean='null'/> + + <script><![CDATA[ +public DemandGroupItem(DemandGroupUIHandler handler) { + setContextValue(handler); +} + ]]></script> + + <JLabel id='demandeObjectLabel' constraints='BorderLayout.CENTER'/> + + <JToolBar id='toolbar' constraints='BorderLayout.EAST'> + <JButton id='openDemandeButton' + onActionPerformed='handler.openDemande(demande)'/> + </JToolBar> + +</JPanel> \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.css (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUI.css) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,11 @@ +#groupedDemandDialog { + minimumSize: { new java.awt.Dimension(500, 0) }; +} + +#body { + title: "faxtomail.demandGroup.title"; +} + +#demandGroup { + editable: true; +} \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.jaxx (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUI.jaxx) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,23 @@ +<com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupUI + superGenericType="com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel, DemandGroupUIHandler" + id='groupedDemandDialog'> + + <import> + com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel + + org.jdesktop.swingx.JXTable + org.jdesktop.swingx.JXTitledPanel + </import> + + <DemandeUIModel id='model' + initializer='getContextValue(DemandeUIModel.class)'/> + + <JXTitledPanel id='body'> + <JScrollPane id='demandGroupBodyScrollPane'> + <JPanel id='mainPanel' layout="{new BorderLayout()}"> + <JXTable id='demandGroup' constraints="BorderLayout.CENTER"/> + </JPanel> + </JScrollPane> + </JXTitledPanel> + +</com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupUI> \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUIHandler.java (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIHandler.java) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUIHandler.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demandgroup/DemandGroupUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,177 @@ +package com.franciaflex.faxtomail.ui.swing.content.demandgroup; + +import com.franciaflex.faxtomail.persistence.entities.Attachment; +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; +import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeAction; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentItem; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupHandler; +import com.google.common.collect.Iterables; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.model.JaxxDefaultListModel; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXList; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; + +import javax.swing.*; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableColumnModel; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; +import javax.swing.table.TableColumnModel; +import javax.swing.table.TableModel; +import java.awt.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Collection; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class DemandGroupUIHandler extends AbstractToolbarPopupHandler<DemandeUIModel, DemandGroupUI> { + + private final static Log log = LogFactory.getLog(DemandGroupUIHandler.class); + + @Override + public void beforeInit(DemandGroupUI ui) { + super.beforeInit(ui); + + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + this.ui.setContextValue(currentEmail); + } + + @Override + public void afterInit(DemandGroupUI ui) { + super.afterInit(ui); + + initTable(ui.getDemandGroup()); + + getModel().addPropertyChangeListener(DemandeUIModel.PROPERTY_GROUPED_DEMANDES, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + AbstractTableModel tableModel = (AbstractTableModel) getUI().getDemandGroup().getModel(); + tableModel.fireTableDataChanged(); + } + }); + } + + protected void initTable(JXTable table) { + + TableModel demandGroupTableModel = new AbstractTableModel() { + @Override + public int getRowCount() { + return getModel().sizeGroupedDemandes(); + } + + @Override + public int getColumnCount() { + return 1; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return Iterables.get(getModel().getGroupedDemandes(), rowIndex); + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return true; + } + }; + + demandGroupTableModel.addTableModelListener(new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + getUI().pack(); + } + }); + + TableColumnModel columnModel = new DefaultTableColumnModel(); + TableColumn column = new TableColumn(); + column.setCellRenderer(new DemandGroupItemRenderer()); + column.setCellEditor(new DemandGroupItemEditor()); + columnModel.addColumn(column); + + table.setModel(demandGroupTableModel); + table.setColumnModel(columnModel); + table.addHighlighter(HighlighterFactory.createAlternateStriping()); + } + + @Override + public void onCloseUI() { + } + + @Override + public SwingValidator<DemandeUIModel> getValidator() { + return null; + } + + @Override + protected JComponent getComponentToFocus() { + return null; + } + + public void openDemande(DemandeUIModel demande) { + closeEditor(); + + FaxToMailUIContext context = getContext(); + context.setCurrentEmail(demande); + context.getActionEngine().runAction(new ShowDemandeAction(context.getMainUI().getHandler())); + } + + protected class DemandGroupItemRenderer extends DemandGroupItem + implements TableCellRenderer { + + public DemandGroupItemRenderer() { + super(DemandGroupUIHandler.this); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + DemandeUIModel demand = (DemandeUIModel) value; + setDemande(demand); + return this; + } + } + + protected class DemandGroupItemEditor extends AbstractCellEditor implements TableCellEditor { + + protected DemandGroupItem demandGroupItem; + + public DemandGroupItemEditor() { + demandGroupItem = new DemandGroupItem(); + demandGroupItem.setHandler(DemandGroupUIHandler.this); + } + + public Component getTableCellEditorComponent(JTable table, Object value, + boolean isSelected, int row, int column) { + DemandeUIModel demand = (DemandeUIModel) value; + demandGroupItem.setDemande(demand); + + return demandGroupItem; + } + + @Override + public Object getCellEditorValue() { + return demandGroupItem.getDemande(); + } + + public boolean stopCellEditing() { + return super.stopCellEditing(); + } + + protected void fireEditingStopped() { + super.fireEditingStopped(); + } + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/ButtonHistory.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/ButtonHistory.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/ButtonHistory.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,27 +1,14 @@ -package com.franciaflex.faxtomail.ui.swing.util.history; +package com.franciaflex.faxtomail.ui.swing.content.history; -import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.History; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupButton; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentEditorUI; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentModelAware; -import jaxx.runtime.SwingUtil; -import org.jdesktop.beans.AbstractSerializableBean; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUI; -import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.awt.*; -import java.awt.event.HierarchyBoundsAdapter; -import java.awt.event.HierarchyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Collection; -import java.util.List; import static org.nuiton.i18n.I18n.t; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryItemModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryItemModel.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryItemModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,23 +1,16 @@ -package com.franciaflex.faxtomail.ui.swing.util.history; +package com.franciaflex.faxtomail.ui.swing.content.history; -import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.History; import com.franciaflex.faxtomail.persistence.entities.HistoryImpl; import com.franciaflex.faxtomail.persistence.entities.HistoryType; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; -import org.apache.commons.lang3.StringUtils; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; -import java.text.DateFormat; -import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import java.util.List; -import static org.nuiton.i18n.I18n.t; - /** * @author Kevin Morin (Code Lutin) * @since x.x Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUI.jaxx 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -1,14 +1,16 @@ <com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupUI - superGenericType="HistoryListUIModel, HistoryListUIHandler" + superGenericType="com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel, HistoryListUIHandler" id='historyListDialog'> <import> + com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel + org.jdesktop.swingx.JXList org.jdesktop.swingx.JXTitledPanel </import> - <HistoryListUIModel id='model' - initializer='getContextValue(HistoryListUIModel.class)'/> + <DemandeUIModel id='model' + initializer='getContextValue(DemandeUIModel.class)'/> <JXTitledPanel id='body'> <JScrollPane id='attachmentBodyScrollPane'> Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIHandler.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,10 +1,9 @@ -package com.franciaflex.faxtomail.ui.swing.util.history; +package com.franciaflex.faxtomail.ui.swing.content.history; import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.History; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupHandler; -import com.google.common.collect.Iterables; import jaxx.runtime.swing.model.JaxxDefaultListModel; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -14,10 +13,8 @@ import org.jdesktop.swingx.JXList; import org.jdesktop.swingx.decorator.HighlighterFactory; import org.nuiton.i18n.I18n; -import org.nuiton.util.StringUtil; import javax.swing.*; -import javax.swing.text.Highlighter; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -31,7 +28,7 @@ * @author Kevin Morin (Code Lutin) * @since x.x */ -public class HistoryListUIHandler extends AbstractToolbarPopupHandler<HistoryListUIModel, HistoryListUI> { +public class HistoryListUIHandler extends AbstractToolbarPopupHandler<DemandeUIModel, HistoryListUI> { private final static Log log = LogFactory.getLog(HistoryListUIHandler.class); @@ -54,24 +51,12 @@ n("faxtomail.demande.rangeRow.label"); } - protected PropertyChangeListener historyChangeListener = new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - Collection<History> history = (Collection<History>) evt.getNewValue(); - getModel().setHistory(history); - } - }; - @Override public void beforeInit(HistoryListUI ui) { super.beforeInit(ui); DemandeUIModel currentEmail = getContext().getCurrentEmail(); - currentEmail.addPropertyChangeListener(Email.PROPERTY_HISTORY, historyChangeListener); - HistoryListUIModel model = new HistoryListUIModel(); - model.fromBean(currentEmail); - - this.ui.setContextValue(model); + this.ui.setContextValue(currentEmail); } @Override @@ -96,11 +81,10 @@ @Override public void onCloseUI() { - getContext().getCurrentEmail().removePropertyChangeListener(Email.PROPERTY_HISTORY, historyChangeListener); } @Override - public SwingValidator<HistoryListUIModel> getValidator() { + public SwingValidator<DemandeUIModel> getValidator() { return null; } Deleted: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIModel.java 2014-04-04 15:42:36 UTC (rev 30) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/history/HistoryListUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,57 +0,0 @@ -package com.franciaflex.faxtomail.ui.swing.util.history; - -import com.franciaflex.faxtomail.persistence.entities.Email; -import com.franciaflex.faxtomail.persistence.entities.EmailImpl; -import com.franciaflex.faxtomail.persistence.entities.History; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; -import org.nuiton.util.beans.Binder; -import org.nuiton.util.beans.BinderFactory; - -import java.util.Collection; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class HistoryListUIModel extends AbstractFaxToMailBeanUIModel<DemandeUIModel, HistoryListUIModel> { - - protected static Binder<HistoryListUIModel, DemandeUIModel> toBeanBinder = - BinderFactory.newBinder(HistoryListUIModel.class, - DemandeUIModel.class); - - protected static Binder<DemandeUIModel, HistoryListUIModel> fromBeanBinder = - BinderFactory.newBinder(DemandeUIModel.class, HistoryListUIModel.class); - - protected final Email editObject = new EmailImpl(); - - public HistoryListUIModel() { - super(fromBeanBinder, toBeanBinder); - } - - public void setHistory(Collection<History> history) { - editObject.setHistory(history); - firePropertyChanged(Email.PROPERTY_HISTORY, null, history); - } - - public Collection<History> getHistory() { - return editObject.getHistory(); - } - - public int sizeHistory() { - return editObject.sizeHistory(); - } - - public boolean isHistoryEmpty() { - return editObject.isHistoryEmpty(); - } - - public boolean isHistoryNotEmpty() { - return editObject.isHistoryNotEmpty(); - } - - @Override - protected DemandeUIModel newEntity() { - return new DemandeUIModel(); - } -} Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,12 @@ +#crossPanel { + scaleImageToFitPanel: { true }; + border: { BorderFactory.createDashedBorder(null) }; +} + +#removeButton { + text: "X"; + //borderPainted: { false }; + //border: { null }; + //opaque : { false }; + //background: { null }; +} \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorCrossUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,30 @@ +<com.franciaflex.faxtomail.ui.swing.util.JImagePanel id='crossPanel'> + + <import> + java.awt.Color + java.awt.Dimension + java.awt.Font + javax.swing.BorderFactory + com.franciaflex.faxtomail.ui.swing.util.JImagePanel + </import> + + <script><![CDATA[ + + public static final String CROSS_IMAGE_FILE = "cross_blue.png"; + + public PDFEditorCrossUI() { + setImage(SwingUtil.createImageIcon(CROSS_IMAGE_FILE).getImage()); + } + + protected void removeCross() { + JImagePanel container = getParentContainer(JImagePanel.class); + container.remove(this); + container.updateUI(); + } + + ]]></script> + + <JButton id="removeButton" + onActionPerformed="removeCross()"/> + +</com.franciaflex.faxtomail.ui.swing.util.JImagePanel> \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,30 @@ +#notePanel { + background: { Color.YELLOW }; + border : { BorderFactory.createEmptyBorder(2, 2, 2, 2) }; +} + +#noteHeader { + background: { null }; +} + +#noteTitle { + font: { Font.decode(BaseFont.HELVETICA).deriveFont(Font.ITALIC) }; + text: { getTitle() }; +} + +#removeButton { + text: "X"; + borderPainted: { false }; + border: { null }; + opaque : { false }; + background: { null }; +} + +#noteText { + border: { null }; + opaque : { false }; + background: { null }; + font: { Font.decode(BaseFont.HELVETICA) }; + lineWrap: { false }; + wrapStyleWord: { false }; +} \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,52 @@ +<JPanel id='notePanel' layout='{new BorderLayout()}'> + + <import> + java.awt.Color + java.awt.Dimension + java.awt.Font + java.awt.Insets + java.awt.Point + javax.swing.BorderFactory + com.itextpdf.text.pdf.BaseFont + com.franciaflex.faxtomail.ui.swing.util.JImagePanel + </import> + + <script><![CDATA[ + + protected void textTyped() { + setText(getNoteText().getText()); + + JImagePanel container = getParentContainer(JImagePanel.class); + Point location = getLocation(); + Insets insets = container.getInsets(); + Dimension size = getPreferredSize(); + setBounds(location.x + insets.left, location.y + insets.top, + size.width, size.height); + } + + protected void removeNote() { + JImagePanel container = getParentContainer(JImagePanel.class); + container.remove(this); + container.updateUI(); + } + + ]]></script> + + <String id="title" javaBean="null"/> + <String id="text" javaBean=""/> + + <JPanel id="noteHeader" + layout='{ new BorderLayout() }' + constraints="BorderLayout.NORTH"> + <JLabel id="noteTitle" + constraints="BorderLayout.CENTER"/> + <JButton id="removeButton" + constraints="BorderLayout.EAST" + onActionPerformed="removeNote()"/> + </JPanel> + + <JTextArea id="noteText" + constraints="BorderLayout.CENTER" + onKeyTyped="textTyped()"/> + +</JPanel> \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,56 @@ +#toolbar { + floatable: false; + margin: {new java.awt.Insets(5, 0, 0, 5)}; + borderPainted: false; +} + +#noteButton { + actionIcon: note; + toolTipText: "faxtomail.pdfEitor.button.addNote.tip"; +} + +#crossButton { + actionIcon: cross; + toolTipText: "faxtomail.pdfEitor.button.addCross.tip"; +} + +#prevPageButton { + actionIcon: left; + enabled: { getModel().getCurrentPageIndex() > 1 }; + toolTipText: "faxtomail.pdfEitor.button.previousPage"; +} + +#pageNumber { + bean: { model }; + property: "currentPageIndex"; + modelText: { String.valueOf(model.getCurrentPageIndex()) }; + useFloat: false; + useSign: false; + autoPopup: false; + showPopupButton: false; + showReset: false; + width: 50; +} + +#pageTotal { + text: { " / " + String.valueOf(model.getPages().length) }; +} + +#nextPageButton { + actionIcon: right; + enabled: { getModel().getCurrentPageIndex() < getModel().getPages().length }; + toolTipText: "faxtomail.pdfEitor.button.nextPage"; +} + +#cancelButton { + actionIcon: cancel; + text: "faxtomail.pdfEitor.action.cancel"; + toolTipText: "faxtomail.pdfEitor.action.cancel.tip"; +} + +#validateButton { + actionIcon: validate; + text: "faxtomail.pdfEitor.action.validate"; + toolTipText: "faxtomail.pdfEitor.action.validate.tip"; + _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.GenerateAnnotatedAttachmentAction.class}; +} \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,56 @@ +<JPanel id="pdfEditorUIPanel" + layout='{new BorderLayout()}' + implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<PDFEditorUIModel, PDFEditorUIHandler>'> + + <import> + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil + + com.franciaflex.faxtomail.ui.swing.util.JImagePanel + + javax.swing.SwingConstants + + jaxx.runtime.swing.editor.NumberEditor + + </import> + + <script><![CDATA[ + + public PDFEditorUI(FaxToMailUI parentUI) { + FaxToMailUIUtil.setParentUI(this, parentUI); + } + + ]]></script> + + <PDFEditorUIModel id='model' initializer='new PDFEditorUIModel()'/> + + <JToolBar id="toolbar" + constraints='BorderLayout.NORTH'> + <JButton id='noteButton' + onActionPerformed="handler.addNote()"/> + <JButton id='crossButton' + onActionPerformed="handler.addCross()"/> + + <JSeparator constructorParams="SwingConstants.VERTICAL"/> + + <JButton id="prevPageButton" + onActionPerformed="getModel().decPageIndex()"/> + <NumberEditor id='pageNumber' + constructorParams='this' /> + <JLabel id="pageTotal"/> + <JButton id="nextPageButton" + onActionPerformed="getModel().incPageIndex()"/> + </JToolBar> + + <JScrollPane constraints='BorderLayout.CENTER'> + <JPanel> + <JImagePanel id="container"> + </JImagePanel> + </JPanel> + </JScrollPane> + + <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> + <JButton id='cancelButton' onActionPerformed='handler.closeDialog()'/> + <JButton id='validateButton'/> + </JPanel> +</JPanel> \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,297 @@ +package com.franciaflex.faxtomail.ui.swing.content.pdfeditor; + +import com.franciaflex.faxtomail.persistence.entities.Attachment; +import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; +import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.Paragraph; +import com.itextpdf.text.pdf.PdfWriter; +import com.sun.pdfview.PDFFile; +import com.sun.pdfview.PDFPage; +import jaxx.runtime.swing.ComponentMover; +import jaxx.runtime.swing.ComponentResizer; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ContainerEvent; +import java.awt.event.ContainerListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.util.Date; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class PDFEditorUIHandler extends AbstractFaxToMailUIHandler<PDFEditorUIModel, PDFEditorUI> { + + private static final Log log = LogFactory.getLog(PDFEditorUIHandler.class); + + protected ComponentMover cm = new ComponentMover(); + protected ComponentResizer cr = new ComponentResizer(); + + protected PDFFile pdf; + + @Override + public void afterInit(PDFEditorUI pdfEditorUI) { + initUI(pdfEditorUI); + + cm.setDragInsets(cr.getDragInsets()); + cm.setEdgeInsets(new Insets(0, 0, 0, 0)); + + + ui.getContainer().addContainerListener(new ContainerListener() { + @Override + public void componentAdded(ContainerEvent e) { + Component child = e.getChild(); + PDFEditorUIModel.Page currentPage = getModel().getCurrentPage(); + if (child.getClass().isAssignableFrom(PDFEditorNoteUI.class)) { + currentPage.addNote((PDFEditorNoteUI) child); + + } else if (child.getClass().isAssignableFrom(PDFEditorCrossUI.class)) { + currentPage.addCross((PDFEditorCrossUI) child); + } + } + + @Override + public void componentRemoved(ContainerEvent e) { + Component child = e.getChild(); + PDFEditorUIModel.Page currentPage = getModel().getCurrentPage(); + if (child.getClass().isAssignableFrom(PDFEditorNoteUI.class)) { + currentPage.removeNote((PDFEditorNoteUI) child); + + } else if (child.getClass().isAssignableFrom(PDFEditorCrossUI.class)) { + currentPage.removeCross((PDFEditorCrossUI) child); + } + } + }); + + getModel().addPropertyChangeListener(PDFEditorUIModel.PROPERTY_CURRENT_PAGE_INDEX, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Integer pageNb = (Integer) evt.getNewValue(); + Integer prevPageNb = (Integer) evt.getOldValue(); + updatePageNumber(pageNb, prevPageNb); + } + }); + + getModel().addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (Attachment.PROPERTY_ORIGINAL_FILE.equals(evt.getPropertyName()) + || Attachment.PROPERTY_EDITED_FILE.equals(evt.getPropertyName())) { + + PDFEditorUIModel model = (PDFEditorUIModel) evt.getSource(); + File file = model.getNotNullFile(); + + if (file != null) { + if (FaxToMailUIUtil.isFileATxt(file)) { + try { + file = convertTextToPdf(file); + + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } catch (DocumentException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } + } + if (FaxToMailUIUtil.isFileAPDF(file)) { + getUI().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + try { + RandomAccessFile raf = new RandomAccessFile(file, "r"); + FileChannel channel = raf.getChannel(); + ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); + pdf = new PDFFile(buf); + + model.setPageNumber(pdf.getNumPages()); + model.setCurrentPageIndex(1); + + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } + getUI().setCursor(Cursor.getDefaultCursor()); + + } else { + model.setPageNumber(1); + model.setCurrentPageIndex(1); + + JImagePanel container = getUI().getContainer(); + if (FaxToMailUIUtil.isFileATxt(file)) { + JTextPane textPane = new JTextPane(); + textPane.setEditable(false); + try { + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); + String text = new String(); + while (br.readLine() != null) { + text += br.readLine() + "\n"; + } + textPane.setText(text); + + log.debug(textPane.getText()); + + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("", e); + } + } + container.add(textPane); + + Insets insets = container.getInsets(); + Dimension size = textPane.getPreferredSize(); + + container.setPreferredSize(size); + container.setMinimumSize(size); + container.setMaximumSize(size); + container.setSize(size); + + textPane.setBounds(insets.left, insets.top, size.width, size.height); + + container.updateUI(); + + } else { + if (FaxToMailUIUtil.isFileATif(file)) { + container.setTifImage(file); + + } else { + container.setImage(file); + } + } + } + model.firePropertyChanged(PDFEditorUIModel.PROPERTY_CURRENT_PAGE_INDEX, null, 1); + } + } + } + }); + } + + @Override + protected JComponent getComponentToFocus() { + return null; + } + + @Override + public SwingValidator<PDFEditorUIModel> getValidator() { + return null; + } + + @Override + public void onCloseUI() { + + } + + public void addNote() { + PDFEditorNoteUI note = new PDFEditorNoteUI(); + String title = decorate(new Date()) + " - " + getContext().getCurrentUser().getTrigraph(); + note.setTitle(title); + addPanel(note); + } + + public void addCross() { +// java.awt.Image cross = SwingUtil.createImageIcon(CROSS_IMAGE_FILE).getImage(); +// JImagePanel panel = new JImagePanel(cross); +// panel.setScaleImageToFitPanel(true); +// panel.setBorder(BorderFactory.createDashedBorder(null)); + PDFEditorCrossUI cross = new PDFEditorCrossUI(); + addPanel(cross); + cr.registerComponent(cross); + } + + protected void addPanel(JPanel panel) { + JImagePanel container = ui.getContainer(); + container.add(panel, 0); + + Insets insets = container.getInsets(); + Dimension size = panel.getPreferredSize(); + Rectangle rect = container.getVisibleRect(); + panel.setBounds(rect.x + insets.left, rect.y + insets.top, + size.width, size.height); + + container.updateUI(); + + cm.registerComponent(panel); + } + + protected void updatePageNumber(Integer pageNb, Integer prevPageNb) { + if (pdf != null) { + if (pageNb != null) { + if (prevPageNb != null) { + PDFEditorUIModel.Page p = getModel().getPage(prevPageNb); + for (JPanel panel : p.getNotes()) { + panel.setVisible(false); + } + for (JPanel panel : p.getCrosses()) { + panel.setVisible(false); + } + } + + PDFPage page = pdf.getPage(pageNb); + // create the image + Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), + (int) page.getBBox().getHeight()); + + Image image = page.getImage(rect.width, rect.height, // width & height + rect, // clip rect + null, // null for the ImageObserver + true, // fill background with white + true // block until drawing is done + ); + JImagePanel container = getUI().getContainer(); + container.setImage(image); + + PDFEditorUIModel.Page p = getModel().getPage(pageNb); + for (JPanel panel : p.getNotes()) { + panel.setVisible(true); + } + for (JPanel panel : p.getCrosses()) { + panel.setVisible(true); + } + + container.updateUI(); + } + } + } + + public File convertTextToPdf(File file) throws IOException, DocumentException { + FileReader fr = new FileReader(file); + BufferedReader br = new BufferedReader(fr); + String text = new String(); + while (br.readLine() != null) { + text += br.readLine() + "\n"; + } + + file = File.createTempFile(file.getName(), ".pdf"); + + Document document = new Document(); + FileOutputStream fos = new FileOutputStream(file); + PdfWriter writer = PdfWriter.getInstance(document, fos); + writer.open(); + + document.open(); + document.add(new Paragraph(text)); + document.close(); + writer.close(); + return file; + } + +} Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,162 @@ +package com.franciaflex.faxtomail.ui.swing.content.pdfeditor; + +import com.franciaflex.faxtomail.persistence.entities.Attachment; +import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; +import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; +import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; + +import javax.swing.*; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class PDFEditorUIModel extends AbstractFaxToMailBeanUIModel<Attachment, PDFEditorUIModel> { + + public static final String PROPERTY_PAGES = "pages"; + public static final String PROPERTY_CURRENT_PAGE_INDEX = "currentPageIndex"; + + protected final Attachment editObject = new AttachmentImpl(); + + public class Page { + + protected List<PDFEditorNoteUI> notes = new ArrayList<PDFEditorNoteUI>(); + protected List<JImagePanel> crosses = new ArrayList<JImagePanel>(); + + public List<PDFEditorNoteUI> getNotes() { + return notes; + } + + public void addNote(PDFEditorNoteUI note) { + notes.add(note); + } + + public void removeNote(PDFEditorNoteUI note) { + notes.remove(note); + } + + public List<JImagePanel> getCrosses() { + return crosses; + } + + public void addCross(JImagePanel cross) { + crosses.add(cross); + } + + public void removeCross(JPanel cross) { + crosses.remove(cross); + } + } + + protected Page[] pages; + + // first page is 1 not 0 + protected int currentPageIndex = -1; + + protected static Binder<PDFEditorUIModel, Attachment> toBeanBinder = + BinderFactory.newBinder(PDFEditorUIModel.class, + Attachment.class); + + protected static Binder<Attachment, PDFEditorUIModel> fromBeanBinder = + BinderFactory.newBinder(Attachment.class, PDFEditorUIModel.class); + + public PDFEditorUIModel() { + super(fromBeanBinder, toBeanBinder); + } + + public void setOriginalFile(File file) { + Object oldValue = getOriginalFile(); + editObject.setOriginalFile(file); + firePropertyChange(Attachment.PROPERTY_ORIGINAL_FILE, oldValue, file); + } + + public File getOriginalFile() { + return editObject.getOriginalFile(); + } + + public void setEditedFile(File file) { + Object oldValue = getEditedFile(); + editObject.setEditedFile(file); + firePropertyChange(Attachment.PROPERTY_EDITED_FILE, oldValue, file); + } + + public File getEditedFile() { + return editObject.getEditedFile(); + } + + public File getNotNullFile() { + File file = getEditedFile(); + if (file == null) { + file = getOriginalFile(); + } + return file; + } + + public String getTopiaId() { + return editObject.getTopiaId(); + } + + public void setTopiaId(String id) { + Object oldValue = getTopiaId(); + editObject.setTopiaId(id); + firePropertyChange(Attachment.PROPERTY_TOPIA_ID, oldValue, id); + } + + public Page[] getPages() { + return pages; + } + + public void setPageNumber(int nb) { + pages = new Page[nb]; + for (int i = 0 ; i < nb ; i++) { + pages[i] = new Page(); + } + firePropertyChanged(PROPERTY_PAGES, null, pages); + } + + public Page getCurrentPage() { + if (pages == null || currentPageIndex < 1 || currentPageIndex > pages.length) { + return null; + } + return pages[currentPageIndex - 1]; + } + + public Page getPage(int i) { + if (pages == null || i < 1 || i > pages.length) { + return null; + } + return pages[i - 1]; + } + + public int getCurrentPageIndex() { + return currentPageIndex; + } + + public void setCurrentPageIndex(int currentPageIndex) { + Object oldValue = getCurrentPageIndex(); + currentPageIndex = Math.max(1, currentPageIndex); + if (pages != null) { + currentPageIndex = Math.min(pages.length, currentPageIndex); + } + this.currentPageIndex = currentPageIndex; + firePropertyChange(PROPERTY_CURRENT_PAGE_INDEX, oldValue, currentPageIndex); + } + + public void decPageIndex() { + setCurrentPageIndex(currentPageIndex - 1); + } + + public void incPageIndex() { + setCurrentPageIndex(currentPageIndex + 1); + } + + @Override + protected Attachment newEntity() { + return new AttachmentImpl(); + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -26,7 +26,7 @@ com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil - com.franciaflex.faxtomail.ui.swing.util.attachment.ButtonAttachment + com.franciaflex.faxtomail.ui.swing.content.attachment.ButtonAttachment com.franciaflex.faxtomail.persistence.entities.Email com.franciaflex.faxtomail.persistence.entities.DemandType Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -34,7 +34,7 @@ @Override public void cancel() { - getParentContainer(JFrame.class).setVisible(false); + closeFrame(); } @Override Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -1,7 +1,7 @@ package com.franciaflex.faxtomail.ui.swing.content.reply; import com.franciaflex.faxtomail.persistence.entities.Attachment; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentModelAware; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentModelAware; import org.jdesktop.beans.AbstractSerializableBean; import java.util.ArrayList; Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,194 @@ +/* + * #%L + * FaxToMail :: UI + * %% + * Copyright (C) 2014 Franciaflex + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +JSplitPane { + oneTouchExpandable:true; +} + +BeanFilterableComboBox { + showReset: true; + showDecorator: false; + bean: {model}; +} + +JXDatePicker { + _selectOnFocus: {true}; +} + +.between2ndPartLabel { + text: "faxtomail.search.between2ndPart.label"; +} + +#goToFolderMenu { + actionIcon: list; + text: "faxtomail.search.action.gotoFolder"; + toolTipText: "faxtomail.search.action.gotoFolder.tip"; + enabled: { model.isMenuEnabled() }; +} + +#modifiedByLabel { + text: "faxtomail.search.modifiedBy.label"; +} + +#takenByLabel { + text: "faxtomail.demande.takenBy.label"; +} + +#takenByComboBox { + property: takenBy; + selectedItem: { model.getTakenBy() }; +} + +#modifiedBetweenLabel { + text: "faxtomail.search.modifiedBetween.label"; +} + +#modifiedBetweenStartDatePicker { + date: { model.getMinModificationDate() }; +} + +#modifiedBetweenEndDatePicker { + date: { model.getMaxModificationDate() }; +} + +#receivedBetweenLabel { + text: "faxtomail.search.receivedBetween.label"; +} + +#receivedBetweenStartDatePicker { + date: { model.getMinReceptionDate() }; +} + +#receivedBetweenEndDatePicker { + date: { model.getMaxReceptionDate() }; +} + +#printedBetweenLabel { + text: "faxtomail.search.printedBetween.label"; +} + +#printedBetweenStartDatePicker { + date: { model.getMinPrintingDate() }; +} + +#printedBetweenEndDatePicker { + date: { model.getMaxPrintingDate() }; +} + +#objectLabel { + text: "faxtomail.demande.object.label"; +} + +#objectField { + text: {model.getObject()}; +} + +#senderLabel { + text: "faxtomail.demande.sender.label"; +} + +#senderField { + text: {model.getSender()}; +} + +#clientLabel { + text: "faxtomail.demande.client.label"; +} + +/*#clientField { + text: {model.getClientCode()}; +}*/ + +#docTypeLabel { + text: "faxtomail.demande.docType.label"; +} + +#docTypeComboBox { + property: demandType; + selectedItem: { model.getDemandType() }; +} + +#ediCodeNumberLabel { + text: "faxtomail.demande.ediCodeNumber.label"; +} + +#ediCodeNumberField { + text: { model.getEdiCodeNumber() }; + editable: false; +} + +#priorityLabel { + text: "faxtomail.demande.priority.label"; +} + +#priorityComboBox { + property: priority; + selectedItem: { model.getPriority() }; +} + +#statusLabel { + text: "faxtomail.demande.status.label"; +} + +#statusComboBox { + property: demandStatus; + selectedItem: { model.getDemandStatus() }; +} + +#etatAttenteLabel { + text: "faxtomail.demande.etatAttente.label"; +} + +#etatAttenteComboBox { + property: etatAttente; + selectedItem: { model.getEtatAttente() }; +} + +#projectReferenceLabel { + text: "faxtomail.demande.projectReference.label"; +} + +#projectReferenceField { + text: { model.getProjectReference() }; +} + +#searchButton { + text: "faxtomail.search.button.label"; + _applicationAction: { com.franciaflex.faxtomail.ui.swing.actions.SearchToGroupAction.class }; +} + +#dataTable { + editable: true; + autoCreateRowSorter: true; +} + +#groupButton { + actionIcon: group; + text: "faxtomail.searchToGroup.action.group"; + toolTipText: "faxtomail.searchToGroup.action.group.tip"; + enabled: { model.isGroupEnabled() }; +} + +#cancelButton { + actionIcon: cancel; + text: "faxtomail.searchToGroup.action.cancel"; + toolTipText: "faxtomail.searchToGroup.action.cancel.tip"; +} \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,221 @@ +<JPanel id='searchToGroupPanel' + implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<SearchUIModel, SearchToGroupUIHandler>'> + + <import> + com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil + + com.franciaflex.faxtomail.persistence.entities.HasLabel + com.franciaflex.faxtomail.persistence.entities.Email + com.franciaflex.faxtomail.persistence.entities.DemandType + com.franciaflex.faxtomail.persistence.entities.DemandStatus + com.franciaflex.faxtomail.persistence.entities.Range + com.franciaflex.faxtomail.persistence.entities.Priority + com.franciaflex.faxtomail.persistence.entities.EtatAttente + com.franciaflex.faxtomail.persistence.entities.FaxToMailUser + + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox + + org.jdesktop.swingx.JXDatePicker + org.jdesktop.swingx.JXTitledPanel + org.jdesktop.swingx.JXTable + </import> + + <script><![CDATA[ + + public SearchToGroupUI(FaxToMailUI parentUI) { + FaxToMailUIUtil.setParentUI(this, parentUI); + } + + ]]></script> + + <SearchUIModel id='model' + initializer='getContextValue(SearchUIModel.class)'/> + + <JSplitPane orientation="{JSplitPane.VERTICAL_SPLIT}" + constraints='BorderLayout.CENTER'> + + <JPanel layout='{new BorderLayout()}'> + <JScrollPane id='searchScrollPane' constraints='BorderLayout.CENTER'> + + <Table fill='both'> + + <row> + <cell anchor='west'> + <JLabel id='receivedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='receivedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='receivedBetweenEndDatePicker'/> + </cell> + + <cell> + <JLabel id='takenByLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='takenByComboBox' + constructorParams='this' + genericType="FaxToMailUser"/> + </cell> + </row> + + <row> + <cell anchor='west'> + <JLabel id='modifiedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='modifiedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='modifiedBetweenEndDatePicker'/> + </cell> + + <cell anchor='west'> + <JLabel id='modifiedByLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='modifiedByComboBox' + constructorParams='this' + genericType="FaxToMailUser"/> + </cell> + </row> + + <row> + <cell anchor='west'> + <JLabel id='printedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='printedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='printedBetweenEndDatePicker'/> + </cell> + </row> + + <row> + <cell> + <JLabel id='senderLabel'/> + </cell> + <cell columns='3' weightx="1"> + <JTextField id='senderField' + onKeyReleased='handler.setText(event, "sender")'/> + </cell> + + <cell> + <JLabel id='clientLabel'/> + </cell> + <cell weightx='1'> + <JTextField id='clientField' + onKeyReleased='handler.setText(event, "clientCode")'/> + </cell> + </row> + + <row> + <cell> + <JLabel id='objectLabel'/> + </cell> + <cell columns='3' weightx='1'> + <JTextField id='objectField' + onKeyReleased='handler.setText(event, "object")'/> + </cell> + + <cell> + <JLabel id='docTypeLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='docTypeComboBox' + constructorParams='this' + genericType="DemandType"/> + </cell> + </row> + + <row> + <cell> + <JLabel id='ediCodeNumberLabel'/> + </cell> + <cell columns='3' weightx='1'> + <JTextField id='ediCodeNumberField'/> + </cell> + + <cell> + <JLabel id='projectReferenceLabel'/> + </cell> + <cell weightx='1'> + <JTextField id='projectReferenceField'/> + </cell> + </row> + + <row> + <cell> + <JLabel id='priorityLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='priorityComboBox' + constructorParams='this' + genericType="Priority"/> + </cell> + + <cell> + <JLabel id='statusLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='statusComboBox' + constructorParams='this' + genericType="DemandStatus"/> + </cell> + + <cell> + <JLabel id='etatAttenteLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='etatAttenteComboBox' + constructorParams='this' + genericType="EtatAttente"/> + </cell> + </row> + + <!--<row>--> + <!--<cell anchor='east'>--> + <!--<JLabel id='gammeLabel'/>--> + <!--</cell>--> + <!--<cell weightx='1' columns='6'>--> + <!--<BeanFilterableComboBox id='gammeComboBox'--> + <!--constructorParams='this'--> + <!--genericType="Range"/>--> + <!--</cell>--> + <!--</row>--> + + </Table> + </JScrollPane> + + <JPanel constraints='BorderLayout.SOUTH'> + <JButton id="searchButton"/> + </JPanel> + </JPanel> + + <JPanel layout='{new BorderLayout()}'> + <JScrollPane constraints='BorderLayout.CENTER'> + <JXTable id='dataTable'/> + </JScrollPane> + </JPanel> + + </JSplitPane> + + <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> + <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> + <JButton id='groupButton' onActionPerformed='handler.group()'/> + </JPanel> + +</JPanel> \ No newline at end of file Added: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,216 @@ +package com.franciaflex.faxtomail.ui.swing.content.search; + +import com.franciaflex.faxtomail.persistence.entities.DemandStatus; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.services.service.EmailService; +import com.franciaflex.faxtomail.services.service.ReferentielService; +import com.franciaflex.faxtomail.ui.swing.actions.GroupAction; +import com.franciaflex.faxtomail.ui.swing.actions.SearchAction; +import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeListAction; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailDemandListHandler; +import com.franciaflex.faxtomail.ui.swing.util.Cancelable; +import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.ColorHighlighter; +import org.jdesktop.swingx.decorator.ComponentAdapter; +import org.jdesktop.swingx.decorator.HighlightPredicate; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class SearchToGroupUIHandler extends AbstractFaxToMailDemandListHandler<SearchUIModel, SearchToGroupUI> + implements Cancelable { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SearchToGroupUIHandler.class); + + @Override + public void beforeInit(SearchToGroupUI ui) { + super.beforeInit(ui); + + SearchUIModel searchUIModel = getContext().getSearch(); + if (searchUIModel == null) { + searchUIModel = new SearchUIModel(); + searchUIModel.setTakenBy(getContext().getCurrentUser()); + searchUIModel.setModifiedBy(getContext().getCurrentUser()); + + Date now = new Date(); + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.MONTH, -2); + Date twoMonthsAgo = cal.getTime(); + + searchUIModel.setMaxModificationDate(now); + searchUIModel.setMinModificationDate(twoMonthsAgo); + searchUIModel.setMaxReceptionDate(now); + searchUIModel.setMinReceptionDate(twoMonthsAgo); + searchUIModel.setMaxPrintingDate(now); + searchUIModel.setMinPrintingDate(twoMonthsAgo); + } + + getUI().setContextValue(searchUIModel); + } + + @Override + protected JComponent getComponentToFocus() { + return null; + } + + @Override + public void afterInit(SearchToGroupUI ui) { + initUI(ui); + + ReferentielService referentielService = getContext().getReferentielService(); + + SearchUIModel model = getModel(); + initBeanFilterableComboBox(ui.getTakenByComboBox(), + getContext().getUserService().getAllUsers(), + model.getTakenBy()); + initBeanFilterableComboBox(ui.getModifiedByComboBox(), + getContext().getUserService().getAllUsers(), + model.getModifiedBy()); + initBeanFilterableComboBox(ui.getDocTypeComboBox(), + referentielService.getAllDemandType(), + model.getDemandType()); + initBeanFilterableComboBox(ui.getPriorityComboBox(), + referentielService.getAllPriority(), + model.getPriority()); + initBeanFilterableComboBox(ui.getEtatAttenteComboBox(), + referentielService.getAllEtatAttente(), + model.getEtatAttente()); + initBeanFilterableComboBox(ui.getStatusComboBox(), + Arrays.asList(DemandStatus.values()), + model.getDemandStatus()); + + final JXTable dataTable = getUI().getDataTable(); + dataTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + final AbstractApplicationTableModel<DemandeUIModel> tableModel = initDemandeTable(dataTable, true); + + model.addPropertyChangeListener(SearchUIModel.PROPERTY_RESULTS, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + List<DemandeUIModel> emails = (List<DemandeUIModel>) evt.getNewValue(); + tableModel.setRows(emails); + showInformationMessage(t("faxtomail.search.resultNb", emails.size())); + + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + if (currentEmail != null) { + int row = tableModel.getRowIndex(currentEmail); + if (row > 0) { + dataTable.setRowSelectionInterval(row, row); + } + } + } + }); + + if (getContext().getSearch() != null) { + try { + SearchAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchAction.class); + searchAction.doAction(); + + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("error while searching", e); + } + } + } + + dataTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + if (!e.getValueIsAdjusting()) { + ListSelectionModel selectionModel = (ListSelectionModel) e.getSource(); + SearchUIModel model = getModel(); + int selectedIndex = selectionModel.getLeadSelectionIndex(); + DemandeUIModel selectedModel = selectedIndex < 0 ? null : tableModel.getEntry(selectedIndex); + model.setGroupEnabled(!selectionModel.isSelectionEmpty() && isDemandSelectable(selectedModel)); + } + } + }); + + HighlightPredicate rowAlreadyInGroupPredicate = new HighlightPredicate() { + @Override + public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { + int viewRow = adapter.row; + int modelRow = adapter.convertRowIndexToModel(viewRow); + DemandeUIModel row = tableModel.getEntry(modelRow); + return !isDemandSelectable(row); + } + }; + dataTable.addHighlighter(new ColorHighlighter(rowAlreadyInGroupPredicate, null, Color.GRAY, Color.GRAY, Color.WHITE)); + + } + + protected boolean isDemandSelectable(DemandeUIModel demand) { + DemandeUIModel currentDemand = getContext().getCurrentEmail(); + return !currentDemand.equals(demand) && !currentDemand.getGroupedDemandes().contains(demand); + } + + @Override + protected MouseListener getDataTableMouseListener() { + return new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) { + group(); + } + } + }; + } + + @Override + protected String[] getEditableTableProperties() { + return new String[0]; + } + + @Override + public void onCloseUI() { + } + + @Override + public SwingValidator<SearchUIModel> getValidator() { + return null; + } + + @Override + public void cancel() { + closeFrame(); + } + + public void group(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + group(); + } + } + + public void group() { + if (getModel().isGroupEnabled()) { + getContext().getActionEngine().runAction(new GroupAction(this)); + } + } +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.css 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -41,6 +41,7 @@ actionIcon: list; text: "faxtomail.search.action.gotoFolder"; toolTipText: "faxtomail.search.action.gotoFolder.tip"; + enabled: { model.isMenuEnabled() }; } #modifiedByLabel { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.jaxx 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -19,9 +19,8 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JSplitPane id='searchPanel' - orientation="{JSplitPane.VERTICAL_SPLIT}" - implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<SearchUIModel, SearchUIHandler>'> +<JPanel id='searchPanel' + implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<SearchUIModel, SearchUIHandler>'> <import> com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext @@ -53,7 +52,7 @@ ]]></script> <SearchUIModel id='model' - initializer='getContextValue(SearchUIModel.class)'/> + initializer='getContextValue(SearchUIModel.class)'/> <JPopupMenu id='tablePopup'> <JMenuItem id='goToFolderMenu' @@ -66,181 +65,186 @@ <!--onActionPerformed='handler.addAttachment()'/>--> </JPopupMenu> - <JPanel layout='{new BorderLayout()}'> - <JScrollPane id='searchScrollPane' constraints='BorderLayout.CENTER'> + <JSplitPane orientation="{JSplitPane.VERTICAL_SPLIT}" + constraints='BorderLayout.CENTER'> - <Table fill='both'> + <JPanel layout='{new BorderLayout()}'> + <JScrollPane id='searchScrollPane' constraints='BorderLayout.CENTER'> - <row> - <cell anchor='west'> - <JLabel id='receivedBetweenLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='receivedBetweenStartDatePicker'/> - </cell> - <cell> - <JLabel styleClass='between2ndPartLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='receivedBetweenEndDatePicker'/> - </cell> + <Table fill='both'> - <cell> - <JLabel id='takenByLabel'/> - </cell> - <cell weightx='2'> - <BeanFilterableComboBox id='takenByComboBox' - constructorParams='this' - genericType="FaxToMailUser"/> - </cell> - </row> + <row> + <cell anchor='west'> + <JLabel id='receivedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='receivedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='receivedBetweenEndDatePicker'/> + </cell> - <row> - <cell anchor='west'> - <JLabel id='modifiedBetweenLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='modifiedBetweenStartDatePicker'/> - </cell> - <cell> - <JLabel styleClass='between2ndPartLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='modifiedBetweenEndDatePicker'/> - </cell> + <cell> + <JLabel id='takenByLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='takenByComboBox' + constructorParams='this' + genericType="FaxToMailUser"/> + </cell> + </row> - <cell anchor='west'> - <JLabel id='modifiedByLabel'/> - </cell> - <cell weightx='2'> - <BeanFilterableComboBox id='modifiedByComboBox' - constructorParams='this' - genericType="FaxToMailUser"/> - </cell> - </row> + <row> + <cell anchor='west'> + <JLabel id='modifiedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='modifiedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='modifiedBetweenEndDatePicker'/> + </cell> - <row> - <cell anchor='west'> - <JLabel id='printedBetweenLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='printedBetweenStartDatePicker'/> - </cell> - <cell> - <JLabel styleClass='between2ndPartLabel'/> - </cell> - <cell weightx='1'> - <JXDatePicker id='printedBetweenEndDatePicker'/> - </cell> - </row> + <cell anchor='west'> + <JLabel id='modifiedByLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='modifiedByComboBox' + constructorParams='this' + genericType="FaxToMailUser"/> + </cell> + </row> - <row> - <cell> - <JLabel id='senderLabel'/> - </cell> - <cell columns='3' weightx="1"> - <JTextField id='senderField' - onKeyReleased='handler.setText(event, "sender")'/> - </cell> + <row> + <cell anchor='west'> + <JLabel id='printedBetweenLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='printedBetweenStartDatePicker'/> + </cell> + <cell> + <JLabel styleClass='between2ndPartLabel'/> + </cell> + <cell weightx='1'> + <JXDatePicker id='printedBetweenEndDatePicker'/> + </cell> + </row> - <cell> - <JLabel id='clientLabel'/> - </cell> - <cell weightx='1'> - <JTextField id='clientField' - onKeyReleased='handler.setText(event, "clientCode")'/> - </cell> - </row> + <row> + <cell> + <JLabel id='senderLabel'/> + </cell> + <cell columns='3' weightx="1"> + <JTextField id='senderField' + onKeyReleased='handler.setText(event, "sender")'/> + </cell> - <row> - <cell> - <JLabel id='objectLabel'/> - </cell> - <cell columns='3' weightx='1'> - <JTextField id='objectField' - onKeyReleased='handler.setText(event, "object")'/> - </cell> + <cell> + <JLabel id='clientLabel'/> + </cell> + <cell weightx='1'> + <JTextField id='clientField' + onKeyReleased='handler.setText(event, "clientCode")'/> + </cell> + </row> - <cell> - <JLabel id='docTypeLabel'/> - </cell> - <cell weightx='1'> - <BeanFilterableComboBox id='docTypeComboBox' - constructorParams='this' - genericType="DemandType"/> - </cell> - </row> + <row> + <cell> + <JLabel id='objectLabel'/> + </cell> + <cell columns='3' weightx='1'> + <JTextField id='objectField' + onKeyReleased='handler.setText(event, "object")'/> + </cell> - <row> - <cell> - <JLabel id='ediCodeNumberLabel'/> - </cell> - <cell columns='3' weightx='1'> - <JTextField id='ediCodeNumberField'/> - </cell> + <cell> + <JLabel id='docTypeLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='docTypeComboBox' + constructorParams='this' + genericType="DemandType"/> + </cell> + </row> - <cell> - <JLabel id='projectReferenceLabel'/> - </cell> - <cell weightx='1'> - <JTextField id='projectReferenceField'/> - </cell> - </row> + <row> + <cell> + <JLabel id='ediCodeNumberLabel'/> + </cell> + <cell columns='3' weightx='1'> + <JTextField id='ediCodeNumberField'/> + </cell> - <row> - <cell> - <JLabel id='priorityLabel'/> - </cell> - <cell weightx='1'> - <BeanFilterableComboBox id='priorityComboBox' - constructorParams='this' - genericType="Priority"/> - </cell> + <cell> + <JLabel id='projectReferenceLabel'/> + </cell> + <cell weightx='1'> + <JTextField id='projectReferenceField'/> + </cell> + </row> - <cell> - <JLabel id='statusLabel'/> - </cell> - <cell weightx='1'> - <BeanFilterableComboBox id='statusComboBox' - constructorParams='this' - genericType="DemandStatus"/> - </cell> + <row> + <cell> + <JLabel id='priorityLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='priorityComboBox' + constructorParams='this' + genericType="Priority"/> + </cell> - <cell> - <JLabel id='etatAttenteLabel'/> - </cell> - <cell weightx='2'> - <BeanFilterableComboBox id='etatAttenteComboBox' - constructorParams='this' - genericType="EtatAttente"/> - </cell> - </row> + <cell> + <JLabel id='statusLabel'/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id='statusComboBox' + constructorParams='this' + genericType="DemandStatus"/> + </cell> - <!--<row>--> - <!--<cell anchor='east'>--> - <!--<JLabel id='gammeLabel'/>--> - <!--</cell>--> - <!--<cell weightx='1' columns='6'>--> - <!--<BeanFilterableComboBox id='gammeComboBox'--> - <!--constructorParams='this'--> - <!--genericType="Range"/>--> - <!--</cell>--> - <!--</row>--> + <cell> + <JLabel id='etatAttenteLabel'/> + </cell> + <cell weightx='2'> + <BeanFilterableComboBox id='etatAttenteComboBox' + constructorParams='this' + genericType="EtatAttente"/> + </cell> + </row> - </Table> - </JScrollPane> + <!--<row>--> + <!--<cell anchor='east'>--> + <!--<JLabel id='gammeLabel'/>--> + <!--</cell>--> + <!--<cell weightx='1' columns='6'>--> + <!--<BeanFilterableComboBox id='gammeComboBox'--> + <!--constructorParams='this'--> + <!--genericType="Range"/>--> + <!--</cell>--> + <!--</row>--> - <JPanel constraints='BorderLayout.SOUTH'> - <JButton id="searchButton"/> + </Table> + </JScrollPane> + + <JPanel constraints='BorderLayout.SOUTH'> + <JButton id="searchButton"/> + </JPanel> </JPanel> - </JPanel> - <JPanel layout='{new BorderLayout()}'> - <JScrollPane constraints='BorderLayout.CENTER'> - <JXTable id='dataTable' - onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' - onKeyPressed='handler.openRowMenu(event, tablePopup)'/> - </JScrollPane> - </JPanel> + <JPanel layout='{new BorderLayout()}'> + <JScrollPane constraints='BorderLayout.CENTER'> + <JXTable id='dataTable' + onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)' + onKeyPressed='handler.openRowMenu(event, tablePopup)'/> + </JScrollPane> + </JPanel> -</JSplitPane> \ No newline at end of file + </JSplitPane> + +</JPanel> \ No newline at end of file Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -73,14 +73,6 @@ /** Logger. */ private static final Log log = LogFactory.getLog(SearchUIHandler.class); - /** - * Persistence service. - * - * @since 0.1 - */ -// private final PersistenceService persistenceService; - - @Override public void beforeInit(SearchUI ui) { super.beforeInit(ui); @@ -106,6 +98,7 @@ getUI().setContextValue(searchUIModel); } + @Override public void afterInit(SearchUI ui) { @@ -134,6 +127,8 @@ model.getDemandStatus()); final JXTable dataTable = getUI().getDataTable(); + dataTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + final AbstractApplicationTableModel<DemandeUIModel> tableModel = initDemandeTable(dataTable, true); model.addPropertyChangeListener(SearchUIModel.PROPERTY_RESULTS, new PropertyChangeListener() { @@ -197,6 +192,16 @@ return null; } + @Override + protected void beforeOpenPopup(int rowIndex, int columnIndex) { + super.beforeOpenPopup(rowIndex, columnIndex); + + int selectedRowCount = getUI().getDataTable().getSelectedRowCount(); + + SearchUIModel model = getModel(); + model.setMenuEnabled(selectedRowCount == 1); + } + public void goToMenu() { JXTable dataTable = ui.getDataTable(); int rowIndex = dataTable.getSelectedRow(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIModel.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIModel.java 2014-04-10 12:18:23 UTC (rev 32) @@ -56,6 +56,8 @@ private static final Log log = LogFactory.getLog(SearchUIModel.class); public static final String PROPERTY_RESULTS = "results"; + public static final String PROPERTY_MENU_ENABLED = "menuEnabled"; + public static final String PROPERTY_GROUP_ENABLED = "groupEnabled"; protected final Email editObject = new EmailImpl(); @@ -72,6 +74,9 @@ protected List<DemandeUIModel> results; + protected boolean menuEnabled; + protected boolean groupEnabled; + protected static Binder<SearchUIModel, Email> toBeanBinder = BinderFactory.newBinder(SearchUIModel.class, Email.class); @@ -263,6 +268,26 @@ firePropertyChanged(PROPERTY_RESULTS, null, results); } + public boolean isMenuEnabled() { + return menuEnabled; + } + + public void setMenuEnabled(boolean menuEnabled) { + Object oldValue = isMenuEnabled(); + this.menuEnabled = menuEnabled; + firePropertyChanged(PROPERTY_MENU_ENABLED, oldValue, menuEnabled); + } + + public boolean isGroupEnabled() { + return groupEnabled; + } + + public void setGroupEnabled(boolean groupEnabled) { + Object oldValue = isGroupEnabled(); + this.groupEnabled = groupEnabled; + firePropertyChanged(PROPERTY_GROUP_ENABLED, oldValue, groupEnabled); + } + @Override protected Email newEntity() { return new EmailImpl(); Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.css (from rev 31, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.css) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.css (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.css 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,19 @@ +#navigationTree { + font-size: "11"; + rootVisible: false; + showsRootHandles: true; +} + +#cancelButton { + actionIcon: cancel; + text: "faxtomail.chooseMailFolder.action.cancel"; + toolTipText: "faxtomail.chooseMailFolder.action.cancel.tip"; +} + +#validateButton { + actionIcon: validate; + text: "faxtomail.chooseMailFolder.action.validate"; + toolTipText: "faxtomail.chooseMailFolder.action.validate.tip"; + _applicationAction: {com.franciaflex.faxtomail.ui.swing.actions.TransmitAction.class}; + enabled: { model.getMailFolder() != null }; +} \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.jaxx (from rev 30, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUI.jaxx) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.jaxx (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUI.jaxx 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,33 @@ +<JPanel id='mailFolderChooser' layout='{new BorderLayout()}' + implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel, MailFolderChooserUIHandler>'> + + <import> + com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel + + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI + com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil + + javax.swing.tree.DefaultTreeModel + </import> + + <script><![CDATA[ + + public MailFolderChooserUI(FaxToMailUI parentUI, DemandeUIModel model) { + FaxToMailUIUtil.setParentUI(this, parentUI); + setContextValue(model); + } + + ]]></script> + + <DemandeUIModel id='model' javaBean='getContextValue(DemandeUIModel.class)'/> + + <JScrollPane constraints='BorderLayout.CENTER'> + <JTree id="navigationTree"/> + </JScrollPane> + + <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> + <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> + <JButton id='validateButton'/> + </JPanel> + +</JPanel> \ No newline at end of file Copied: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java (from rev 31, trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/MailFolderChooserUIHandler.java) =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java (rev 0) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/MailFolderChooserUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -0,0 +1,111 @@ +package com.franciaflex.faxtomail.ui.swing.content.transmit; + +import com.franciaflex.faxtomail.persistence.entities.Company; +import com.franciaflex.faxtomail.persistence.entities.EtatAttente; +import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; +import com.franciaflex.faxtomail.ui.swing.util.Cancelable; +import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.franciaflex.faxtomail.ui.swing.util.FolderTreeNode; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.*; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class MailFolderChooserUIHandler extends AbstractFaxToMailUIHandler<DemandeUIModel, MailFolderChooserUI> implements Cancelable { + + private static final Log log = LogFactory.getLog(MailFolderChooserUIHandler.class); + + @Override + public void afterInit(MailFolderChooserUI mailFolderChooserUI) { + initUI(mailFolderChooserUI); + + DemandeUIModel model = getModel(); + + EtatAttente etatAttente = model.getEtatAttente(); + final Collection<MailFolder> foldersWithEtatAttente; + if (etatAttente != null) { + foldersWithEtatAttente = getContext().getMailFolderService().getFoldersWithEtatAttente(etatAttente); + } else { + foldersWithEtatAttente = new HashSet<MailFolder>(); + } + + // init tree + Company franciaflex = getContext().getCurrentCompany(); + Collection<MailFolder> folders = franciaflex.getMailFolder(); + JTree navigationTree = ui.getNavigationTree(); + + Map<MailFolder, DefaultMutableTreeNode> nodesByFolder = + FaxToMailUIUtil.initFolderTree(getContext(), navigationTree, folders); + MailFolder currentFolder = getModel().getMailFolder(); + + for (MailFolder folder : nodesByFolder.keySet()) { + DefaultMutableTreeNode node = nodesByFolder.get(folder); + if (node.getClass().isAssignableFrom(FolderTreeNode.class)) { + FolderTreeNode folderTreeNode = (FolderTreeNode) node; + folderTreeNode.setCanSelect(!currentFolder.equals(folder) && + (foldersWithEtatAttente.isEmpty() + || foldersWithEtatAttente.contains(folder))); + } + } + + navigationTree.setCellRenderer(new DefaultTreeCellRenderer() { + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, + boolean expanded, boolean leaf, int row, boolean hasFocus) { + Component component = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + + FolderTreeNode node = (FolderTreeNode) value; + setEnabled(node.isCanSelect()); + + return component; + } + }); + + navigationTree.addTreeSelectionListener(new TreeSelectionListener() { + @Override + public void valueChanged(TreeSelectionEvent e) { + FolderTreeNode folderNode = (FolderTreeNode) e.getPath().getLastPathComponent(); + MailFolder folder = folderNode.getMailFolder(); + if (!folderNode.isCanSelect()) { + folder = null; + } + getModel().setMailFolder(folder); + } + }); + } + + @Override + public void onCloseUI() { + } + + @Override + public SwingValidator<DemandeUIModel> getValidator() { + return null; + } + + @Override + public void cancel() { + closeDialog(); + } + + @Override + protected JComponent getComponentToFocus() { + return ui.getNavigationTree(); + } + +} Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -12,8 +12,8 @@ import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentCellEditor; -import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentCellRenderer; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentCellEditor; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentCellRenderer; import com.google.common.base.Function; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -38,6 +38,7 @@ import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -169,7 +170,7 @@ Font font = renderer.getFont(); renderer.setFont(font.deriveFont(Font.ITALIC)); //TODO kmorin 20140326 find color between gray and black - renderer.setForeground(Color.DARK_GRAY); + renderer.setForeground(Color.BLUE); } return renderer; } @@ -201,13 +202,21 @@ Color color = new Color(255, 51, 51); table.addHighlighter(new ColorHighlighter(rowIsInvalidPredicate, color, Color.WHITE, color.darker(), Color.WHITE)); - table.addMouseListener(new MouseAdapter() { + table.addMouseListener(getDataTableMouseListener()); + + return tableModel; + } + + protected MouseListener getDataTableMouseListener() { + return new MouseAdapter() { public void mouseClicked(MouseEvent evt) { - JXTable table = (JXTable) evt.getSource(); if (evt.getClickCount() == 2) { + JXTable table = (JXTable) evt.getSource(); int rowIndex = table.getSelectedRow(); rowIndex = table.convertRowIndexToModel(rowIndex); + AbstractApplicationTableModel<DemandeUIModel> tableModel = + (AbstractApplicationTableModel<DemandeUIModel>) table.getModel(); DemandeUIModel selectedEmail = tableModel.getEntry(rowIndex); onDoubleClickOnDemande(selectedEmail); FaxToMailUIContext context = getContext(); @@ -219,9 +228,7 @@ openDemand(selectedEmail); } } - }); - - return tableModel; + }; } @Override Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-04-10 12:18:23 UTC (rev 32) @@ -79,10 +79,6 @@ return (FaxToMailUIContext) super.getContext(); } -// public FaxToMailDataContext getDataContext() { -// return getContext().getDataContext(); -// } - public FaxToMailConfiguration getConfig() { return getContext().getConfig(); } @@ -92,7 +88,7 @@ Component result; ApplicationActionUI actionUI = getContext().getActionUI(); // if (actionUI.isVisible()) { - result = actionUI; + result = actionUI; // } else { // result = getContext().getMainUI(); // } @@ -197,18 +193,18 @@ AbstractFaxToMailBeanUIModel.PROPERTY_VALID); } - protected void closeUI(FaxToMailUI ui) { - ui.getHandler().onCloseUI(); - } - public void openFrame(ApplicationUI dialogContent, String title, Dimension dim) { - Component topestUI = getTopestUI(); - JFrame result = new JFrame(title); + JFrame result = getContext().getSecondaryFrame(); + if (result == null) { + result = new JFrame(); + result.setResizable(true); + getContext().setSecondaryFrame(result); + } - result.add((Component) dialogContent); - result.setResizable(true); + result.setTitle(title); + result.setContentPane((Container) dialogContent); result.setSize(dim); @@ -233,19 +229,12 @@ }); } - result.addWindowListener(new WindowAdapter() { - - @Override - public void windowClosed(WindowEvent e) { - Component ui = (Component) e.getSource(); - if (log.isDebugEnabled()) { - log.debug("Destroy ui " + ui); - } - JAXXUtil.destroy(ui); - } - }); SwingUtil.center(getContext().getMainUI(), result); result.setVisible(true); } + public void closeFrame() { + getParentContainer(JFrame.class).setVisible(false); + } + } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-04-10 12:18:23 UTC (rev 32) @@ -22,43 +22,29 @@ * #L% */ -import com.franciaflex.faxtomail.persistence.entities.Company; -import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.MailFolder; -import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; -import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.content.demande.RangeRowModel; import jaxx.runtime.JAXXObject; import jaxx.runtime.JAXXUtil; -import org.apache.commons.lang3.StringUtils; +import org.apache.commons.collections4.ComparatorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.ComponentAdapter; -import org.jdesktop.swingx.decorator.Highlighter; -import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -import org.jdesktop.swingx.table.TableColumnModelExt; -import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.util.ApplicationUIUtil; import org.nuiton.util.FileUtil; import javax.swing.*; -import javax.swing.event.ChangeListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.io.File; -import java.text.DateFormat; -import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Collection; -import java.util.Date; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -129,7 +115,14 @@ parent.add(node); if (folder.isChildrenNotEmpty()) { - for (MailFolder child : folder.getChildren()) { + List<MailFolder> children = new ArrayList<MailFolder>(folder.getChildren()); + Collections.sort(children, new Comparator<MailFolder>() { + @Override + public int compare(MailFolder o1, MailFolder o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + for (MailFolder child : children) { result.putAll(createFolderTree(node, child)); } } Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_en_GB.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_en_GB.properties 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_en_GB.properties 2014-04-10 12:18:23 UTC (rev 32) @@ -22,6 +22,8 @@ faxtomail.alert.archiveConfirmation.help= faxtomail.alert.archiveConfirmation.message= faxtomail.alert.archiveConfirmation.title= +faxtomail.alert.groupConfirmation.message= +faxtomail.alert.groupConfirmation.title= faxtomail.archive.button.label= faxtomail.attachmentCellRenderer.text= faxtomail.attachmentEditor.action.add.mnemonic= @@ -104,6 +106,10 @@ faxtomail.config.save.error= faxtomail.config.title= faxtomail.demand.alreadyTakenBy= +faxtomail.demand.group.successful= +faxtomail.demandGroup.action.tip= +faxtomail.demandGroup.text= +faxtomail.demandGroup.title= faxtomail.demande.alreadyTakenBy= faxtomail.demande.archive.button.label= faxtomail.demande.archive.button.mnemonic= @@ -131,6 +137,7 @@ faxtomail.demande.firstOpeningDate.label= faxtomail.demande.gamme.label= faxtomail.demande.group.button.label= +faxtomail.demande.group.successful= faxtomail.demande.history.label= faxtomail.demande.lastAttachmentOpening.label= faxtomail.demande.lastModificationDate.label= @@ -326,6 +333,11 @@ faxtomail.search.sender.label= faxtomail.search.status.label= faxtomail.search.title= +faxtomail.searchToGroup.action.cancel= +faxtomail.searchToGroup.action.cancel.tip= +faxtomail.searchToGroup.action.group= +faxtomail.searchToGroup.action.group.tip= +faxtomail.searchToGroup.title= faxtomail.systemUser= faxtomail.transmit.button.label= faxtomail.validator.error.email.clientCode.required= Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-04-10 12:18:23 UTC (rev 32) @@ -9,8 +9,10 @@ faxtomail.alert.alreadyTakenBy.help=Voulez-vous le prendre ?<ul><li><strong>Annuler</strong> pour ne retourner à la liste</li><li><strong>Non</strong> pour visualiser l'élément en lecture seule</li><li><strong>Oui</strong> pour le prendre</li></ul> faxtomail.alert.alreadyTakenBy.message=L'élément est déjà pris par %s. faxtomail.alert.alreadyTakenBy.title=Document déjà pris -faxtomail.alert.archiveConfirmation.message=Êtes vous sûr de vouloir archiver cet élément ? L'archivage est définitif. -faxtomail.alert.archiveConfirmation.title=Archivage +faxtomail.alert.archiveConfirmation.message=<html>Êtes vous sûr de vouloir archiver cet élément ?<br/>L'archivage est définitif.</html> +faxtomail.alert.archiveConfirmation.title=Confirmation de l'archivage +faxtomail.alert.groupConfirmation.message=<html>Êtes vous sûr de vouloir grouper les éléments<br/>%1$s et<br/>%2$s ?<br/>Le groupement est définitif.</html> +faxtomail.alert.groupConfirmation.title=Confirmation du groupement faxtomail.attachmentCellRenderer.text=(%s) faxtomail.attachmentEditor.action.add.tip=Ajouter une pièce jointe faxtomail.attachmentEditor.action.closeAttachment.tip=Fermer la fenêtre des pièces-jointes @@ -39,6 +41,9 @@ faxtomail.common.on.label=le faxtomail.config.application= faxtomail.config.title= +faxtomail.demandGroup.action.tip=Éléments groupés avec l'élément courant +faxtomail.demandGroup.text=Groupe (%s) +faxtomail.demandGroup.title=Groupe faxtomail.demande.archive.button.label=Archiver faxtomail.demande.askCancelEditBeforeLeaving.cancelSave=L'élément n'est pas valide et ne peut être sauvé. faxtomail.demande.askSaveBeforeLeaving.save=Vous avez modifié l'élément mais vous n'avez pas enregistré ces modifications. @@ -56,6 +61,7 @@ faxtomail.demande.fax.label=Fax faxtomail.demande.firstOpened.label=Première ouverture faxtomail.demande.group.button.label=Grouper +faxtomail.demande.group.successful=Groupement réussi avec l'élément %s faxtomail.demande.lastAttachmentOpening.label=Dernière ouverture de pièce-jointe faxtomail.demande.lastModified.label=Dernière modification faxtomail.demande.mailBody.label=Corps du mail @@ -197,6 +203,11 @@ faxtomail.search.sender.label=Émetteur faxtomail.search.status.label=Statut faxtomail.search.title=Recherche +faxtomail.searchToGroup.action.cancel=Annuler +faxtomail.searchToGroup.action.cancel.tip=Fermer la fenêtre sans grouper l'élément +faxtomail.searchToGroup.action.group=Grouper +faxtomail.searchToGroup.action.group.tip=Grouper avec l'élément courant +faxtomail.searchToGroup.title=Recherche de l'élément avec lequel grouper l'élément %s faxtomail.systemUser=Système faxtomail.validator.error.email.clientCode.required=Code client requis faxtomail.validator.error.email.demandType.required=Type de demande requis Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-04-07 14:02:17 UTC (rev 31) +++ trunk/pom.xml 2014-04-10 12:18:23 UTC (rev 32) @@ -114,7 +114,7 @@ <hibernateVersion>4.2.8.Final</hibernateVersion> <h2Version>1.3.174</h2Version> - <jaxxVersion>2.8.2</jaxxVersion> + <jaxxVersion>2.8.5-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> <xworkVersion>2.3.15.1</xworkVersion> @@ -132,7 +132,7 @@ <i18n.silent>true</i18n.silent> <!-- license header configuration --> - <license.organizationName>Franciaflex</license.organizationName> + <license.organizationName>Franciaflex, Code Lutin</license.organizationName> <license.licenseName>gpl_v3</license.licenseName> <!-- Java version -->
participants (1)
-
kmorin@users.forge.codelutin.com