r18 - 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 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/search faxtomail-ui-s
Author: kmorin Date: 2014-03-12 19:14:43 +0100 (Wed, 12 Mar 2014) New Revision: 18 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/18 Log: refs #4654 [ECRAN] Liste des mails / fax refs #4655 [ECRAN] D?\195?\169tail d'un mail / fax 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/InitFaxToMailService.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/SaveDemandeAction.java 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/ShowDemandeAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java 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/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/RangeRowModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeTableModel.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/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/DemandeTableModel.java 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/history/HistoryListUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIModel.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 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-03-12 18:14:43 UTC (rev 18) @@ -14,12 +14,15 @@ import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaEntityVisitor; import org.nuiton.topia.persistence.pager.TopiaPagerBean; import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author kmorin <kmorin@codelutin.com> @@ -29,6 +32,10 @@ private static final Log log = LogFactory.getLog(EmailService.class); + public Email getEmailById(String id) { + return getPersistenceContext().getEmailDao().findByTopiaId(id); + } + public Email saveEmail(Email email, FaxToMailUser user) { Date now = getNow(); EmailTopiaDao dao = getPersistenceContext().getEmailDao(); @@ -77,9 +84,10 @@ public List<Email> getEmailForFolder(MailFolder folder) { EmailTopiaDao dao = getPersistenceContext().getEmailDao(); - return new ArrayList<>(dao.forMailFolderEquals(folder) + List<Email> result = new ArrayList<>(dao.forMailFolderEquals(folder) .setOrderByArguments(Email.PROPERTY_RECEPTION_DATE) .findAll()); + return result; } public List<Email> getEmailForFolderAndSubfolders(MailFolder folder) { @@ -100,7 +108,10 @@ return folders; } - public Email addToOpeningHistory(Email email, FaxToMailUser user, Date date) { + public Email addToOpeningHistory(String emailId, FaxToMailUser user, Date date) { + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + Email email = emailDao.findByTopiaId(emailId); + HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.OPENING, History.PROPERTY_FAX_TO_MAIL_USER, user, @@ -112,14 +123,15 @@ email.setTakenBy(user); } - EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); email = emailDao.update(email); getPersistenceContext().commit(); return email; } - public Email takeEmail(Email email, FaxToMailUser user) { + public Email takeEmail(String emailId, FaxToMailUser user) { + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + Email email = emailDao.findByTopiaId(emailId); email.setTakenBy(user); HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); @@ -128,7 +140,6 @@ History.PROPERTY_MODIFICATION_DATE, new Date()); email.addHistory(history); - EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); email = emailDao.update(email); getPersistenceContext().commit(); return email; Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/InitFaxToMailService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/InitFaxToMailService.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/InitFaxToMailService.java 2014-03-12 18:14:43 UTC (rev 18) @@ -353,7 +353,7 @@ if (opened) { - getEmailService().addToOpeningHistory(email, user, now); + getEmailService().addToOpeningHistory(email.getTopiaId(), user, now); email.setDemandType(types.get(random.nextInt(types.size()))); email.setPriority(priorities.get(random.nextInt(priorities.size()))); email.setRangeRow(rangeRows); @@ -379,7 +379,7 @@ if (opened) { - getEmailService().addToOpeningHistory(email, user, now); + getEmailService().addToOpeningHistory(email.getTopiaId(), user, now); email.setDemandType(types.get(random.nextInt(types.size()))); email.setPriority(priorities.get(random.nextInt(priorities.size()))); email.setRangeRow(rangeRows); 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-03-12 18:14:43 UTC (rev 18) @@ -39,6 +39,7 @@ import com.franciaflex.faxtomail.services.service.ReferentielService; import com.franciaflex.faxtomail.services.service.UserService; import com.franciaflex.faxtomail.ui.swing.content.MainUI; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.UIMessageNotifier; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; @@ -215,7 +216,7 @@ protected MailFolder currentMailFolder; - protected Email currentEmail; + protected DemandeUIModel currentEmail; protected List<MailFolder> expandedFolders = new ArrayList<MailFolder>(); @@ -700,11 +701,11 @@ this.currentMailFolder = currentMailFolder; } - public Email getCurrentEmail() { + public DemandeUIModel getCurrentEmail() { return currentEmail; } - public void setCurrentEmail(Email currentEmail) { + public void setCurrentEmail(DemandeUIModel currentEmail) { this.currentEmail = currentEmail; } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java 2014-03-12 18:14:43 UTC (rev 18) @@ -4,6 +4,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.ui.swing.FaxToMailScreen; +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.content.MainUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIHandler; @@ -28,22 +29,30 @@ @Override public void doAction() throws Exception { + DemandeUIModel model = getModel(); + FaxToMailUIContext context = getContext(); + + Email persistedEmail = context.getEmailService().getEmailById(model.getTopiaId()); + RangeTableModel rtm = (RangeTableModel) getUI().getRangeTable().getModel(); List<RangeRowModel> rows = rtm.getRows(); - Map<String, RangeRow> rangeRowsById = Maps.uniqueIndex(getModel().getRangeRow(), TopiaEntities.getTopiaIdFunction()); + Map<String, RangeRow> rangeRowsById = Maps.uniqueIndex(model.getRangeRow(), TopiaEntities.getTopiaIdFunction()); + for (RangeRowModel rangeRowModel : rows) { - RangeRow rangeRow = rangeRowsById.get(rangeRowModel.getTopiaId()); - if (rangeRow == null) { - getModel().addRangeRow(rangeRowModel.toEntity()); - } else { - rangeRowModel.toEntity(rangeRow); + if (rangeRowModel.isValid()) { + RangeRow rangeRow = rangeRowsById.get(rangeRowModel.getTopiaId()); + if (rangeRow == null) { + model.addRangeRow(rangeRowModel.toEntity()); + } else { + rangeRowModel.toEntity(rangeRow); + } } } - FaxToMailUser currentUser = getContext().getCurrentUser(); - Email currentEmail = getContext().getCurrentEmail(); - Email email = getModel().toEntity(currentEmail); - getContext().getEmailService().saveEmail(email, currentUser); + FaxToMailUser currentUser = context.getCurrentUser(); + Email email = model.toEntity(persistedEmail); + + context.getEmailService().saveEmail(email, currentUser); } } Modified: 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/SearchAction.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SearchAction.java 2014-03-12 18:14:43 UTC (rev 18) @@ -1,10 +1,12 @@ 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.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.Collection; import java.util.List; @@ -21,7 +23,13 @@ @Override public void doAction() throws Exception { Email email = getModel().toEntity(); - List<Email> result = getContext().getEmailService().search(email); + List<Email> emails = getContext().getEmailService().search(email); + List<DemandeUIModel> result = new ArrayList<>(); + for (Email mail : emails) { + DemandeUIModel demand = new DemandeUIModel(); + demand.fromEntity(email); + result.add(demand); + } getModel().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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-03-12 18:14:43 UTC (rev 18) @@ -26,6 +26,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; 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.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import javax.swing.*; @@ -51,13 +52,11 @@ public void postSuccessAction() { super.postSuccessAction(); - Email currentEmail = getContext().getCurrentEmail(); + DemandeUIModel currentEmail = getContext().getCurrentEmail(); FaxToMailUser takenBy = currentEmail.getTakenBy(); FaxToMailUser currentUser = getContext().getCurrentUser(); if (takenBy != null && !currentUser.equals(takenBy)) { -// displayWarningMessage(t("faxtomail.alert.alreadyTakenBy.title"), -// t("faxtomail.alert.alreadyTakenBy.message", decorate(takenBy))); String htmlMessage = String.format( AbstractApplicationUIHandler.CONFIRMATION_FORMAT, t("faxtomail.alert.alreadyTakenBy.message", decorate(takenBy)), @@ -79,7 +78,7 @@ break; case JOptionPane.YES_OPTION: - getContext().getEmailService().takeEmail(currentEmail, currentUser); + getContext().getEmailService().takeEmail(currentEmail.getTopiaId(), currentUser); // TODO kmorin 201410305 how to update on screen break; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -29,6 +29,7 @@ import com.franciaflex.faxtomail.ui.swing.content.config.FaxToMailConfigUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; 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.search.SearchUI; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; @@ -338,7 +339,7 @@ case DEMANDE: screenUI = new DemandeUI(ui); - Email currentEmail = getContext().getCurrentEmail(); + DemandeUIModel currentEmail = getContext().getCurrentEmail(); screenTitle = currentEmail.getObject(); icon = JAXXWidgetUtil.createActionIcon("email"); rightDecoration = ((DemandeUI) screenUI).getTopToolBar(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUI.css =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUI.css 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUI.css 2014-03-12 18:14:43 UTC (rev 18) @@ -84,18 +84,17 @@ actionIcon: reply; text: "faxtomail.demandeList.action.reply"; toolTipText: "faxtomail.demandeList.action.reply.tip"; - enabled: {model.isReplyEnabled()}; + enabled: { model.isReplyEnabled() }; } #addAttachmentMenu { actionIcon: attachment; text: "faxtomail.demandeList.action.attachment"; toolTipText: "faxtomail.demandeList.action.attachment.tip"; - enabled: {model.isAddAttachmentEnabled()}; + enabled: { model.isAddAttachmentEnabled() }; } #archiveMenu { text: "faxtomail.demandeList.action.archive"; toolTipText: "faxtomail.demandeList.action.archive.tip"; - enabled: {model.isArchiveEnabled()}; } \ No newline at end of file Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -103,7 +103,13 @@ MailFolder folder = (MailFolder) evt.getNewValue(); List<Email> emails = getContext().getEmailService().getEmailForFolder(folder); log.info(emails.size() + " emails in folder " + folder.getName()); - model.setEmails(emails); + List<DemandeUIModel> demands = new ArrayList<DemandeUIModel>(); + for (Email email : emails) { + DemandeUIModel demand = new DemandeUIModel(); + demand.fromEntity(email); + demands.add(demand); + } + model.setEmails(demands); } }); @@ -117,18 +123,24 @@ // init table final JXTable dataTable = getUI().getDataTable(); - final AbstractApplicationTableModel<Email> tableModel = initDemandeTable(dataTable); + final AbstractApplicationTableModel<DemandeUIModel> tableModel = initDemandeTable(dataTable); getModel().addPropertyChangeListener(DemandeListUIModel.PROPERTY_EMAILS, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - List<Email> emails = (List<Email>) evt.getNewValue(); + List<DemandeUIModel> emails = (List<DemandeUIModel>) evt.getNewValue(); tableModel.setRows(emails); - int[] quantities = FaxToMailUIUtil.computeQuantities(emails); + int pfNb = 0; + int savNb = 0; + for (DemandeUIModel email : emails) { + pfNb += email.getPfNb(); + savNb += email.getSavNb(); + } - getModel().setPfNb(quantities[0]); - getModel().setSavNb(quantities[1]); + DemandeListUIModel model = getModel(); + model.setPfNb(pfNb); + model.setSavNb(savNb); } }); @@ -144,7 +156,7 @@ getModel().setSelectedFolder(folder); getContext().setCurrentMailFolder(folder); - Email currentEmail = getContext().getCurrentEmail(); + DemandeUIModel currentEmail = getContext().getCurrentEmail(); if (currentEmail != null) { int row = tableModel.getRowIndex(currentEmail); if (row > 0) { @@ -155,7 +167,7 @@ }); MailFolder currentMailFolder = getContext().getCurrentMailFolder(); - Email currentEmail = getContext().getCurrentEmail(); + DemandeUIModel currentEmail = getContext().getCurrentEmail(); if (currentMailFolder == null && currentEmail != null) { currentMailFolder = currentEmail.getMailFolder(); @@ -218,10 +230,34 @@ super.beforeOpenPopup(rowIndex, columnIndex); int selectedRowCount = getUI().getDataTable().getSelectedRowCount(); - getModel().setAddAttachmentEnabled(selectedRowCount == 1); - getModel().setReplyEnabled(selectedRowCount == 1); + log.info(selectedRowCount == 1); + + DemandeListUIModel model = getModel(); + model.setAddAttachmentEnabled(selectedRowCount == 1); + model.setReplyEnabled(selectedRowCount == 1); } + @Override + public void autoSelectRowInTable(MouseEvent e, JPopupMenu popup) { + boolean rightClick = SwingUtilities.isRightMouseButton(e); + if (rightClick) { + // get the coordinates of the mouse click + Point p = e.getPoint(); + + JXTable source = (JXTable) e.getSource(); + + int[] selectedRows = source.getSelectedRows(); + + // get the row index at this point + int rowIndex = source.rowAtPoint(p); + if (rowIndex == -1 || !ArrayUtils.contains(selectedRows, rowIndex)) { + source.clearSelection(); + } + } + + super.autoSelectRowInTable(e, popup); + } + public void autoSelectNodeInTree(MouseEvent e, JPopupMenu popup) { boolean rightClick = SwingUtilities.isRightMouseButton(e); @@ -239,7 +275,7 @@ // select row (could empty selection) if (rowIndex == -1) { - source.clearSelection(); + source.clearSelection(); } else { // set selection source.setSelectionRow(rowIndex); @@ -260,23 +296,24 @@ FaxToMailUser currentUser = getContext().getCurrentUser(); Date now = new Date(); - Email email = new EmailImpl(); - + List<History> histories = new ArrayList<History>(); + DemandeUIModel email = new DemandeUIModel(); History history = new HistoryImpl(); history.setFaxToMailUser(currentUser); history.setType(HistoryType.CREATION); history.setModificationDate(now); - email.addHistory(history); + histories.add(history); history = new HistoryImpl(); history.setFaxToMailUser(currentUser); history.setType(HistoryType.OPENING); history.setModificationDate(now); - email.addHistory(history); + histories.add(history); email.setMailFolder(getModel().getSelectedFolder()); email.setReceptionDate(now); email.setTakenBy(currentUser); + email.setHistory(histories); openDemand(email); } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -41,10 +41,12 @@ public static final String PROPERTY_SELECTED_FOLDER = "selectedFolder"; public static final String PROPERTY_PF_NB = "pfNb"; public static final String PROPERTY_SAV_NB = "savNb"; + public static final String PROPERTY_REPLY_ENABLED = "replyEnabled"; + public static final String PROPERTY_ADD_ATTACHMENT_ENABLED = "addAttachmentEnabled"; protected List<MailFolder> folders; - protected List<Email> emails; + protected List<DemandeUIModel> emails; protected MailFolder selectedFolder; @@ -52,8 +54,6 @@ protected boolean addAttachmentEnabled; - protected boolean archiveEnabled; - protected int pfNb; protected int savNb; @@ -68,11 +68,11 @@ firePropertyChange(PROPERTY_FOLDERS, oldValue, folders); } - public List<Email> getEmails() { + public List<DemandeUIModel> getEmails() { return emails; } - public void setEmails(List<Email> emails) { + public void setEmails(List<DemandeUIModel> emails) { Object oldValue = getEmailNb(); this.emails = emails; Object newValue = getEmailNb(); @@ -84,9 +84,9 @@ return emails == null ? 0 : emails.size(); } - public void addEmail(Email email) { + public void addEmail(DemandeUIModel email) { if (emails == null) { - emails = new ArrayList<Email>(); + emails = new ArrayList<DemandeUIModel>(); } Object oldValue = getEmailNb(); emails.add(email); @@ -110,7 +110,9 @@ } public void setReplyEnabled(boolean replyEnabled) { + Object oldValue = isReplyEnabled(); this.replyEnabled = replyEnabled; + firePropertyChange(PROPERTY_REPLY_ENABLED, oldValue, replyEnabled); } public boolean isAddAttachmentEnabled() { @@ -118,17 +120,11 @@ } public void setAddAttachmentEnabled(boolean addAttachmentEnabled) { + Object oldValue = isAddAttachmentEnabled(); this.addAttachmentEnabled = addAttachmentEnabled; + firePropertyChange(PROPERTY_ADD_ATTACHMENT_ENABLED, oldValue, addAttachmentEnabled); } - public boolean isArchiveEnabled() { - return archiveEnabled; - } - - public void setArchiveEnabled(boolean archiveEnabled) { - this.archiveEnabled = archiveEnabled; - } - public int getPfNb() { return pfNb; } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.css 2014-03-12 18:14:43 UTC (rev 18) @@ -138,6 +138,10 @@ verticalAlignment: { SwingConstants.TOP }; } +#mailBodyField { + editable: false; +} + #takenByLabel { text: "faxtomail.demande.takenBy.label"; } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -37,8 +37,12 @@ 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.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.MoveToNextEditableCellAction; import org.nuiton.jaxx.application.swing.table.MoveToNextEditableRowAction; import org.nuiton.jaxx.application.swing.table.MoveToPreviousEditableCellAction; @@ -51,7 +55,17 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellEditor; -import java.awt.Dimension; +import javax.swing.text.AbstractDocument; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.LabelView; +import javax.swing.text.StyleConstants; +import javax.swing.text.View; +import javax.swing.text.ViewFactory; +import javax.swing.text.html.HTML; +import javax.swing.text.html.HTMLEditorKit; +import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -59,6 +73,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static org.nuiton.i18n.I18n.t; @@ -85,8 +101,7 @@ super.beforeInit(ui); - DemandeUIModel model = new DemandeUIModel(); - model.fromBean(getContext().getCurrentEmail()); + DemandeUIModel model = getContext().getCurrentEmail(); listModelIsModify(model); this.ui.setContextValue(model); @@ -104,22 +119,26 @@ initBeanFilterableComboBox(ui.getPriorityComboBox(), referentielService.getAllPriority(), model.getPriority()); initBeanFilterableComboBox(ui.getEtatAttenteComboBox(), referentielService.getAllEtatAttente(), model.getEtatAttente()); -// HTMLEditorPane editor = ui.getMessageField(); -// HTMLEditorActionFactory.createFontSizeActionList(); -// HTMLEditorActionFactory.createInlineActionList(); -// HTMLEditorActionFactory.createBlockElementActionList(); + JEditorPane editor = ui.getMailBodyField(); + HTMLEditorKit htmlEditorKit = new HTMLEditorKit(); + editor.setEditorKit(htmlEditorKit); +// create some simple html as a string + String htmlString = "<html>\n" + + "<body>\n" + + "<script>document.getElementById('test').innerHTML = 'chaussette'</script>" + + "<h1 id='test'>Welcome!</h1>\n" + + "<h2>This is an H2 header</h2><br/>" + + "<p>This is some sample text</p>\n" + + "<p><a href=\"http://devdaily.com/blog/\">devdaily blog</a></p>\n" + + "<p><img src=\"http://jarnal.wikispaces.com/space/showlogo/1301230030/logo.png\"/></p>\n" + + "<p><test>ouaf ! une chaussette :P</test></p>\n" + + "</body>\n"; - // create some simple html as a string -// String htmlString = "<html>\n" -// + "<body>\n" -// + "<h1>Welcome!</h1>\n" -// + "<h2>This is an H2 header</h2>\n" -// + "<p>This is some sample text</p>\n" -// + "<p><a href=\"http://devdaily.com/blog/\">devdaily blog</a></p>\n" -// + "</body>\n"; + htmlString = htmlString.replaceAll("<img src=\"(.*?)\"(/>|>.*?</img>)", "[image : $1]"); + htmlString = htmlString.replaceAll("<a href=\"(.*?)\">(.*?)</a>", "[$2 : $1]"); - // create a document, set it on the jeditorpane, then add the html -// editor.setText(htmlString); +// create a document, set it on the jeditorpane, then add the html + editor.setText(htmlString); // init table final JXTable table = ui.getRangeTable(); @@ -140,11 +159,13 @@ null, table); + // init range model final RangeTableModel rangeTableModel = new RangeTableModel(columnModel); List<RangeRowModel> rangeRowModels = new ArrayList<RangeRowModel>(); for (RangeRow rangeRow : model.getRangeRow()) { RangeRowModel rangeRowModel = new RangeRowModel(); rangeRowModel.fromEntity(rangeRow); + rangeRowModel.setValid(isRangeRowValid(rangeRowModel)); rangeRowModels.add(rangeRowModel); } rangeTableModel.setRows(rangeRowModels); @@ -153,14 +174,19 @@ model.setPfNb(quantities[0]); model.setSavNb(quantities[1]); + // add listener to update row validity and quantity totals table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { protected PropertyChangeListener listener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { + + RangeRowModel row = (RangeRowModel) evt.getSource(); + row.setValid(isRangeRowValid(row)); + String propertyName = evt.getPropertyName(); - log.info(propertyName); - if (RangeRow.PROPERTY_PRODUCT_QUANTITY.equals(propertyName) + if (RangeRowModel.PROPERTY_VALID.equals(propertyName) + || RangeRow.PROPERTY_PRODUCT_QUANTITY.equals(propertyName) || RangeRow.PROPERTY_SAV_QUANTITY.equals(propertyName)) { List<RangeRowModel> rangeRows = rangeTableModel.getRows(); @@ -169,6 +195,7 @@ model.setPfNb(quantities[0]); model.setSavNb(quantities[1]); } + } }; @@ -248,6 +275,22 @@ }; table.addKeyListener(keyAdapter); + HighlightPredicate rowIsInvalidPredicate = new HighlightPredicate() { + @Override + public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { + boolean result = false; + if (adapter.isEditable()) { + AbstractApplicationTableModel model = (AbstractApplicationTableModel) table.getModel(); + int viewRow = adapter.row; + int modelRow = adapter.convertRowIndexToModel(viewRow); + RangeRowModel row = (RangeRowModel) model.getEntry(modelRow); + result = !row.isValid(); + } + return result; + } + }; + Color color = new Color(255, 51, 51); + table.addHighlighter(new ColorHighlighter(rowIsInvalidPredicate, color, null, color.darker(), null)); SwingValidator validator = this.ui.getValidator(); listenValidatorValid(validator, model); @@ -289,6 +332,12 @@ return ui.getValidator(); } + protected boolean isRangeRowValid(RangeRowModel rangeRow) { + return (rangeRow.getProductQuantity() != null && rangeRow.getProductQuantity() > 0 + || rangeRow.getSavQuantity() != null && rangeRow.getSavQuantity() > 0) + && rangeRow.getRange() != null; + } + public void transmitDemande() { MailFolderChooserUI dialogContent = new MailFolderChooserUI(ui); dialogContent.setModel(getModel()); 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -43,6 +43,8 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -80,15 +82,55 @@ public DemandeUIModel() { super(fromBeanBinder, toBeanBinder); + addPropertyChangeListener(Email.PROPERTY_HISTORY, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + findFirstOpeningHistory(); + findLastModificationHistory(); + } + }); + + addPropertyChangeListener(Email.PROPERTY_RANGE_ROW, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Collection<RangeRow> rangeRows = (Collection<RangeRow>) evt.getNewValue(); + int pfNb = 0; + int savNb = 0; + if (rangeRows != null) { + for (RangeRow rangeRow : rangeRows) { + Integer productQuantity = rangeRow.getProductQuantity(); + if (productQuantity != null) { + pfNb += productQuantity; + } + + Integer savQuantity = rangeRow.getSavQuantity(); + if (savQuantity != null) { + savNb += savQuantity; + } + } + } + setPfNb(pfNb); + setSavNb(savNb); + } + }); } - @Override - public void fromEntity(Email entity) { - super.fromEntity(entity); - firstOpeningHistory = null; - lastModificationHistory = null; + public Boolean getFax() { + return editObject.getFax(); } + public void setFax(Boolean fax) { + editObject.setFax(fax); + } + + public String getTopiaId() { + return editObject.getTopiaId(); + } + + public void setTopiaId(String id) { + editObject.setTopiaId(id); + } + public void setSender(String sender) { Object oldValue = getSender(); editObject.setSender(sender); @@ -259,9 +301,6 @@ } public History getFirstOpeningHistory() { - if (firstOpeningHistory == null) { - findFirstOpeningHistory(); - } return firstOpeningHistory; } @@ -276,9 +315,6 @@ } public History getLastModificationHistory() { - if (lastModificationHistory == null) { - findLastModificationHistory(); - } return lastModificationHistory; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeRowModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeRowModel.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeRowModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -41,6 +41,9 @@ } public void setProductQuantity(Integer productQuantity) { + if (productQuantity == null) { + productQuantity = 0; + } Object oldValue = getProductQuantity(); editObject.setProductQuantity(productQuantity); firePropertyChange(RangeRow.PROPERTY_PRODUCT_QUANTITY, oldValue, productQuantity); @@ -51,6 +54,9 @@ } public void setSavQuantity(Integer savQuantity) { + if (savQuantity == null) { + savQuantity = 0; + } Object oldValue = getSavQuantity(); editObject.setSavQuantity(savQuantity); firePropertyChange(RangeRow.PROPERTY_SAV_QUANTITY, oldValue, savQuantity); @@ -82,4 +88,5 @@ protected RangeRow newEntity() { return new RangeRowImpl(); } + } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeTableModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeTableModel.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/RangeTableModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -21,22 +21,22 @@ public static final ColumnIdentifier<RangeRow> RANGE_COLUMN = ColumnIdentifier.newId( RangeRow.PROPERTY_RANGE, n("faxtomail.rangeRows.table.header.range"), - n("faxtomail.rangeRows.table.header.range")); + n("faxtomail.rangeRows.table.header.range.tip")); public static final ColumnIdentifier<RangeRow> COMMAND_NUMBER_COLUMN = ColumnIdentifier.newId( RangeRow.PROPERTY_COMMAND_NUMBER, - n("faxtomail.rangeRows.table.header.command_number"), - n("faxtomail.rangeRows.table.header.command_number")); + n("faxtomail.rangeRows.table.header.commandNumber"), + n("faxtomail.rangeRows.table.header.commandNumber.tip")); public static final ColumnIdentifier<RangeRow> PRODUCT_QUANTITY_COLUMN = ColumnIdentifier.newId( RangeRow.PROPERTY_PRODUCT_QUANTITY, - n("faxtomail.rangeRows.table.header.product_column"), - n("faxtomail.rangeRows.table.header.product_column")); + n("faxtomail.rangeRows.table.header.productColumn"), + n("faxtomail.rangeRows.table.header.productColumn.tip")); public static final ColumnIdentifier<RangeRow> SAV_QUANTITY_COLUMN = ColumnIdentifier.newId( RangeRow.PROPERTY_SAV_QUANTITY, - n("faxtomail.rangeRows.table.header.sav_quantity"), - n("faxtomail.rangeRows.table.header.sav_quantity")); + n("faxtomail.rangeRows.table.header.savQuantity"), + n("faxtomail.rangeRows.table.header.savQuantity.tip")); public RangeTableModel(TableColumnModelExt columnModel) { super(columnModel, true, true); @@ -45,6 +45,11 @@ @Override public RangeRowModel createNewRow() { - return new RangeRowModel(); + RangeRowModel row = new RangeRowModel(); + row.setProductQuantity(0); + row.setSavQuantity(0); + row.setValid(false); + return row; } + } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -27,6 +27,7 @@ import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeAction; import com.franciaflex.faxtomail.ui.swing.actions.ShowDemandeListAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailDemandListHandler; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; @@ -122,12 +123,12 @@ null); JXTable dataTable = getUI().getDataTable(); - final AbstractApplicationTableModel<Email> tableModel = initDemandeTable(dataTable); + final AbstractApplicationTableModel<DemandeUIModel> tableModel = initDemandeTable(dataTable); getModel().addPropertyChangeListener(SearchUIModel.PROPERTY_RESULTS, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - List<Email> emails = (List<Email>) evt.getNewValue(); + List<DemandeUIModel> emails = (List<DemandeUIModel>) evt.getNewValue(); tableModel.setRows(emails); showInformationMessage(t("faxtomail.search.resultNb", emails.size())); } @@ -171,7 +172,7 @@ JXTable dataTable = ui.getDataTable(); int rowIndex = dataTable.getSelectedRow(); rowIndex = dataTable.convertRowIndexToModel(rowIndex); - Email selectedEmail = ((DemandeTableModel) dataTable.getModel()).getEntry(rowIndex); + DemandeUIModel selectedEmail = ((DemandeTableModel) dataTable.getModel()).getEntry(rowIndex); getContext().setCurrentEmail(selectedEmail); getContext().setCurrentMailFolder(selectedEmail.getMailFolder()); getContext().getActionEngine().runAction(new ShowDemandeListAction(getContext().getMainUI().getHandler())); 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/search/SearchUIModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -34,6 +34,7 @@ import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.persistence.entities.Priority; import com.franciaflex.faxtomail.persistence.entities.RangeRow; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailBeanUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -69,7 +70,7 @@ protected Date minPrintingDate; protected Date maxPrintingDate; - protected List<Email> results; + protected List<DemandeUIModel> results; protected static Binder<SearchUIModel, Email> toBeanBinder = BinderFactory.newBinder(SearchUIModel.class, @@ -253,11 +254,11 @@ this.maxPrintingDate = maxPrintingDate; } - public List<Email> getResults() { + public List<DemandeUIModel> getResults() { return results; } - public void setResults(List<Email> results) { + public void setResults(List<DemandeUIModel> results) { this.results = results; firePropertyChanged(PROPERTY_RESULTS, null, results); } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailDemandListHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -5,10 +5,17 @@ import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.HasLabel; import com.franciaflex.faxtomail.persistence.entities.Priority; +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.util.attachment.AttachmentCellEditor; import com.franciaflex.faxtomail.ui.swing.util.attachment.AttachmentCellRenderer; +import com.google.common.base.Function; +import jaxx.runtime.swing.renderer.DecoratorTableCellRenderer; import org.apache.commons.lang3.StringUtils; +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; @@ -17,13 +24,18 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import javax.swing.*; import javax.swing.event.ChangeListener; +import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collection; import java.util.Date; +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -31,7 +43,9 @@ */ public abstract class AbstractFaxToMailDemandListHandler<M, UI extends FaxToMailUI<M, ?>> extends AbstractFaxToMailUIHandler<M, UI> { - public AbstractApplicationTableModel<Email> initDemandeTable(JXTable table) { + private static final Log log = LogFactory.getLog(AbstractFaxToMailDemandListHandler.class); + + public AbstractApplicationTableModel<DemandeUIModel> initDemandeTable(JXTable table) { TableColumnModelExt columnModel = new DefaultTableColumnModelExt(); Company franciaflex = getContext().getCurrentCompany(); @@ -48,6 +62,8 @@ Email.PROPERTY_RECIPIENT, Email.PROPERTY_DEMAND_STATUS, Email.PROPERTY_ETAT_ATTENTE, + DemandeUIModel.PROPERTY_PF_NB, + DemandeUIModel.PROPERTY_SAV_NB, Email.PROPERTY_ATTACHMENT }, ','); } @@ -73,6 +89,23 @@ tableCellRenderer = newTableCellRender(Date.class); break; + case DemandeUIModel.PROPERTY_PF_NB: + tableCellRenderer = new QuantityTableCellRenderer(new Function<RangeRow, Integer>() { + @Override + public Integer apply(RangeRow input) { + return input.getProductQuantity(); + } + }); + break; + case DemandeUIModel.PROPERTY_SAV_NB: + tableCellRenderer = new QuantityTableCellRenderer(new Function<RangeRow, Integer>() { + @Override + public Integer apply(RangeRow input) { + return input.getSavQuantity(); + } + }); + break; + case Email.PROPERTY_DEMAND_STATUS: case Email.PROPERTY_DEMAND_TYPE: case Email.PROPERTY_ETAT_ATTENTE: @@ -94,7 +127,7 @@ } } - final AbstractApplicationTableModel<Email> tableModel = new DemandeTableModel(columnModel); + final AbstractApplicationTableModel<DemandeUIModel> tableModel = new DemandeTableModel(columnModel); table.setModel(tableModel); table.setColumnModel(columnModel); table.getTableHeader().setReorderingAllowed(false); @@ -104,7 +137,7 @@ public Component highlight(Component renderer, ComponentAdapter adapter) { int viewRow = adapter.row; int modelRow = adapter.convertRowIndexToModel(viewRow); - Email row = tableModel.getEntry(modelRow); + DemandeUIModel row = tableModel.getEntry(modelRow); boolean highlight = row.getTakenBy() == null; if (highlight) { Font font = renderer.getFont(); @@ -135,8 +168,12 @@ int rowIndex = table.getSelectedRow(); rowIndex = table.convertRowIndexToModel(rowIndex); - Email selectedEmail = tableModel.getEntry(rowIndex); - selectedEmail = getContext().getEmailService().addToOpeningHistory(selectedEmail, getContext().getCurrentUser(), new Date()); + DemandeUIModel selectedEmail = tableModel.getEntry(rowIndex); + FaxToMailUIContext context = getContext(); + Email email = context.getEmailService().addToOpeningHistory(selectedEmail.getTopiaId(), + context.getCurrentUser(), + new Date()); + selectedEmail.fromEntity(email); openDemand(selectedEmail); } } @@ -145,8 +182,45 @@ return tableModel; } - protected void openDemand(Email selectedEmail) { - getContext().setCurrentEmail(selectedEmail); - getContext().getActionEngine().runAction(new ShowDemandeAction(getContext().getMainUI().getHandler())); + protected void openDemand(DemandeUIModel selectedEmail) { + FaxToMailUIContext context = getContext(); + context.setCurrentEmail(selectedEmail); + context.getActionEngine().runAction(new ShowDemandeAction(context.getMainUI().getHandler())); } + + public class QuantityTableCellRenderer extends DefaultTableCellRenderer { + + protected Function<RangeRow, Integer> getQuantityFunction; + + public QuantityTableCellRenderer(Function<RangeRow, Integer> getQuantityFunction) { + this.getQuantityFunction = getQuantityFunction; + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasfocus, int row, int column) { + super.getTableCellRendererComponent(table, value, isSelected, hasfocus, row, column); + + AbstractApplicationTableModel<DemandeUIModel> tableModel = (AbstractApplicationTableModel<DemandeUIModel>) table.getModel(); + int rowInModel = table.convertRowIndexToModel(row); + DemandeUIModel demande = tableModel.getEntry(rowInModel); + + String tooltipText = null; + + List<String> ranges = new ArrayList<String>(); + Collection<RangeRow> rangeRows = demande.getRangeRow(); + for (RangeRow rangeRow : rangeRows) { + Integer qty = getQuantityFunction.apply(rangeRow); + if (qty != null && qty > 0) { + ranges.add(rangeRow.getRange().getLabel() + " : " + qty); + } + } + + if (!ranges.isEmpty()) { + tooltipText = "<html><body>" + StringUtils.join(ranges, "<br/>") + "</body></html>"; + } + setToolTipText(tooltipText); + + return this; + } + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/DemandeTableModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -24,6 +24,7 @@ import com.franciaflex.faxtomail.persistence.entities.Email; import com.franciaflex.faxtomail.persistence.entities.EmailImpl; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.table.TableColumnModelExt; @@ -41,7 +42,7 @@ * @author kmorin <kmorin@codelutin.com> * @since x.x */ -public class DemandeTableModel extends AbstractApplicationTableModel<Email> { +public class DemandeTableModel extends AbstractApplicationTableModel<DemandeUIModel> { private static final Log log = LogFactory.getLog(DemandeTableModel.class); @@ -107,14 +108,8 @@ n("faxtomail.demandeList.table.header.user"), n("faxtomail.demandeList.table.header.user.tip"))); - put(Email.PROPERTY_MAIL_FOLDER, - ColumnIdentifier.<Email>newReadOnlyId( - Email.PROPERTY_MAIL_FOLDER, - n("faxtomail.demandeList.table.header.folder"), - n("faxtomail.demandeList.table.header.folder.tip"))); - put(Email.PROPERTY_PRIORITY, - ColumnIdentifier.<Email>newReadOnlyId( + ColumnIdentifier.<Email>newId( Email.PROPERTY_PRIORITY, n("faxtomail.demandeList.table.header.priority"), n("faxtomail.demandeList.table.header.priority.tip"))); @@ -125,14 +120,20 @@ n("faxtomail.demandeList.table.header.projectReference"), n("faxtomail.demandeList.table.header.projectReference.tip"))); - put(Email.PROPERTY_RANGE_ROW, + put(DemandeUIModel.PROPERTY_PF_NB, ColumnIdentifier.<Email>newReadOnlyId( - Email.PROPERTY_RANGE_ROW, - n("faxtomail.demandeList.table.header.range"), - n("faxtomail.demandeList.table.header.range.tip"))); + DemandeUIModel.PROPERTY_PF_NB, + n("faxtomail.demandeList.table.header.pfNb"), + n("faxtomail.demandeList.table.header.pfNb.tip"))); + put(DemandeUIModel.PROPERTY_SAV_NB, + ColumnIdentifier.<Email>newReadOnlyId( + DemandeUIModel.PROPERTY_SAV_NB, + n("faxtomail.demandeList.table.header.savNb"), + n("faxtomail.demandeList.table.header.savNb.tip"))); + put(Email.PROPERTY_ATTACHMENT, - ColumnIdentifier.<Email>newReadOnlyId( + ColumnIdentifier.<Email>newId( Email.PROPERTY_ATTACHMENT, n("faxtomail.demandeList.table.header.attachment"), n("faxtomail.demandeList.table.header.attachment.tip"))); @@ -147,7 +148,12 @@ } @Override - public Email createNewRow() { - return new EmailImpl(); + public DemandeUIModel createNewRow() { + return new DemandeUIModel(); } + + @Override + protected void onRowsChanged(List<DemandeUIModel> data) { + super.onRowsChanged(data); + } } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/FaxToMailUIUtil.java 2014-03-12 18:14:43 UTC (rev 18) @@ -28,6 +28,7 @@ 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; @@ -133,41 +134,20 @@ return result; } - public static int[] computeQuantities(List<Email> emails) { - int pfNb = 0; - int savNb = 0; - for (Email email : emails) { - Collection<RangeRow> rangeRows = email.getRangeRow(); - if (rangeRows != null) { - for (RangeRow rangeRow : rangeRows) { - Integer productQuantity = rangeRow.getProductQuantity(); - if (productQuantity != null) { - pfNb += productQuantity; - } - - Integer savQuantity = rangeRow.getSavQuantity(); - if (savQuantity != null) { - savNb += savQuantity; - } - } - } - } - return new int[] { pfNb, savNb }; - } - - //TODO kmorin 20140306 remove this public static int[] computeQuantities(Collection<RangeRowModel> rangeRows) { int pfNb = 0; int savNb = 0; for (RangeRowModel rangeRow : rangeRows) { - Integer productQuantity = rangeRow.getProductQuantity(); - if (productQuantity != null) { - pfNb += productQuantity; - } + if (rangeRow.isValid()) { + Integer productQuantity = rangeRow.getProductQuantity(); + if (productQuantity != null) { + pfNb += productQuantity; + } - Integer savQuantity = rangeRow.getSavQuantity(); - if (savQuantity != null) { - savNb += savQuantity; + Integer savQuantity = rangeRow.getSavQuantity(); + if (savQuantity != null) { + savNb += savQuantity; + } } } return new int[] { pfNb, savNb }; Modified: 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/util/history/HistoryListUIHandler.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIHandler.java 2014-03-12 18:14:43 UTC (rev 18) @@ -2,6 +2,7 @@ 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.AbstractFaxToMailUIHandler; import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupHandler; import jaxx.runtime.JAXXUtil; @@ -25,7 +26,7 @@ public void beforeInit(HistoryListUI ui) { super.beforeInit(ui); - Email currentEmail = getContext().getCurrentEmail(); + DemandeUIModel currentEmail = getContext().getCurrentEmail(); HistoryListUIModel model = new HistoryListUIModel(); model.fromBean(currentEmail); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIModel.java 2014-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/history/HistoryListUIModel.java 2014-03-12 18:14:43 UTC (rev 18) @@ -3,6 +3,7 @@ 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; @@ -13,14 +14,14 @@ * @author Kevin Morin (Code Lutin) * @since x.x */ -public class HistoryListUIModel extends AbstractFaxToMailBeanUIModel<Email, HistoryListUIModel> { +public class HistoryListUIModel extends AbstractFaxToMailBeanUIModel<DemandeUIModel, HistoryListUIModel> { - protected static Binder<HistoryListUIModel, Email> toBeanBinder = + protected static Binder<HistoryListUIModel, DemandeUIModel> toBeanBinder = BinderFactory.newBinder(HistoryListUIModel.class, - Email.class); + DemandeUIModel.class); - protected static Binder<Email, HistoryListUIModel> fromBeanBinder = - BinderFactory.newBinder(Email.class, HistoryListUIModel.class); + protected static Binder<DemandeUIModel, HistoryListUIModel> fromBeanBinder = + BinderFactory.newBinder(DemandeUIModel.class, HistoryListUIModel.class); protected final Email editObject = new EmailImpl(); @@ -49,7 +50,7 @@ } @Override - protected Email newEntity() { - return new EmailImpl(); + protected DemandeUIModel newEntity() { + return new DemandeUIModel(); } } 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_en_GB.properties 2014-03-12 18:14:43 UTC (rev 18) @@ -175,6 +175,8 @@ faxtomail.demandeList.table.header.folder.tip= faxtomail.demandeList.table.header.object= faxtomail.demandeList.table.header.object.tip= +faxtomail.demandeList.table.header.pfNb= +faxtomail.demandeList.table.header.pfNb.tip= faxtomail.demandeList.table.header.priority= faxtomail.demandeList.table.header.priority.tip= faxtomail.demandeList.table.header.projectReference= @@ -187,6 +189,8 @@ faxtomail.demandeList.table.header.receptionEmailAddress.tip= faxtomail.demandeList.table.header.recipient= faxtomail.demandeList.table.header.recipient.tip= +faxtomail.demandeList.table.header.savNb= +faxtomail.demandeList.table.header.savNb.tip= faxtomail.demandeList.table.header.savNumber= faxtomail.demandeList.table.header.sender= faxtomail.demandeList.table.header.sender.tip= @@ -239,9 +243,16 @@ faxtomail.property.set.error= faxtomail.quantitiesByRange.button.text= faxtomail.quantitiesByRange.title= +faxtomail.rangeRows.table.header.commandNumber= +faxtomail.rangeRows.table.header.commandNumber.tip= faxtomail.rangeRows.table.header.command_number= +faxtomail.rangeRows.table.header.productColumn= +faxtomail.rangeRows.table.header.productColumn.tip= faxtomail.rangeRows.table.header.product_column= faxtomail.rangeRows.table.header.range= +faxtomail.rangeRows.table.header.range.tip= +faxtomail.rangeRows.table.header.savQuantity= +faxtomail.rangeRows.table.header.savQuantity.tip= faxtomail.rangeRows.table.header.sav_quantity= faxtomail.reply.action.cancel= faxtomail.reply.action.cancel.mnemonic= 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-03-10 09:32:30 UTC (rev 17) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-03-12 18:14:43 UTC (rev 18) @@ -79,20 +79,20 @@ faxtomail.demandeList.table.header.client.tip=Client faxtomail.demandeList.table.header.ediCodeNumber=Code EDI faxtomail.demandeList.table.header.ediCodeNumber.tip=Code EDI -faxtomail.demandeList.table.header.folder=Dossier -faxtomail.demandeList.table.header.folder.tip=Dossier faxtomail.demandeList.table.header.object=Objet faxtomail.demandeList.table.header.object.tip=Objet +faxtomail.demandeList.table.header.pfNb=Qté produits +faxtomail.demandeList.table.header.pfNb.tip=Quantité de produits faxtomail.demandeList.table.header.priority=P faxtomail.demandeList.table.header.priority.tip=Priorité faxtomail.demandeList.table.header.projectReference=Ref chantier faxtomail.demandeList.table.header.projectReference.tip=Référence chantier -faxtomail.demandeList.table.header.range=Gamme -faxtomail.demandeList.table.header.range.tip=Gamme faxtomail.demandeList.table.header.receptionDate=Date de réception faxtomail.demandeList.table.header.receptionDate.tip=Date de réception faxtomail.demandeList.table.header.recipient=Destinataire faxtomail.demandeList.table.header.recipient.tip=Addresse email ou numéro de fax du destinataire +faxtomail.demandeList.table.header.savNb=Qté SAV +faxtomail.demandeList.table.header.savNb.tip=Quantité de SAV faxtomail.demandeList.table.header.sender=Émetteur faxtomail.demandeList.table.header.sender.tip=Addresse email ou numéro de fax de l'émetteur faxtomail.demandeList.table.header.status=Statut @@ -127,10 +127,14 @@ faxtomail.main.title.nodb= faxtomail.quantitiesByRange.button.text=OK faxtomail.quantitiesByRange.title=Quantités par gamme -faxtomail.rangeRows.table.header.command_number=N° commande / devis -faxtomail.rangeRows.table.header.product_column=Qté produits +faxtomail.rangeRows.table.header.commandNumber=N° commande / devis +faxtomail.rangeRows.table.header.commandNumber.tip=N° commande / devis +faxtomail.rangeRows.table.header.productColumn=Qté produits +faxtomail.rangeRows.table.header.productColumn.tip=Quantité de produits faxtomail.rangeRows.table.header.range=Gamme -faxtomail.rangeRows.table.header.sav_quantity=Qté SAV +faxtomail.rangeRows.table.header.range.tip=Gamme +faxtomail.rangeRows.table.header.savQuantity=Qté SAV +faxtomail.rangeRows.table.header.savQuantity.tip=Quantité de SAV faxtomail.reply.action.cancel=Annuler faxtomail.reply.action.cancel.tip=Annuler et fermer la popup faxtomail.reply.action.validate=Valider
participants (1)
-
kmorin@users.forge.codelutin.com