Author: echatellier Date: 2014-08-18 12:48:40 +0200 (Mon, 18 Aug 2014) New Revision: 567 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/567 Log: Disable forward button for replies popup displayed from list Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/ButtonDemandReplies.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUI.jaxx 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/DemandReplyItem.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellEditor.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellRenderer.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/ReplyFormUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-18 10:48:40 UTC (rev 567) @@ -33,7 +33,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.ArrayList; import java.util.Collection; @@ -42,7 +41,6 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -52,7 +50,6 @@ import javax.mail.MessagingException; import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException; -import com.google.common.collect.Collections2; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.io.FileUtils; @@ -75,7 +72,6 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.topia.persistence.TopiaEntities; -import org.nuiton.topia.persistence.TopiaQueryBuilderAddCriteriaOrRunQueryStep; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; import org.nuiton.util.pagination.PaginationParameter; @@ -92,7 +88,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.base.Strings; -import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -798,7 +793,7 @@ @Override public PaginationResult<Email> search(EmailFilter emailFilter, FaxToMailUser user, PaginationParameter pagination) { - + // compute rigths MailFolderTopiaDao mailFolderDao = getPersistenceContext().getMailFolderDao(); Set<MailFolder> readMailFolders = new HashSet<MailFolder>(); @@ -816,7 +811,6 @@ // compute search EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); PaginationResult<Email> result = emailDao.search(emailFilter, readMailFolders, pagination); - return result; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.jaxx 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUI.jaxx 2014-08-18 10:48:40 UTC (rev 567) @@ -36,10 +36,6 @@ javax.swing.JComponent </import> - <!-- if true, display the form to add attachments - and the button to remove existing attachments --> - <Boolean id='editable' javaBean='true'/> - <AttachmentEditorUIModel id='model' initializer='new AttachmentEditorUIModel()'/> Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.css 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.css 2014-08-18 10:48:40 UTC (rev 567) @@ -30,7 +30,7 @@ _selectOnFocus: { true }; } -JTextField, JXTable, BeanFilterableComboBox, #commentField, ButtonAttachment { +JTextField, JXTable, BeanFilterableComboBox, #commentField, ButtonAttachment, ButtonDemandReplies { editable: { model.isEditable() && !DemandStatus.TRANSMITTED_TO_EDI.equals(model.getDemandStatus()) }; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/ButtonDemandReplies.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/ButtonDemandReplies.java 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/ButtonDemandReplies.java 2014-08-18 10:48:40 UTC (rev 567) @@ -39,7 +39,7 @@ import static org.nuiton.i18n.I18n.n; /** - * Button to edit attachments. + * Button to edit replies. * * @author kmorin - morin@codelutin.com */ @@ -88,11 +88,15 @@ @Override protected DemandRepliesUI createNewPopup() { - return new DemandRepliesUI(FaxToMailUIContext.getApplicationContext()); + DemandRepliesUI ui = new DemandRepliesUI(FaxToMailUIContext.getApplicationContext()); + return ui; } public DemandeUIModel getBean() { return popup.getModel(); } + public void setEditable(boolean editable) { + popup.setEditable(editable); + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUI.jaxx 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUI.jaxx 2014-08-18 10:48:40 UTC (rev 567) @@ -32,6 +32,8 @@ org.jdesktop.swingx.JXTitledPanel </import> + <Boolean id='editable' javaBean='null' /> + <DemandeUIModel id='model' javaBean='null'/> 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-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandRepliesUIHandler.java 2014-08-18 10:48:40 UTC (rev 567) @@ -158,8 +158,10 @@ TableColumnModel columnModel = new DefaultTableColumnModel(); TableColumn column = new TableColumn(); - column.setCellRenderer(new DemandReplyItemRenderer()); - column.setCellEditor(new DemandReplyItemEditor()); + DemandReplyItemRenderer renderer = new DemandReplyItemRenderer(); + DemandReplyItemEditor editor = new DemandReplyItemEditor(); + column.setCellRenderer(renderer); + column.setCellEditor(editor); columnModel.addColumn(column); table.setModel(demandRepliesTableModel); @@ -181,16 +183,20 @@ return null; } - public void openReply(Reply reply) { + public void openReply(DemandReplyItem item) { closeEditor(); + Reply reply = item.getReply(); + boolean editable = item.isEditable(); + 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.setEditable(editable); + replyModel.setReadonly(true); replyModel.setOriginalDemand(ui.getModel()); - replyModel.setReadonly(true); replyModel.setReadSentDate(reply.getSentDate()); replyModel.setSubject(message.getSubject()); replyModel.setTo(message.getRecipients(RecipientType.TO)[0].toString()); @@ -218,14 +224,18 @@ } - public void openForward(Reply reply) { + public void openForward(DemandReplyItem item) { closeEditor(); + Reply reply = item.getReply(); + boolean editable = item.isEditable(); + 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.setEditable(editable); replyModel.setOriginalDemand(ui.getModel()); replyModel.setReadSentDate(reply.getSentDate()); replyModel.setSubject(t("faxtomail.reply.forwardsubject", message.getSubject())); @@ -327,6 +337,8 @@ boolean isSelected, boolean hasFocus, int row, int column) { Reply reply = (Reply) value; setReply(reply); + + setEditable(DemandRepliesUIHandler.this.getUI().isEditable()); return this; } } @@ -343,7 +355,7 @@ boolean isSelected, int row, int column) { Reply reply = (Reply) value; demandReplyItem.setReply(reply); - + demandReplyItem.setEditable(getUI().isEditable()); return demandReplyItem; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.css 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.css 2014-08-18 10:48:40 UTC (rev 567) @@ -42,6 +42,7 @@ #openForwardButton { actionIcon: "transmit"; toolTipText: "faxtomail.demandReplies.action.forward.tip"; + visible: { isEditable() }; } #openReplyButton { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.jaxx 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/DemandReplyItem.jaxx 2014-08-18 10:48:40 UTC (rev 567) @@ -30,6 +30,9 @@ static jaxx.runtime.JAXXUtil.getStringValue </import> + <!-- if true, display the form to forward reply button --> + <Boolean id='editable' javaBean='true' /> + <Reply id='reply' javaBean='null'/> <DemandRepliesUIHandler id='handler' @@ -47,9 +50,9 @@ <JToolBar id='toolbar' constraints='BorderLayout.EAST'> <JButton id='openForwardButton' - onActionPerformed='handler.openForward(reply)'/> + onActionPerformed='handler.openForward(this)'/> <JButton id='openReplyButton' - onActionPerformed='handler.openReply(reply)'/> + onActionPerformed='handler.openReply(this)'/> </JToolBar> </JPanel> \ No newline at end of file Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellEditor.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellEditor.java 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellEditor.java 2014-08-18 10:48:40 UTC (rev 567) @@ -42,7 +42,7 @@ import java.util.EventObject; /** - * To edit attachments from a table cell. + * To edit replies from a table cell. * * @author kmorin - morin@codelutin.com */ @@ -54,7 +54,6 @@ private static final Log log = LogFactory.getLog(RepliesCellEditor.class); public static TableCellEditor newEditor(FaxToMailUI ui) { - return new RepliesCellEditor(FaxToMailUIContext.getApplicationContext()); } @@ -67,6 +66,7 @@ this.editorButton = new ButtonDemandReplies("faxtomail.demandRepliesCellRenderer.text", null); this.editorButton.setBorder(new LineBorder(Color.BLACK)); + this.editorButton.setEditable(false); addCellEditorListener(new CellEditorListener() { @Override public void editingStopped(ChangeEvent e) { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellRenderer.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellRenderer.java 2014-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/replies/RepliesCellRenderer.java 2014-08-18 10:48:40 UTC (rev 567) @@ -51,10 +51,6 @@ private final Decorator<Reply> decorator; -// private Font defaulfFont; -// -// private Font selectedFont; - public static RepliesCellRenderer newRender(Decorator<Reply> decorator) { return new RepliesCellRenderer(decorator); } @@ -106,15 +102,7 @@ setEnabled(editable); setText(textValue); setToolTipText(toolTipTextValue); -// setBackground(null); -// setForeground(Color.BLACK); -// if (isSelected) { -// setFont(selectedFont); -// } else { -// setFont(defaulfFont); -// } - return this; } } 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-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css 2014-08-18 10:48:40 UTC (rev 567) @@ -124,6 +124,7 @@ actionIcon: transmit; text: "faxtomail.reply.action.forward"; toolTipText: "faxtomail.reply.action.forward.tip"; + visible: { getModel().isEditable() }; } #closeButton { 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-08-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-08-18 10:48:40 UTC (rev 567) @@ -26,26 +26,11 @@ import static org.nuiton.i18n.I18n.t; -import com.franciaflex.faxtomail.persistence.entities.AttachmentFileImpl; -import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; -import com.franciaflex.faxtomail.services.service.EmailService; -import com.franciaflex.faxtomail.ui.swing.actions.AddAttachmentToReplyAction; -import com.franciaflex.faxtomail.ui.swing.actions.OpenAttachmentAction; -import com.google.common.base.Strings; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; -import org.nuiton.validator.bean.simple.SimpleBeanValidator; - import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; @@ -53,14 +38,6 @@ import java.util.Collection; import java.util.List; -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.mail.BodyPart; -import javax.mail.Message; -import javax.mail.Part; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; -import javax.mail.internet.MimeMessage.RecipientType; import javax.swing.ComboBoxEditor; import javax.swing.JComboBox; import javax.swing.JComponent; @@ -70,18 +47,25 @@ import javax.swing.JTextField; import jaxx.runtime.JAXXUtil; +import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.swing.util.Cancelable; +import org.nuiton.validator.bean.simple.SimpleBeanValidator; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.AttachmentFileImpl; +import com.franciaflex.faxtomail.persistence.entities.AttachmentImpl; import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.ui.swing.actions.AddAttachmentToReplyAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; -import org.nuiton.jaxx.application.swing.util.Cancelable; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; +import com.google.common.base.Strings; import com.google.common.collect.Lists; /** @@ -143,10 +127,6 @@ } } - JComboBox<AttachmentFile> addAttachmentFile = ui.getAddAttachmentFile(); - addAttachmentFile.setModel(newComboModel(model.getAvailableAttachments().toArray())); - addAttachmentFile.setSelectedItem(null); - model.setFrom(demand.getRecipient()); model.setSubject(t("faxtomail.reply.subject", demand.getSubject())); @@ -158,23 +138,33 @@ plainContent.replaceAll("\n", "\n> ")); model.setMessage(quotedReply); - MailFolder folder = demand.getMailFolder(); - List<String> folderReplyAdresses = new ArrayList<String>(); - List<String> folderReplyDomains = new ArrayList<String>(); - while (folder != null) { - folderReplyAdresses.addAll(folder.getReplyAddresses()); - folderReplyDomains.addAll(folder.getReplyDomains()); - folder = folder.getParent(); - } - model.setSenderAllowedDomains(folderReplyDomains); + // this have to be disable for read only mode (useless) + if (!model.isReadonly()) { + + // attachment combo + JComboBox<AttachmentFile> addAttachmentFile = ui.getAddAttachmentFile(); + addAttachmentFile.setModel(SwingUtil.newComboModel(model.getAvailableAttachments().toArray())); + addAttachmentFile.setSelectedItem(null); - List<String> replyToAddresses = Lists.newArrayList(demand.getRecipient()); - if (folderReplyAdresses != null) { - replyToAddresses.addAll(folderReplyAdresses); + // sender combo + MailFolder folder = demand.getMailFolder(); + List<String> folderReplyAdresses = new ArrayList<String>(); + List<String> folderReplyDomains = new ArrayList<String>(); + while (folder != null) { + folderReplyAdresses.addAll(folder.getReplyAddresses()); + folderReplyDomains.addAll(folder.getReplyDomains()); + folder = folder.getParent(); + } + model.setSenderAllowedDomains(folderReplyDomains); + + List<String> replyToAddresses = Lists.newArrayList(demand.getRecipient()); + if (folderReplyAdresses != null) { + replyToAddresses.addAll(folderReplyAdresses); + } + + ui.getFromComboBox().setModel(SwingUtil.newComboModel(replyToAddresses.toArray())); + model.setSenderAllowedAddresses(replyToAddresses); } - - ui.getFromComboBox().setModel(newComboModel(replyToAddresses.toArray())); - model.setSenderAllowedAddresses(replyToAddresses); } }); 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-18 08:33:46 UTC (rev 566) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-08-18 10:48:40 UTC (rev 567) @@ -63,6 +63,7 @@ public static final String PROPERTY_SENDER_ALLOWED_DOMAINS = "senderAllowedDomains"; public static final String PROPERTY_SENDER_ALLOWED_ADDRESSES = "senderAllowedAddresses"; public static final String PROPERTY_READONLY = "readonly"; + public static final String PROPERTY_EDITABLE = "editable"; public static final String PROPERTY_READ_SENT_DATE = "readSentDate"; protected String to; @@ -75,9 +76,12 @@ protected long maxAttachmentLength = 0; protected long totalAttachmentLength = 0; protected boolean valid = true; - + /** Flag pour marquer les champs non editables dans le cas d'une lecture d'une réponse déjà envoyée. */ protected boolean readonly = false; + + /** Flag pour activer ou non la possibilité de transferer la demande. */ + protected boolean editable = false; /** Date d'envoi d'une réponse ouverte en lecture seule (peut être {@code null}). */ protected Date readSentDate; @@ -220,6 +224,16 @@ firePropertyChange(PROPERTY_READONLY, oldValue, readonly); } + public boolean isEditable() { + return editable; + } + + public void setEditable(boolean editable) { + Object oldValue = isEditable(); + this.editable = editable; + firePropertyChange(PROPERTY_EDITABLE, oldValue, editable); + } + public void setReadSentDate(Date readSentDate) { Object oldValue = this.readSentDate; this.readSentDate = readSentDate;