Author: echatellier Date: 2014-08-04 11:42:59 +0200 (Mon, 04 Aug 2014) New Revision: 460 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/460 Log: fixes #5557: Pouvoir lors de l?\226?\128?\153envoi d?\226?\128?\153un mail mettre un Cc, Cci Modified: 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/actions/ReplyAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css 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/ReplyFormUIModel.java trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 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-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-08-04 09:42:59 UTC (rev 460) @@ -705,7 +705,26 @@ return result; } - public Email reply(String from, String to, String subject, + /** + * Envoi une réponse et retourne l'email. + * + * FIXME echatellier 20140804 : pourquoi retourner l'email ? la réponse ne devrait absolument pas modifier l'email + * + * @param from from + * @param to to + * @param cc cc + * @param bcc bcc + * @param subject subject + * @param content content + * @param attachments attachement + * @param originalEmailId mail topia id + * @param user user to add new history entry for user + * @return modified email + * @throws EmailException if message can't be sent + * @throws MessagingException if message can't be sent + * @throws IOException if message can't be sent + */ + public Email reply(String from, String to, String cc, String bcc, String subject, String content, Collection<AttachmentFile> attachments, String originalEmailId, FaxToMailUser user) throws EmailException, MessagingException, IOException { @@ -726,6 +745,12 @@ message.setCharset(EmailConstants.UTF_8); message.setFrom(from); message.addTo(to); + if (StringUtils.isNotBlank(cc)) { + message.addCc(cc); + } + if (StringUtils.isNotBlank(bcc)) { + message.addBcc(bcc); + } message.setSubject(subject); message.setMsg(content); @@ -736,7 +761,7 @@ message.attach(source, attachmentFile.getFilename(), null); } - String emailId = message.send(); + message.send(); ReplyTopiaDao replyTopiaDao = getPersistenceContext().getReplyDao(); Date now = new Date(); @@ -747,6 +772,7 @@ String headerLine = headerLines.nextElement(); emailSource.append(headerLine).append("\n"); } + // TODO echatellier 20140804 : est volontaire et sûr de stocker l'email sous forme textuelle ? emailSource.append("\n").append(IOUtils.toString(message.getMimeMessage().getInputStream())); Reply reply = replyTopiaDao.create(Reply.PROPERTY_EMAIL_SOURCE, emailSource.toString(), Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java 2014-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java 2014-08-04 09:42:59 UTC (rev 460) @@ -71,6 +71,8 @@ }); Email email = emailService.reply(model.getFrom(), model.getTo(), + model.getCc(), + model.getCci(), model.getSubject(), model.getMessage(), attachmentFiles, Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUIHandler.java 2014-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUIHandler.java 2014-08-04 09:42:59 UTC (rev 460) @@ -39,6 +39,7 @@ import javax.mail.Message; import javax.mail.Part; import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMessage.RecipientType; import javax.mail.internet.MimeMultipart; import javax.swing.AbstractCellEditor; import javax.swing.JComponent; @@ -56,10 +57,12 @@ import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; import com.franciaflex.faxtomail.ui.swing.content.reply.ReplyAttachmentModel; + import jaxx.runtime.JAXXUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -191,12 +194,19 @@ try { ReplyFormUI dialogContent = new ReplyFormUI(ui); + // TODO echatellier 20140804 : c'est très technique et très bas niveau, ca devrait se trouver dans les services Message message = new MimeMessage(null, new ByteArrayInputStream(reply.getEmailSource().getBytes())); ReplyFormUIModel replyModel = dialogContent.getModel(); replyModel.setReadonly(true); replyModel.setSubject(message.getSubject()); - replyModel.setTo(message.getAllRecipients()[0].toString()); + replyModel.setTo(message.getRecipients(RecipientType.TO)[0].toString()); replyModel.setFrom(message.getFrom()[0].toString()); + if (ArrayUtils.isNotEmpty(message.getRecipients(RecipientType.CC))) { + replyModel.setCc(message.getRecipients(RecipientType.CC)[0].toString()); + } + if (ArrayUtils.isNotEmpty(message.getRecipients(RecipientType.BCC))) { + replyModel.setCci(message.getRecipients(RecipientType.BCC)[0].toString()); + } if (message.isMimeType("multipart/*")) { decomposeMultipartEmail(message, replyModel, reply.getTopiaId()); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css 2014-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css 2014-08-04 09:42:59 UTC (rev 460) @@ -48,6 +48,24 @@ editable: { !model.isReadonly() }; } +#ccLabel { + text: "faxtomail.reply.label.cc"; +} + +#ccField { + text: { model.getCc() }; + editable: { !model.isReadonly() }; +} + +#cciLabel { + text: "faxtomail.reply.label.cci"; +} + +#cciField { + text: { model.getCci() }; + editable: { !model.isReadonly() }; +} + #subjectLabel { text: "faxtomail.reply.label.subject"; } 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-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-08-04 09:42:59 UTC (rev 460) @@ -92,6 +92,24 @@ </row> <row> <cell> + <JLabel id="ccLabel"/> + </cell> + <cell weightx='1'> + <JTextField id="ccField" + onKeyReleased='handler.setText(event, "cc")'/> + </cell> + </row> + <row> + <cell> + <JLabel id="cciLabel"/> + </cell> + <cell weightx='1'> + <JTextField id="cciField" + onKeyReleased='handler.setText(event, "cci")'/> + </cell> + </row> + <row> + <cell> <JLabel id="subjectLabel"/> </cell> <cell weightx='1'> 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-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-08-04 09:42:59 UTC (rev 460) @@ -46,6 +46,8 @@ private static final Log log = LogFactory.getLog(ReplyFormUIModel.class); public static final String PROPERTY_TO = "to"; + public static final String PROPERTY_CC = "cc"; + public static final String PROPERTY_CCI = "cci"; public static final String PROPERTY_FROM = "from"; public static final String PROPERTY_SUBJECT = "subject"; public static final String PROPERTY_MESSAGE = "message"; @@ -59,6 +61,8 @@ public static final String PROPERTY_SENDER_ALLOWED_ADDRESSES = "senderAllowedAddresses"; protected String to; + protected String cc; + protected String cci; protected String from; protected String subject; protected String message; @@ -85,6 +89,25 @@ firePropertyChange(PROPERTY_TO, oldValue, to); } + public String getCc() { + return cc; + } + public void setCc(String cc) { + Object oldValue = this.cc; + this.cc = cc; + firePropertyChange(PROPERTY_CC, oldValue, cc); + } + + public String getCci() { + return cci; + } + + public void setCci(String cci) { + Object oldValue = this.cci; + this.cci = cci; + firePropertyChange(PROPERTY_CCI, oldValue, cci); + } + public String getFrom() { return from; } Modified: trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml 2014-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml 2014-08-04 09:42:59 UTC (rev 460) @@ -37,6 +37,18 @@ <message>faxtomail.validator.error.reply.to.email</message> </field-validator> </field> + + <field name="cc"> + <field-validator type="email" short-circuit="true"> + <message>faxtomail.validator.error.reply.cc.email</message> + </field-validator> + </field> + + <field name="cci"> + <field-validator type="email" short-circuit="true"> + <message>faxtomail.validator.error.reply.cci.email</message> + </field-validator> + </field> <field name="from"> <field-validator type="fieldexpression" short-circuit="true"> 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-08-01 16:25:18 UTC (rev 459) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-04 09:42:59 UTC (rev 460) @@ -237,6 +237,8 @@ faxtomail.reply.attachment.label=%1$s (%2$s ko) faxtomail.reply.attachments.add.label=Ajouter des pièces jointes faxtomail.reply.attachments.title=Pièces-jointes (%1$s / %2$s ko autorisés) +faxtomail.reply.label.cc=Copie \: +faxtomail.reply.label.cci=Copie cachée \: faxtomail.reply.label.from=De \: faxtomail.reply.label.subject=Objet \: faxtomail.reply.label.to=À \: @@ -273,12 +275,14 @@ faxtomail.validator.error.email.priority.required=Priorité requise faxtomail.validator.error.email.projectReference.required=Référence chantier requise faxtomail.validator.error.email.rangeRow.required=Tableau des gammes requis +faxtomail.validator.error.reply.cc.email=Le champ 'Copie\:' doit être une adresse email valide \! +faxtomail.validator.error.reply.cci.email=Le champ 'opie cachée\:' doit être une adresse email valide \! faxtomail.validator.error.reply.from.invalidDomain= faxtomail.validator.error.reply.from.required= faxtomail.validator.error.reply.subject.required= -faxtomail.validator.error.reply.to.email= -faxtomail.validator.error.reply.to.required= -faxtomail.validator.error.reply.totalAttachmentLength.required= +faxtomail.validator.error.reply.to.email=Le champ 'A\:' doit être une adresse email valide \! +faxtomail.validator.error.reply.to.required=Le champ 'A\:' est requis \! +faxtomail.validator.error.reply.totalAttachmentLength.required=La taille totale des pièces jointes dépasse la limite acceptée jaxx.application.error.cannot.mail= jaxx.application.error.cannot.print= jaxx.application.error.desktop.not.supported=