Author: echatellier Date: 2014-07-31 15:07:07 +0200 (Thu, 31 Jul 2014) New Revision: 453 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/453 Log: fixes #5521: Redefinition de certaines m?\195?\169thode par copier/coller pour changer l'action de sauvegarde en action bloquante pour qu'elle bloque l'action de rechergement de l'ui suivante et que cela ne fasse pas de conflit. Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 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-07-31 10:08:13 UTC (rev 452) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-07-31 13:07:07 UTC (rev 453) @@ -22,23 +22,32 @@ * #L% */ -import com.franciaflex.faxtomail.persistence.entities.Attachment; -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.EtatAttente; -import com.franciaflex.faxtomail.persistence.entities.HistoryType; -import com.franciaflex.faxtomail.persistence.entities.MailField; -import com.franciaflex.faxtomail.persistence.entities.MailFolder; -import com.franciaflex.faxtomail.persistence.entities.Range; -import com.franciaflex.faxtomail.persistence.entities.RangeRow; -import com.franciaflex.faxtomail.services.service.ReferentielService; -import com.franciaflex.faxtomail.ui.swing.actions.SaveDemandeAction; -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.content.attachment.AttachmentEditorUIModel; +import static org.nuiton.i18n.I18n.t; +import java.awt.Color; +import java.awt.Component; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JSplitPane; +import javax.swing.JTextPane; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.TableCellEditor; + import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; @@ -50,6 +59,8 @@ import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction; +import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.tab.TabHandler; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.MoveToNextEditableCellAction; @@ -58,27 +69,23 @@ import org.nuiton.jaxx.application.swing.table.MoveToPreviousEditableRowAction; import org.nuiton.util.beans.BeanMonitor; -import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.table.TableCellEditor; +import com.franciaflex.faxtomail.persistence.entities.Attachment; +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.EtatAttente; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.persistence.entities.MailField; +import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.persistence.entities.Range; +import com.franciaflex.faxtomail.persistence.entities.RangeRow; +import com.franciaflex.faxtomail.services.service.ReferentielService; +import com.franciaflex.faxtomail.ui.swing.actions.SaveDemandeAction; +import com.franciaflex.faxtomail.ui.swing.content.attachment.AttachmentEditorUIModel; +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 java.awt.*; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import static org.nuiton.i18n.I18n.t; - /** * Handler of UI {@link DemandeUIHandler}. * @@ -435,13 +442,12 @@ @Override public boolean quitUI() { BeanMonitor monitor = getMonitor(); - log.info(Arrays.toString(monitor.getModifiedProperties())); - boolean result = quitScreen( + boolean result = quitScreen2( true, monitor.wasModified(), t("faxtomail.demande.askCancelEditBeforeLeaving.cancelSave"), t("faxtomail.demande.askSaveBeforeLeaving.save"), - getContext().getActionFactory().createUIAction(this, SaveDemandeAction.class) + getContext().getActionFactory().createLogicAction(this, SaveDemandeAction.class) ); // mettre ca ici et non dans le close, car pour un onglet, le close n'est pas appelé @@ -452,6 +458,59 @@ return result; } + /** + * Gros copier/coller de quitScreen() pour appeler runActionAndWait au lieu de saveAction.actionPerformed(null); par defaut + * pour tenter de corriger un problème de concurrence entre l'action de sauvegarde de l'email + * et l'action de rechargement de l'arbre qui fait un closeTransaction au même moment. + * + * @param modelIsValid + * @param modelIsModify + * @param askGiveUpMessage + * @param askSaveMessage + * @param saveAction + * @return + */ + protected boolean quitScreen2(boolean modelIsValid, boolean modelIsModify, String askGiveUpMessage, String askSaveMessage, + SaveDemandeAction saveAction) { + boolean result; + + if (!modelIsValid) { + + // model is not valid + // ask user to qui or not + result = askCancelEditBeforeLeaving(askGiveUpMessage); + + } else if (modelIsModify) { + + // something is modify ask user what to do + int answer = askSaveBeforeLeaving(askSaveMessage); + switch (answer) { + case JOptionPane.YES_OPTION: + + // ok save + //saveAction.actionPerformed(null); + //XXX echatellier 2010731 : action bloquante + getContext().getActionEngine().runActionAndWait(saveAction); + result = true; + break; + case JOptionPane.NO_OPTION: + + // do not save but can still quit the screen (so nothing to do) + result = true; + break; + default: + // do not save and stay here (so nothing to do) + result = false; + + } + } else { + + // model is valid and not modify, can safely quit screen + result = true; + } + return result; + } + @Override public SwingValidator<DemandeUIModel> getValidator() { return ui.getValidator();