r303 - in trunk: 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/demande faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/
Author: echatellier Date: 2014-07-01 15:09:57 +0200 (Tue, 01 Jul 2014) New Revision: 303 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/303 Log: V?\195?\169rrouillage des mails ?\195?\160 l'ouverture 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/FaxToMailUIContext.java 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/SaveAndOpenDialogAction.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/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/demande/demandgroup/DemandGroupUIHandler.java 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/SearchUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailExceptionHandler.java 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-07-01 13:09:57 UTC (rev 303) @@ -48,6 +48,7 @@ import javax.mail.MessagingException; import com.franciaflex.faxtomail.persistence.entities.Range; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.io.IOUtils; @@ -463,6 +464,13 @@ return email; } + /** + * Take email (takenBy). + * + * @param emailId + * @param user + * @return + */ public Email takeEmail(String emailId, FaxToMailUser user) { EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); Email email = emailDao.findByTopiaId(emailId); @@ -481,6 +489,48 @@ } /** + * Vérrouille une demande par un utilisateur empechant les autres de l'ouvrir. + * + * @param emailId topiaId de la demande à vérouiller + * @param currentUser user + * @return email + */ + public Email lockEmail(String emailId, FaxToMailUser currentUser) { + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + Email email = emailDao.findByTopiaId(emailId); + email.setLockedBy(currentUser); + email = emailDao.update(email); + getPersistenceContext().commit(); + if (log.isDebugEnabled()) { + log.debug("[LOCK] " + emailId + " locked by " + currentUser.getFirstName() + " " + currentUser.getLastName()); + } + + // TODO echatellier : les utilisateurs peuvent avoir plusieurs verrous actif dans le + // cas des interfaces à onglet et des demandes groupé + // on pourrait peut-etre supprimer automatiquement les locks sur les autres demande + // si elle ne sont pas groupées + return email; + } + + /** + * Dévérrouille une demande. + * + * @param emailId topiaId de la demande à devérouiller + * @return email + */ + public Email unlockEmail(String emailId) { + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + Email email = emailDao.findByTopiaId(emailId); + email.setLockedBy(null); + email = emailDao.update(email); + getPersistenceContext().commit(); + if (log.isDebugEnabled()) { + log.debug("[UNLOCK] " + emailId + " unlocked "); + } + return email; + } + + /** * Calcule recursivement l'ensemble des répertoires lisible par un utilisateur récursivement. * * @param readMailFolders result mail folders 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-07-01 13:09:57 UTC (rev 303) @@ -55,7 +55,6 @@ import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.ClassPathI18nInitializer; import org.nuiton.i18n.init.DefaultI18nInitializer; -import org.nuiton.i18n.init.UserI18nInitializer; import org.nuiton.jaxx.application.ApplicationConfiguration; import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.swing.ApplicationUIContext; Modified: 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/ArchiveAction.java 2014-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-07-01 13:09:57 UTC (rev 303) @@ -29,13 +29,10 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.google.common.base.Predicate; -import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import javax.swing.*; -import java.util.ArrayList; -import java.util.Collection; import java.util.Date; import static org.nuiton.i18n.I18n.t; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenDialogAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenDialogAction.java 2014-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveAndOpenDialogAction.java 2014-07-01 13:09:57 UTC (rev 303) @@ -24,8 +24,6 @@ * #L% */ -import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; -import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI; 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-07-01 13:09:57 UTC (rev 303) @@ -28,6 +28,7 @@ import com.franciaflex.faxtomail.ui.swing.FaxToMailScreen; import com.franciaflex.faxtomail.ui.swing.content.MainUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; @@ -50,11 +51,32 @@ } @Override + public boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + + if (result) { + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + FaxToMailUser lockedByUser = currentEmail.getLockedBy(); + FaxToMailUser currentUser = getContext().getCurrentUser(); + + if (lockedByUser != null && !lockedByUser.equals(currentUser)) { + String htmlMessage = t("faxtomail.alert.alreadyLockedBy.message", decorate(lockedByUser)); + JOptionPane.showMessageDialog(getHandler().getTopestUI(), + htmlMessage, + t("faxtomail.alert.alreadyLockedBy.title"), + JOptionPane.ERROR_MESSAGE); + result = false; + } + } + return result; + } + + @Override public void doAction() throws Exception { super.doAction(); DemandeUIModel currentEmail = getContext().getCurrentEmail(); - if (StringUtils.isNoneBlank(currentEmail.getTopiaId())) { + if (StringUtils.isNotBlank(currentEmail.getTopiaId())) { Email email = getContext().getEmailService().getEmailById(currentEmail.getTopiaId()); currentEmail.setGroupedDemandes(email.getEmailGroup()); } @@ -76,10 +98,9 @@ currentUser.getUserGroups()).isEmpty(); folder = folder.getParent(); } - + if (currentEmail.getArchiveDate() != null || !canWrite) { currentEmail.setEditable(false); - } else if (takenBy != null && !currentUser.equals(takenBy)) { String htmlMessage = String.format( AbstractApplicationUIHandler.CONFIRMATION_FORMAT, @@ -108,5 +129,8 @@ break; } } + + // au final, on a ouvert la demande, on peut locker la demande + getContext().getEmailService().lockEmail(currentEmail.getTopiaId(), currentUser); } } 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-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-07-01 13:09:57 UTC (rev 303) @@ -37,8 +37,11 @@ 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.MainUIHandler; 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; import org.apache.commons.logging.LogFactory; @@ -60,6 +63,7 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.TableCellEditor; + import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; @@ -405,6 +409,7 @@ if (log.isDebugEnabled()) { log.debug("closing: " + ui); } + clearValidators(); } @@ -424,6 +429,13 @@ t("faxtomail.demande.askSaveBeforeLeaving.save"), getContext().getActionFactory().createUIAction(this, SaveDemandeAction.class) ); + + // mettre ca ici et non dans le close, car pour un onglet, le close n'est pas appelé + if (result) { + Email email = getContext().getEmailService().unlockEmail(getModel().getTopiaId()); + getModel().fromEntity(email); + } + return result; } 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-07-01 13:09:57 UTC (rev 303) @@ -385,6 +385,16 @@ return editObject.getTakenBy(); } + public FaxToMailUser getLockedBy() { + return editObject.getLockedBy(); + } + + public void setLockedBy(FaxToMailUser faxToMailUser) { + Object oldValue = getLockedBy(); + editObject.setLockedBy(faxToMailUser); + firePropertyChanged(Email.PROPERTY_LOCKED_BY, oldValue, faxToMailUser); + } + public Priority getPriority() { return editObject.getPriority(); } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupUIHandler.java 2014-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupUIHandler.java 2014-07-01 13:09:57 UTC (rev 303) @@ -32,7 +32,9 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandesUI; import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupHandler; import com.google.common.collect.Iterables; + import jaxx.runtime.validator.swing.SwingValidator; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -49,6 +51,7 @@ 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; @@ -155,42 +158,55 @@ FaxToMailUser takenBy = demande.getTakenBy(); FaxToMailUser currentUser = getContext().getCurrentUser(); + FaxToMailUser lockedByUser = demande.getLockedBy(); //TODO kmorin 20140512 put this in an action - if (demande.getArchiveDate() != null) { - demande.setEditable(false); + if (lockedByUser != null && !lockedByUser.equals(currentUser)) { + String htmlMessage = t("faxtomail.alert.alreadyLockedBy.message", decorate(lockedByUser)); + JOptionPane.showMessageDialog(getTopestUI(), + htmlMessage, + t("faxtomail.alert.alreadyLockedBy.title"), + JOptionPane.ERROR_MESSAGE); - } else if (takenBy != null && !currentUser.equals(takenBy)) { - String htmlMessage = String.format( - AbstractApplicationUIHandler.CONFIRMATION_FORMAT, - t("faxtomail.alert.alreadyTakenBy.message", decorate(takenBy)), - t("faxtomail.alert.alreadyTakenBy.help")); + } else { + if (demande.getArchiveDate() != null) { + demande.setEditable(false); + + } else if (takenBy != null && !currentUser.equals(takenBy)) { + String htmlMessage = String.format( + AbstractApplicationUIHandler.CONFIRMATION_FORMAT, + t("faxtomail.alert.alreadyTakenBy.message", decorate(takenBy)), + t("faxtomail.alert.alreadyTakenBy.help")); + + int result = JOptionPane.showConfirmDialog(getTopestUI(), + htmlMessage, + t("faxtomail.alert.alreadyTakenBy.title"), + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + switch (result) { + case JOptionPane.CANCEL_OPTION: + return; + + case JOptionPane.NO_OPTION: + demande.setEditable(false); + break; + + case JOptionPane.YES_OPTION: + Email email = getContext().getEmailService().takeEmail(demande.getTopiaId(), currentUser); + demande.fromEntity(email); + demande.setEditable(true); + break; + } + } - int result = JOptionPane.showConfirmDialog(getTopestUI(), - htmlMessage, - t("faxtomail.alert.alreadyTakenBy.title"), - JOptionPane.YES_NO_CANCEL_OPTION, - JOptionPane.QUESTION_MESSAGE); - - switch (result) { - case JOptionPane.CANCEL_OPTION: - return; - - case JOptionPane.NO_OPTION: - demande.setEditable(false); - break; - - case JOptionPane.YES_OPTION: - Email email = getContext().getEmailService().takeEmail(demande.getTopiaId(), currentUser); - demande.fromEntity(email); - demande.setEditable(true); - break; - } + // au final, on a ouvert la demande, on peut locker la demande + getContext().getEmailService().lockEmail(demande.getTopiaId(), currentUser); + + MainUIHandler mainUIHandler = context.getMainUI().getHandler(); + DemandesUI parentContainer = (DemandesUI) mainUIHandler.getCurrentBody(); + parentContainer.getModel().addDemand(demande); } - - MainUIHandler mainUIHandler = context.getMainUI().getHandler(); - DemandesUI parentContainer = (DemandesUI) mainUIHandler.getCurrentBody(); - parentContainer.getModel().addDemand(demande); } protected class DemandGroupItemRenderer extends DemandGroupItem Modified: 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 2014-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchToGroupUIHandler.java 2014-07-01 13:09:57 UTC (rev 303) @@ -223,7 +223,7 @@ public void searchDemandes() { getModel().resetPaginationParameter(); try { - SearchAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchAction.class); + SearchToGroupAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchToGroupAction.class); searchAction.doAction(); } catch (Exception e) { @@ -237,7 +237,7 @@ public void goToNextPage() { getModel().setPaginationParameter(getModel().getPaginationResult().getNextPage()); try { - SearchAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchAction.class); + SearchToGroupAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchToGroupAction.class); searchAction.doAction(); } catch (Exception e) { @@ -251,7 +251,7 @@ public void goToPreviousPage() { getModel().setPaginationParameter(getModel().getPaginationResult().getPreviousPage()); try { - SearchAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchAction.class); + SearchToGroupAction searchAction = getContext().getActionFactory().createLogicAction(this, SearchToGroupAction.class); searchAction.doAction(); } catch (Exception e) { 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-07-01 13:09:57 UTC (rev 303) @@ -26,10 +26,8 @@ import com.franciaflex.faxtomail.persistence.entities.EmailFilter; import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.services.service.ReferentielService; -import com.franciaflex.faxtomail.ui.swing.actions.LoadFolderEmailsAction; import com.franciaflex.faxtomail.ui.swing.actions.SearchAction; import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeListAction; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailDemandListHandler; import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailExceptionHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailExceptionHandler.java 2014-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailExceptionHandler.java 2014-07-01 13:09:57 UTC (rev 303) @@ -77,7 +77,7 @@ } } - showErrorDialog(cause.getMessage(), cause); + showErrorDialog(cause != null ? cause.getMessage() : "", cause); if (backToScreen) { 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-07-01 06:34:20 UTC (rev 302) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-07-01 13:09:57 UTC (rev 303) @@ -28,6 +28,8 @@ faxtomail.action.search.tip=Rechercher faxtomail.action.start.tip=Démarrer FaxToMail faxtomail.action.transmit.tip=Déplacer l'élément +faxtomail.alert.alreadyLockedBy.message=L'élément est déjà vérrouillé par %s, vous ne pouvez pas l'ouvrir. +faxtomail.alert.alreadyLockedBy.title=Document déjà vérrouillé faxtomail.alert.alreadyTakenBy.button.quit=Quitter faxtomail.alert.alreadyTakenBy.button.take=Prendre faxtomail.alert.alreadyTakenBy.button.view=Visualiser @@ -114,7 +116,7 @@ faxtomail.demande.gamme.label=Gamme faxtomail.demande.group.button.label=Grouper faxtomail.demande.group.successful=Groupement réussi avec l'élément %s -faxtomail.demande.history.action.send.tip= +faxtomail.demande.history.action.send.tip=Envoyer l'historique par email faxtomail.demande.history.send.subject=Historique de %s faxtomail.demande.lastAttachmentOpening.label=Dernière ouverture de pièce-jointe faxtomail.demande.lastModified.label=Dernière modification
participants (1)
-
echatellier@users.forge.codelutin.com