Faxtomail-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
August 2014
- 4 participants
- 141 discussions
r527 - in trunk: faxtomail-persistence/src/main/resources faxtomail-service/src/main/resources/db/migration
by echatellier@users.forge.codelutin.com 12 Aug '14
by echatellier@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: echatellier
Date: 2014-08-12 17:01:33 +0200 (Tue, 12 Aug 2014)
New Revision: 527
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/527
Log:
Move index queries to migration script
Added:
trunk/faxtomail-service/src/main/resources/db/migration/V1_0_0_520__add_performance_indexes.sql
Removed:
trunk/faxtomail-persistence/src/main/resources/important-indexes.sql
Deleted: trunk/faxtomail-persistence/src/main/resources/important-indexes.sql
===================================================================
--- trunk/faxtomail-persistence/src/main/resources/important-indexes.sql 2014-08-12 14:40:47 UTC (rev 526)
+++ trunk/faxtomail-persistence/src/main/resources/important-indexes.sql 2014-08-12 15:01:33 UTC (rev 527)
@@ -1,25 +0,0 @@
-CREATE INDEX email_receptionDate_idx ON email (receptionDate ASC);
-CREATE INDEX email_archiveDate_idx ON email (archiveDate NULLS FIRST);
-CREATE INDEX email_mailFolder_idx ON email (mailFolder);
-CREATE INDEX email_demandStatus_idx ON email (demandStatus);
-
-CREATE INDEX email_takenBy_idx ON email(takenBy);
-CREATE INDEX email_client_idx ON email(client);
---CREATE INDEX email_emailGroup_idx ON email(emailGroup);
-CREATE INDEX email_etatAttente_idx ON email(etatAttente);
-CREATE INDEX email_priority_idx ON email(priority);
-CREATE INDEX email_demandType_idx ON email (demandType);
-
-CREATE INDEX demandType_fields_OWNER_idx ON demandType_fields (OWNER);
---CREATE INDEX rangeRow_email_idx ON rangeRow(email);
-CREATE INDEX rangeRow_range_idx ON rangeRow(range);
---CREATE INDEX history_email_idx ON history(email);
-CREATE INDEX history_faxToMailUser_idx ON history(faxToMailUser);
-CREATE INDEX history_fields_OWNER_idx ON history_fields(OWNER);
---CREATE INDEX reply_email_idx ON reply(email);
---CREATE INDEX attachment_email_idx ON attachment(email);
-
-
-CREATE INDEX mailfolder_readrightusers_readRightUsers_idx ON mailfolder_readrightusers(readRightUsers);
-CREATE INDEX mailfolder_readrightgroups_readRightGroups_idx ON mailfolder_readrightgroups(readRightGroups);
-
Added: trunk/faxtomail-service/src/main/resources/db/migration/V1_0_0_520__add_performance_indexes.sql
===================================================================
--- trunk/faxtomail-service/src/main/resources/db/migration/V1_0_0_520__add_performance_indexes.sql (rev 0)
+++ trunk/faxtomail-service/src/main/resources/db/migration/V1_0_0_520__add_performance_indexes.sql 2014-08-12 15:01:33 UTC (rev 527)
@@ -0,0 +1,18 @@
+CREATE INDEX email_receptionDate_idx ON email(receptionDate ASC);
+CREATE INDEX email_archiveDate_idx ON email(archiveDate NULLS FIRST);
+CREATE INDEX email_mailFolder_idx ON email(mailFolder);
+CREATE INDEX email_demandStatus_idx ON email(demandStatus);
+
+CREATE INDEX email_takenBy_idx ON email(takenBy);
+CREATE INDEX email_client_idx ON email(client);
+CREATE INDEX email_etatAttente_idx ON email(etatAttente);
+CREATE INDEX email_priority_idx ON email(priority);
+CREATE INDEX email_demandType_idx ON email(demandType);
+
+CREATE INDEX demandType_fields_OWNER_idx ON demandType_fields(OWNER);
+CREATE INDEX rangeRow_range_idx ON rangeRow(range);
+CREATE INDEX history_faxToMailUser_idx ON history(faxToMailUser);
+CREATE INDEX history_fields_OWNER_idx ON history_fields(OWNER);
+
+CREATE INDEX mailfolder_readrightusers_readRightUsers_idx ON mailfolder_readrightusers(readRightUsers);
+CREATE INDEX mailfolder_readrightgroups_readRightGroups_idx ON mailfolder_readrightgroups(readRightGroups);
1
0
r526 - in trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing: content/reply util
by kmorin@users.forge.codelutin.com 12 Aug '14
by kmorin@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: kmorin
Date: 2014-08-12 16:40:47 +0200 (Tue, 12 Aug 2014)
New Revision: 526
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/526
Log:
fixes #5626 [UI swing] Les bo?\195?\174tes de dialogue ne s'ouvrent pas sur le bon ?\195?\169cran
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/util/AbstractFaxToMailUIHandler.java
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-08-12 14:12:49 UTC (rev 525)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUI.jaxx 2014-08-12 14:40:47 UTC (rev 526)
@@ -39,10 +39,6 @@
public ReplyFormUI(FaxToMailUI parentUI) {
FaxToMailUIUtil.setParentUI(this, parentUI);
-
- // WFT echatellier 20140716 : aucune idée de ce à quoi ca sert, mais sinon ca fonctione pas
- model = new ReplyFormUIModel();
- setContextValue(model);
}
]]></script>
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-12 14:12:49 UTC (rev 525)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-12 14:40:47 UTC (rev 526)
@@ -69,7 +69,6 @@
import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler;
import org.nuiton.jaxx.application.swing.ApplicationUI;
import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction;
-import org.nuiton.jaxx.application.swing.action.ApplicationActionUI;
import org.nuiton.jaxx.application.swing.util.Cancelable;
import org.nuiton.validator.bean.simple.SimpleBeanValidator;
@@ -111,8 +110,7 @@
@Override
public Component getTopestUI() {
- ApplicationActionUI actionUI = getContext().getActionUI();
- return actionUI;
+ return getContext().getMainUI();
}
public void clearValidators() {
@@ -326,7 +324,7 @@
});
result.setSize(dim);
- SwingUtil.center(getContext().getMainUI(), result);
+ SwingUtil.center(topestUI, result);
result.setVisible(true);
}
1
0
r525 - in trunk: faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service
by echatellier@users.forge.codelutin.com 12 Aug '14
by echatellier@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: echatellier
Date: 2014-08-12 16:12:49 +0200 (Tue, 12 Aug 2014)
New Revision: 525
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/525
Log:
Remove lazy fetch and add fetch into hql
Modified:
trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
Modified: trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java
===================================================================
--- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-12 14:00:32 UTC (rev 524)
+++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-12 14:12:49 UTC (rev 525)
@@ -34,10 +34,19 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
-import org.apache.commons.lang3.tuple.Pair;
+import org.nuiton.topia.persistence.TopiaEntities;
+import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.util.pagination.PaginationParameter;
import org.nuiton.util.pagination.PaginationResult;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> {
/**
@@ -50,7 +59,8 @@
*/
public PaginationResult<Email> search(EmailFilter emailFilter, Set<MailFolder> readMailFolders, PaginationParameter pagination) {
- StringBuilder query = new StringBuilder("FROM " + Email.class.getName() + " E");
+ //StringBuilder query = new StringBuilder("FROM " + Email.class.getName() + " E");
+ StringBuilder query = new StringBuilder();
Map<String, Object> args = new HashMap<>();
// apply security
@@ -353,8 +363,39 @@
query.append(")");
}
- // compute paginated
- PaginationResult<Email> result = findPage(query.toString(), args, pagination);
+ // add same fecth liste as emailService#getEmailForFolder()
+ String hqlForFetchStep1 = "select E." + TopiaEntity.PROPERTY_TOPIA_ID + " FROM " + Email.class.getName() + " E " + query.toString();
+ String hqlForFetchStep2 = "select distinct E FROM " + Email.class.getName() + " E " + addAllFecthes(
+ Email.PROPERTY_PRIORITY,
+ Email.PROPERTY_DEMAND_TYPE,
+ Email.PROPERTY_CLIENT,
+ Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE,
+ Email.PROPERTY_ETAT_ATTENTE,
+ Email.PROPERTY_TAKEN_BY,
+ Email.PROPERTY_REPLIES,
+ Email.PROPERTY_ATTACHMENT,
+ Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER,
+ Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS,
+ Email.PROPERTY_EMAIL_GROUP + "." + EmailGroup.PROPERTY_EMAIL)
+ + " WHERE E." + TopiaEntity.PROPERTY_TOPIA_ID + " in ( :topiaIdsForFetch_ )";
+
+ // code copied from topia to perform search
+ PaginationResult<String> pageResult = findPage(hqlForFetchStep1, args, pagination);
+ List<String> step1ResultTopiaIds = pageResult.getElements();
+
+ List<Email> sortedEntities;
+ if (CollectionUtils.isEmpty(step1ResultTopiaIds)) {
+ sortedEntities = Lists.newArrayList();
+ } else {
+ Map<String, Object> step2Args = Maps.newHashMap();
+ step2Args.put("topiaIdsForFetch_", step1ResultTopiaIds);
+ List<Email> entities = forHql(hqlForFetchStep2, step2Args).findAll();
+
+ sortedEntities = sortAccordingToIds(entities, step1ResultTopiaIds);
+ }
+
+ PaginationResult<Email> result = PaginationResult.of(sortedEntities, pageResult.getCount(), pageResult.getCurrentPage());
+ //PaginationResult<Email> result = findPage(query.toString(), args, pagination);
return result;
}
@@ -420,4 +461,72 @@
// params.put("emailIds", emailIds);
// List<Pair<String, FaxToMailUser>> result = findAll(query, params);
// }
+
+ /**
+ * @deprecated beacause this need to be supported by topia (see http://forge.nuiton.org/issues/3427)
+ */
+ @Deprecated
+ protected String addAllFecthes(String... fetchProperties) {
+ StringBuilder hqlFromClauseBuilder = new StringBuilder();
+ //if (includeFetch) {
+ int fetchedPropertiesAliasIndex = 0;
+ Map<String, String> aliases = Maps.newHashMap();
+ for (String propertyName : fetchProperties) {
+
+ // addAllFetches("a.b").addAllFetches("i.j.k") will produce:
+ // left join topiaEntity_.a fetchedProp0_ left join fetch fetchedProp0_.b
+ // left join topiaEntity_.i fetchedProp1_ left join fetch fetchedProp1_.j fetchedProp2_ left join fetchedProp2_.k
+
+ // addAllFetches("a.b").addAllFetches("a.c") will produce:
+ // left join topiaEntity_.a fetchedProp0_ left join fetch fetchedProp1_.b
+ // left join fetch fetchedProp1_.c
+ StringBuilder path = new StringBuilder(); // The path to reach the property
+
+ // Loop over each part of the "a.b.c"
+ for (String part : Splitter.on('.').split(propertyName)) {
+
+ // Look for the parent alias if already computed
+ String previousPath = path.toString();
+ String previousAlias = Objects.firstNonNull(aliases.get(previousPath), "E");
+
+ // Compute the current path and look for its alias
+ if (path.length() > 0) {
+ path.append('.');
+ }
+ path.append(part);
+ String currentPath = path.toString();
+ String currentAlias = aliases.get(currentPath);
+
+ // No current alias found, create and add it
+ if (Strings.isNullOrEmpty(currentAlias)) {
+ currentAlias = String.format("fetchedProp%d_", fetchedPropertiesAliasIndex++);
+ aliases.put(currentPath, currentAlias);
+
+ String fetch = String.format(" LEFT JOIN FETCH %s.%s %s ", previousAlias, part, currentAlias);
+ hqlFromClauseBuilder.append(fetch);
+ }
+ }
+ }
+ //}
+ return hqlFromClauseBuilder.toString();
+ }
+
+ /**
+ * @deprecated beacause this need to be supported by topia (see http://forge.nuiton.org/issues/3427)
+ */
+ @Deprecated
+ protected <O extends TopiaEntity> List<O> sortAccordingToIds(List<O> entities, final List<String> idsList) {
+
+ // Cannot sort on second query, will sort according to the first result list
+ final Map<String, O> entitiesIndex = Maps.uniqueIndex(entities, TopiaEntities.getTopiaIdFunction());
+ Iterable<O> transformed = Iterables.transform(idsList, new Function<String, O>() {
+ @Override
+ public O apply(String input) {
+ return entitiesIndex.get(input);
+ }
+ });
+
+ List<O> result = Lists.newArrayList(transformed);
+ return result;
+ }
}
Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-12 14:00:32 UTC (rev 524)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-12 14:12:49 UTC (rev 525)
@@ -796,11 +796,6 @@
EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
PaginationResult<Email> result = emailDao.search(emailFilter, readMailFolders, pagination);
- // Fetch lazy field for list display
- for (Email email : result.getElements()) {
- fetchEmailData(email);
- }
-
return result;
}
@@ -1174,37 +1169,6 @@
}
}
- protected void fetchEmailData(Email email) {
- if (email.getDemandType() != null) {
- Hibernate.initialize(email.getDemandType().getFields());
- }
- if (email.sizeRangeRow() > 0) {
- for (RangeRow rangeRow : email.getRangeRow()) {
- Hibernate.initialize(rangeRow.getRange());
- }
- }
- if (email.sizeHistory() > 0) {
- for (History history : email.getHistory()) {
- history.getType();
- Hibernate.initialize(history.getType());
- Hibernate.initialize(history.getFaxToMailUser());
- history.sizeFields();
- }
- }
- email.sizeReplies();
- email.sizeAttachment();
-
- Hibernate.initialize(email.getTakenBy());
- Hibernate.initialize(email.getClient());
- Hibernate.initialize(email.getDemandStatus());
-
- if (email.getEmailGroup() != null) {
- email.getEmailGroup().sizeEmail();
- }
- Hibernate.initialize(email.getEtatAttente());
- Hibernate.initialize(email.getPriority());
- }
-
/**
* Compute mail folder path (separated by /) from root to current.
*
1
0
r524 - in trunk/faxtomail-ui-swing/src/main: java/com/franciaflex/faxtomail/ui/swing/actions java/com/franciaflex/faxtomail/ui/swing/content/demande java/com/franciaflex/faxtomail/ui/swing/content/reply java/com/franciaflex/faxtomail/ui/swing/util resources/com/franciaflex/faxtomail/ui/swing/content/reply resources/i18n
by kmorin@users.forge.codelutin.com 12 Aug '14
by kmorin@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: kmorin
Date: 2014-08-12 16:00:32 +0200 (Tue, 12 Aug 2014)
New Revision: 524
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/524
Log:
fixes #5534 lorsqu'on a modifi?\195?\169 un document attach?\195?\169, et qu'on quitte, on ne demande pas de confirmation alors qu'il y a eu des modifications
on ne prend pas quand on groupe
correction de la validation de l'adresse exp?\195?\169diteur de la r?\195?\169ponse
Modified:
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java
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/util/AbstractFaxToMailUIHandler.java
trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml
trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java 2014-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java 2014-08-12 14:00:32 UTC (rev 524)
@@ -78,7 +78,6 @@
public void doAction() throws Exception {
FaxToMailServiceContext serviceContext = getContext().newServiceContext();
EmailService emailService = serviceContext.getEmailService();
- FaxToMailUser user = getContext().getCurrentUser();
FaxToMailUser currentUser = getContext().getCurrentUser();
Email email = emailService.groupEmails(currentEmail.getTopiaId(), selectedEmail.getTopiaId(), currentUser);
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-12 14:00:32 UTC (rev 524)
@@ -418,7 +418,7 @@
dialogContent,
t("faxtomail.searchToGroup.title", demandeUI.getModel().getTitle()),
getContext().getMainUI().getSize(),
- true);
+ false);
getContext().getActionFactory().createUIAction(null, action).actionPerformed(null);
}
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel.java 2014-08-12 14:00:32 UTC (rev 524)
@@ -30,6 +30,7 @@
import java.util.List;
import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -270,10 +271,9 @@
public boolean isValid(String field) {
boolean result = true;
if (PROPERTY_FROM.equals(field)) {
- // si les deux listes liste getSenderAllowedAddresses et getSenderAllowedDomains sont
- // toutes les deux vides on ne valide pas
- // sinon un des deux autres test doit forcement etre vrai sinon de n'est pas valide
- result = getSenderAllowedAddresses().isEmpty() && getSenderAllowedDomains().isEmpty() || isEmailAllowed(getFrom()) || isDomainAllowed(getFrom());
+ // valid if the email address is in the list of the authorized addresses
+ // or if the domain is in the authorized domains, or if the domain list is empty
+ result = isEmailAllowed(getFrom()) || isDomainAllowed(getFrom());
}
return result;
}
@@ -286,9 +286,12 @@
*/
protected boolean isEmailAllowed(String mail) {
Preconditions.checkNotNull(mail);
- for (String address : getSenderAllowedAddresses()) {
- if (mail.equalsIgnoreCase(address)) {
- return true;
+ List<String> senderAllowedAddresses = getSenderAllowedAddresses();
+ if (senderAllowedAddresses != null) {
+ for (String address : senderAllowedAddresses) {
+ if (mail.equalsIgnoreCase(address)) {
+ return true;
+ }
}
}
return false;
@@ -302,7 +305,12 @@
*/
protected boolean isDomainAllowed(String mail) {
Preconditions.checkNotNull(mail);
- for (String domain : getSenderAllowedDomains()) {
+ List<String> senderAllowedDomains = getSenderAllowedDomains();
+
+ if (CollectionUtils.isEmpty(senderAllowedDomains)) {
+ return true;
+ }
+ for (String domain : senderAllowedDomains) {
if (mail.endsWith(domain)) {
return true;
}
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-12 14:00:32 UTC (rev 524)
@@ -265,10 +265,10 @@
SwingUtil.center(getContext().getMainUI(), result);
result.setVisible(true);
}
-
+
/**
* Surchargée pour temporairement ajouter un appel à ApplicationUI#onCloseUI on windowClosing.
- *
+ *
* @deprecated overriden during waiting response for issue : http://nuiton.org/issues/3415
*/
@Deprecated
@@ -285,7 +285,7 @@
result.add((Component) dialogContent);
result.setResizable(true);
-
+
result.setSize(dim);
final AbstractApplicationUIHandler handler = dialogContent.getHandler();
@@ -308,16 +308,11 @@
});
}
+ result.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
result.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
- boolean canClose = true;
- if (handler instanceof CloseableUI) {
- canClose = ((CloseableUI)handler).quitUI();
- }
- if (canClose) {
- result.setVisible(false);
- }
+ closeDialog();
}
@Override
@@ -335,6 +330,18 @@
result.setVisible(true);
}
+ @Override
+ public void closeDialog() {
+ JDialog dialog = getParentContainer(JDialog.class);
+ boolean canClose = true;
+ if (this instanceof CloseableUI) {
+ canClose = ((CloseableUI)this).quitUI();
+ }
+ if (canClose) {
+ dialog.setVisible(false);
+ }
+ }
+
/**
* Gros copier/coller de quitScreen() pour appeler runActionAndWait au lieu de saveAction.actionPerformed(null); par defaut
* pour tenter de corriger un problème de concurrence entre l'action de sauvegarde de l'email
@@ -389,7 +396,7 @@
}
public void closeFrame() {
- getParentContainer(JFrame.class).setVisible(false);
+ getParentContainer(JFrame.class).dispose();
}
protected <HL extends HasLabel> void initCheckBoxComboBox(final JComboBox<HL> comboBox,
Modified: trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml
===================================================================
--- trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml 2014-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/resources/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIModel-error-validation.xml 2014-08-12 14:00:32 UTC (rev 524)
@@ -51,12 +51,18 @@
</field>
<field name="from">
+ <field-validator type="requiredstring" short-circuit="true">
+ <message>faxtomail.validator.error.reply.from.required</message>
+ </field-validator>
<field-validator type="fieldexpression" short-circuit="true">
<param name="expression">
<![CDATA[ isValid("from") ]]>
</param>
<message>faxtomail.validator.error.reply.from.invalidDomain</message>
</field-validator>
+ <field-validator type="email" short-circuit="true">
+ <message>faxtomail.validator.error.reply.from.email</message>
+ </field-validator>
</field>
<field name="subject">
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-08-12 09:25:55 UTC (rev 523)
+++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-12 14:00:32 UTC (rev 524)
@@ -291,6 +291,7 @@
faxtomail.validator.error.email.rangeRow.required=Tableau des gammes requis
faxtomail.validator.error.reply.cc.email=Le champ 'Copie\:' doit être une adresse email valide \!
faxtomail.validator.error.reply.cci.email=Le champ 'opie cachée\:' doit être une adresse email valide \!
+faxtomail.validator.error.reply.from.email=
faxtomail.validator.error.reply.from.invalidDomain=
faxtomail.validator.error.reply.from.required=
faxtomail.validator.error.reply.subject.required=
1
0
r523 - trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions
by kmorin@users.forge.codelutin.com 12 Aug '14
by kmorin@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: kmorin
Date: 2014-08-12 11:25:55 +0200 (Tue, 12 Aug 2014)
New Revision: 523
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/523
Log:
check null
Modified:
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java
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-08-12 09:24:40 UTC (rev 522)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-08-12 09:25:55 UTC (rev 523)
@@ -152,7 +152,7 @@
MailFolder currentFolder = currentEmail.getMailFolder();
MailFolder actualFolder = email.getMailFolder();
- if (!currentFolder.equals(actualFolder)) {
+ if (currentFolder != null && !currentFolder.equals(actualFolder)) {
displayWarningMessage(t("faxtomail.alert.emailMoved.title"),
t("faxtomail.alert.emailMoved.message",
currentFolder.getName(),
1
0
12 Aug '14
Author: kmorin
Date: 2014-08-12 11:24:40 +0200 (Tue, 12 Aug 2014)
New Revision: 522
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/522
Log:
fixes #5554 ?\195?\137diteur de pi?\195?\168ces jointes : Ajout des ?\195?\169l?\195?\169ments ?\195?\160 l?\226?\128?\153endroit o?\195?\185 on clique
fixes #5555 ?\195?\137diteur de pi?\195?\168ces jointes : lignes verticales
v?\195?\169rification qu'un ?\195?\169l?\195?\169ment est toujous lisible et n'a pas chang?\195?\169 de dossier quand on l'ouvre
am?\195?\169lioration du code d'ouverture de demandes group?\195?\169es
Added:
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/exceptions/FolderNotReadableException.java
trunk/faxtomail-ui-swing/src/main/resources/icons/action-hline.png
trunk/faxtomail-ui-swing/src/main/resources/icons/action-vline.png
Modified:
trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractFaxToMailAction.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.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/OpenGroupedDemandAction.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/SaveDemandeAction.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/actions/TransmitAction.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx
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/DemandesUIHandler.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIModel.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/ButtonHistory.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUI.jaxx
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUIHandler.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.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/persistence/entities/EmailTopiaDao.java
===================================================================
--- trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -34,6 +34,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.nuiton.util.pagination.PaginationParameter;
import org.nuiton.util.pagination.PaginationResult;
@@ -404,4 +405,19 @@
return result;
}
+
+// public Map<String, FaxToMailUser> getLastForEmails(List<String> emailIds) {
+//// récupérer l'utilisateur de l'historique max date pour type = ouverture pj
+// String query = "SELECT topiaId, " +
+// "FROM " + Email.class.getName() + " AS email " +
+// "INNER JOIN email." + Email.PROPERTY_HISTORY + " AS history " +
+// "INNER JOIN rangeRow." + RangeRow.PROPERTY_RANGE + " AS range " +
+// "WHERE email." + Email.PROPERTY_TOPIA_ID + " IN :emailIds " +
+// "AND history"
+// "GROUP BY topiaId";
+//
+// Map<String, Object> params = new HashMap<>();
+// params.put("emailIds", emailIds);
+// List<Pair<String, FaxToMailUser>> result = findAll(query, params);
+// }
}
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -36,6 +36,7 @@
import com.franciaflex.faxtomail.persistence.entities.Range;
import com.franciaflex.faxtomail.services.FaxToMailService;
import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException;
+import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException;
import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException;
import org.apache.commons.mail.EmailException;
@@ -58,15 +59,17 @@
public interface EmailService extends FaxToMailService {
Email getEmailById(String id);
- Email getEmailById(String id, FaxToMailUser user);
+ Email getFullEmailById(String id);
+ Email getFullEmailById(String id, FaxToMailUser user);
+
Email saveEmail(Email email, FaxToMailUser user, String... modifiedFields) throws InvalidClientException;
Email saveEmail(Email email, Collection<Attachment> attachments, String clientCode, FaxToMailUser user, String... modifiedFields) throws InvalidClientException;
void transmitPendingDemandsToEdi();
- PaginationResult<Email> getEmailForFolder(MailFolder folder, FaxToMailUser currentUser, List<MailField> fields, PaginationParameter page);
+ PaginationResult<Email> getEmailForFolder(MailFolder folder, FaxToMailUser currentUser, PaginationParameter page);
List<MailFolder> getChildrenRecursively(MailFolder folder);
@@ -74,15 +77,17 @@
Email addToHistory(String emailId, HistoryType type, FaxToMailUser user, Date date, String... fields);
+ Email openEmail(String emailId, FaxToMailUser user, boolean takeEmail) throws FolderNotReadableException;
+
Email takeEmail(String emailId, FaxToMailUser user);
- Email lockEmail(String emailId, FaxToMailUser currentUser) throws AlreadyLockedMailException;
+ Email lockEmail(String emailId, FaxToMailUser currentUser) throws AlreadyLockedMailException, FolderNotReadableException;
void unlockEmail(String emailId);
PaginationResult<Email> search(EmailFilter emailFilter, FaxToMailUser user, PaginationParameter pagination);
- Email groupEmails(Email email1, Email email2, FaxToMailUser user);
+ Email groupEmails(String email1Id, String email2Id, FaxToMailUser user);
Email reply(String from, String to, String cc, String bcc, String subject,
String content, Collection<AttachmentFile> attachments,
Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -51,6 +51,8 @@
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
+import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException;
+import com.google.common.collect.Collections2;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.io.FileUtils;
@@ -107,6 +109,12 @@
@Override
public Email getEmailById(String id) {
+ Email email = getPersistenceContext().getEmailDao().forTopiaIdEquals(id).findUnique();
+ return email;
+ }
+
+ @Override
+ public Email getFullEmailById(String id) {
Email email = getPersistenceContext().getEmailDao()
.forTopiaIdEquals(id)
.addAllFetches(Email.PROPERTY_DEMAND_TYPE,
@@ -131,8 +139,8 @@
}
@Override
- public Email getEmailById(String id, FaxToMailUser user) {
- Email email = getEmailById(id);
+ public Email getFullEmailById(String id, FaxToMailUser user) {
+ Email email = getFullEmailById(id);
MailFolderService mailFolderService = serviceContext.getMailFolderService();
MailFolder folder = email.getMailFolder();
@@ -546,65 +554,27 @@
@Override
public PaginationResult<Email> getEmailForFolder(MailFolder folder,
FaxToMailUser currentUser,
- List<MailField> fields,
PaginationParameter page) {
// perform request or not depending on rigths
PaginationResult<Email> result;
if (folder.isFolderReadable()) {
EmailTopiaDao dao = getPersistenceContext().getEmailDao();
- TopiaQueryBuilderAddCriteriaOrRunQueryStep queryStep =
- dao.forMailFolderEquals(folder)
+ result = dao.forMailFolderEquals(folder)
.addNull(Email.PROPERTY_ARCHIVE_DATE)
- .addNotEquals(Email.PROPERTY_DEMAND_STATUS, DemandStatus.ARCHIVED);
+ .addNotEquals(Email.PROPERTY_DEMAND_STATUS, DemandStatus.ARCHIVED)
+ .addAllFetches(Email.PROPERTY_PRIORITY,
+ Email.PROPERTY_DEMAND_TYPE,
+ Email.PROPERTY_CLIENT,
+ Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE,
+ Email.PROPERTY_ETAT_ATTENTE,
+ Email.PROPERTY_TAKEN_BY,
+ Email.PROPERTY_REPLIES,
+ Email.PROPERTY_ATTACHMENT,
+ Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER,
+ Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS)
+ .findPage(page);
- boolean noFields = CollectionUtils.isEmpty(fields);
- if (noFields || fields.contains(MailField.PRIORITY)) {
- queryStep.addFetch(Email.PROPERTY_PRIORITY);
- }
- if (noFields || fields.contains(MailField.DEMAND_TYPE)) {
- queryStep.addFetch(Email.PROPERTY_DEMAND_TYPE);
- }
- if (noFields || CollectionUtils.containsAny(fields,
- Lists.newArrayList(MailField.CLIENT_BRAND,
- MailField.CLIENT_CODE))) {
- queryStep.addFetch(Email.PROPERTY_CLIENT);
- }
- if (noFields || CollectionUtils.containsAny(fields,
- Lists.newArrayList(MailField.REFERENCE,
- MailField.QUOTATION_NB,
- MailField.PF_NB,
- MailField.SAV_NB))) {
- queryStep.addFetch(Email.PROPERTY_RANGE_ROW + "." + RangeRow.PROPERTY_RANGE);
- }
- if (noFields || fields.contains(MailField.ETAT_ATTENTE)) {
- queryStep.addFetch(Email.PROPERTY_ETAT_ATTENTE);
- }
- if (noFields || fields.contains(MailField.TAKEN_BY)) {
- queryStep.addFetch(Email.PROPERTY_TAKEN_BY);
- }
- if (noFields || fields.contains(MailField.REPLIES)) {
- queryStep.addFetch(Email.PROPERTY_REPLIES);
- }
- if (noFields || fields.contains(MailField.ATTACHMENT)) {
- queryStep.addFetch(Email.PROPERTY_ATTACHMENT);
- }
- //TODO 20140808 kmorin remove when hql query coded
- if (noFields || fields.contains(MailField.LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER)) {
- queryStep.addAllFetches(Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER,
- Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS);
- }
-
- result = queryStep.findPage(page);
-
- if (noFields || fields.contains(MailField.LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER)) {
- Collection<String> topiaIds = Collections2.transform(result.getElements(), TopiaEntities.getTopiaIdFunction());
- //TODO 20140808 kmorin hql pour récupérer l'utilisateur de l'historique max date pour type = ouverture pj
-// Email.PROPERTY_HISTORY,
-// Email.PROPERTY_HISTORY + "." + History.PROPERTY_FAX_TO_MAIL_USER,
-// Email.PROPERTY_HISTORY + "." + History.PROPERTY_FIELDS,
- }
-
} else {
List<Email> elements = Collections.emptyList();
result = PaginationResult.of(elements, 0, page);
@@ -633,7 +603,7 @@
@Override
public Email addToHistory(String emailId, HistoryType type, FaxToMailUser user, Date date, String... fields) {
EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
- Email email = getEmailById(emailId, user);
+ Email email = getEmailById(emailId);
HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao();
History history = historyDao.create(History.PROPERTY_TYPE, type,
@@ -649,6 +619,38 @@
return email;
}
+ @Override
+ public Email openEmail(String emailId, FaxToMailUser user, boolean takeEmail) throws FolderNotReadableException {
+ EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
+ Email email = getFullEmailById(emailId, user);
+
+ MailFolder mailFolder = email.getMailFolder();
+ if (!mailFolder.isFolderReadable()) {
+ throw new FolderNotReadableException(String.format("Mail folder %s not readable by %s",
+ mailFolder.getName(),
+ user.getLogin()),
+ mailFolder);
+ }
+
+ HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao();
+ History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.OPENING,
+ History.PROPERTY_FAX_TO_MAIL_USER, user,
+ History.PROPERTY_MODIFICATION_DATE, new Date());
+ email.addHistory(history);
+ if (takeEmail) {
+ history = historyDao.create(History.PROPERTY_TYPE, HistoryType.MODIFICATION,
+ History.PROPERTY_FAX_TO_MAIL_USER, user,
+ History.PROPERTY_FIELDS, Sets.newHashSet(Email.PROPERTY_TAKEN_BY),
+ History.PROPERTY_MODIFICATION_DATE, new Date());
+ email.addHistory(history);
+ email.setTakenBy(user);
+ }
+
+ email = emailDao.update(email);
+ getPersistenceContext().commit();
+ return email;
+ }
+
/**
* Take email (takenBy).
*
@@ -683,12 +685,27 @@
* @throws AlreadyLockedMailException if email is already locked by another user
*/
@Override
- public Email lockEmail(String emailId, FaxToMailUser currentUser) throws AlreadyLockedMailException {
+ public Email lockEmail(String emailId, FaxToMailUser currentUser) throws AlreadyLockedMailException,
+ FolderNotReadableException {
// get current lock on mail if any
EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
MailLockTopiaDao mailLockDao = getPersistenceContext().getMailLockDao();
Email email = emailDao.forTopiaIdEquals(emailId).findUnique();
+
+ MailFolderService mailFolderService = serviceContext.getMailFolderService();
+ MailFolder folder = email.getMailFolder();
+ browseFolderParent(folder, currentUser, mailFolderService);
+
+ if (!folder.isFolderReadable()) {
+ throw new FolderNotReadableException(String.format("Mail folder %s not readable by %s",
+ folder.getName(),
+ currentUser.getLogin()),
+ folder);
+ }
+
+ Hibernate.initialize(email.getTakenBy());
+
MailLock mailLock = mailLockDao.forLockOnEquals(email).findUniqueOrNull();
// if no lock found, create new one
@@ -714,6 +731,7 @@
mailLockDao.deleteAll(mailLocksToRemove);
getPersistenceContext().commit();
+
} else if (!mailLock.getLockBy().equals(currentUser)) {
// throw exception if already locked by another user
throw new AlreadyLockedMailException(String.format("Mail %s already locked by %s", emailId, mailLock.getLockBy().getTopiaId()), mailLock.getLockBy());
@@ -787,9 +805,12 @@
}
@Override
- public Email groupEmails(Email email1, Email email2, FaxToMailUser user) {
+ public Email groupEmails(String email1Id, String email2Id, FaxToMailUser user) {
EmailGroupTopiaDao groupDao = getPersistenceContext().getEmailGroupDao();
+ Email email1 = getFullEmailById(email1Id, user);
+ Email email2 = getEmailById(email2Id);
+
EmailGroup group1 = email1.getEmailGroup();
EmailGroup group2 = email2.getEmailGroup();
Added: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/exceptions/FolderNotReadableException.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/exceptions/FolderNotReadableException.java (rev 0)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/exceptions/FolderNotReadableException.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -0,0 +1,20 @@
+package com.franciaflex.faxtomail.services.service.exceptions;
+
+import com.franciaflex.faxtomail.persistence.entities.MailFolder;
+
+/**
+ * @author Kevin Morin (Code Lutin)
+ */
+public class FolderNotReadableException extends Exception {
+
+ protected MailFolder forbiddenFolder;
+
+ public FolderNotReadableException(String message, MailFolder forbiddenFolder) {
+ super(message);
+ this.forbiddenFolder = forbiddenFolder;
+ }
+
+ public MailFolder getForbiddenFolder() {
+ return forbiddenFolder;
+ }
+}
Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java
===================================================================
--- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -144,11 +144,11 @@
MailFolderTopiaDao mailFolderDao = getServiceContext().getPersistenceContext().getMailFolderDao();
MailFolder cyril = mailFolderDao.forNameEquals("Cyril").findUnique();
- PaginationResult<Email> page1 = service.getEmailForFolder(cyril, getCurrentUser(), null, page);
+ PaginationResult<Email> page1 = service.getEmailForFolder(cyril, getCurrentUser(), page);
Assert.assertEquals(10, page1.getCount());
Assert.assertEquals(7, page1.getElements().size());
- PaginationResult<Email> page2 = service.getEmailForFolder(cyril, getCurrentUser(), null, page1.getNextPage());
+ PaginationResult<Email> page2 = service.getEmailForFolder(cyril, getCurrentUser(), page1.getNextPage());
Assert.assertEquals(10, page2.getCount());
Assert.assertEquals(3, page2.getElements().size());
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractChangeScreenAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -103,16 +103,11 @@
}
@Override
- public void postFailedAction(Throwable error) {
+ public void releaseAction() {
+ super.releaseAction();
setTopBarButtonEnabled(true);
}
- @Override
- public void postSuccessAction() {
- super.postSuccessAction();
- setTopBarButtonEnabled(true);
- }
-
protected void setTopBarButtonEnabled(boolean enabled) {
MainUI ui = getUI();
ui.getSearchButton().setEnabled(enabled);
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractFaxToMailAction.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractFaxToMailAction.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/AbstractFaxToMailAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -61,10 +61,6 @@
return (ProgressionModel) getContext().getActionUI().getModel().getProgressionModel();
}
-// public FaxToMailDataContext getDataContext() {
-// return getContext().getDataContext();
-// }
-
@Override
protected FaxToMailConfiguration getConfig() {
return getContext().getConfig();
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/GroupAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -65,7 +65,7 @@
int i = JOptionPane.showConfirmDialog(
null,
- t("faxtomail.alert.groupConfirmation.message", currentEmail.getObject(), selectedEmail.getObject()),
+ t("faxtomail.alert.groupConfirmation.message", currentEmail.getTitle(), selectedEmail.getTitle()),
t("faxtomail.alert.groupConfirmation.title"),
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
@@ -78,16 +78,14 @@
public void doAction() throws Exception {
FaxToMailServiceContext serviceContext = getContext().newServiceContext();
EmailService emailService = serviceContext.getEmailService();
+ FaxToMailUser user = getContext().getCurrentUser();
- Email email2 = emailService.getEmailById(selectedEmail.getTopiaId());
- Email email1 = emailService.getEmailById(currentEmail.getTopiaId());
-
FaxToMailUser currentUser = getContext().getCurrentUser();
- email1 = emailService.groupEmails(email1, email2, currentUser);
- currentEmail.fromEntity(email1);
- currentEmail.setGroupedDemandes(email1.getEmailGroup());
+ Email email = emailService.groupEmails(currentEmail.getTopiaId(), selectedEmail.getTopiaId(), currentUser);
+ currentEmail.fromEntity(email);
+ currentEmail.setGroupedDemandes(email.getEmailGroup());
- handler.showInformationMessage(t("faxtomail.demande.group.successful", email2.getObject()));
+ handler.showInformationMessage(t("faxtomail.demande.group.successful"));
handler.closeFrame();
}
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/LoadFolderEmailsAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -28,10 +28,15 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import com.ezware.oxbow.swingbits.table.filter.TableRowFilterSupport;
import com.franciaflex.faxtomail.persistence.entities.MailField;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
@@ -91,10 +96,15 @@
FaxToMailUser currentUser = getContext().getCurrentUser();
List<MailField> columns = handler.getColumns();
+ Collection<MailField> fields = new HashSet<MailField>();
+ if (columns != null) {
+ fields.addAll(columns);
+ }
+ fields.add(MailField.TAKEN_BY);
+
PaginationResult<Email> paginationResult = getContext().newServiceContext().getEmailService()
.getEmailForFolder(folder,
currentUser,
- columns,
model.getPaginationParameter());
List<Email> emails = paginationResult.getElements();
if (log.isDebugEnabled()) {
@@ -104,7 +114,7 @@
List<DemandeUIModel> demands = new ArrayList<DemandeUIModel>();
for (Email email : emails) {
DemandeUIModel demand = new DemandeUIModel();
- demand.fromEntity(email, columns);
+ demand.fromEntityExcluding(email, Sets.newHashSet(Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_EMAIL_GROUP));
// on ajoute toutes les lignes de rangeRow,
// qui sont toutes valides puisqu'on les récupère de la base et qu'on ne sauvegarde que les lignes valides
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenGroupedDemandAction.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenGroupedDemandAction.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/OpenGroupedDemandAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -2,8 +2,12 @@
import com.franciaflex.faxtomail.persistence.entities.Email;
import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser;
+import com.franciaflex.faxtomail.persistence.entities.MailFolder;
import com.franciaflex.faxtomail.services.FaxToMailServiceContext;
+import com.franciaflex.faxtomail.services.service.EmailService;
import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException;
+import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException;
+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.DemandeUIModel;
@@ -23,6 +27,7 @@
public class OpenGroupedDemandAction extends AbstractFaxToMailAction<DemandeUIModel, DemandGroupUI, DemandGroupUIHandler> {
protected DemandeUIModel demandToOpen;
+ protected boolean takeEmail;
public OpenGroupedDemandAction(DemandGroupUIHandler handler, DemandeUIModel demandToOpen) {
super(handler, false);
@@ -34,76 +39,112 @@
public boolean prepareAction() throws Exception {
boolean result = super.prepareAction();
- // tentative de verrouillages des email existants
- if (StringUtils.isNotBlank(demandToOpen.getTopiaId())) {
- FaxToMailUser currentUser = getContext().getCurrentUser();
+ MainUIHandler mainUIHandler = getContext().getMainUI().getHandler();
+ DemandesUI parentContainer = (DemandesUI) mainUIHandler.getCurrentBody();
+ if (parentContainer.getModel().containsDemand(demandToOpen)) {
+ openDemandScreen();
+ result = false;
- try {
- FaxToMailServiceContext serviceContext = getContext().newServiceContext();
- serviceContext.getEmailService().lockEmail(demandToOpen.getTopiaId(), currentUser);
+ } else {
+ String topiaId = demandToOpen.getTopiaId();
+ if (StringUtils.isNotBlank(topiaId)) {
+ FaxToMailUser currentUser = getContext().getCurrentUser();
+ int answer = -1;
- } catch (AlreadyLockedMailException ex) {
- result = false;
+ try {
+ FaxToMailServiceContext serviceContext = getContext().newServiceContext();
+ EmailService emailService = serviceContext.getEmailService();
- String htmlMessage = t("faxtomail.alert.alreadyLockedBy.message", decorate(ex.getLockedBy()));
- JOptionPane.showMessageDialog(getHandler().getTopestUI(),
- htmlMessage,
- t("faxtomail.alert.alreadyLockedBy.title"),
- JOptionPane.ERROR_MESSAGE);
+ // tentative de verrouillages des email existants
+ Email email = emailService.lockEmail(topiaId, currentUser);
+
+ FaxToMailUser takenBy = email.getTakenBy();
+
+ // si le mail est pris par quelqu'un d'autre, le prend-on ou pas ?
+ 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"));
+
+ answer = JOptionPane.showConfirmDialog(getHandler().getTopestUI(),
+ htmlMessage,
+ t("faxtomail.alert.alreadyTakenBy.title"),
+ JOptionPane.YES_NO_CANCEL_OPTION,
+ JOptionPane.QUESTION_MESSAGE);
+ }
+
+ // si on annule, on délock
+ if (answer == JOptionPane.CANCEL_OPTION) {
+ result = false;
+ emailService.unlockEmail(topiaId);
+
+ } else {
+ // sinon on ouvre
+
+ // si on ne prend pas, le mail est en readonly
+ if (answer == JOptionPane.NO_OPTION) {
+ demandToOpen.setEditable(false);
+ takeEmail = false;
+ }
+ // si on prend, on prend et on rend editable
+ else if (answer == JOptionPane.YES_OPTION) {
+ takeEmail = true;
+ demandToOpen.setEditable(true);
+ }
+ }
+ }
+ // le mail est locké, on ne fait rien
+ catch (AlreadyLockedMailException ex) {
+ result = false;
+
+ String htmlMessage = t("faxtomail.alert.alreadyLockedBy.message", decorate(ex.getLockedBy()));
+ JOptionPane.showMessageDialog(getHandler().getTopestUI(),
+ htmlMessage,
+ t("faxtomail.alert.alreadyLockedBy.title"),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ // l'utilisateur n'a pas les droits de lecture sur le dossier
+ catch (FolderNotReadableException e) {
+ result = false;
+
+ String htmlMessage = t("faxtomail.alert.userNotAuthorizedToReadEmail.message", e.getForbiddenFolder().getName());
+ JOptionPane.showMessageDialog(getHandler().getTopestUI(),
+ htmlMessage,
+ t("faxtomail.alert.userNotAuthorizedToReadEmail.title"),
+ JOptionPane.ERROR_MESSAGE);
+ }
}
}
-
return result;
}
@Override
public void doAction() throws Exception {
- FaxToMailUIContext context = getContext();
- Email email = context.newServiceContext().getEmailService().getEmailById(demandToOpen.getTopiaId(),
- context.getCurrentUser());
- demandToOpen.fromEntity(email);
- demandToOpen.setMailFolder(email.getMailFolder());
- demandToOpen.setCloseable(true);
+ if (StringUtils.isNotBlank(demandToOpen.getTopiaId())) {
+ FaxToMailServiceContext serviceContext = getContext().newServiceContext();
+
+ Email email = serviceContext.getEmailService().openEmail(demandToOpen.getTopiaId(),
+ getContext().getCurrentUser(),
+ takeEmail);
+
+ demandToOpen.fromEntity(email);
+ MailFolder folder = demandToOpen.getMailFolder();
+ if (demandToOpen.getArchiveDate() != null || !folder.isFolderWritable()) {
+ demandToOpen.setEditable(false);
+ }
+ demandToOpen.setCloseable(true);
+ }
}
@Override
public void postSuccessAction() {
super.postSuccessAction();
- FaxToMailUser takenBy = demandToOpen.getTakenBy();
- FaxToMailUser currentUser = getContext().getCurrentUser();
+ openDemandScreen();
+ }
- if (demandToOpen.getArchiveDate() != null) {
- demandToOpen.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(getHandler().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:
- demandToOpen.setEditable(false);
- break;
-
- case JOptionPane.YES_OPTION:
- Email email = getContext().newServiceContext().getEmailService().takeEmail(demandToOpen.getTopiaId(), currentUser);
- demandToOpen.fromEntity(email);
- demandToOpen.setEditable(true);
- break;
- }
- }
-
+ protected void openDemandScreen() {
MainUIHandler mainUIHandler = getContext().getMainUI().getHandler();
DemandesUI parentContainer = (DemandesUI) mainUIHandler.getCurrentBody();
parentContainer.getModel().addDemand(demandToOpen);
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ReplyAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -35,6 +35,7 @@
import com.franciaflex.faxtomail.ui.swing.content.reply.ReplyFormUIModel;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
+import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -81,7 +82,7 @@
originalDemand.getTopiaId(),
getContext().getCurrentUser());
- originalDemand.fromEntity(email);
+ originalDemand.fromEntityIncluding(email, Sets.newHashSet(Email.PROPERTY_REPLIES, Email.PROPERTY_HISTORY));
}
@Override
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/SaveDemandeAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -68,7 +68,7 @@
String topiaId = model.getTopiaId();
FaxToMailServiceContext serviceContext = context.newServiceContext();
if (!StringUtils.isBlank(topiaId)) {
- persistedEmail = serviceContext.getEmailService().getEmailById(topiaId);
+ persistedEmail = serviceContext.getEmailService().getFullEmailById(topiaId);
} else {
persistedEmail = new EmailImpl();
}
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/ShowDemandeAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -27,7 +27,9 @@
import com.franciaflex.faxtomail.persistence.entities.HistoryType;
import com.franciaflex.faxtomail.persistence.entities.MailFolder;
import com.franciaflex.faxtomail.services.FaxToMailServiceContext;
+import com.franciaflex.faxtomail.services.service.EmailService;
import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException;
+import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException;
import com.franciaflex.faxtomail.ui.swing.FaxToMailScreen;
import com.franciaflex.faxtomail.ui.swing.content.MainUIHandler;
import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel;
@@ -44,11 +46,16 @@
/**
* To show demande screen.
+ * TODO kmorin 20140811 gérer le cas où la demande a changé de dossier entre le moment où on a affiché la liste
+ * et le moment où on l'ouvre
*
* @author kmorin - morin(a)codelutin.com
*/
public class ShowDemandeAction extends AbstractChangeScreenAction {
+ // if true, take the email when opening
+ protected boolean takeEmail;
+
public ShowDemandeAction(MainUIHandler handler) {
super(handler, true, FaxToMailScreen.DEMANDE);
setActionDescription(t("faxtomail.action.goto.demand.tip"));
@@ -60,49 +67,53 @@
DemandeUIModel currentEmail = getContext().getCurrentEmail();
- FaxToMailUser takenBy = currentEmail.getTakenBy();
- FaxToMailUser currentUser = getContext().getCurrentUser();
- int answer = -1;
+ String topiaId = currentEmail.getTopiaId();
+ if (StringUtils.isNotBlank(topiaId)) {
+ FaxToMailUser currentUser = getContext().getCurrentUser();
+ int answer = -1;
- // si le mail est pris par quelqu'un d'autre, le prend-on ou pas ?
- 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"));
+ try {
+ FaxToMailServiceContext serviceContext = getContext().newServiceContext();
+ EmailService emailService = serviceContext.getEmailService();
- answer = JOptionPane.showConfirmDialog(getHandler().getTopestUI(),
- htmlMessage,
- t("faxtomail.alert.alreadyTakenBy.title"),
- JOptionPane.YES_NO_CANCEL_OPTION,
- JOptionPane.QUESTION_MESSAGE);
- }
+ // tentative de verrouillages des email existants
+ Email email = emailService.lockEmail(topiaId, currentUser);
- // si on annule, on n'ouvre pas
- if (answer == JOptionPane.CANCEL_OPTION) {
- result = false;
+ FaxToMailUser takenBy = email.getTakenBy();
- } else {
- // sinon on ouvre
- try {
- // tentative de verrouillages des email existants
- if (StringUtils.isNotBlank(currentEmail.getTopiaId())) {
- FaxToMailServiceContext serviceContext = getContext().newServiceContext();
- serviceContext.getEmailService().lockEmail(currentEmail.getTopiaId(), currentUser);
+ // si le mail est pris par quelqu'un d'autre, le prend-on ou pas ?
+ 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"));
+
+ answer = JOptionPane.showConfirmDialog(getHandler().getTopestUI(),
+ htmlMessage,
+ t("faxtomail.alert.alreadyTakenBy.title"),
+ JOptionPane.YES_NO_CANCEL_OPTION,
+ JOptionPane.QUESTION_MESSAGE);
}
- // si on ne prend pas, le mail est en readonly
- if (answer == JOptionPane.NO_OPTION) {
- currentEmail.setEditable(false);
+ // si on annule, on délock
+ if (answer == JOptionPane.CANCEL_OPTION) {
+ result = false;
+ emailService.unlockEmail(topiaId);
+
+ } else {
+ // sinon on ouvre
+
+ // si on ne prend pas, le mail est en readonly
+ if (answer == JOptionPane.NO_OPTION) {
+ currentEmail.setEditable(false);
+ takeEmail = false;
+ }
+ // si on prend, on prend et on rend editable
+ else if (answer == JOptionPane.YES_OPTION) {
+ takeEmail = true;
+ currentEmail.setEditable(true);
+ }
}
- // si on prend, on prend et on rend editable
- else if (answer == JOptionPane.YES_OPTION) {
- FaxToMailServiceContext serviceContext = getContext().newServiceContext();
- serviceContext.getEmailService().takeEmail(currentEmail.getTopiaId(), currentUser);
- currentEmail.setTakenBy(currentUser);
- currentEmail.setEditable(true);
- }
-
}
// le mail est locké, on ne fait rien
catch (AlreadyLockedMailException ex) {
@@ -113,9 +124,19 @@
htmlMessage,
t("faxtomail.alert.alreadyLockedBy.title"),
JOptionPane.ERROR_MESSAGE);
+
}
+ // l'utilisateur n'a pas les droits de lecture sur le dossier
+ catch (FolderNotReadableException e) {
+ result = false;
+
+ String htmlMessage = t("faxtomail.alert.userNotAuthorizedToReadEmail.message", e.getForbiddenFolder().getName());
+ JOptionPane.showMessageDialog(getHandler().getTopestUI(),
+ htmlMessage,
+ t("faxtomail.alert.userNotAuthorizedToReadEmail.title"),
+ JOptionPane.ERROR_MESSAGE);
+ }
}
-
return result;
}
@@ -125,29 +146,29 @@
if (StringUtils.isNotBlank(currentEmail.getTopiaId())) {
FaxToMailServiceContext serviceContext = getContext().newServiceContext();
- Email email = serviceContext.getEmailService().addToHistory(currentEmail.getTopiaId(),
- HistoryType.OPENING,
- getContext().getCurrentUser(),
- new Date());
+ Email email = serviceContext.getEmailService().openEmail(currentEmail.getTopiaId(),
+ getContext().getCurrentUser(),
+ takeEmail);
- currentEmail.setHistory(email.getHistory());
- currentEmail.setEtatAttente(email.getEtatAttente());
- currentEmail.setDemandType(email.getDemandType());
- currentEmail.setGroupedDemandes(email.getEmailGroup());
- currentEmail.setMailFolder(email.getMailFolder());
+ MailFolder currentFolder = currentEmail.getMailFolder();
+ MailFolder actualFolder = email.getMailFolder();
+ if (!currentFolder.equals(actualFolder)) {
+ displayWarningMessage(t("faxtomail.alert.emailMoved.title"),
+ t("faxtomail.alert.emailMoved.message",
+ currentFolder.getName(),
+ actualFolder.getName(),
+ currentEmail.getTitle()));
+ }
+
+ currentEmail.fromEntity(email);
+
+ MailFolder folder = currentEmail.getMailFolder();
+ if (currentEmail.getArchiveDate() != null || !folder.isFolderWritable()) {
+ currentEmail.setEditable(false);
+ }
}
+
super.doAction();
}
- @Override
- public void postSuccessAction() {
- super.postSuccessAction();
-
- DemandeUIModel currentEmail = getContext().getCurrentEmail();
- MailFolder folder = currentEmail.getMailFolder();
-
- if (currentEmail.getArchiveDate() != null || !folder.isFolderWritable()) {
- currentEmail.setEditable(false);
- }
- }
}
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/actions/TransmitAction.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -25,6 +25,8 @@
*/
import static org.nuiton.i18n.I18n.t;
+
+import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI;
import jaxx.runtime.JAXXContext;
import jaxx.runtime.JAXXUtil;
@@ -60,27 +62,28 @@
// suivant la condition on est soit dans le cas d'une edition de demande
// soit dans le cas d'une action contextuel depuis la liste des demandes
- DemandeListUI parentDemandeListUI = (DemandeListUI)getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT);
+ FaxToMailUI parentDemandeListUI = (FaxToMailUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT);
if (parentDemandeListUI != null) {
+ if (DemandeListUI.class.isAssignableFrom(parentDemandeListUI.getClass())) {
+ // appel du service pour sauver les mails
+ // mais il faudrai sauver tous les mails d'un seul coup
+ for (DemandeUIModel demande : model.getDemandeUIModels()) {
+ String topiaId = demande.getTopiaId();
+ Email email = getContext().newServiceContext().getEmailService().getEmailById(topiaId);
+ email = demande.toEntity(email);
+ getContext().newServiceContext().getEmailService().saveEmail(email, null, Email.PROPERTY_MAIL_FOLDER);
+ }
- // appel du service pour sauver les mails
- // mais il faudrai sauver tous les mails d'un seul coup
- for (DemandeUIModel demande : model.getDemandeUIModels()) {
- String topiaId = demande.getTopiaId();
- Email email = getContext().newServiceContext().getEmailService().getEmailById(topiaId);
- email = demande.toEntity(email);
- getContext().newServiceContext().getEmailService().saveEmail(email, null, Email.PROPERTY_MAIL_FOLDER);
+ // appel de l'action de rechargement de la liste
+ getContext().getActionEngine().runInternalAction(parentDemandeListUI.getHandler(),
+ LoadFolderEmailsAction.class);
+
+ } else {
+ DemandesUI parentUI = (DemandesUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT);
+ DemandeUI demandeUI = (DemandeUI) parentUI.getDemandsTabPane().getSelectedComponent();
+ getContext().getActionEngine().runInternalAction(demandeUI.getHandler(),
+ SaveDemandeAndExitAction.class);
}
-
- // appel de l'action de rechargement de la liste
- getContext().getActionEngine().runInternalAction(parentDemandeListUI.getHandler(),
- LoadFolderEmailsAction.class);
-
- } else {
- DemandesUI parentUI = (DemandesUI) getUI().getContextValue(JAXXContext.class, JAXXUtil.PARENT);
- DemandeUI demandeUI = (DemandeUI) parentUI.getDemandsTabPane().getSelectedComponent();
- getContext().getActionEngine().runInternalAction(demandeUI.getHandler(),
- SaveDemandeAndExitAction.class);
}
}
}
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUI.jaxx 2014-08-12 09:24:40 UTC (rev 522)
@@ -81,7 +81,8 @@
<JToolBar id='topToolBar'>
<ButtonDemandReplies id="demandRepliesButton"
constructorParams="model"/>
- <ButtonHistory id="historyButton"/>
+ <ButtonHistory id="historyButton"
+ constructorParams="model"/>
<ButtonAttachment id="attachmentsButton"
constructorParams="model"/>
</JToolBar>
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIModel.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -72,7 +72,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import static org.nuiton.i18n.I18n.t;
@@ -194,89 +196,31 @@
*/
@Override
public void fromEntity(Email entity) {
- fromBeanBinder.copyExcluding(entity, this, Email.PROPERTY_ATTACHMENT, Email.PROPERTY_MAIL_FOLDER);
-
+ fromBeanBinder.copyExcluding(entity, this, Email.PROPERTY_ATTACHMENT);
loadAttachments(entity);
+ setGroupedDemandes(entity.getEmailGroup());
}
- public void fromEntity(Email entity, List<MailField> fields) {
- List<String> properties = new ArrayList<String>();
- properties.add(Email.PROPERTY_TOPIA_ID);
- properties.add(Email.PROPERTY_TOPIA_ID);
- properties.add(Email.PROPERTY_TOPIA_ID);
- properties.add(Email.PROPERTY_TOPIA_ID);
- properties.add(Email.PROPERTY_TOPIA_ID);
-
- boolean noFields = CollectionUtils.isEmpty(fields);
- if (noFields || fields.contains(MailField.OBJECT)) {
- properties.add(Email.PROPERTY_OBJECT);
+ public void fromEntityExcluding(Email entity, Set<String> properties) {
+ boolean includeAttachment = properties.add(Email.PROPERTY_ATTACHMENT);
+ boolean includeDemandGroup = properties.add(Email.PROPERTY_EMAIL_GROUP);
+ fromBeanBinder.copyExcluding(entity, this, properties.toArray(new String[properties.size()]));
+ if (includeAttachment) {
+ loadAttachments(entity);
}
- if (noFields || fields.contains(MailField.PROJECT_REFERENCE)) {
- properties.add(Email.PROPERTY_PROJECT_REFERENCE);
+ if (includeDemandGroup) {
+ setGroupedDemandes(entity.getEmailGroup());
}
- if (noFields || fields.contains(MailField.COMPANY_REFERENCE)) {
- properties.add(Email.PROPERTY_COMPANY_REFERENCE);
- }
- if (noFields || fields.contains(MailField.COMMENT)) {
- properties.add(Email.PROPERTY_COMMENT);
- }
- if (noFields || fields.contains(MailField.SENDER)) {
- properties.add(Email.PROPERTY_SENDER);
- }
- if (noFields || fields.contains(MailField.RECEPTION_DATE)) {
- properties.add(Email.PROPERTY_RECEPTION_DATE);
- }
- if (noFields || fields.contains(MailField.RECIPIENT)) {
- properties.add(Email.PROPERTY_RECIPIENT);
- }
- if (noFields || fields.contains(MailField.DEMAND_STATUS)) {
- properties.add(Email.PROPERTY_DEMAND_STATUS);
- }
- if (noFields || fields.contains(MailField.RECEPTION_DATE)) {
- properties.add(Email.PROPERTY_RECEPTION_DATE);
- }
- if (noFields || fields.contains(MailField.EDI_RETURN)) {
- properties.add(Email.PROPERTY_EDI_ERROR);
- }
- if (noFields || fields.contains(MailField.PRIORITY)) {
- properties.add(Email.PROPERTY_PRIORITY);
- }
- if (noFields || fields.contains(MailField.DEMAND_TYPE)) {
- properties.add(Email.PROPERTY_DEMAND_TYPE);
- }
- if (noFields || CollectionUtils.containsAny(fields,
- Lists.newArrayList(MailField.CLIENT_BRAND,
- MailField.CLIENT_CODE))) {
- properties.add(Email.PROPERTY_CLIENT);
- }
- if (noFields || CollectionUtils.containsAny(fields,
- Lists.newArrayList(MailField.REFERENCE,
- MailField.QUOTATION_NB,
- MailField.PF_NB,
- MailField.SAV_NB))) {
- properties.add(Email.PROPERTY_RANGE_ROW);
- }
- if (noFields || fields.contains(MailField.ETAT_ATTENTE)) {
- properties.add(Email.PROPERTY_ETAT_ATTENTE);
- }
- if (noFields || fields.contains(MailField.TAKEN_BY)) {
- properties.add(Email.PROPERTY_TAKEN_BY);
- }
- if (noFields || fields.contains(MailField.REPLIES)) {
- properties.add(Email.PROPERTY_REPLIES);
- }
- if (noFields || fields.contains(MailField.ATTACHMENT)) {
- properties.add(Email.PROPERTY_ATTACHMENT);
- }
- if (noFields || fields.contains(MailField.LAST_ATTACHMENT_OPENING_IN_THIS_FOLDER_USER)) {
- properties.add(Email.PROPERTY_HISTORY);
- }
+ }
+ public void fromEntityIncluding(Email entity, Set<String> properties) {
fromBeanBinder.copy(entity, this, properties.toArray(new String[properties.size()]));
-
- if (noFields || fields.contains(MailField.ATTACHMENT)) {
+ if (properties.isEmpty() || properties.contains(Email.PROPERTY_ATTACHMENT)) {
loadAttachments(entity);
}
+ if (properties.isEmpty() || properties.contains(Email.PROPERTY_EMAIL_GROUP)) {
+ setGroupedDemandes(entity.getEmailGroup());
+ }
}
protected void loadAttachments(Email entity) {
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -401,7 +401,7 @@
SaveAndOpenDialogAction action = new SaveAndOpenDialogAction(demandeUI.getHandler(),
false,
dialogContent,
- t("faxtomail.reply.title", currentDemand.getObject()),
+ t("faxtomail.reply.title", currentDemand.getTitle()),
new Dimension(800, 600),
true);
@@ -416,7 +416,7 @@
SaveAndOpenDialogAction action = new SaveAndOpenDialogAction(demandeUI.getHandler(),
false,
dialogContent,
- t("faxtomail.searchToGroup.title", demandeUI.getModel().getObject()),
+ t("faxtomail.searchToGroup.title", demandeUI.getModel().getTitle()),
getContext().getMainUI().getSize(),
true);
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIModel.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIModel.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIModel.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -127,6 +127,10 @@
fireDemandRemoved(demand, i);
}
+ public boolean containsDemand(DemandeUIModel demand) {
+ return demands.contains(demand);
+ }
+
public void addDemandsListener(DemandsListener listener) {
listeners.add(listener);
}
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/ButtonHistory.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/ButtonHistory.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/ButtonHistory.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -26,13 +26,17 @@
import com.franciaflex.faxtomail.persistence.entities.Email;
import com.franciaflex.faxtomail.persistence.entities.History;
+import com.franciaflex.faxtomail.persistence.entities.Reply;
import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext;
+import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel;
import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupButton;
+import org.apache.commons.collections4.CollectionUtils;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collection;
+import static org.nuiton.i18n.I18n.n;
import static org.nuiton.i18n.I18n.t;
/**
@@ -42,22 +46,35 @@
*/
public class ButtonHistory extends AbstractToolbarPopupButton<HistoryListUI> {
- public ButtonHistory() {
+ private PropertyChangeListener listener = new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ Collection<History> histories = (Collection<History>) evt.getNewValue();
+ setText(getButtonText(histories));
+ }
+ };
+
+ public ButtonHistory(DemandeUIModel model) {
setToolTipText(t("faxtomail.historyList.action.tip"));
- int historySize = popup.getModel().sizeHistory();
- setText(t("faxtomail.historyList.text", historySize));
+ init(model);
+ }
- popup.getModel().addPropertyChangeListener(Email.PROPERTY_HISTORY, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- Collection<History> history = (Collection<History>) evt.getNewValue();
- if (history != null) {
- setText(t("faxtomail.historyList.text", history.size()));
- }
- }
- });
+ public String getButtonText(Collection<History> histories) {
+ int replyNb = CollectionUtils.size(histories);
+ return t("faxtomail.historyList.text", replyNb);
}
+ public void init(DemandeUIModel model) {
+ if (popup.getModel() != null) {
+ popup.getModel().removePropertyChangeListener(Email.PROPERTY_HISTORY, listener);
+ }
+ popup.setModel(model);
+ if (model != null) {
+ popup.getModel().addPropertyChangeListener(Email.PROPERTY_HISTORY, listener);
+ setText(getButtonText(model != null ? model.getHistory() : null));
+ }
+ }
+
@Override
protected String getActionIcon() {
return "view-history";
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUI.jaxx
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUI.jaxx 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUI.jaxx 2014-08-12 09:24:40 UTC (rev 522)
@@ -33,7 +33,7 @@
</import>
<DemandeUIModel id='model'
- initializer='getContextValue(DemandeUIModel.class)'/>
+ javaBean="null"/>
<JXTitledPanel id='body'>
<JScrollPane id='attachmentBodyScrollPane'>
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUIHandler.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/history/HistoryListUIHandler.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -84,44 +84,49 @@
protected Action sendAction;
@Override
- public void beforeInit(HistoryListUI ui) {
- super.beforeInit(ui);
-
- DemandeUIModel currentEmail = getContext().getCurrentEmail();
- this.ui.setContextValue(currentEmail);
- }
-
- @Override
public void afterInit(HistoryListUI ui) {
super.afterInit(ui);
- JXList list = ui.getHistories();
+ final JXList list = ui.getHistories();
list.setCellRenderer(new HistoryListCellRenderer());
JaxxDefaultListModel listModel = new JaxxDefaultListModel<History>();
- final List<History> histories;
- if (getModel().getHistory() != null) {
- histories = new ArrayList<History>(getModel().getHistory());
- } else {
- histories = new ArrayList<History>();
- }
- //sort histories by modification date
- Collections.sort(histories, Ordering.natural().onResultOf(new Function<History, Comparable>() {
- @Override
- public Comparable apply(History history) {
- return history.getModificationDate();
- }
- }));
-
+ List<History> histories = new ArrayList<History>();
listModel.setAllElements(histories);
list.setModel(listModel);
list.addHighlighter(HighlighterFactory.createAlternateStriping());
- getModel().addPropertyChangeListener(Email.PROPERTY_HISTORY, new PropertyChangeListener() {
+
+ final PropertyChangeListener listener = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
- Collection<History> history = (Collection<History>) evt.getNewValue();
- ((JaxxDefaultListModel) getUI().getHistories().getModel()).setAllElements(history);
+ Collection<History> newValue = (Collection<History>) evt.getNewValue();
+ List<History> histories = new ArrayList<History>();
+ if (newValue != null) {
+ histories.addAll(newValue);
+ }
+ //sort histories by modification date
+ Collections.sort(histories, Ordering.natural().onResultOf(new Function<History, Comparable>() {
+ @Override
+ public Comparable apply(History history) {
+ return history.getModificationDate();
+ }
+ }));
+ ((JaxxDefaultListModel) getUI().getHistories().getModel()).setAllElements(histories);
}
+ };
+ getUI().addPropertyChangeListener(HistoryListUI.PROPERTY_MODEL, new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ DemandeUIModel oldModel = (DemandeUIModel) evt.getOldValue();
+ if (oldModel != null) {
+ oldModel.removePropertyChangeListener(Email.PROPERTY_HISTORY, listener);
+ }
+ DemandeUIModel newModel = (DemandeUIModel) evt.getNewValue();
+ if (newModel != null) {
+ newModel.addPropertyChangeListener(Email.PROPERTY_HISTORY, listener);
+ listener.propertyChange(new PropertyChangeEvent(newModel, Email.PROPERTY_HISTORY, null, newModel.getHistory()));
+ }
+ }
});
sendAction = new AbstractAction() {
@@ -132,7 +137,7 @@
// AbstractToolbarPopupHandler.this.ui.dispose();
// AbstractToolbarPopupHandler.this.ui.setVisible(false);
StringBuilder historyAsString = new StringBuilder();
- for (History history : histories) {
+ for (History history : getModel().getHistory()) {
historyAsString.append(t("faxtomail.common.on.label") + " " + decorate(history.getModificationDate()))
.append(" : " + JAXXUtil.getStringValue(history.getType().getLabel()));
String decoratedFields = decorateFields(history.getFields());
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorNoteUI.css 2014-08-12 09:24:40 UTC (rev 522)
@@ -38,10 +38,10 @@
#removeButton {
text: "X";
- borderPainted: { false };
+ /*borderPainted: { false };
border: { null };
opaque : { false };
- background: { null };
+ background: { null }; */
}
#noteText {
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.css 2014-08-12 09:24:40 UTC (rev 522)
@@ -34,6 +34,7 @@
#noteButton {
actionIcon: note;
toolTipText: "faxtomail.pdfEditor.button.addNote.tip";
+ selected: true;
}
#crossButton {
@@ -41,11 +42,16 @@
toolTipText: "faxtomail.pdfEditor.button.addCross.tip";
}
-#lineButton {
- actionIcon: line;
- toolTipText: "faxtomail.pdfEditor.button.addLine.tip";
+#hLineButton {
+ actionIcon: hline;
+ toolTipText: "faxtomail.pdfEditor.button.addHLine.tip";
}
+#vLineButton {
+ actionIcon: vline;
+ toolTipText: "faxtomail.pdfEditor.button.addVLine.tip";
+}
+
#highlighterButton {
actionIcon: highlighter;
toolTipText: "faxtomail.pdfEditor.button.addHighlighter.tip";
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUI.jaxx 2014-08-12 09:24:40 UTC (rev 522)
@@ -49,15 +49,17 @@
<JToolBar id="toolbar"
constraints='BorderLayout.NORTH'>
- <JButton id='noteButton'
- onActionPerformed="handler.addNote()"/>
- <JButton id='crossButton'
- onActionPerformed="handler.addCross()"/>
- <JButton id='lineButton'
- onActionPerformed="handler.addLine()"/>
- <JButton id='highlighterButton'
- onActionPerformed="handler.addHighlighter()"/>
+ <JToggleButton id='noteButton' buttonGroup="actionGroup" value="NOTE"/>
+ <!--onActionPerformed="handler.addNote()"/>-->
+ <JToggleButton id='crossButton' buttonGroup="actionGroup" value="CROSS"/>
+ <!--onActionPerformed="handler.addCross()"/>-->
+ <JToggleButton id='hLineButton' buttonGroup="actionGroup" value="HLINE"/>
+ <JToggleButton id='vLineButton' buttonGroup="actionGroup" value="VLINE"/>
+ <!--onActionPerformed="handler.addLine()"/>-->
+ <JToggleButton id='highlighterButton' buttonGroup="actionGroup" value="HIGHLIGHTER"/>
+ <!--onActionPerformed="handler.addHighlighter()"/>-->
+
<JSeparator constructorParams="SwingConstants.VERTICAL"/>
<JButton id="prevPageButton"
@@ -89,7 +91,7 @@
<JScrollPane constraints='BorderLayout.CENTER'>
<JPanel>
<JPanel id="container" layout="{null}">
- <JImagePanel id="documentPanel">
+ <JImagePanel id="documentPanel" onMouseClicked="handler.addEditionComponent(event)">
</JImagePanel>
</JPanel>
</JPanel>
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -26,14 +26,10 @@
import static org.nuiton.i18n.I18n.t;
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.Dimension;
-import java.awt.Image;
-import java.awt.Insets;
-import java.awt.Rectangle;
+import java.awt.*;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
+import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
import java.awt.image.RenderedImage;
import java.beans.PropertyChangeEvent;
@@ -58,6 +54,7 @@
import com.franciaflex.faxtomail.services.FaxToMailServiceContext;
import jaxx.runtime.swing.ComponentMover;
import jaxx.runtime.swing.ComponentResizer;
+import jaxx.runtime.swing.JAXXButtonGroup;
import jaxx.runtime.validator.swing.SwingValidator;
import org.apache.commons.logging.Log;
@@ -107,8 +104,20 @@
cm.setDragInsets(cr.getDragInsets());
cm.setEdgeInsets(new Insets(0, 0, 0, 0));
+ final PDFEditorUIModel model = getModel();
- final PDFEditorUIModel model = getModel();
+ JAXXButtonGroup actionGroup = ui.getActionGroup();
+ actionGroup.addPropertyChangeListener(JAXXButtonGroup.SELECTED_VALUE_PROPERTY, new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ String value = (String) evt.getNewValue();
+ model.setSelectedComponent(PDFEditorUIModel.EditionComponent.valueOf(value));
+ }
+ });
+
+ String value = (String) actionGroup.getSelectedValue();
+ model.setSelectedComponent(PDFEditorUIModel.EditionComponent.valueOf(value));
+
ui.getContainer().addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
@@ -256,39 +265,67 @@
}
- public void addNote() {
+ public void addEditionComponent(MouseEvent event) {
+ PDFEditorUIModel.EditionComponent editionComponent = getModel().getSelectedComponent();
+ switch (editionComponent) {
+ case NOTE:
+ addNote(event.getX(), event.getY());
+ break;
+ case CROSS:
+ addCross(event.getX(), event.getY());
+ break;
+ case HLINE:
+ addHLine(event.getX(), event.getY());
+ break;
+ case VLINE:
+ addVLine(event.getX(), event.getY());
+ break;
+ case HIGHLIGHTER:
+ addHighlighter(event.getX(), event.getY());
+ break;
+ }
+ }
+
+ public void addNote(int x, int y) {
PDFEditorNoteUI note = new PDFEditorNoteUI();
String title = decorate(new Date()) + " - " + getContext().getCurrentUser().getTrigraph();
note.setTitle(title);
- addPanel(note);
+ addPanel(note, x, y);
}
- public void addCross() {
+ public void addCross(int x, int y) {
PDFEditorCrossUI cross = new PDFEditorCrossUI();
- addPanel(cross);
+ addPanel(cross, x, y);
cr.registerComponent(cross);
}
- public void addLine() {
+ public void addHLine(int x, int y) {
PDFEditorLineUI line = new PDFEditorLineUI();
- addPanel(line);
+ line.setHorizontal(true);
+ addPanel(line, x, y);
cr.registerComponent(ComponentResizer.DIRECTION_HORIZONTAL, line);
}
- public void addHighlighter() {
+ public void addVLine(int x, int y) {
+ PDFEditorLineUI line = new PDFEditorLineUI();
+ line.setHorizontal(false);
+ addPanel(line, x, y);
+ cr.registerComponent(ComponentResizer.DIRECTION_VERTICAL, line);
+ }
+
+ public void addHighlighter(int x, int y) {
PDFEditorHighlighterUI highlighter = new PDFEditorHighlighterUI();
- addPanel(highlighter);
+ addPanel(highlighter, x, y);
cr.registerComponent(highlighter);
}
- protected void addPanel(JPanel panel) {
+ protected void addPanel(JPanel panel, int x, int y) {
JPanel container = ui.getContainer();
container.add(panel, 0);
Insets insets = container.getInsets();
Dimension size = panel.getPreferredSize();
- Rectangle rect = container.getVisibleRect();
- panel.setBounds(rect.x + insets.left, rect.y + insets.top,
+ panel.setBounds(x + insets.left, y + insets.top,
size.width, size.height);
container.updateUI();
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -54,6 +54,12 @@
protected DemandeUIModel demand;
+ protected EditionComponent selectedComponent;
+
+ public static enum EditionComponent {
+ NOTE, CROSS, HLINE, VLINE, HIGHLIGHTER
+ }
+
public class Page {
protected List<PDFEditorNoteUI> notes = new ArrayList<PDFEditorNoteUI>();
@@ -255,6 +261,14 @@
this.demand = demand;
}
+ public EditionComponent getSelectedComponent() {
+ return selectedComponent;
+ }
+
+ public void setSelectedComponent(EditionComponent selectedComponent) {
+ this.selectedComponent = selectedComponent;
+ }
+
@Override
protected Attachment newEntity() {
return new AttachmentImpl();
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/reply/ReplyFormUIHandler.java 2014-08-12 09:24:40 UTC (rev 522)
@@ -121,10 +121,7 @@
models.addAll(demand.getGroupedDemandes());
for (DemandeUIModel demandeUIModel : models) {
- String prefix = demandeUIModel.getObject() + " - ";
- if (StringUtils.isNotBlank(demandeUIModel.getCompanyReference())) {
- prefix = demandeUIModel.getCompanyReference() + " - " + prefix;
- }
+ String prefix = demandeUIModel.getTitle();
for (Attachment attachment : demandeUIModel.getAttachment()) {
ReplyAttachmentModel replyOriginalAttachmentModel =
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-08-12 09:08:06 UTC (rev 521)
+++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-12 09:24:40 UTC (rev 522)
@@ -30,8 +30,12 @@
faxtomail.alert.alreadyTakenBy.title=Document déjà pris
faxtomail.alert.archiveConfirmation.message=<html>Êtes vous sûr de vouloir archiver cet élément ?<br/>L'archivage est définitif.</html>
faxtomail.alert.archiveConfirmation.title=Confirmation de l'archivage
+faxtomail.alert.emailMoved.message=<html>Depuis que vous avez chargé les éléments du dossier %1$s, l'élément<br/>%3$s<br/>a été déplacé dans le dossier %2$s.</html>
+faxtomail.alert.emailMoved.title=Élément déplacé
faxtomail.alert.groupConfirmation.message=<html>Êtes vous sûr de vouloir grouper les éléments<br/>%1$s et<br/>%2$s ?<br/>Le groupement est définitif.</html>
faxtomail.alert.groupConfirmation.title=Confirmation du groupement
+faxtomail.alert.userNotAuthorizedToReadEmail.message=Vous n'avez pas le droit de lire les éléments du dossier %s
+faxtomail.alert.userNotAuthorizedToReadEmail.title=Dossier interdit
faxtomail.attachment.editedFile.name=%s-annoté
faxtomail.attachmentCellRenderer.text=(%s)
faxtomail.attachmentEditor.action.add.tip=Ajouter une pièce jointe
@@ -98,7 +102,7 @@
faxtomail.demande.firstOpened.label=Première ouverture
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.group.successful=Groupement réussi
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
@@ -213,9 +217,11 @@
faxtomail.pdfEditor.action.validate.tip=Enregistrer les changements et fermer
faxtomail.pdfEditor.askSaveBeforeLeaving.save=Les modifications apportées n'ont pas été sauvegardées.
faxtomail.pdfEditor.button.addCross.tip=Ajouter une croix
+faxtomail.pdfEditor.button.addHLine.tip=
faxtomail.pdfEditor.button.addHighlighter.tip=Ajouter un surlignement
faxtomail.pdfEditor.button.addLine.tip=Ajouter une ligne
faxtomail.pdfEditor.button.addNote.tip=Ajouter une note
+faxtomail.pdfEditor.button.addVLine.tip=
faxtomail.pdfEditor.button.nextPage=Page suivante
faxtomail.pdfEditor.button.previousPage=Page précédente
faxtomail.pdfEditor.convertToPdf.error=
Added: trunk/faxtomail-ui-swing/src/main/resources/icons/action-hline.png
===================================================================
(Binary files differ)
Property changes on: trunk/faxtomail-ui-swing/src/main/resources/icons/action-hline.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/faxtomail-ui-swing/src/main/resources/icons/action-vline.png
===================================================================
(Binary files differ)
Property changes on: trunk/faxtomail-ui-swing/src/main/resources/icons/action-vline.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r521 - trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande
by kmorin@users.forge.codelutin.com 12 Aug '14
by kmorin@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: kmorin
Date: 2014-08-12 11:08:06 +0200 (Tue, 12 Aug 2014)
New Revision: 521
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/521
Log:
correction icone filtre
Modified:
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java
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-08-12 07:29:24 UTC (rev 520)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeListUIHandler.java 2014-08-12 09:08:06 UTC (rev 521)
@@ -177,10 +177,10 @@
return b;
}
-// @Override
-// public void modelChanged(TableModel model) {
-// // do nothing
-// }
+ @Override
+ public void modelChanged(TableModel model) {
+ // do nothing
+ }
};
TableRowFilterSupport.forFilter(tableFilter).searchable(true).useTableRenderers(true).apply();
@@ -272,10 +272,6 @@
navigationTree.setEnabled(false);
MailFolder folder = folderNode.getMailFolder();
-// // open new transaction for current folder
-// getContext().createNewTransaction();
-// folder = getContext().getMailFolderService().getMailFolder(folder.getTopiaId()); // Fix lazy exception
-
getModel().setSelectedFolder(folder);
getContext().setCurrentMailFolder(folder);
@@ -342,7 +338,9 @@
}
if (currentMailFolder != null) {
DefaultMutableTreeNode node = nodesByFolder.get(currentMailFolder);
- navigationTree.setSelectionPath(new TreePath(node.getPath()));
+ if (node != null) {
+ navigationTree.setSelectionPath(new TreePath(node.getPath()));
+ }
}
}
@@ -593,7 +591,7 @@
}
model.setTo(sender);
- openFrame(dialogContent, t("faxtomail.reply.title", demand.getObject()), new Dimension(800, 600));
+ openFrame(dialogContent, t("faxtomail.reply.title", demand.getTitle()), new Dimension(800, 600));
}
public void archive() {
1
0
r520 - trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment
by echatellier@users.forge.codelutin.com 12 Aug '14
by echatellier@users.forge.codelutin.com 12 Aug '14
12 Aug '14
Author: echatellier
Date: 2014-08-12 09:29:24 +0200 (Tue, 12 Aug 2014)
New Revision: 520
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/520
Log:
Fix commons collections 4 import
Modified:
trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java
Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java
===================================================================
--- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java 2014-08-11 16:17:56 UTC (rev 519)
+++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/ButtonAttachment.java 2014-08-12 07:29:24 UTC (rev 520)
@@ -27,7 +27,7 @@
import com.franciaflex.faxtomail.persistence.entities.Attachment;
import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext;
import com.franciaflex.faxtomail.ui.swing.util.AbstractToolbarPopupButton;
-import org.apache.commons.collections.ListUtils;
+import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.CollectionUtils;
import java.beans.PropertyChangeEvent;
1
0
r519 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin
by echatellier@users.forge.codelutin.com 11 Aug '14
by echatellier@users.forge.codelutin.com 11 Aug '14
11 Aug '14
Author: echatellier
Date: 2014-08-11 18:17:56 +0200 (Mon, 11 Aug 2014)
New Revision: 519
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/519
Log:
refs-70 #5559: Import csv des archives existantes
Added:
trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java
trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/import-archive-input.jsp
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/EmailServiceImpl.java
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-08-11 14:46:33 UTC (rev 518)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-08-11 16:17:56 UTC (rev 519)
@@ -104,6 +104,13 @@
AttachmentFile getEmailDetailAsAttachment(Email email);
/**
+ * Retourne le nombre de mail archivé.
+ *
+ * @return le nombre de mail archivé
+ */
+ long getArchivedMailCount();
+
+ /**
* Import archive from input stream.
*
* @param is input stream of csv file
Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-11 14:46:33 UTC (rev 518)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-11 16:17:56 UTC (rev 519)
@@ -1296,4 +1296,11 @@
IOUtils.closeQuietly(inputStream);
}
}
+
+ @Override
+ public long getArchivedMailCount() {
+ EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
+ long result = emailDao.forDemandStatusEquals(DemandStatus.ARCHIVED).count();
+ return result;
+ }
}
Added: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java
===================================================================
--- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java (rev 0)
+++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java 2014-08-11 16:17:56 UTC (rev 519)
@@ -0,0 +1,116 @@
+package com.franciaflex.faxtomail.web.action.admin;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.InterceptorRef;
+import org.apache.struts2.convention.annotation.InterceptorRefs;
+import org.apache.struts2.convention.annotation.Result;
+
+import com.franciaflex.faxtomail.services.service.EmailService;
+import com.franciaflex.faxtomail.web.FaxToMailActionSupport;
+import com.opensymphony.xwork2.Preparable;
+
+/**
+ * Action de reprise des archives.
+ *
+ * @author Eric Chatellier
+ */
+@InterceptorRefs({
+ @InterceptorRef("faxToMailInterceptor"),
+ @InterceptorRef("loginInterceptor"),
+ @InterceptorRef("paramsPrepareParamsStack")
+})
+public class ImportArchiveAction extends FaxToMailActionSupport implements Preparable {
+
+ private static final Log log = LogFactory.getLog(ImportArchiveAction.class);
+
+ protected String attachmentBase;
+
+ protected File archiveFile;
+
+ protected EmailService emailService;
+
+ protected boolean disabledImport;
+
+ public void setEmailService(EmailService emailService) {
+ this.emailService = emailService;
+ }
+
+ public void setArchiveFile(File archiveFile) {
+ this.archiveFile = archiveFile;
+ }
+
+ public void setAttachmentBase(String attachmentBase) {
+ this.attachmentBase = attachmentBase;
+ }
+
+ public boolean isDisabledImport() {
+ return disabledImport;
+ }
+
+ @Override
+ public void prepare() throws Exception {
+ // check authorization
+ if (!getSession().isAdmin()) {
+ throw new RuntimeException("Not authorized");
+ }
+ }
+
+ @Override
+ @Action("import-archive-input")
+ public String input() throws Exception {
+ checkDisabled();
+ return super.input();
+ }
+
+ protected boolean checkDisabled() {
+
+ // pour eviter les erreurs, on considere que si 1000 mails archivés sont présents, il
+ // proviennent de la reprise des archives
+ if (emailService.getArchivedMailCount() > 1000) {
+ disabledImport = true;
+ }
+ return disabledImport;
+ }
+
+ @Override
+ public void validate() {
+ if (StringUtils.isEmpty(attachmentBase)) {
+ addActionError("Le répertoire de base des pièces jointes est obligatoire !");
+ }
+ else if (!new File(attachmentBase).isDirectory()) {
+ addActionError("Le répertoire de base des pièces jointes n'est pas un répertoire lisible !");
+ }
+ if (archiveFile == null) {
+ addActionError("Le fichier d'archive est obligatoire !");
+ }
+
+ checkDisabled();
+ }
+
+ @Action(results = {@Result(type = "redirectAction", params = {"actionName", "import-archive-input"})})
+ @Override
+ public String execute() throws Exception {
+ String result = INPUT;
+
+ if (!checkDisabled()) {
+ try (InputStream is = new FileInputStream(archiveFile)) {
+ File file = new File(attachmentBase);
+ emailService.importArchive(is, file);
+ result = SUCCESS;
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't import archive file", ex);
+ }
+ addActionError("Can't import archive " + ex.getMessage());
+ }
+ }
+ return result;
+ }
+}
Property changes on: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ImportArchiveAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/import-archive-input.jsp
===================================================================
--- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/import-archive-input.jsp (rev 0)
+++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/import-archive-input.jsp 2014-08-11 16:17:56 UTC (rev 519)
@@ -0,0 +1,66 @@
+<%--
+ #%L
+ FaxToMail :: Web
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2014 Franciaflex, Code Lutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+ --%>
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<!DOCTYPE html>
+<%@taglib uri="/struts-tags" prefix="s" %>
+
+<html>
+ <head>
+ <title>Reprise des archives</title>
+ </head>
+
+ <body>
+
+ <div id="main-container" class="container">
+
+ <h1 class="page-header">Reprise des archives</h1>
+
+ <s:if test="disabledImport">
+ <em>L'import des archives a déjà été effectué, il n'est plus disponible</em>
+ </s:if>
+ <s:else>
+ <s:form id="main_form" action="import-archive" method="post" enctype="multipart/form-data">
+
+ <s:actionmessage/>
+ <s:actionerror/>
+
+ <div class="form-group">
+ <label for="archiveFile" class="control-label">Fichier d'archive :</label>
+ <input type="file" id="archiveFile" name="archiveFile" class="form-control">
+ <p class="help-block">Format du fichier csv : <code>receptionDate;projectReference;sender;fax;recipient;object;archiveDate;companyReference;originalEmail;comment;etatAttente;demandType;priority;mailFolder;client-code;client-brand;attachments</code><br />
+ Encodage du fichier csv : <code>${applicationConfig.importFileEncoding}</code></p>
+ </div>
+ <div class="form-group">
+ <label for="attachmentBase" class="control-label">Répertoire de base des pièces jointes :</label>
+ <input type="text" id="attachmentBase" name="attachmentBase" class="form-control">
+ <p class="help-block">Dossier contenant les pièces jointes référencées dans le fichier d'archive</p>
+ </div>
+ <button type="submit" class="btn btn-primary navbar-btn">Valider</button>
+ <hr />
+
+ </s:form>
+ </s:else>
+ </div>
+ </body>
+</html>
Property changes on: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/import-archive-input.jsp
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r518 - in trunk/faxtomail-service/src: main/java/com/franciaflex/faxtomail/services/service main/java/com/franciaflex/faxtomail/services/service/imports test/java/com/franciaflex/faxtomail/services/service test/resources test/resources/archives
by echatellier@users.forge.codelutin.com 11 Aug '14
by echatellier@users.forge.codelutin.com 11 Aug '14
11 Aug '14
Author: echatellier
Date: 2014-08-11 16:46:33 +0200 (Mon, 11 Aug 2014)
New Revision: 518
Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/518
Log:
refs-50 #5559: Import csv des archives existantes
Added:
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportBean.java
trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportModel.java
trunk/faxtomail-service/src/test/resources/archives/
trunk/faxtomail-service/src/test/resources/archives/archives.csv
trunk/faxtomail-service/src/test/resources/archives/att1.txt
trunk/faxtomail-service/src/test/resources/archives/att2.txt
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/EmailServiceImpl.java
trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java
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-08-11 10:58:27 UTC (rev 517)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java 2014-08-11 14:46:33 UTC (rev 518)
@@ -37,11 +37,14 @@
import com.franciaflex.faxtomail.services.FaxToMailService;
import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException;
import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException;
+
import org.apache.commons.mail.EmailException;
import org.nuiton.util.pagination.PaginationParameter;
import org.nuiton.util.pagination.PaginationResult;
import javax.mail.MessagingException;
+
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
@@ -99,4 +102,12 @@
void updateRangeRowsWithEdiReturns();
AttachmentFile getEmailDetailAsAttachment(Email email);
+
+ /**
+ * Import archive from input stream.
+ *
+ * @param is input stream of csv file
+ * @param attachmentBase base folder containing attachment listed in csv file
+ */
+ void importArchive(InputStream is, File attachmentBase);
}
Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-11 10:58:27 UTC (rev 517)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java 2014-08-11 14:46:33 UTC (rev 518)
@@ -32,6 +32,8 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
@@ -40,6 +42,7 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -48,9 +51,9 @@
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
-import com.google.common.collect.Collections2;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
@@ -66,6 +69,9 @@
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.hibernate.Hibernate;
+import org.nuiton.csv.Import;
+import org.nuiton.csv.ImportRuntimeException;
+import org.nuiton.jaxx.application.ApplicationTechnicalException;
import org.nuiton.topia.persistence.TopiaEntities;
import org.nuiton.topia.persistence.TopiaQueryBuilderAddCriteriaOrRunQueryStep;
import org.nuiton.util.beans.Binder;
@@ -77,10 +83,14 @@
import com.franciaflex.faxtomail.services.FaxToMailServiceSupport;
import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException;
import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException;
+import com.franciaflex.faxtomail.services.service.imports.ArchiveImportBean;
+import com.franciaflex.faxtomail.services.service.imports.ArchiveImportModel;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
import com.google.common.base.Strings;
+import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -1173,4 +1183,117 @@
Hibernate.initialize(email.getEtatAttente());
Hibernate.initialize(email.getPriority());
}
+
+ /**
+ * Compute mail folder path (separated by /) from root to current.
+ *
+ * @param folder folder to get path
+ * @return full mail folder path
+ */
+ protected String getFullMailFolderPath(MailFolder folder) {
+ StringBuilder sb = new StringBuilder(folder.getName());
+ MailFolder loopFolder = folder.getParent();
+ while (loopFolder != null) {
+ sb.insert(0, "/");
+ sb.insert(0, loopFolder.getName());
+ loopFolder = loopFolder.getParent();
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public void importArchive(InputStream inputStream, File attachmentBase) {
+
+ // all doas involved
+ EmailTopiaDao emailDao = getPersistenceContext().getEmailDao();
+ DemandTypeTopiaDao demandTypedao = getPersistenceContext().getDemandTypeDao();
+ PriorityTopiaDao priorityDao = getPersistenceContext().getPriorityDao();
+ EtatAttenteTopiaDao etatAttenteDao = getPersistenceContext().getEtatAttenteDao();
+ MailFolderTopiaDao mailFolderDao = getPersistenceContext().getMailFolderDao();
+ AttachmentTopiaDao attachmentDao = getPersistenceContext().getAttachmentDao();
+ AttachmentFileTopiaDao attachmentFileDao = getPersistenceContext().getAttachmentFileDao();
+
+ // get referentiel map
+ Map<String, DemandType> allDemandTypes = Maps.uniqueIndex(demandTypedao, new Function<DemandType, String>() {
+ @Override
+ public String apply(DemandType input) {
+ return input.getLabel();
+ }
+ });
+ Map<String, Priority> allPriority = Maps.uniqueIndex(priorityDao, new Function<Priority, String>() {
+ @Override
+ public String apply(Priority input) {
+ return input.getLabel();
+ }
+ });
+ Map<String, EtatAttente> allEtatAttentes = Maps.uniqueIndex(etatAttenteDao, new Function<EtatAttente, String>() {
+ @Override
+ public String apply(EtatAttente input) {
+ return input.getLabel();
+ }
+ });
+
+ // build folder map
+ Map<String, MailFolder> mailFolderMap = Maps.uniqueIndex(mailFolderDao, new Function<MailFolder, String>() {
+ @Override
+ public String apply(MailFolder input) {
+ return getFullMailFolderPath(input);
+ }
+ });
+
+ // run import
+ ArchiveImportModel archiveImportModel = new ArchiveImportModel(';', allEtatAttentes, allDemandTypes, allPriority, mailFolderMap);
+ Binder<ArchiveImportBean, Email> emailBinder = BinderFactory.newBinder(ArchiveImportBean.class, Email.class);
+ Import<ArchiveImportBean> importer = null;
+ try {
+ importer = Import.newImport(archiveImportModel, new InputStreamReader(inputStream, getApplicationConfig().getImportFileEncoding()));
+ for (ArchiveImportBean archiveBean : importer) {
+
+ // create new email to persist
+ Email email = emailDao.newInstance();
+ emailBinder.copy(archiveBean, email);
+ email.setDemandStatus(DemandStatus.ARCHIVED);
+
+ // persist it
+ email = emailDao.create(email);
+
+ // manage attachments
+ if (archiveBean.getAttachmentPaths() != null) {
+ Iterable<String> itAttachmentPaths = Splitter.on(',').omitEmptyStrings().trimResults().split(archiveBean.getAttachmentPaths());
+ for (String attachmentPath : itAttachmentPaths) {
+ File attFile = new File(attachmentBase, attachmentPath);
+ if (!attFile.isFile()) {
+ throw new RuntimeException("Missing file " + attFile.getAbsolutePath());
+ }
+
+ Attachment attachment = new AttachmentImpl();
+ AttachmentFile attachmentFile = new AttachmentFileImpl();
+ attachmentFile.setFilename(attFile.getName());
+ attachmentFile.setContent(FileUtils.readFileToByteArray(attFile));
+ attachmentFile = attachmentFileDao.create(attachmentFile);
+ attachment.setOriginalFile(attachmentFile);
+
+ attachment = attachmentDao.create(attachment);
+ email.addAttachment(attachment);
+ }
+
+ emailDao.update(email);
+ }
+ }
+
+ getPersistenceContext().commit();
+
+ } catch (ImportRuntimeException|IOException e) {
+ String message;
+ if (e.getCause() != null) {
+ message = e.getCause().getMessage();
+ } else {
+ message = e.getMessage();
+ }
+ throw new ApplicationTechnicalException(message, e);
+ } finally {
+ IOUtils.closeQuietly(importer);
+ IOUtils.closeQuietly(inputStream);
+ }
+ }
}
Added: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportBean.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportBean.java (rev 0)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportBean.java 2014-08-11 14:46:33 UTC (rev 518)
@@ -0,0 +1,49 @@
+package com.franciaflex.faxtomail.services.service.imports;
+
+import com.franciaflex.faxtomail.persistence.entities.EmailImpl;
+
+/**
+ * Bean model d'import des archives. (très proche de l'entité
+ * {@link com.franciaflex.faxtomail.persistence.entities.Email}).
+ *
+ * @author Eric Chatellier
+ */
+public class ArchiveImportBean extends EmailImpl {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 1498046445018851410L;
+
+ protected static final String PROPERTY_ATTACHMENT_PATHS = "attachmentPaths";
+ protected static final String PROPERTY_CLIENT_CODE = "clientCode";
+ protected static final String PROPERTY_CLIENT_BRAND = "clientBrand";
+
+ protected String attachmentPaths;
+
+ protected String clientCode;
+
+ protected String clientBrand;
+
+ public String getAttachmentPaths() {
+ return attachmentPaths;
+ }
+
+ public void setAttachmentPaths(String attachmentPaths) {
+ this.attachmentPaths = attachmentPaths;
+ }
+
+ public String getClientCode() {
+ return clientCode;
+ }
+
+ public void setClientCode(String clientCode) {
+ this.clientCode = clientCode;
+ }
+
+ public String getClientBrand() {
+ return clientBrand;
+ }
+
+ public void setClientBrand(String clientBrand) {
+ this.clientBrand = clientBrand;
+ }
+}
Property changes on: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportBean.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Added: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportModel.java
===================================================================
--- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportModel.java (rev 0)
+++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportModel.java 2014-08-11 14:46:33 UTC (rev 518)
@@ -0,0 +1,97 @@
+package com.franciaflex.faxtomail.services.service.imports;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+import org.nuiton.csv.ValueParser;
+import org.nuiton.csv.ext.AbstractImportModel;
+
+import com.franciaflex.faxtomail.persistence.entities.DemandType;
+import com.franciaflex.faxtomail.persistence.entities.Email;
+import com.franciaflex.faxtomail.persistence.entities.EtatAttente;
+import com.franciaflex.faxtomail.persistence.entities.MailFolder;
+import com.franciaflex.faxtomail.persistence.entities.Priority;
+
+/**
+ * Modele d'import des archives, défini comme suit:
+ *
+ * receptionDate;projectReference;sender;fax;recipient;object;archiveDate;companyReference;
+ * originalEmail;comment;etatAttente;demandType;priority;mailFolder;client-code;client-brand;attachments
+ *
+ * @author Eric Chatellier
+ */
+public class ArchiveImportModel extends AbstractImportModel<ArchiveImportBean> {
+
+ /**
+ * Parse date pattern : dd/MM/yyyy hh:mm:ss.
+ */
+ protected ValueParser<Date> dateValueParser = new ValueParser<Date>() {
+ protected DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
+ @Override
+ public Date parse(String value) throws ParseException {
+ return dateFormat.parse(value);
+ }
+ };
+
+ /**
+ * Parser for boolean fields.
+ */
+ protected ValueParser<Boolean> yesNoParser = new ValueParser<Boolean>() {
+ @Override
+ public Boolean parse(String value) throws ParseException {
+ return "oui".equalsIgnoreCase(value);
+ }
+ };
+
+ public ArchiveImportModel(char separator,
+ final Map<String, EtatAttente> etatAttentes, final Map<String, DemandType> demandTypes,
+ final Map<String, Priority> priorities, final Map<String, MailFolder> mailFolderMap) {
+ super(separator);
+
+ newMandatoryColumn("receptionDate", Email.PROPERTY_RECEPTION_DATE, dateValueParser);
+ newMandatoryColumn("projectReference", Email.PROPERTY_PROJECT_REFERENCE);
+ newMandatoryColumn("sender", Email.PROPERTY_SENDER);
+ newMandatoryColumn("fax", Email.PROPERTY_FAX, yesNoParser);
+ newMandatoryColumn("recipient", Email.PROPERTY_RECIPIENT);
+ newMandatoryColumn("object", Email.PROPERTY_OBJECT);
+ newMandatoryColumn("archiveDate", Email.PROPERTY_ARCHIVE_DATE, dateValueParser);
+ newMandatoryColumn("companyReference", Email.PROPERTY_COMPANY_REFERENCE);
+ newMandatoryColumn("originalEmail", Email.PROPERTY_ORIGINAL_EMAIL);
+ newMandatoryColumn("comment", Email.PROPERTY_COMMENT);
+ newMandatoryColumn("etatAttente", Email.PROPERTY_ETAT_ATTENTE, new ValueParser<EtatAttente>() {
+ @Override
+ public EtatAttente parse(String value) throws ParseException {
+ return etatAttentes.get(value);
+ }
+ });
+ newMandatoryColumn("demandType", Email.PROPERTY_DEMAND_TYPE, new ValueParser<DemandType>() {
+ @Override
+ public DemandType parse(String value) throws ParseException {
+ return demandTypes.get(value);
+ }
+ });
+ newMandatoryColumn("priority", Email.PROPERTY_PRIORITY, new ValueParser<Priority>() {
+ @Override
+ public Priority parse(String value) throws ParseException {
+ return priorities.get(value);
+ }
+ });
+ newMandatoryColumn("mailFolder", Email.PROPERTY_MAIL_FOLDER, new ValueParser<MailFolder>() {
+ @Override
+ public MailFolder parse(String value) throws ParseException {
+ return mailFolderMap.get(value);
+ }
+ });
+ newMandatoryColumn("client-code", ArchiveImportBean.PROPERTY_CLIENT_CODE);
+ newMandatoryColumn("client-brand", ArchiveImportBean.PROPERTY_CLIENT_BRAND);
+ newMandatoryColumn("attachments", ArchiveImportBean.PROPERTY_ATTACHMENT_PATHS);
+ }
+
+ @Override
+ public ArchiveImportBean newEmptyInstance() {
+ return new ArchiveImportBean();
+ }
+}
Property changes on: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/imports/ArchiveImportModel.java
___________________________________________________________________
Added: svn:eol-style
+ native
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java
===================================================================
--- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java 2014-08-11 10:58:27 UTC (rev 517)
+++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java 2014-08-11 14:46:33 UTC (rev 518)
@@ -24,14 +24,12 @@
* #L%
*/
+import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Collections;
import java.util.Set;
-import com.franciaflex.faxtomail.persistence.entities.MailFolder;
-import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Sets;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -43,6 +41,10 @@
import com.franciaflex.faxtomail.persistence.entities.DemandStatus;
import com.franciaflex.faxtomail.persistence.entities.Email;
import com.franciaflex.faxtomail.persistence.entities.EmailFilter;
+import com.franciaflex.faxtomail.persistence.entities.MailFolder;
+import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
/**
* Email service tests.
@@ -155,4 +157,17 @@
Assert.assertTrue(Sets.intersection(page1Ids, page2Ids).isEmpty());
}
+
+ /**
+ * Test de l'import de la reprise des archives.
+ *
+ * @throws IOException
+ */
+ @Test
+ public void testImportArchive() throws IOException {
+ try (InputStream is = EmailServiceTest.class.getResourceAsStream("/archives/archives.csv")) {
+ File attachmentBase = new File("src/test/resources/archives");
+ service.importArchive(is, attachmentBase);
+ }
+ }
}
Added: trunk/faxtomail-service/src/test/resources/archives/archives.csv
===================================================================
--- trunk/faxtomail-service/src/test/resources/archives/archives.csv (rev 0)
+++ trunk/faxtomail-service/src/test/resources/archives/archives.csv 2014-08-11 14:46:33 UTC (rev 518)
@@ -0,0 +1,2 @@
+receptionDate;projectReference;sender;fax;recipient;object;archiveDate;companyReference;originalEmail;comment;etatAttente;demandType;priority;mailFolder;client-code;client-brand;attachments
+30/07/1984 23:10:00;naissance de l'élu;dieu@skysupport.com;non;humanity@populasse.fr;Une nouvelle ere commence;30/07/2014 12:00:00;osef;"Ha la la, je te raconte pas...";"no comment";Pris;Retour;Haut;Franciaflex/Chargés de clientèle/Agathe;99153;FX;att1.txt,att2.txt
Added: trunk/faxtomail-service/src/test/resources/archives/att1.txt
===================================================================
--- trunk/faxtomail-service/src/test/resources/archives/att1.txt (rev 0)
+++ trunk/faxtomail-service/src/test/resources/archives/att1.txt 2014-08-11 14:46:33 UTC (rev 518)
@@ -0,0 +1 @@
+Test
\ No newline at end of file
Added: trunk/faxtomail-service/src/test/resources/archives/att2.txt
===================================================================
--- trunk/faxtomail-service/src/test/resources/archives/att2.txt (rev 0)
+++ trunk/faxtomail-service/src/test/resources/archives/att2.txt 2014-08-11 14:46:33 UTC (rev 518)
@@ -0,0 +1 @@
+Re test
\ No newline at end of file
1
0