r714 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail faxtomail-service/src/main/java/com/franciaflex/faxtomail/services faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ldap 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/franciafle
Author: kmorin Date: 2014-12-03 08:32:52 +0000 (Wed, 03 Dec 2014) New Revision: 714 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/714 Log: refs #6234 Ajouter une sorte de carnet des adresses email du ldap dans l'?\195?\169cran de r?\195?\169ponse fixes #6235 Ajouter un cache sur les emails des dossiers Added: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ldap/Contact.java Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/DecoratorServiceImpl.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.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/ArchiveFromListAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java 2014-12-03 08:32:52 UTC (rev 714) @@ -191,6 +191,11 @@ return isDevMode; } + public boolean isUseFolderCache() { + boolean isUseFolderCache = applicationConfig.getOptionAsBoolean(FaxToMailConfigurationOption.USE_FOLDER_CACHE.getKey()); + return isUseFolderCache; + } + /** * Get sub properties containing all options starting with "hibernate" and "topia". * Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java =================================================================== --- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java 2014-12-03 08:32:52 UTC (rev 714) @@ -89,6 +89,11 @@ "Mode développement, court-circuite l'envoi de mail", "false", Boolean.class), + USE_FOLDER_CACHE( + "faxtomail.useFolderCache", + "Utilisation du cache des emails des dossiers, pour éviter de recharger les éléments quand on revient sur un dossier", + "false", Boolean.class), + LOG_CONFIGURATION_FILE( "logConfigurationFile", "Chemin vers le fichier de configuration des journaux", Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/DecoratorServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/DecoratorServiceImpl.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/DecoratorServiceImpl.java 2014-12-03 08:32:52 UTC (rev 714) @@ -27,6 +27,7 @@ import java.text.DateFormat; import java.util.Date; +import com.franciaflex.faxtomail.services.service.ldap.Contact; import org.nuiton.decorator.Decorator; import org.nuiton.decorator.DecoratorProvider; @@ -112,6 +113,7 @@ return DateFormat.getDateInstance(DateFormat.MEDIUM).format(bean); } }); + registerMultiJXPathDecorator(Contact.class, "${name}$s <${email}$s>", SEPARATOR, " - "); registerMultiJXPathDecorator(HasLabel.class, "${label}$s", SEPARATOR, " - "); registerDecorator(new Decorator<Attachment>(Attachment.class) { private static final long serialVersionUID = 1L; Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-12-03 08:32:52 UTC (rev 714) @@ -27,7 +27,10 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.services.FaxToMailService; import com.franciaflex.faxtomail.services.service.ldap.AuthenticationException; +import com.franciaflex.faxtomail.services.service.ldap.Contact; +import java.util.List; + /** * @author Kevin Morin (Code Lutin) */ @@ -39,4 +42,6 @@ FaxToMailUser authenticateUser(String login, String password) throws AuthenticationException; FaxToMailUser getUserFromPrincipal(String login) throws AuthenticationException; + + List<Contact> getUserAndEmails(); } Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java 2014-12-03 08:32:52 UTC (rev 714) @@ -24,11 +24,13 @@ * #L% */ +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import com.franciaflex.faxtomail.services.service.ldap.Contact; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -392,4 +394,54 @@ return user; } + + public List<Contact> getUserAndEmails() { + List<Contact> result = new ArrayList<>(); + LDAPConnection connection = null; + try { + connection = new LDAPConnection(getApplicationConfig().getLdapHost(), + getApplicationConfig().getLdapPort(), + getApplicationConfig().getLdapUser(), + getApplicationConfig().getLdapPassword()); + if (connection.isConnected()) { + + FaxToMailUserTopiaDao faxtomailUserDao = getPersistenceContext().getFaxToMailUserDao(); + FaxToMailUserGroupTopiaDao faxtomailUserGroupDao = getPersistenceContext().getFaxToMailUserGroupDao(); + + // get all users ( + String usersBaseDN = "OU=Mac-Groupe,DC=mac-groupe,DC=net"; + String usersFilter = "(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=mac-groupe,DC=net)"; + + // on recupere d'abord les organisationUnit pour fractionner les requettes + // sinon au dela de 1000 resultats ca veux plus + SearchResult usersResult = connection.search(usersBaseDN, SearchScope.SUB, "(objectClass=organizationalUnit)"); + List<SearchResultEntry> unitEntries = usersResult.getSearchEntries(); + for (SearchResultEntry unitEntry : unitEntries) { + if (log.isDebugEnabled()) { + log.debug("Search for unit " + unitEntry.getDN()); + } + SearchResult userResult = connection.search(unitEntry.getDN(), SearchScope.ONE, usersFilter); + + List<SearchResultEntry> userEntries = userResult.getSearchEntries(); + for (SearchResultEntry userEntry : userEntries) { + + String name = userEntry.getAttributeValue("displayname"); + String email = userEntry.getAttributeValue("mail"); + if (StringUtils.isNotBlank(email)) { + result.add(new Contact(name, email)); + } + } + } + } + + } catch (LDAPException ex) { + throw new RuntimeException("Can't connect to ldap", ex); + } finally { + if (connection != null) { + connection.close(); + } + } + + return result; + } } Added: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ldap/Contact.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ldap/Contact.java (rev 0) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/ldap/Contact.java 2014-12-03 08:32:52 UTC (rev 714) @@ -0,0 +1,41 @@ +package com.franciaflex.faxtomail.services.service.ldap; + +import org.jdesktop.beans.AbstractBean; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class Contact extends AbstractBean { + + public static final String PROPERTY_NAME = "name"; + public static final String PROPERTY_EMAIL = "email"; + + protected String name; + protected String email; + + public Contact(String name, String email) { + this.name = name; + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + Object oldValue = getName(); + this.name = name; + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + Object oldValue = getEmail(); + this.email = email; + firePropertyChange(PROPERTY_NAME, oldValue, email); + } +} 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-12-03 08:32:52 UTC (rev 714) @@ -30,6 +30,8 @@ import java.io.Closeable; import java.io.File; import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Map; @@ -38,6 +40,8 @@ import javax.swing.JFrame; import javax.swing.JOptionPane; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.services.service.ldap.Contact; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.swing.session.BeanDoubleListState; @@ -92,6 +96,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.nuiton.util.pagination.PaginationParameter; +import org.nuiton.util.pagination.PaginationResult; /** * UI application context. @@ -197,6 +202,11 @@ /** L'email courant (pour quoi faire ?). */ protected DemandeUIModel currentEmail; + //FIXME rustine en attendant de trouver pourquoi ca rame autant + protected boolean useFolderCache; + + protected FolderData currentFolderEmails = new FolderData(); + /** Les dossiers étendus (pour pouvoir les étendres encore au rechargement de l'UI). */ protected List<MailFolder> expandedFolders = new ArrayList<MailFolder>(); @@ -212,6 +222,8 @@ protected List<Priority> priorityCache; /** Range cache. */ protected List<Range> rangeCache; + /** */ + protected List<Contact> contactCache; public static FaxToMailUIContext newContext(FaxToMailConfiguration config) { Preconditions.checkNotNull(config); @@ -245,6 +257,8 @@ topiaApplicationContext = new FaxToMailTopiaApplicationContext(config.getTopiaProperties()); FaxToMailServiceContext serviceContext = newServiceContext(); + useFolderCache = serviceContext.getApplicationConfig().isUseFolderCache(); + InitFaxToMailService initFaxToMailService = serviceContext.getInitFaxToMailService(); initFaxToMailService.init(); @@ -399,6 +413,15 @@ // users UserService userService = serviceContext.getUserService(); setFaxtomailUserCache(userService.getAllActiveUsers()); + + try { + setContactCache(serviceContext.getLdapService().getUserAndEmails()); + + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Error while getting contact from ldap", e); + } + } } /** @@ -726,6 +749,10 @@ this.currentEmail = currentEmail; } + public FolderData getCurrentFolderEmails() { + return currentFolderEmails; + } + public List<MailFolder> getExpandedFolders() { return expandedFolders; } @@ -781,4 +808,55 @@ public void setRangeCache(List<Range> rangeCache) { this.rangeCache = rangeCache; } + + public List<Contact> getContactCache() { + return contactCache; + } + + public void setContactCache(List<Contact> contactCache) { + this.contactCache = contactCache; + } + + public boolean isUseFolderCache() { + return useFolderCache; + } + + public class FolderData { + + protected MailFolder folder; + protected List<DemandeUIModel> demands; + protected PaginationResult<Email> paginationResult; + + public MailFolder getFolder() { + return folder; + } + + public void setFolder(MailFolder folder) { + this.folder = folder; + } + + public List<DemandeUIModel> getDemands() { + return demands; + } + + public void setDemands(List<DemandeUIModel> demands) { + this.demands = new ArrayList<>(demands); + } + + public void removeDemand(DemandeUIModel demand) { + this.demands.remove(demand); + } + + public void removeAllDemands(Collection<DemandeUIModel> demands) { + this.demands.removeAll(demands); + } + + public PaginationResult<Email> getPaginationResult() { + return paginationResult; + } + + public void setPaginationResult(PaginationResult<Email> paginationResult) { + this.paginationResult = paginationResult; + } + } } 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveAction.java 2014-12-03 08:32:52 UTC (rev 714) @@ -103,4 +103,13 @@ super.doAction(); } + + @Override + public void postSuccessAction() { + //FIXME enlever la rustine + if (getContext().isUseFolderCache()) { + getContext().getCurrentFolderEmails().removeDemand(getModel()); + } + super.postSuccessAction(); + } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ArchiveFromListAction.java 2014-12-03 08:32:52 UTC (rev 714) @@ -145,7 +145,12 @@ @Override public void postSuccessAction() { super.postSuccessAction(); - getModel().removeEmails(getModel().getSelectedEmails()); + List<DemandeUIModel> selectedEmails = getModel().getSelectedEmails(); + getModel().removeEmails(selectedEmails); + //FIXME enlever la rustine + if (getContext().isUseFolderCache()) { + getContext().getCurrentFolderEmails().removeAllDemands(selectedEmails); + } getModel().setSelectedEmails(null); } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-12-03 08:32:52 UTC (rev 714) @@ -34,6 +34,7 @@ import com.franciaflex.faxtomail.persistence.entities.WaitingState; import com.franciaflex.faxtomail.persistence.entities.MailField; +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -81,20 +82,31 @@ result = false; } else { - final JXTable dataTable = getUI().getDataTable(); + //FIXME enlever la rustine + FaxToMailUIContext.FolderData currentFolderEmails = getContext().getCurrentFolderEmails(); + if (getContext().isUseFolderCache() && folder.equals(currentFolderEmails.getFolder())) { + model.setEmails(new ArrayList<DemandeUIModel>(currentFolderEmails.getDemands())); + PaginationResult<Email> paginationResult = currentFolderEmails.getPaginationResult(); + model.setPaginationParameter(paginationResult.getCurrentPage()); + model.setPaginationResult(paginationResult); + result = false; - setActionDescription(t("faxtomail.action.loadFolderEmails.tip", folder.getName())); + } else { + final JXTable dataTable = getUI().getDataTable(); - // change name to save the state of the column width for every folder - // (as every folder can have a different header) - getContext().getSwingSession().updateState(); - String columns = handler.populateColumnModel(dataTable, false); - dataTable.setName("dataTable" + columns); - getContext().getSwingSession().add(dataTable, true); + setActionDescription(t("faxtomail.action.loadFolderEmails.tip", folder.getName())); - // fixes #5528 filtre sur les colonnes : il manque l'icone qui indique que la colonne est filtrée - handler.initTableFilter(); - result = true; + // change name to save the state of the column width for every folder + // (as every folder can have a different header) + getContext().getSwingSession().updateState(); + String columns = handler.populateColumnModel(dataTable, false); + dataTable.setName("dataTable" + columns); + getContext().getSwingSession().add(dataTable, true); + + // fixes #5528 filtre sur les colonnes : il manque l'icone qui indique que la colonne est filtrée + handler.initTableFilter(); + result = true; + } } return result; @@ -156,6 +168,14 @@ demands.add(demand); } + //FIXME enlever la rustine + if (getContext().isUseFolderCache()) { + FaxToMailUIContext.FolderData currentFolderEmails = getContext().getCurrentFolderEmails(); + currentFolderEmails.setFolder(folder); + currentFolderEmails.setDemands(demands); + currentFolderEmails.setPaginationResult(paginationResult); + } + model.setEmails(demands); model.setPaginationParameter(paginationResult.getCurrentPage()); model.setPaginationResult(paginationResult); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java 2014-12-03 08:32:52 UTC (rev 714) @@ -58,8 +58,6 @@ @Override public void doAction() throws Exception { - log.info("do reply"); - ReplyFormUIModel model = getModel(); FaxToMailServiceContext serviceContext = getContext().newServiceContext(); EmailService emailService = serviceContext.getEmailService(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-12-03 08:32:52 UTC (rev 714) @@ -118,6 +118,11 @@ @Override public void postSuccessAction() { + //FIXME enlever rustine + if (getContext().isUseFolderCache()) { + getContext().getCurrentFolderEmails().removeAllDemands(getModel().getDemandeUIModels()); + } + super.postSuccessAction(); MailFolderChooserUIHandler handler = getHandler(); 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.css 2014-12-03 08:32:52 UTC (rev 714) @@ -39,6 +39,43 @@ selectedItem: { model.getFrom() }; } +.contact-row { + visible: { !model.isReadonly() }; +} + +#contactLabel { + text: "faxtomail.reply.label.contact"; +} + +#contactField { + showReset: true; + showDecorator: false; + bean: {model}; + property: contact; + selectedItem: { model.getContact() }; +} + +#addToButton { + actionIcon: add; + text: "faxtomail.reply.action.addTo"; + toolTipText: "faxtomail.reply.action.addTo.tip"; + enabled: { model.getContact() != null }; +} + +#addCcButton { + actionIcon: add; + text: "faxtomail.reply.action.addCc"; + toolTipText: "faxtomail.reply.action.addCc.tip"; + enabled: { model.getContact() != null }; +} + +#addCciButton { + actionIcon: add; + text: "faxtomail.reply.action.addCci"; + toolTipText: "faxtomail.reply.action.addCci.tip"; + enabled: { model.getContact() != null }; +} + #toLabel { text: "faxtomail.reply.label.to"; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-12-03 08:32:52 UTC (rev 714) @@ -23,6 +23,7 @@ implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<ReplyFormUIModel, ReplyFormUIHandler>'> <import> + com.franciaflex.faxtomail.services.service.ldap.Contact com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil @@ -31,6 +32,7 @@ java.awt.FlowLayout jaxx.runtime.swing.CardLayout2Ext + jaxx.runtime.swing.editor.bean.BeanFilterableComboBox static org.nuiton.i18n.I18n.t </import> @@ -66,7 +68,7 @@ <cell> <JLabel id="fromLabel"/> </cell> - <cell weightx='1'> + <cell weightx='1' columns="4"> <JPanel id="fromPanel" layout="{ fromPanelLayout }"> <JTextField id="fromField" @@ -79,9 +81,35 @@ </row> <row> <cell> + <JLabel id="contactLabel" styleClass="contact-row"/> + </cell> + <cell weightx='1'> + <BeanFilterableComboBox id="contactField" + constructorParams='this' + genericType="Contact" + styleClass="contact-row"/> + </cell> + <cell> + <JButton id="addToButton" + styleClass="contact-row" + onActionPerformed="handler.addTo()"/> + </cell> + <cell> + <JButton id="addCcButton" + styleClass="contact-row" + onActionPerformed="handler.addCc()"/> + </cell> + <cell> + <JButton id="addCciButton" + styleClass="contact-row" + onActionPerformed="handler.addCci()"/> + </cell> + </row> + <row> + <cell> <JLabel id="toLabel"/> </cell> - <cell weightx='1'> + <cell weightx='1' columns="4"> <JTextField id="toField" onKeyReleased='handler.setText(event, "to")'/> </cell> @@ -90,7 +118,7 @@ <cell> <JLabel id="ccLabel"/> </cell> - <cell weightx='1'> + <cell weightx='1' columns="4"> <JTextField id="ccField" onKeyReleased='handler.setText(event, "cc")'/> </cell> @@ -99,7 +127,7 @@ <cell> <JLabel id="cciLabel"/> </cell> - <cell weightx='1'> + <cell weightx='1' columns="4"> <JTextField id="cciField" onKeyReleased='handler.setText(event, "cci")'/> </cell> @@ -108,7 +136,7 @@ <cell> <JLabel id="subjectLabel"/> </cell> - <cell weightx='1'> + <cell weightx='1' columns="4"> <JTextField id="subjectField" onKeyReleased='handler.setText(event, "subject")'/> </cell> 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-12-03 08:32:52 UTC (rev 714) @@ -41,11 +41,13 @@ import javax.swing.*; +import com.franciaflex.faxtomail.services.service.ldap.Contact; import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.swing.util.Cancelable; @@ -167,6 +169,8 @@ ui.getFromComboBox().setModel(comboBoxModel); model.setSenderAllowedAddresses(replyToAddresses); + initBeanFilterableComboBox(ui.getContactField(), getContext().getContactCache(), null); + } else { model.setFrom(recipient); } @@ -443,4 +447,49 @@ } } + + public void addTo() { + ReplyFormUIModel model = getModel(); + Contact contact = model.getContact(); + if (contact != null) { + String to = model.getTo(); + String email = contact.getEmail(); + if (StringUtils.isNotBlank(to)) { + to += ";" + email; + } else { + to = email; + } + model.setTo(to); + } + } + + public void addCc() { + ReplyFormUIModel model = getModel(); + Contact contact = model.getContact(); + if (contact != null) { + String cc = model.getCc(); + String email = contact.getEmail(); + if (StringUtils.isNotBlank(cc)) { + cc += ";" + email; + } else { + cc = email; + } + model.setCc(cc); + } + } + + public void addCci() { + ReplyFormUIModel model = getModel(); + Contact contact = model.getContact(); + if (contact != null) { + String cci = model.getCci(); + String email = contact.getEmail(); + if (StringUtils.isNotBlank(cci)) { + cci += ";" + email; + } else { + cci = email; + } + model.setCci(cci); + } + } } 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-12-03 08:32:52 UTC (rev 714) @@ -30,6 +30,7 @@ import java.util.List; import java.util.Set; +import com.franciaflex.faxtomail.services.service.ldap.Contact; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; import org.jdesktop.beans.AbstractSerializableBean; @@ -45,6 +46,7 @@ */ public class ReplyFormUIModel extends AbstractSerializableBean { + public static final String PROPERTY_CONTACT = "contact"; public static final String PROPERTY_TO = "to"; public static final String PROPERTY_CC = "cc"; public static final String PROPERTY_CCI = "cci"; @@ -62,6 +64,7 @@ public static final String PROPERTY_EDITABLE = "editable"; public static final String PROPERTY_READ_SENT_DATE = "readSentDate"; + protected Contact contact; protected String to; protected String cc; protected String cci; @@ -96,6 +99,16 @@ copyBinder.copyExcluding(other, this); } + public Contact getContact() { + return contact; + } + + public void setContact(Contact contact) { + Object oldValue = getContact(); + this.contact = contact; + firePropertyChange(PROPERTY_CONTACT, oldValue, contact); + } + public String getTo() { return to; } 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-12-02 18:39:34 UTC (rev 713) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-12-03 08:32:52 UTC (rev 714) @@ -264,6 +264,12 @@ 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.addCc=Copie +faxtomail.reply.action.addCc.tip=Ajouter le contact aux destinataires en copie +faxtomail.reply.action.addCci=Copie cachée +faxtomail.reply.action.addCci.tip=Ajouter le contact aux destinataires en copie cachée +faxtomail.reply.action.addTo=À +faxtomail.reply.action.addTo.tip=Ajouter le contact aux destinataires directs faxtomail.reply.action.cancel=Annuler faxtomail.reply.action.cancel.tip=Annuler et fermer la popup faxtomail.reply.action.close=Fermer @@ -279,6 +285,7 @@ faxtomail.reply.forwardsubject=Tr\: %s faxtomail.reply.label.cc=Copie \: faxtomail.reply.label.cci=Copie cachée \: +faxtomail.reply.label.contact=Contact \: faxtomail.reply.label.from=De \: faxtomail.reply.label.subject=Objet \: faxtomail.reply.label.to=À \:
participants (1)
-
kmorin@users.forge.codelutin.com