Author: athimel Date: 2014-08-05 16:36:30 +0200 (Tue, 05 Aug 2014) New Revision: 472 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/472 Log: Fix service instantiation in module services Added: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java Removed: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceContext.java trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/AbstractFaxToMailServiceTest.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/ClientServiceTest.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java trunk/pom.xml Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceContext.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceContext.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceContext.java 2014-08-05 14:36:30 UTC (rev 472) @@ -53,6 +53,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailTopiaPersistenceContext; import com.franciaflex.faxtomail.services.service.LdapService; import com.franciaflex.faxtomail.services.service.ldap.LdapServiceMock; +import com.google.common.base.Preconditions; public class FaxToMailServiceContext implements Closeable { @@ -69,6 +70,7 @@ protected FaxToMailServiceFactory serviceFactory; public FaxToMailServiceContext(FaxToMailTopiaApplicationContext topiaApplicationContext) { + Preconditions.checkNotNull(topiaApplicationContext, "Cannot create an ServiceContext without an ApplicationContext"); this.topiaApplicationContext = topiaApplicationContext; this.serviceFactory = new FaxToMailProxiedServiceFactory(); } Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/FaxToMailServiceSupport.java 2014-08-05 14:36:30 UTC (rev 472) @@ -65,26 +65,26 @@ } protected DecoratorService getDecoratorService() { - return newService(DecoratorServiceImpl.class); + return newService(DecoratorService.class); } protected ConfigurationService getConfigurationService() { - return newService(ConfigurationServiceImpl.class); + return newService(ConfigurationService.class); } protected MailFolderService getMailFolderService() { - return newService(MailFolderServiceImpl.class); + return newService(MailFolderService.class); } protected EmailService getEmailService() { - return newService(EmailServiceImpl.class); + return newService(EmailService.class); } protected ReferentielService getReferentielService() { - return newService(ReferentielServiceImpl.class); + return newService(ReferentielService.class); } protected ClientService getClientService() { - return newService(ClientServiceImpl.class); + return newService(ClientService.class); } } Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/AbstractFaxToMailServiceTest.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/AbstractFaxToMailServiceTest.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/AbstractFaxToMailServiceTest.java 2014-08-05 14:36:30 UTC (rev 472) @@ -256,7 +256,7 @@ if (serviceContext == null) { - FaxToMailServiceContext serviceContext = new FaxToMailServiceContext(applicationContext); + FaxToMailServiceContext serviceContext = new FaxToMailServiceContext(getApplicationContext()); serviceContext.setApplicationConfig(getApplicationConfig()); Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/ClientServiceTest.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/ClientServiceTest.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/ClientServiceTest.java 2014-08-05 14:36:30 UTC (rev 472) @@ -63,7 +63,7 @@ @Test public void testAddNewClientInTmpTable() { - ClientService clientService = newService(ClientServiceImpl.class); + ClientService clientService = newService(ClientService.class); NewClientTopiaDao newClientDao = getServiceContext().getPersistenceContext().getNewClientDao(); ClientTopiaDao clientDao = getServiceContext().getPersistenceContext().getClientDao(); 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-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java 2014-08-05 14:36:30 UTC (rev 472) @@ -53,9 +53,9 @@ @Before public void setUp() throws IOException { - service = newService(EmailServiceImpl.class); - referentielService = newService(ReferentielServiceImpl.class); - userService = newService(UserServiceImpl.class); + service = newService(EmailService.class); + referentielService = newService(ReferentielService.class); + userService = newService(UserService.class); newService(InitTestData.class).initTestData(); } Deleted: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java 2014-08-05 14:36:30 UTC (rev 472) @@ -1,309 +0,0 @@ -package com.franciaflex.faxtomail.services.service; - -/* - * #%L - * FaxToMail :: Service - * $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% - */ - -import static org.nuiton.i18n.I18n.t; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.franciaflex.faxtomail.persistence.entities.MailField; - -import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.decorator.Decorator; - -import com.franciaflex.faxtomail.persistence.entities.Client; -import com.franciaflex.faxtomail.persistence.entities.DemandStatus; -import com.franciaflex.faxtomail.persistence.entities.DemandType; -import com.franciaflex.faxtomail.persistence.entities.Email; -import com.franciaflex.faxtomail.persistence.entities.EmailTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.EtatAttente; -import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; -import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.History; -import com.franciaflex.faxtomail.persistence.entities.HistoryTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.HistoryType; -import com.franciaflex.faxtomail.persistence.entities.MailFolder; -import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.Priority; -import com.franciaflex.faxtomail.persistence.entities.Range; -import com.franciaflex.faxtomail.persistence.entities.RangeRow; -import com.franciaflex.faxtomail.persistence.entities.RangeRowTopiaDao; -import com.franciaflex.faxtomail.services.DecoratorService; -import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; -import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - -/** - * Test service to manage test data. - * - * @author Eric Chatellier - */ -public class InitTestData extends FaxToMailServiceSupport { - - private static final Log log = LogFactory.getLog(InitTestData.class); - - /** - * Import all test data. - * - * @throws IOException - */ - public void initTestData() throws IOException { - if (log.isDebugEnabled()) { - log.debug("Init test data"); - } - ReferentielService referentielService = newService(ReferentielServiceImpl.class); - - // import etat attentes - List<EtatAttente> etatAttentes = null; - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/etatattentes.csv")) { - etatAttentes = referentielService.importEtatAttentes(is); - } - - // create folders - MailFolderTopiaDao folderDao = getPersistenceContext().getMailFolderDao(); - Map<String, MailFolder> foldersByName = new HashMap<>(); - MailFolder franciaflex = folderDao.create(MailFolder.PROPERTY_NAME, "Franciaflex"); - - // categories - MailFolder chargesClientelle = folderDao.create(MailFolder.PROPERTY_NAME, "Chargés de clientèle", - MailFolder.PROPERTY_PARENT, franciaflex, - MailFolder.PROPERTY_REPLY_ADDRESSES, Lists.newArrayList("no-reply@franciaflex.com")); - franciaflex.addChildren(chargesClientelle); - foldersByName.put(chargesClientelle.getName(), chargesClientelle); - - MailFolder sav = folderDao.create(MailFolder.PROPERTY_NAME, "SAV", - MailFolder.PROPERTY_PARENT, franciaflex, - MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(0, 1)); - franciaflex.addChildren(sav); - foldersByName.put(sav.getName(), sav); - - // user folders - MailFolder cyrilFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Cyril", - MailFolder.PROPERTY_PARENT, chargesClientelle, - MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(1, 2)); - chargesClientelle.addChildren(cyrilFolder); - foldersByName.put(cyrilFolder.getName(), cyrilFolder); - - MailFolder claireFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Claire", - MailFolder.PROPERTY_PARENT, chargesClientelle); - chargesClientelle.addChildren(claireFolder); - foldersByName.put(claireFolder.getName(), claireFolder); - - MailFolder agatheFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Agathe", - MailFolder.PROPERTY_PARENT, chargesClientelle, - MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(2, 3)); - chargesClientelle.addChildren(agatheFolder); - foldersByName.put(agatheFolder.getName(), agatheFolder); - - MailFolder marcFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Marc", - MailFolder.PROPERTY_PARENT, sav); - sav.addChildren(marcFolder); - foldersByName.put(marcFolder.getName(), marcFolder); - - MailFolder fredericFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Frédéric", - MailFolder.PROPERTY_PARENT, sav); - sav.addChildren(fredericFolder); - foldersByName.put(fredericFolder.getName(), fredericFolder); - - MailFolder jeanneFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Jeanne", - MailFolder.PROPERTY_PARENT, sav); - sav.addChildren(jeanneFolder); - foldersByName.put(jeanneFolder.getName(), jeanneFolder); - - // create test users - FaxToMailUserTopiaDao userDao = getPersistenceContext().getFaxToMailUserDao(); - FaxToMailUser marc = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Lefèbvre", - FaxToMailUser.PROPERTY_FIRST_NAME, "Marc", - FaxToMailUser.PROPERTY_LOGIN, "mlefebvre", - FaxToMailUser.PROPERTY_TRIGRAPH, "MLE"); - FaxToMailUser cyril = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Baillet", - FaxToMailUser.PROPERTY_FIRST_NAME, "Cyril", - FaxToMailUser.PROPERTY_LOGIN, "cbaillet", - FaxToMailUser.PROPERTY_TRIGRAPH, "CBA"); - FaxToMailUser frederic = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Viala", - FaxToMailUser.PROPERTY_FIRST_NAME, "Frédéric", - FaxToMailUser.PROPERTY_LOGIN, "fviala", - FaxToMailUser.PROPERTY_TRIGRAPH, "FVI"); - FaxToMailUser claire = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Marquis", - FaxToMailUser.PROPERTY_FIRST_NAME, "Claire", - FaxToMailUser.PROPERTY_LOGIN, "cmarquis", - FaxToMailUser.PROPERTY_TRIGRAPH, "CMA"); - FaxToMailUser agathe = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Borde", - FaxToMailUser.PROPERTY_FIRST_NAME, "Agathe", - FaxToMailUser.PROPERTY_LOGIN, "aborde", - FaxToMailUser.PROPERTY_TRIGRAPH, "ABO"); - FaxToMailUser jeanne = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Bourgoin", - FaxToMailUser.PROPERTY_FIRST_NAME, "Jeanne", - FaxToMailUser.PROPERTY_LOGIN, "jbourgoin", - FaxToMailUser.PROPERTY_TRIGRAPH, "JBO"); - - // droits global à marc pour tout - franciaflex.addReadRightUsers(marc); - franciaflex = folderDao.update(franciaflex); - - // import test csv - List<Range> ranges = null; - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/ranges.csv")) { - ranges = referentielService.importRanges(is); - } - List<Priority> priorities = null; - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/priorities.csv")) { - priorities = referentielService.importPriorities(is); - } - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/email_accounts.csv")) { - referentielService.importEmailAccounts(is); - } - List<Client> clients = null; - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/clients.csv")) { - clients = referentielService.importClients(is); - } - List<DemandType> types = null; - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/demandtypes.csv")) { - types = referentielService.importDemandTypes(is); - } - try (InputStream is = InitTestData.class.getResourceAsStream("/csv/email_filters.csv")) { - referentielService.importEmailFilters(is, foldersByName); - } - - // create test mail - HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); - RangeRowTopiaDao rangeRowDao = getPersistenceContext().getRangeRowDao(); - EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); - createEmails(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, cyrilFolder, cyril); - } - - protected void createEmails(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, - List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) - throws InvalidClientException { - for (int i = 0; i < 5; i++) { - createEmail(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, folder, user); - } - } - - protected void createEmail(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, - List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) - throws InvalidClientException { - - List<RangeRow> rangeRows = new ArrayList<>(); - - Client client = clients.get(0); - String sender = client.getEmailAddress(); - boolean fax = false; - if (sender == null && client.getFaxNumber() != null) { - sender = client.getFaxNumber(); - fax = true; - } - - boolean opened = true; //random.nextBoolean(); - - Decorator<Date> dateDecorator = getDecoratorService().getDecoratorByType(Date.class, DecoratorService.DATE); - - Date now = new Date(); - History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.CREATION, History.PROPERTY_FIELDS, Sets.newHashSet( - Email.PROPERTY_SENDER, Email.PROPERTY_CLIENT, Email.PROPERTY_PROJECT_REFERENCE, Email.PROPERTY_OBJECT, Email.PROPERTY_RECEPTION_DATE, - Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_DEMAND_STATUS), History.PROPERTY_MODIFICATION_DATE, now); - String projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(now)); - - Email email = emailDao.create(Email.PROPERTY_SENDER, sender, - Email.PROPERTY_FAX, fax, - Email.PROPERTY_CLIENT, client, - Email.PROPERTY_PROJECT_REFERENCE, projectRef, - Email.PROPERTY_OBJECT, client.getCaracteristic1() + " / " + client.getCode() + " / " - + client.getName() + " / " + client.getFaxNumber() + " / " + dateDecorator.toString(now), - Email.PROPERTY_RECEPTION_DATE, now, - Email.PROPERTY_MAIL_FOLDER, folder, - Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, - Email.PROPERTY_HISTORY, Lists.newArrayList(history), - Email.PROPERTY_ORIGINAL_EMAIL, "test"); - - if (opened) { - - getEmailService().addToHistory(email.getTopiaId(), HistoryType.OPENING, user, now); - DemandType demandType = types.get(0); - if (demandType.containsFields(MailField.RANGE_ROW)) { - for (int j = 0; j < 4; j++) { - RangeRow rangeRow = rangeRowDao.create(RangeRow.PROPERTY_RANGE, ranges.get(j), - RangeRow.PROPERTY_COMMAND_NUMBER, RandomStringUtils.randomNumeric(6), RangeRow.PROPERTY_PRODUCT_QUANTITY, - 50, RangeRow.PROPERTY_SAV_QUANTITY, 60); - rangeRows.add(rangeRow); - } - email.setRangeRow(rangeRows); - } - - email.setDemandType(demandType); - email.setPriority(priorities.get(0)); - email.setRangeRow(rangeRows); - getEmailService().saveEmail(email, user, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_PRIORITY, Email.PROPERTY_RANGE_ROW); - } - - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DAY_OF_MONTH, -1); - Date yesterday = cal.getTime(); - history = historyDao.create(History.PROPERTY_TYPE, HistoryType.CREATION, History.PROPERTY_FIELDS, Sets.newHashSet(Email.PROPERTY_SENDER, - Email.PROPERTY_CLIENT, Email.PROPERTY_PROJECT_REFERENCE, Email.PROPERTY_OBJECT, Email.PROPERTY_RECEPTION_DATE, - Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_DEMAND_STATUS), History.PROPERTY_MODIFICATION_DATE, yesterday); - projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(yesterday)); - - email = emailDao.create(Email.PROPERTY_SENDER, sender, - Email.PROPERTY_FAX, fax, - Email.PROPERTY_CLIENT,client, - Email.PROPERTY_PROJECT_REFERENCE, projectRef, Email.PROPERTY_OBJECT, client.getCaracteristic1() + " / " + client.getCode() + " / " - + client.getName() + " / " + client.getFaxNumber() + " / " + dateDecorator.toString(yesterday), - Email.PROPERTY_RECEPTION_DATE, yesterday, - Email.PROPERTY_MAIL_FOLDER, folder, - Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, - Email.PROPERTY_HISTORY, Lists.newArrayList(history), - Email.PROPERTY_ORIGINAL_EMAIL, "test"); - - if (opened) { - getEmailService().addToHistory(email.getTopiaId(), HistoryType.OPENING, user, now); - DemandType demandType = types.get(0); - if (demandType.containsFields(MailField.RANGE_ROW)) { - for (int j = 0; j < 4; j++) { - RangeRow rangeRow = rangeRowDao.create(RangeRow.PROPERTY_RANGE, ranges.get(j), - RangeRow.PROPERTY_COMMAND_NUMBER, RandomStringUtils.randomNumeric(6), RangeRow.PROPERTY_PRODUCT_QUANTITY, - 50, RangeRow.PROPERTY_SAV_QUANTITY, 60); - rangeRows.add(rangeRow); - } - email.setRangeRow(rangeRows); - } - email.setDemandType(demandType); - email.setPriority(priorities.get(0)); - email.setRangeRow(rangeRows); - getEmailService().saveEmail(email, null, email.getClient().getCode(), user, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_PRIORITY, - Email.PROPERTY_RANGE_ROW); - } - } -} Added: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java (rev 0) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java 2014-08-05 14:36:30 UTC (rev 472) @@ -0,0 +1,14 @@ +package com.franciaflex.faxtomail.services.service; + +import java.io.IOException; + +import com.franciaflex.faxtomail.services.FaxToMailService; + +/** + * @author Arnaud Thimel (Code Lutin) + */ +public interface InitTestData extends FaxToMailService { + + void initTestData() throws IOException; + +} Copied: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java (from rev 471, trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestData.java) =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java (rev 0) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/InitTestDataImpl.java 2014-08-05 14:36:30 UTC (rev 472) @@ -0,0 +1,310 @@ +package com.franciaflex.faxtomail.services.service; + +/* + * #%L + * FaxToMail :: Service + * $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% + */ + +import static org.nuiton.i18n.I18n.t; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.franciaflex.faxtomail.persistence.entities.MailField; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; + +import com.franciaflex.faxtomail.persistence.entities.Client; +import com.franciaflex.faxtomail.persistence.entities.DemandStatus; +import com.franciaflex.faxtomail.persistence.entities.DemandType; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.EmailTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.EtatAttente; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.History; +import com.franciaflex.faxtomail.persistence.entities.HistoryTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.persistence.entities.MailFolder; +import com.franciaflex.faxtomail.persistence.entities.MailFolderTopiaDao; +import com.franciaflex.faxtomail.persistence.entities.Priority; +import com.franciaflex.faxtomail.persistence.entities.Range; +import com.franciaflex.faxtomail.persistence.entities.RangeRow; +import com.franciaflex.faxtomail.persistence.entities.RangeRowTopiaDao; +import com.franciaflex.faxtomail.services.DecoratorService; +import com.franciaflex.faxtomail.services.FaxToMailServiceSupport; +import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +/** + * Test service to manage test data. + * + * @author Eric Chatellier + */ +public class InitTestDataImpl extends FaxToMailServiceSupport implements InitTestData { + + private static final Log log = LogFactory.getLog(InitTestDataImpl.class); + + /** + * Import all test data. + * + * @throws IOException + */ + @Override + public void initTestData() throws IOException { + if (log.isDebugEnabled()) { + log.debug("Init test data"); + } + ReferentielService referentielService = newService(ReferentielService.class); + + // import etat attentes + List<EtatAttente> etatAttentes = null; + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/etatattentes.csv")) { + etatAttentes = referentielService.importEtatAttentes(is); + } + + // create folders + MailFolderTopiaDao folderDao = getPersistenceContext().getMailFolderDao(); + Map<String, MailFolder> foldersByName = new HashMap<>(); + MailFolder franciaflex = folderDao.create(MailFolder.PROPERTY_NAME, "Franciaflex"); + + // categories + MailFolder chargesClientelle = folderDao.create(MailFolder.PROPERTY_NAME, "Chargés de clientèle", + MailFolder.PROPERTY_PARENT, franciaflex, + MailFolder.PROPERTY_REPLY_ADDRESSES, Lists.newArrayList("no-reply@franciaflex.com")); + franciaflex.addChildren(chargesClientelle); + foldersByName.put(chargesClientelle.getName(), chargesClientelle); + + MailFolder sav = folderDao.create(MailFolder.PROPERTY_NAME, "SAV", + MailFolder.PROPERTY_PARENT, franciaflex, + MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(0, 1)); + franciaflex.addChildren(sav); + foldersByName.put(sav.getName(), sav); + + // user folders + MailFolder cyrilFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Cyril", + MailFolder.PROPERTY_PARENT, chargesClientelle, + MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(1, 2)); + chargesClientelle.addChildren(cyrilFolder); + foldersByName.put(cyrilFolder.getName(), cyrilFolder); + + MailFolder claireFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Claire", + MailFolder.PROPERTY_PARENT, chargesClientelle); + chargesClientelle.addChildren(claireFolder); + foldersByName.put(claireFolder.getName(), claireFolder); + + MailFolder agatheFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Agathe", + MailFolder.PROPERTY_PARENT, chargesClientelle, + MailFolder.PROPERTY_ETAT_ATTENTES, etatAttentes.subList(2, 3)); + chargesClientelle.addChildren(agatheFolder); + foldersByName.put(agatheFolder.getName(), agatheFolder); + + MailFolder marcFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Marc", + MailFolder.PROPERTY_PARENT, sav); + sav.addChildren(marcFolder); + foldersByName.put(marcFolder.getName(), marcFolder); + + MailFolder fredericFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Frédéric", + MailFolder.PROPERTY_PARENT, sav); + sav.addChildren(fredericFolder); + foldersByName.put(fredericFolder.getName(), fredericFolder); + + MailFolder jeanneFolder = folderDao.create(MailFolder.PROPERTY_NAME, "Jeanne", + MailFolder.PROPERTY_PARENT, sav); + sav.addChildren(jeanneFolder); + foldersByName.put(jeanneFolder.getName(), jeanneFolder); + + // create test users + FaxToMailUserTopiaDao userDao = getPersistenceContext().getFaxToMailUserDao(); + FaxToMailUser marc = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Lefèbvre", + FaxToMailUser.PROPERTY_FIRST_NAME, "Marc", + FaxToMailUser.PROPERTY_LOGIN, "mlefebvre", + FaxToMailUser.PROPERTY_TRIGRAPH, "MLE"); + FaxToMailUser cyril = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Baillet", + FaxToMailUser.PROPERTY_FIRST_NAME, "Cyril", + FaxToMailUser.PROPERTY_LOGIN, "cbaillet", + FaxToMailUser.PROPERTY_TRIGRAPH, "CBA"); + FaxToMailUser frederic = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Viala", + FaxToMailUser.PROPERTY_FIRST_NAME, "Frédéric", + FaxToMailUser.PROPERTY_LOGIN, "fviala", + FaxToMailUser.PROPERTY_TRIGRAPH, "FVI"); + FaxToMailUser claire = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Marquis", + FaxToMailUser.PROPERTY_FIRST_NAME, "Claire", + FaxToMailUser.PROPERTY_LOGIN, "cmarquis", + FaxToMailUser.PROPERTY_TRIGRAPH, "CMA"); + FaxToMailUser agathe = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Borde", + FaxToMailUser.PROPERTY_FIRST_NAME, "Agathe", + FaxToMailUser.PROPERTY_LOGIN, "aborde", + FaxToMailUser.PROPERTY_TRIGRAPH, "ABO"); + FaxToMailUser jeanne = userDao.create(FaxToMailUser.PROPERTY_LAST_NAME, "Bourgoin", + FaxToMailUser.PROPERTY_FIRST_NAME, "Jeanne", + FaxToMailUser.PROPERTY_LOGIN, "jbourgoin", + FaxToMailUser.PROPERTY_TRIGRAPH, "JBO"); + + // droits global à marc pour tout + franciaflex.addReadRightUsers(marc); + franciaflex = folderDao.update(franciaflex); + + // import test csv + List<Range> ranges = null; + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/ranges.csv")) { + ranges = referentielService.importRanges(is); + } + List<Priority> priorities = null; + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/priorities.csv")) { + priorities = referentielService.importPriorities(is); + } + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/email_accounts.csv")) { + referentielService.importEmailAccounts(is); + } + List<Client> clients = null; + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/clients.csv")) { + clients = referentielService.importClients(is); + } + List<DemandType> types = null; + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/demandtypes.csv")) { + types = referentielService.importDemandTypes(is); + } + try (InputStream is = InitTestDataImpl.class.getResourceAsStream("/csv/email_filters.csv")) { + referentielService.importEmailFilters(is, foldersByName); + } + + // create test mail + HistoryTopiaDao historyDao = getPersistenceContext().getHistoryDao(); + RangeRowTopiaDao rangeRowDao = getPersistenceContext().getRangeRowDao(); + EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); + createEmails(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, cyrilFolder, cyril); + } + + protected void createEmails(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, + List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) + throws InvalidClientException { + for (int i = 0; i < 5; i++) { + createEmail(historyDao, rangeRowDao, emailDao, ranges, clients, types, priorities, folder, user); + } + } + + protected void createEmail(HistoryTopiaDao historyDao, RangeRowTopiaDao rangeRowDao, EmailTopiaDao emailDao, List<Range> ranges, + List<Client> clients, List<DemandType> types, List<Priority> priorities, MailFolder folder, FaxToMailUser user) + throws InvalidClientException { + + List<RangeRow> rangeRows = new ArrayList<>(); + + Client client = clients.get(0); + String sender = client.getEmailAddress(); + boolean fax = false; + if (sender == null && client.getFaxNumber() != null) { + sender = client.getFaxNumber(); + fax = true; + } + + boolean opened = true; //random.nextBoolean(); + + Decorator<Date> dateDecorator = getDecoratorService().getDecoratorByType(Date.class, DecoratorService.DATE); + + Date now = new Date(); + History history = historyDao.create(History.PROPERTY_TYPE, HistoryType.CREATION, History.PROPERTY_FIELDS, Sets.newHashSet( + Email.PROPERTY_SENDER, Email.PROPERTY_CLIENT, Email.PROPERTY_PROJECT_REFERENCE, Email.PROPERTY_OBJECT, Email.PROPERTY_RECEPTION_DATE, + Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_DEMAND_STATUS), History.PROPERTY_MODIFICATION_DATE, now); + String projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(now)); + + Email email = emailDao.create(Email.PROPERTY_SENDER, sender, + Email.PROPERTY_FAX, fax, + Email.PROPERTY_CLIENT, client, + Email.PROPERTY_PROJECT_REFERENCE, projectRef, + Email.PROPERTY_OBJECT, client.getCaracteristic1() + " / " + client.getCode() + " / " + + client.getName() + " / " + client.getFaxNumber() + " / " + dateDecorator.toString(now), + Email.PROPERTY_RECEPTION_DATE, now, + Email.PROPERTY_MAIL_FOLDER, folder, + Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, + Email.PROPERTY_HISTORY, Lists.newArrayList(history), + Email.PROPERTY_ORIGINAL_EMAIL, "test"); + + if (opened) { + + getEmailService().addToHistory(email.getTopiaId(), HistoryType.OPENING, user, now); + DemandType demandType = types.get(0); + if (demandType.containsFields(MailField.RANGE_ROW)) { + for (int j = 0; j < 4; j++) { + RangeRow rangeRow = rangeRowDao.create(RangeRow.PROPERTY_RANGE, ranges.get(j), + RangeRow.PROPERTY_COMMAND_NUMBER, RandomStringUtils.randomNumeric(6), RangeRow.PROPERTY_PRODUCT_QUANTITY, + 50, RangeRow.PROPERTY_SAV_QUANTITY, 60); + rangeRows.add(rangeRow); + } + email.setRangeRow(rangeRows); + } + + email.setDemandType(demandType); + email.setPriority(priorities.get(0)); + email.setRangeRow(rangeRows); + getEmailService().saveEmail(email, user, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_PRIORITY, Email.PROPERTY_RANGE_ROW); + } + + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DAY_OF_MONTH, -1); + Date yesterday = cal.getTime(); + history = historyDao.create(History.PROPERTY_TYPE, HistoryType.CREATION, History.PROPERTY_FIELDS, Sets.newHashSet(Email.PROPERTY_SENDER, + Email.PROPERTY_CLIENT, Email.PROPERTY_PROJECT_REFERENCE, Email.PROPERTY_OBJECT, Email.PROPERTY_RECEPTION_DATE, + Email.PROPERTY_MAIL_FOLDER, Email.PROPERTY_DEMAND_STATUS), History.PROPERTY_MODIFICATION_DATE, yesterday); + projectRef = t("faxtomail.email.projectReference.default", dateDecorator.toString(yesterday)); + + email = emailDao.create(Email.PROPERTY_SENDER, sender, + Email.PROPERTY_FAX, fax, + Email.PROPERTY_CLIENT,client, + Email.PROPERTY_PROJECT_REFERENCE, projectRef, Email.PROPERTY_OBJECT, client.getCaracteristic1() + " / " + client.getCode() + " / " + + client.getName() + " / " + client.getFaxNumber() + " / " + dateDecorator.toString(yesterday), + Email.PROPERTY_RECEPTION_DATE, yesterday, + Email.PROPERTY_MAIL_FOLDER, folder, + Email.PROPERTY_DEMAND_STATUS, opened ? DemandStatus.IN_PROGRESS : DemandStatus.UNTREATED, + Email.PROPERTY_HISTORY, Lists.newArrayList(history), + Email.PROPERTY_ORIGINAL_EMAIL, "test"); + + if (opened) { + getEmailService().addToHistory(email.getTopiaId(), HistoryType.OPENING, user, now); + DemandType demandType = types.get(0); + if (demandType.containsFields(MailField.RANGE_ROW)) { + for (int j = 0; j < 4; j++) { + RangeRow rangeRow = rangeRowDao.create(RangeRow.PROPERTY_RANGE, ranges.get(j), + RangeRow.PROPERTY_COMMAND_NUMBER, RandomStringUtils.randomNumeric(6), RangeRow.PROPERTY_PRODUCT_QUANTITY, + 50, RangeRow.PROPERTY_SAV_QUANTITY, 60); + rangeRows.add(rangeRow); + } + email.setRangeRow(rangeRows); + } + email.setDemandType(demandType); + email.setPriority(priorities.get(0)); + email.setRangeRow(rangeRows); + getEmailService().saveEmail(email, null, email.getClient().getCode(), user, Email.PROPERTY_DEMAND_TYPE, Email.PROPERTY_PRIORITY, + Email.PROPERTY_RANGE_ROW); + } + } +} Modified: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/MailFolderServiceTest.java 2014-08-05 14:36:30 UTC (rev 472) @@ -46,7 +46,7 @@ @Before public void setUp() throws IOException { - service = newService(MailFolderServiceImpl.class); + service = newService(MailFolderService.class); newService(InitTestData.class).initTestData(); } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-08-05 13:13:51 UTC (rev 471) +++ trunk/pom.xml 2014-08-05 14:36:30 UTC (rev 472) @@ -105,8 +105,8 @@ <nuitonValidatorVersion>3.0-rc-1</nuitonValidatorVersion> <nuitonWebVersion>1.16</nuitonWebVersion> - <eugeneVersion>2.12</eugeneVersion> - <topiaVersion>3.0-beta-11</topiaVersion> + <eugeneVersion>3.0-SNAPSHOT</eugeneVersion> + <topiaVersion>3.0-SNAPSHOT</topiaVersion> <hibernateVersion>4.3.6.Final</hibernateVersion> <h2Version>1.3.176</h2Version>