Wao-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
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
May 2010
- 1 participants
- 14 discussions
[Suiviobsmer-commits] r477 - in trunk: . wao-business/src/main/java/fr/ifremer/wao wao-business/src/main/java/fr/ifremer/wao/service
by fdesbois@users.labs.libre-entreprise.org 03 May '10
by fdesbois@users.labs.libre-entreprise.org 03 May '10
03 May '10
Author: fdesbois
Date: 2010-05-03 20:05:40 +0000 (Mon, 03 May 2010)
New Revision: 477
Log:
Ano #2287 : fix to avoid saving contacts with null observer (can't reproduce when it's appear)
Modified:
trunk/changelog.txt
trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
Modified: trunk/changelog.txt
===================================================================
--- trunk/changelog.txt 2010-05-03 19:57:42 UTC (rev 476)
+++ trunk/changelog.txt 2010-05-03 20:05:40 UTC (rev 477)
@@ -9,6 +9,8 @@
Anomalies
+++++++++
+- [fdesbois] Ano #2286 : Filtre sur les observateurs de la page contact ne
+ fonctionne pas.
- [fdesbois] Ano #2287 : Problème de sauvegarde de l'observateur sur un contact.
- [fdesbois] Ano #2282 : Doublon sur les navires éligibles pour une ligne.
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java 2010-05-03 19:57:42 UTC (rev 476)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoContextImpl.java 2010-05-03 20:05:40 UTC (rev 477)
@@ -323,7 +323,7 @@
if (log.isDebugEnabled()) {
log.debug(_(message, args),eee);
}
-// if (!(eee instanceof WaoException)) {
+ if (!(eee instanceof WaoException)) {
//if (!(eee instanceof TopiaException)) {
try {
if (transaction != null && !transaction.isClosed()) {
@@ -338,12 +338,13 @@
}
//}
if (eee instanceof SQLGrammarException && log.isErrorEnabled()) {
- log.error("SQL executed with error : " + ((SQLGrammarException)eee).getSQL());
+ log.error("SQL executed with error : " +
+ ((SQLGrammarException)eee).getSQL());
}
throw new WaoException(eee, message, args);
-// } else {
-// throw (WaoException)eee;
-// }
+ } else {
+ throw (WaoException)eee;
+ }
}
@Override
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-05-03 19:57:42 UTC (rev 476)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-05-03 20:05:40 UTC (rev 477)
@@ -172,10 +172,20 @@
throws TopiaException, NullSampleMonthException {
// Ano #2287 Temporary fix to avoid saving a null observer
-// if (contact.getObserver() == null) {
-// throw new NullPointerException("L'observateur n'a pas été" +
-// " renseigné correctement pour la sauvegarde du contact");
-// }
+ if (contact.getObserver() == null) {
+ // Throw a NullPointerException to avoid saving null observer
+ Throwable exception =
+ new NullPointerException("observer can't be null to save" +
+ " the contact");
+
+ if (log.isWarnEnabled()) {
+ log.warn("observer null when saving contact", exception);
+ }
+ // This message will be displayed to Client
+ throw new WaoException(exception,
+ "L'observateur n'a pas été renseigné correctement pour " +
+ "la sauvegarde du contact");
+ }
ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
1
0
[Suiviobsmer-commits] r476 - in trunk: . wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/test/java/fr/ifremer/wao wao-business/src/test/java/fr/ifremer/wao/service wao-ui/src/main/java/fr/ifremer/wao/ui/base wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/java/fr/ifremer/wao/ui/services wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages
by fdesbois@users.labs.libre-entreprise.org 03 May '10
by fdesbois@users.labs.libre-entreprise.org 03 May '10
03 May '10
Author: fdesbois
Date: 2010-05-03 19:57:42 +0000 (Mon, 03 May 2010)
New Revision: 476
Log:
Ano #2286 : error on observer filter when initialize abstractFiltered page from Contacts
Added:
trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java
trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ContactsTest.java
Modified:
trunk/changelog.txt
trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java
trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java
Modified: trunk/changelog.txt
===================================================================
--- trunk/changelog.txt 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/changelog.txt 2010-05-03 19:57:42 UTC (rev 476)
@@ -9,6 +9,7 @@
Anomalies
+++++++++
+- [fdesbois] Ano #2287 : Problème de sauvegarde de l'observateur sur un contact.
- [fdesbois] Ano #2282 : Doublon sur les navires éligibles pour une ligne.
Mise à jour librairies
Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java
===================================================================
--- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -171,6 +171,12 @@
Contact contact, boolean delete)
throws TopiaException, NullSampleMonthException {
+ // Ano #2287 Temporary fix to avoid saving a null observer
+// if (contact.getObserver() == null) {
+// throw new NullPointerException("L'observateur n'a pas été" +
+// " renseigné correctement pour la sauvegarde du contact");
+// }
+
ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
if (log.isDebugEnabled()) {
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/AbstractServiceTest.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -1,20 +1,28 @@
package fr.ifremer.wao;
+import fr.ifremer.wao.bean.ContactState;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.Boat;
import fr.ifremer.wao.entity.BoatDAO;
import fr.ifremer.wao.entity.Company;
import fr.ifremer.wao.entity.CompanyDAO;
+import fr.ifremer.wao.entity.Contact;
+import fr.ifremer.wao.entity.ContactDAO;
import fr.ifremer.wao.entity.ElligibleBoat;
import fr.ifremer.wao.entity.ElligibleBoatDAO;
import fr.ifremer.wao.entity.SampleRow;
import fr.ifremer.wao.entity.SampleRowDAO;
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.entity.WaoUserDAO;
import fr.ifremer.wao.service.ServiceSamplingImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* AbstractServiceTest
@@ -25,6 +33,9 @@
*/
public abstract class AbstractServiceTest {
+ private static final Logger logger =
+ LoggerFactory.getLogger(AbstractServiceTest.class);
+
protected static TestManager manager;
protected ServiceSamplingImpl serviceSampling;
@@ -33,6 +44,9 @@
protected static final int BOAT_DEFAULT_IMMATRICULATION = 123456;
protected static final String SAMPLE_ROW_DEFAULT_CODE = "2010_0001";
protected static final String COMPANY_DEFAULT_NAME = "TARTANPION";
+ protected static final String OBSERVER_DEFAULT_FIRST_NAME = "Homer";
+ protected static final String OBSERVER_DEFAULT_LAST_NAME = "Simpson";
+ protected static final String OBSERVER_DEFAULT_LOGIN = "homer";
@BeforeClass
public static void setUpClass() throws Exception {
@@ -41,8 +55,12 @@
@Before
public void setUp() throws Exception {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Start manager");
+ }
manager.start();
serviceSampling = manager.getServiceSampling();
+ //initialize();
}
@After
@@ -51,8 +69,89 @@
}
/**
+ * Initialize data before each test. By default do nothing.
+ */
+// protected void initialize() {
+// }
+
+ /**
* Create a company : <br />
* <ul>
+ * <li>first name : Homer</li>
+ * <li>last name : Simpson</li>
+ * <li>login : homer</li>
+ * <li>company : ref to TARTANPION</li>
+ * <li>role : OBSERVER</li>
+ * </ul>
+ *
+ * @return the new Company
+ * @throws TopiaException
+ */
+ protected WaoUser createDefaultObserver() throws TopiaException {
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ WaoUser observer = null;
+ try {
+ WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction);
+ observer = userDAO.create(
+ WaoUser.COMPANY, findDefaultCompany(),
+ WaoUser.LOGIN, OBSERVER_DEFAULT_LOGIN,
+ WaoUser.FIRST_NAME, OBSERVER_DEFAULT_FIRST_NAME,
+ WaoUser.LAST_NAME, OBSERVER_DEFAULT_LAST_NAME,
+ WaoUser.ROLE, UserRole.OBSERVER.ordinal());
+ if (logger.isDebugEnabled()) {
+ logger.debug("Create default observer : " + observer);
+ }
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+ return observer;
+ }
+
+ /**
+ * Create a user : <br />
+ * <ul>
+ * <li>first name : null</li>
+ * <li>last name : null</li>
+ * <li>login : defined with {@code login} argument</li>
+ * <li>company : defined with {@code company} argument</li>
+ * <li>role : defined with {@code role} argument</li>
+ * </ul>
+ *
+ * @param login String unique login for the new user
+ * @param role UserRole of the user
+ * @param company Company parent of the user
+ * @return the new WaoUser
+ * @throws TopiaException
+ */
+ protected WaoUser createUser(String login, UserRole role,
+ Company company) throws TopiaException {
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ WaoUser observer = null;
+ try {
+ WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction);
+ observer = userDAO.create(
+ WaoUser.COMPANY, company,
+ WaoUser.LOGIN, login,
+ WaoUser.FIRST_NAME, null,
+ WaoUser.LAST_NAME, null,
+ WaoUser.ROLE, role.ordinal());
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Create observer : " + observer);
+ }
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+ return observer;
+ }
+
+ /**
+ * Create a company : <br />
+ * <ul>
* <li>name : TARTANPION</li>
* </ul>
*
@@ -127,7 +226,10 @@
row = dao.create();
row.setCode(code);
row.setCompany(company);
-
+ if (logger.isDebugEnabled()) {
+ logger.debug("Create sampleRow : " + row);
+ }
+
transaction.commitTransaction();
} finally {
transaction.closeContext();
@@ -176,6 +278,9 @@
boat.setImmatriculation(immatriculation);
boat.setName(name);
boat.setActive(true);
+ if (logger.isDebugEnabled()) {
+ logger.debug("Create boat : " + boat);
+ }
transaction.commitTransaction();
@@ -226,6 +331,44 @@
return elligibleBoat;
}
+ /**
+ * Create a default contact : <br />
+ * <ul>
+ * <li>boat : SPRINGFIELD</li>
+ * <li>observer : homer</li>
+ * <li>sampleRow : 2010_0001</li>
+ * <li>state : CONTACT_START</li>
+ * <li>companyValidation : null</li>
+ * <li>programValidation : null</li>
+ * </ul>
+ *
+ * @return the new Contact
+ * @throws TopiaException
+ */
+ protected Contact createDefaultContact() throws TopiaException {
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ Contact contact = null;
+ try {
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ // CREATE
+ contact = dao.create();
+ contact.setBoat(findDefaultBoat());
+ contact.setContactState(ContactState.CONTACT_START);
+ contact.setObserver(findDefaultObserver());
+ contact.setSampleRow(findDefaultSampleRow());
+ if (logger.isDebugEnabled()) {
+ logger.debug("Create contact : " + contact);
+ }
+
+ transaction.commitTransaction();
+
+ } finally {
+ transaction.closeContext();
+ }
+ return contact;
+ }
+
protected Company findDefaultCompany() throws TopiaException {
Company findCompany = findCompanyByName(BOAT_DEFAULT_NAME);
if (findCompany == null) {
@@ -258,6 +401,16 @@
return findRow;
}
+ /**
+ * Find a sampleRow existing using his unique {@code code}. Some
+ * {@code properties} can be added to load them if the sampleRow is
+ * corretly retrieve.
+ *
+ * @param code SampleRow unique code
+ * @param properties authorized properties : ElligibleBoat
+ * @return the existing SampleRow if found, null otherwise
+ * @throws TopiaException
+ */
protected SampleRow findSampleRowByCode(String code, String... properties)
throws TopiaException {
SampleRow row = null;
@@ -280,4 +433,56 @@
}
return row;
}
+
+ protected Boat findDefaultBoat() throws TopiaException {
+ Boat findBoat =
+ findBoatByImmatriculation(BOAT_DEFAULT_IMMATRICULATION);
+ if (findBoat == null) {
+ findBoat = createDefaultBoat();
+ }
+ return findBoat;
+ }
+
+ protected Boat findBoatByImmatriculation(int immatriculation)
+ throws TopiaException {
+ Boat boat = null;
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ BoatDAO dao =
+ WaoDAOHelper.getBoatDAO(transaction);
+
+ boat = dao.findByImmatriculation(immatriculation);
+ } finally {
+ transaction.closeContext();
+ }
+ return boat;
+ }
+
+ protected WaoUser findDefaultObserver() throws TopiaException {
+ WaoUser findObserver =
+ findUserByLogin(OBSERVER_DEFAULT_LOGIN);
+ if (findObserver == null) {
+ findObserver = createDefaultObserver();
+ }
+ return findObserver;
+ }
+
+ protected WaoUser findUserByLogin(String login)
+ throws TopiaException {
+ WaoUser user = null;
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ WaoUserDAO dao =
+ WaoDAOHelper.getWaoUserDAO(transaction);
+
+ user = dao.findByLogin(login);
+ // Load company
+ if (user != null) {
+ user.getCompany();
+ }
+ } finally {
+ transaction.closeContext();
+ }
+ return user;
+ }
}
Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -1,812 +1,67 @@
package fr.ifremer.wao.service;
-import com.csvreader.CsvReader;
-import fr.ifremer.wao.TestManager;
-import fr.ifremer.wao.WaoBusinessException;
-import fr.ifremer.wao.WaoDAOHelper;
-import fr.ifremer.wao.bean.ContactState;
-import fr.ifremer.wao.bean.ImportResults;
+import fr.ifremer.wao.AbstractServiceTest;
+import fr.ifremer.wao.bean.ContactFilter;
+import fr.ifremer.wao.bean.ContactFilterImpl;
import fr.ifremer.wao.bean.UserRole;
-import fr.ifremer.wao.entity.Boat;
-import fr.ifremer.wao.entity.BoatDAO;
-import fr.ifremer.wao.entity.Company;
-import fr.ifremer.wao.entity.CompanyDAO;
import fr.ifremer.wao.entity.Contact;
-import fr.ifremer.wao.entity.ContactDAO;
-import fr.ifremer.wao.entity.SampleMonth;
-import fr.ifremer.wao.entity.SampleMonthDAO;
-import fr.ifremer.wao.entity.SampleRow;
-import fr.ifremer.wao.entity.SampleRowDAO;
import fr.ifremer.wao.entity.WaoUser;
-import fr.ifremer.wao.entity.WaoUserDAO;
-import fr.ifremer.wao.io.ContactInput;
-import fr.ifremer.wao.io.ImportRefusedException;
-import fr.ifremer.wao.io.WaoCsvHeader.BOAT;
-import fr.ifremer.wao.io.WaoCsvHeader.CONTACT;
-import fr.ifremer.wao.io.WaoCsvHeader.SAMPLING;
-import fr.ifremer.wao.bean.ContactStatus.NullSampleMonthException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.ParseException;
-import java.util.Date;
-import java.util.List;
-import org.junit.After;
+import java.util.Map;
+import org.apache.commons.collections.CollectionUtils;
+import org.junit.Assert;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.framework.TopiaQuery;
-import org.nuiton.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.mockito.Mockito.*;
-import static org.junit.Assert.*;
/**
* ServiceContactImplTest
*
- * Created: 16 avr. 2010
+ * Created: 3 mai 2010
*
* @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
+ * $Id$
*/
-public class ServiceContactImplTest {
+public class ServiceContactImplTest extends AbstractServiceTest {
- private static TestManager manager;
-
private static final Logger logger =
LoggerFactory.getLogger(ServiceContactImplTest.class);
- private ServiceContactImpl service;
+ private ServiceContact service;
- @BeforeClass
- public static void setUpClass() throws Exception {
- manager = new TestManager();
- }
-
@Before
- public void setUp() throws Exception {
- manager.start();
- MockitoAnnotations.initMocks(this);
+ public void initialize() {
+ logger.info("initialize ServiceContactImplTest");
service = manager.getServiceContact();
- sampleMonth = null;
- sampleRow = null;
- boat = null;
- company = null;
- observer = null;
}
- @After
- public void tearDown() throws Exception {
- manager.stop();
- }
-
- // Real data
- protected SampleRow sampleRow;
- protected SampleMonth sampleMonth;
- protected Boat boat;
- protected Company company;
- protected WaoUser observer;
-
- // Mock data
- @Mock
- protected Contact contact;
- @Mock
- protected Contact contactReference;
- @Mock
- protected WaoUser creator;
- @Mock
- protected CsvReader reader;
-
- protected void prepareData(boolean needBoat, boolean needObserver)
- throws TopiaException {
- logger.info("Prepare data :");
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
-
- if (needObserver) {
- CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction);
- company = companyDAO.create(Company.NAME, "TARTANPION");
-
- WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction);
- observer = userDAO.create(
- WaoUser.COMPANY, company,
- WaoUser.LOGIN, "jmichmuche",
- WaoUser.FIRST_NAME, "Jean",
- WaoUser.LAST_NAME, "Michmuche",
- WaoUser.ROLE, UserRole.OBSERVER.ordinal());
-
- when(contact.getObserver()).thenReturn(observer);
- }
-
- SampleRowDAO rowDAO =
- WaoDAOHelper.getSampleRowDAO(transaction);
- logger.info("SampleRow : 2010_0001");
- sampleRow = rowDAO.create(SampleRow.CODE, "2010_0001",
- SampleRow.COMPANY, company);
-
- SampleMonthDAO monthDAO =
- WaoDAOHelper.getSampleMonthDAO(transaction);
- logger.info("SampleMonth : 03/2010 _ row 2010_0001");
- Date monthDate = DateUtils.createDate(1, 3, 2010);
- sampleMonth = monthDAO.create(SampleMonth.SAMPLE_ROW, sampleRow,
- SampleMonth.PERIOD_DATE, monthDate);
- monthDate = DateUtils.createDate(1, 4, 2010);
- monthDAO.create(SampleMonth.SAMPLE_ROW, sampleRow,
- SampleMonth.PERIOD_DATE, monthDate);
-
- Date contactDate = DateUtils.createDate(18, 3, 2010);
- when(contact.getTideBeginDate()).thenReturn(contactDate);
- when(contact.getSampleRow()).thenReturn(sampleRow);
-
- if (needBoat) {
- BoatDAO boatDAO = WaoDAOHelper.getBoatDAO(transaction);
- boat = boatDAO.create(Boat.IMMATRICULATION, 175846);
- when(contact.getBoat()).thenReturn(boat);
- }
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
- }
-
@Test
- public void testGetExistingSampleMonthForContact()
- throws TopiaException, NullSampleMonthException {
- logger.info("testGetExistingSampleMonthForContact");
+ public void testGetContactsFilteredByObserver() throws TopiaException {
+ logger.info("getContactsFilteredByObserver");
-// /** PREPARE DATA **/
-// prepareData(false, false);
-//
-// /** EXEC METHOD **/
-// logger.info("test 1 : SampleMonth exists for contact");
-// TopiaContext transaction = manager.getContext().beginTransaction();
-// try {
-// SampleMonthDAO monthDAO =
-// WaoDAOHelper.getSampleMonthDAO(transaction);
-//
-// // Contact is valid for the sampleMonth
-//
-// SampleMonth result =
-// service.getExistingSampleMonthForContact(monthDAO,
-// contact.getSampleRow(), contact.getTideBeginDate());
-//
-// assertEquals(sampleMonth, result);
-//
-// } finally {
-// transaction.closeContext();
-// }
-//
-// logger.info("test 2 : contact tideBeginDate doesn't match with any" +
-// " SampleMonth");
-// transaction = manager.getContext().beginTransaction();
-// try {
-// SampleMonthDAO monthDAO =
-// WaoDAOHelper.getSampleMonthDAO(transaction);
-//
-// Date contactDate = DateUtils.createDate(18, 10, 2010);
-// when(contact.getTideBeginDate()).thenReturn(contactDate);
-//
-// service.getExistingSampleMonthForContact(monthDAO,
-// contact.getSampleRow(), contact.getTideBeginDate());
-// } catch (Exception eee) {
-// logger.error("Error : " + eee.getMessage());
-// assertEquals(NullSampleMonthException.class, eee.getClass());
-// } finally {
-// transaction.closeContext();
-// }
- }
-
- @Test
- public void testUpdateSampleMonthTidesValue() throws TopiaException,
- NullSampleMonthException {
- logger.info("testUpdateSampleMonthTidesValue");
-
/** PREPARE DATA **/
- prepareData(false, false);
- Date tideBeginDate = new Date(contact.getTideBeginDate().getTime());
- when(contactReference.getTideBeginDate()).thenReturn(tideBeginDate);
- when(contactReference.getSampleRow()).thenReturn(sampleRow);
- // WARN : by default mockito doesn't initialize Boolean type with null
- when(contactReference.getValidationProgram()).thenReturn(null);
- when(contact.getValidationProgram()).thenReturn(null);
+ Contact contact = createDefaultContact();
/** EXEC METHOD **/
- logger.info("test 1 : ContactState changed from null to BOARDING_DONE" +
- " -> increment estimated tides value");
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
- when(contact.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
+ ContactFilter filter = new ContactFilterImpl();
+ filter.setObserver(findDefaultObserver());
- service.updateSampleMonthTidesValue(transaction, null,
- contact, false);
+ logger.info("test 1 : Ok good filter, contact is correctly returned");
+ Map<String, Contact> results = service.getContacts(filter);
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
+ Assert.assertEquals(1, results.size());
+ Contact contactFind = results.get(contact.getTopiaId());
+ Assert.assertEquals(contact, contactFind);
- logger.info("test 1 : verification sampleMonth estimated tides = 1");
- checkTidesValue(1, false);
-
- logger.info("test 2 : ContactState changed from BOARDING_DONE to " +
- "BOAT_REFUSED -> decrement estimated tides value");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contactReference.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
-
- when(contact.getContactState()).
- thenReturn(ContactState.BOAT_REFUSED);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, false);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
+ logger.info("test 2 : Bad filter, no contact is returned");
+ WaoUser observer2 = createUser("marge",
+ UserRole.OBSERVER, findDefaultCompany());
- logger.info("test 2 : verification sampleMonth estimated tides = 0");
- checkTidesValue(0, false);
+ filter.setObserver(observer2);
- // Reset contactState to BOARDING_DONE for next test
- when(contact.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
-
- logger.info("test 3 : CompanyValidation changed from null to " +
- "FALSE -> do nothing");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contactReference.getValidationCompany()).thenReturn(null);
-
- when(contact.getValidationCompany()).thenReturn(Boolean.FALSE);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 3 : verification sampleMonth real tides = 0");
- checkTidesValue(0, true);
-
- logger.info("test 4 : CompanyValidation changed from FALSE to " +
- "TRUE -> increment real tides value");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contactReference.getValidationCompany()).
- thenReturn(Boolean.FALSE);
-
- when(contact.getValidationCompany()).thenReturn(Boolean.TRUE);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 4 : verification sampleMonth real tides = 1");
- checkTidesValue(1, true);
-
- // ContactReference after saving contact will normally have this value :
- when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
-
- logger.info("test 5 : CompanyValidation doesn't changed but " +
- "ProgramValidation is set to FALSE -> decrement real tides");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contact.getValidationProgram()).thenReturn(Boolean.FALSE);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 5 : verification sampleMonth real tides = 0");
- checkTidesValue(0, true);
-
- logger.info("test 6 : Prepare data for delete case");
- // PREPARE DATA : update estimated to 1 and real to 1
- transaction = manager.getContext().beginTransaction();
- try {
- // Will update estimatedTides up to 1
- // contact has already BOARDING_DONE
- when(contactReference.getContactState()).
- thenReturn(ContactState.BOARDING_EXPECTED);
-
- // Will update realTides up to 1
- // contact has already validationCompany = TRUE
- when(contactReference.getValidationCompany()).thenReturn(null);
- when(contact.getValidationProgram()).thenReturn(Boolean.TRUE);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- // ContactReference after saving contact will normally have this values
- when(contactReference.getValidationProgram()).thenReturn(Boolean.TRUE);
- when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
-
- logger.info("test 6 : Delete contact (new contact is null) -> " +
- "decrement realTides and estimatedTides");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contactReference.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
- service.updateSampleMonthTidesValue(transaction, contactReference,
- null, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 6 : verification sampleMonth real tides = 0" +
- "and estimated tides = 0");
- checkTidesValue(0, true);
- checkTidesValue(0, false);
-
- logger.info("test 7 : SampleMonth will change from 03/2010 to 04/2010" +
- " -> decrement estimated tides from oldMonth");
- transaction = manager.getContext().beginTransaction();
- try {
- // contactReference BOARDING_DONE, validations true/true
- // contact BOARDING_DONE, validations true/true
- when(contactReference.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
- when(contact.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
- when(contact.getTideBeginDate()).
- thenReturn(DateUtils.createDate(3, 4, 2010));
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 7 : verification old sampleMonth estimated tides = 0");
- checkTidesValue(0, false);
-
- logger.info("test 7 : verification new sampleMonth estimated " +
- "tides = 1 and real tides = 1");
- transaction = manager.getContext().beginTransaction();
- try {
- SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
-
- TopiaQuery query = dao.createQuery();
- query.add(SampleMonth.PERIOD_DATE, DateUtils.createDate(1, 4, 2010));
-
- SampleMonth month = dao.findByQuery(query);
-
- assertEquals(1, month.getEstimatedTidesValue());
- assertEquals(1, month.getRealTidesValue());
-
- } finally {
- transaction.closeContext();
- }
+ results = service.getContacts(filter);
+ Assert.assertEquals(0, results.size());
}
-
- @Test
- public void testDecrementSampleMonthContactRefused()
- throws TopiaException, NullSampleMonthException {
- logger.info("testDecrementSampleMonthContactRefused");
-
- /** PREPARE DATA **/
- prepareData(false, false);
-
- // contactReference as the same tideBeginDate and sampleRow as contact
- Date tideBeginDate = new Date(contact.getTideBeginDate().getTime());
- when(contactReference.getTideBeginDate()).thenReturn(tideBeginDate);
- when(contactReference.getSampleRow()).thenReturn(sampleRow);
-
- // Initialize correct old status in contactReference
- when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
- when(contactReference.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
- when(contactReference.getValidationProgram()).thenReturn(null);
-
-
- // Initialize data in sampleMonth
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
- SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
-
- sampleMonth.addEstimatedTideTime(1);
- sampleMonth.addRealTideTime(1);
-
- dao.update(sampleMonth);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- // both estimated and real as value = 1
- checkTidesValue(1, false);
- checkTidesValue(1, true);
-
- /** EXEC METHOD **/
- logger.info("test 1 : validationProgram null -> FALSE, estimated -1" +
- " and real -1");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contact.getValidationCompany()).thenReturn(Boolean.TRUE);
- when(contact.getContactState()).
- thenReturn(ContactState.BOARDING_DONE);
- when(contact.getValidationProgram()).thenReturn(Boolean.FALSE);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- checkTidesValue(0, false);
- checkTidesValue(0, true);
-
- logger.info("test 2 : validationProgram FALSE -> null, estimated +1" +
- " and real +1");
- transaction = manager.getContext().beginTransaction();
- try {
- when(contactReference.getValidationProgram()).
- thenReturn(Boolean.FALSE);
- when(contact.getValidationProgram()).thenReturn(null);
-
- service.updateSampleMonthTidesValue(transaction, contactReference,
- contact, true);
-
- transaction.commitTransaction();
- } finally {
- transaction.closeContext();
- }
-
- checkTidesValue(1, false);
- checkTidesValue(1, true);
- }
-
- protected void checkTidesValue(int expected, boolean real)
- throws TopiaException {
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
- SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
-
- SampleMonth result = dao.findByTopiaId(sampleMonth.getTopiaId());
- int test = real ? result.getRealTidesValue() :
- result.getEstimatedTidesValue();
- assertEquals(expected, test);
- } finally {
- transaction.closeContext();
- }
- }
-
- @Test
- public void testLoadContactCsv() throws TopiaException,
- WaoBusinessException,
- IOException,
- ImportRefusedException,
- ImportRefusedException,
- ParseException {
- logger.info("testLoadContactCsv");
-
- /** PREPARE DATA **/
- prepareData(true, true);
-
- when(reader.get(CONTACT.CONT_ETAT.name())).
- thenReturn(ContactState.BOARDING_DONE.libelle());
- when(reader.get(CONTACT.OBSERV_ID.name())).
- thenReturn(observer.getLogin());
- when(reader.get(SAMPLING.PLAN_CODE.name())).
- thenReturn(sampleRow.getCode());
- when(reader.get(BOAT.NAVS_COD.name())).
- thenReturn(String.valueOf(boat.getImmatriculation()));
- when(reader.get(CONTACT.CONT_DEBUT_MAREE.name())).
- thenReturn("22/03/2010");
- when(reader.get(CONTACT.CONT_FIN_MAREE.name())).
- thenReturn("22/03/10");
- when(reader.get(CONTACT.CONT_NB_OBSERV.name())).
- thenReturn("1");
- when(reader.get(CONTACT.CONT_MAM_CAPT.name())).
- thenReturn("");
- when(reader.get(CONTACT.CONT_MAM_OBS.name())).
- thenReturn("X");
- when(reader.get(CONTACT.CONT_ALLEGRO.name())).
- thenReturn("25/03/2010");
- when(reader.get(CONTACT.CONT_SOCIETE_VALID.name())).
- thenReturn("A");
- when(reader.get(CONTACT.CONT_PROGRAM_VALID.name())).
- thenReturn("");
- when(reader.get(CONTACT.CONT_CREATION.name())).
- thenReturn("18/03/10");
- when(reader.get(CONTACT.CONT_CODE.name())).
- thenReturn("");
-
- when(creator.getCompany()).thenReturn(company);
- when(creator.isAdmin()).thenReturn(false);
- when(creator.getLogin()).thenReturn(observer.getLogin());
-
- /** EXEC METHOD **/
-
- logger.info("test 1 : load contact by Creator jmichmuche -> no error");
- ContactInput result = new ContactInput();
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
- result.initialize(transaction, creator, 1);
- service.loadContactCsv(reader, result, false);
- Date createDate = DateUtils.createDate(18,3,2010);
- assertEquals(createDate, result.getTopiaCreateDate());
- assertEquals(ContactState.BOARDING_DONE, result.getContactState());
- assertEquals(observer, result.getObserver());
- assertEquals(sampleRow, result.getSampleRow());
- assertEquals(boat, result.getBoat());
- assertEquals(DateUtils.createDate(22,3,2010),
- result.getTideBeginDate());
- assertEquals(DateUtils.createDate(22,3,2010),
- result.getTideEndDate());
- assertEquals(1, result.getNbObservants());
- assertFalse(result.getMammalsCapture());
- assertTrue(result.getMammalsObservation());
- assertEquals(DateUtils.createDate(25,3,2010),
- result.getDataInputDate());
- // No validation update : creator is not an admin
- assertNull(result.getValidationCompany());
- assertNull(result.getValidationProgram());
- } finally {
- transaction.closeContext();
- }
-
- logger.info("test 2 : Error on boat");
- when(reader.get(BOAT.NAVS_COD.name())).thenReturn("2222");
- checkImportError(Contact.BOAT);
- // Reinit boat
- when(reader.get(BOAT.NAVS_COD.name())).
- thenReturn(String.valueOf(boat.getImmatriculation()));
-
- logger.info("test 3 : Error on company");
- when(creator.getCompany()).thenReturn(null);
- checkImportError(WaoUser.COMPANY);
- // Reinit creator company
- when(creator.getCompany()).thenReturn(company);
-
- logger.info("test 4 : Error on observer");
- when(reader.get(CONTACT.OBSERV_ID.name())).thenReturn("FAKE");
- checkImportError(Contact.OBSERVER);
- // Reinit observer
- when(reader.get(CONTACT.OBSERV_ID.name())).
- thenReturn(observer.getLogin());
-
- logger.info("test 5 : Error on sampleRow");
- when(reader.get(SAMPLING.PLAN_CODE.name())).thenReturn("FAKE");
- checkImportError(Contact.SAMPLE_ROW);
- // Reinit sampleRow
- when(reader.get(SAMPLING.PLAN_CODE.name())).
- thenReturn(sampleRow.getCode());
-
- logger.info("test 6 : Error on state");
- when(reader.get(CONTACT.CONT_ETAT.name())).thenReturn("FAKE");
- checkImportError(Contact.STATE);
- // Reinit state
- when(reader.get(CONTACT.CONT_ETAT.name())).
- thenReturn(ContactState.BOARDING_DONE.libelle());
- }
-
- protected void checkImportError(String field) throws TopiaException {
- ContactInput result = new ContactInput();
- TopiaContext transaction = manager.getContext().beginTransaction();
- try {
- result.initialize(transaction, creator, 1);
- service.loadContactCsv(reader, result, false);
- } catch (Exception eee) {
- logger.error("Error : " + eee.getMessage());
- assertEquals(ImportRefusedException.class, eee.getClass());
- ImportRefusedException ex = (ImportRefusedException)eee;
- assertEquals(field, ex.getField());
- } finally {
- transaction.closeContext();
- }
- }
-
- @Test
- public void testCreateOrUpdateContact()
- throws TopiaException, NullSampleMonthException {
- logger.info("testCreateOrUpdateContact");
-
- /** PREPARE DATA **/
- prepareData(true, true);
-
- // Don't use a mock in this case
- Contact newContact = service.getNewContact(observer, sampleRow, boat);
- newContact.setTopiaCreateDate(DateUtils.createDate(2, 3, 2010));
-
- /** EXEC METHOD **/
-
- logger.info("test 1 : Create new contact with state CONTACT_START");
- TopiaContext transaction = null;
- String newTopiaId = null;
- try {
- transaction = manager.getContext().beginTransaction();
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
-
- service.createOrUpdateContact(dao, newContact, null, false);
- transaction.commitTransaction();
-
- newTopiaId = newContact.getTopiaId();
- assertNotNull(newTopiaId);
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
-
- logger.info("test 1 : Check contact existence");
- try {
- transaction = manager.getContext().beginTransaction();
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
-
- Contact existingContact = dao.findByTopiaId(newTopiaId);
- assertNotNull(existingContact);
- assertEquals(boat, existingContact.getBoat());
- assertEquals(sampleRow, existingContact.getSampleRow());
- assertEquals(observer, existingContact.getObserver());
- assertEquals(ContactState.CONTACT_START,
- existingContact.getContactState());
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
-
- logger.info("test 2 : Update the contact with state BOARDING_DONE, " +
- "tideBeginDate, tideEndDate and NbObservants");
- Date tideBeginDate = DateUtils.createDate(18,3,2010);
- Date tideEndDate = DateUtils.createDate(19,3,2010);
- try {
- transaction = manager.getContext().beginTransaction();
-
- newContact.setContactState(ContactState.BOARDING_DONE);
- newContact.setTideBeginDate(tideBeginDate);
- newContact.setTideEndDate(tideEndDate);
- newContact.setNbObservants(1);
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
- Contact oldContact = dao.findByTopiaId(newTopiaId);
-
- service.createOrUpdateContact(dao, newContact, oldContact, false);
- transaction.commitTransaction();
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
-
- logger.info("test 2 : Check update contact");
- try {
- transaction = manager.getContext().beginTransaction();
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
-
- Contact existingContact = dao.findByTopiaId(newTopiaId);
- assertNotNull(existingContact);
- assertEquals(1, existingContact.getNbObservants());
- assertEquals(tideBeginDate, existingContact.getTideBeginDate());
- assertEquals(tideEndDate, existingContact.getTideEndDate());
- assertEquals(ContactState.BOARDING_DONE,
- existingContact.getContactState());
-
- // Will have an update on sampleMonth 03/2010 for estimatedTides
- SampleMonthDAO monthDAO =
- WaoDAOHelper.getSampleMonthDAO(transaction);
- SampleMonth existingMonth =
- monthDAO.findByTopiaId(sampleMonth.getTopiaId());
- assertNotNull(existingMonth);
- assertEquals(1, existingMonth.getEstimatedTidesValue());
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
- }
-
- @Test
- public void testImportContactCsv()
- throws TopiaException, WaoBusinessException, IOException {
- logger.info("testImportContactCsv");
-
- /** PREPARE DATA **/
- prepareData(true, true);
-
- when(creator.getCompany()).thenReturn(company);
- when(creator.isAdmin()).thenReturn(false);
- when(creator.getLogin()).thenReturn(observer.getLogin());
-
- /** EXEC METHOD **/
- logger.info("test 1 : Import new contact with observer creator");
- InputStream input =
- getClass().getResourceAsStream("/import/contacts.csv");
- try {
- ImportResults results = service.importContactCsv(creator, input);
- assertEquals(1, results.getNbRowsImported());
- assertEquals(0, results.getNbRowsRefused());
- assertTrue(results.getErrors().isEmpty());
- } finally {
- input.close();
- }
-
- logger.info("test 1 : Check creation of the contact");
- TopiaContext transaction = null;
- try {
- transaction = manager.getContext().beginTransaction();
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
-
- List<Contact> contactsFound = dao.findAll();
- assertEquals(1, contactsFound.size());
- Contact contactFound = contactsFound.get(0);
- assertNull(contactFound.getValidationCompany());
- assertNull(contactFound.getValidationProgram());
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
-
- logger.info("test 2 : Import new contact with super admin creator");
- when(creator.getCompany()).thenReturn(company);
- when(creator.isAdmin()).thenReturn(true);
- when(creator.getLogin()).thenReturn("admin");
-
- input = getClass().getResourceAsStream("/import/contacts.csv");
- try {
- ImportResults results = service.importContactCsv(creator, input);
- assertEquals(1, results.getNbRowsImported());
- assertEquals(0, results.getNbRowsRefused());
- assertTrue(results.getErrors().isEmpty());
- } finally {
- input.close();
- }
-
- logger.info("test 2 : Check update validations of the contact");
- try {
- transaction = manager.getContext().beginTransaction();
-
- ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
-
- List<Contact> contactsFound = dao.findAll();
- assertEquals(1, contactsFound.size());
- Contact contactFound = contactsFound.get(0);
- assertTrue(contactFound.getValidationCompany());
- assertTrue(contactFound.getValidationProgram());
- } finally {
- if (transaction != null) {
- transaction.closeContext();
- }
- }
- }
}
Copied: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java (from rev 472, trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java)
===================================================================
--- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java (rev 0)
+++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -0,0 +1,812 @@
+
+package fr.ifremer.wao.service;
+
+import com.csvreader.CsvReader;
+import fr.ifremer.wao.TestManager;
+import fr.ifremer.wao.WaoBusinessException;
+import fr.ifremer.wao.WaoDAOHelper;
+import fr.ifremer.wao.bean.ContactState;
+import fr.ifremer.wao.bean.ImportResults;
+import fr.ifremer.wao.bean.UserRole;
+import fr.ifremer.wao.entity.Boat;
+import fr.ifremer.wao.entity.BoatDAO;
+import fr.ifremer.wao.entity.Company;
+import fr.ifremer.wao.entity.CompanyDAO;
+import fr.ifremer.wao.entity.Contact;
+import fr.ifremer.wao.entity.ContactDAO;
+import fr.ifremer.wao.entity.SampleMonth;
+import fr.ifremer.wao.entity.SampleMonthDAO;
+import fr.ifremer.wao.entity.SampleRow;
+import fr.ifremer.wao.entity.SampleRowDAO;
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.entity.WaoUserDAO;
+import fr.ifremer.wao.io.ContactInput;
+import fr.ifremer.wao.io.ImportRefusedException;
+import fr.ifremer.wao.io.WaoCsvHeader.BOAT;
+import fr.ifremer.wao.io.WaoCsvHeader.CONTACT;
+import fr.ifremer.wao.io.WaoCsvHeader.SAMPLING;
+import fr.ifremer.wao.bean.ContactStatus.NullSampleMonthException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.util.DateUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static org.mockito.Mockito.*;
+import static org.junit.Assert.*;
+
+/**
+ * ServiceContactImplTest
+ *
+ * Created: 16 avr. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class ServiceContactInternalTest {
+
+ private static TestManager manager;
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(ServiceContactInternalTest.class);
+
+ private ServiceContactImpl service;
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ manager = new TestManager();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ manager.start();
+ MockitoAnnotations.initMocks(this);
+ service = manager.getServiceContact();
+ sampleMonth = null;
+ sampleRow = null;
+ boat = null;
+ company = null;
+ observer = null;
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ manager.stop();
+ }
+
+ // Real data
+ protected SampleRow sampleRow;
+ protected SampleMonth sampleMonth;
+ protected Boat boat;
+ protected Company company;
+ protected WaoUser observer;
+
+ // Mock data
+ @Mock
+ protected Contact contact;
+ @Mock
+ protected Contact contactReference;
+ @Mock
+ protected WaoUser creator;
+ @Mock
+ protected CsvReader reader;
+
+ protected void prepareData(boolean needBoat, boolean needObserver)
+ throws TopiaException {
+ logger.info("Prepare data :");
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+
+ if (needObserver) {
+ CompanyDAO companyDAO = WaoDAOHelper.getCompanyDAO(transaction);
+ company = companyDAO.create(Company.NAME, "TARTANPION");
+
+ WaoUserDAO userDAO = WaoDAOHelper.getWaoUserDAO(transaction);
+ observer = userDAO.create(
+ WaoUser.COMPANY, company,
+ WaoUser.LOGIN, "jmichmuche",
+ WaoUser.FIRST_NAME, "Jean",
+ WaoUser.LAST_NAME, "Michmuche",
+ WaoUser.ROLE, UserRole.OBSERVER.ordinal());
+
+ when(contact.getObserver()).thenReturn(observer);
+ }
+
+ SampleRowDAO rowDAO =
+ WaoDAOHelper.getSampleRowDAO(transaction);
+ logger.info("SampleRow : 2010_0001");
+ sampleRow = rowDAO.create(SampleRow.CODE, "2010_0001",
+ SampleRow.COMPANY, company);
+
+ SampleMonthDAO monthDAO =
+ WaoDAOHelper.getSampleMonthDAO(transaction);
+ logger.info("SampleMonth : 03/2010 _ row 2010_0001");
+ Date monthDate = DateUtils.createDate(1, 3, 2010);
+ sampleMonth = monthDAO.create(SampleMonth.SAMPLE_ROW, sampleRow,
+ SampleMonth.PERIOD_DATE, monthDate);
+ monthDate = DateUtils.createDate(1, 4, 2010);
+ monthDAO.create(SampleMonth.SAMPLE_ROW, sampleRow,
+ SampleMonth.PERIOD_DATE, monthDate);
+
+ Date contactDate = DateUtils.createDate(18, 3, 2010);
+ when(contact.getTideBeginDate()).thenReturn(contactDate);
+ when(contact.getSampleRow()).thenReturn(sampleRow);
+
+ if (needBoat) {
+ BoatDAO boatDAO = WaoDAOHelper.getBoatDAO(transaction);
+ boat = boatDAO.create(Boat.IMMATRICULATION, 175846);
+ when(contact.getBoat()).thenReturn(boat);
+ }
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
+ @Test
+ public void testGetExistingSampleMonthForContact()
+ throws TopiaException, NullSampleMonthException {
+ logger.info("testGetExistingSampleMonthForContact");
+
+// /** PREPARE DATA **/
+// prepareData(false, false);
+//
+// /** EXEC METHOD **/
+// logger.info("test 1 : SampleMonth exists for contact");
+// TopiaContext transaction = manager.getContext().beginTransaction();
+// try {
+// SampleMonthDAO monthDAO =
+// WaoDAOHelper.getSampleMonthDAO(transaction);
+//
+// // Contact is valid for the sampleMonth
+//
+// SampleMonth result =
+// service.getExistingSampleMonthForContact(monthDAO,
+// contact.getSampleRow(), contact.getTideBeginDate());
+//
+// assertEquals(sampleMonth, result);
+//
+// } finally {
+// transaction.closeContext();
+// }
+//
+// logger.info("test 2 : contact tideBeginDate doesn't match with any" +
+// " SampleMonth");
+// transaction = manager.getContext().beginTransaction();
+// try {
+// SampleMonthDAO monthDAO =
+// WaoDAOHelper.getSampleMonthDAO(transaction);
+//
+// Date contactDate = DateUtils.createDate(18, 10, 2010);
+// when(contact.getTideBeginDate()).thenReturn(contactDate);
+//
+// service.getExistingSampleMonthForContact(monthDAO,
+// contact.getSampleRow(), contact.getTideBeginDate());
+// } catch (Exception eee) {
+// logger.error("Error : " + eee.getMessage());
+// assertEquals(NullSampleMonthException.class, eee.getClass());
+// } finally {
+// transaction.closeContext();
+// }
+ }
+
+ @Test
+ public void testUpdateSampleMonthTidesValue() throws TopiaException,
+ NullSampleMonthException {
+ logger.info("testUpdateSampleMonthTidesValue");
+
+ /** PREPARE DATA **/
+ prepareData(false, false);
+ Date tideBeginDate = new Date(contact.getTideBeginDate().getTime());
+ when(contactReference.getTideBeginDate()).thenReturn(tideBeginDate);
+ when(contactReference.getSampleRow()).thenReturn(sampleRow);
+ // WARN : by default mockito doesn't initialize Boolean type with null
+ when(contactReference.getValidationProgram()).thenReturn(null);
+ when(contact.getValidationProgram()).thenReturn(null);
+
+ /** EXEC METHOD **/
+ logger.info("test 1 : ContactState changed from null to BOARDING_DONE" +
+ " -> increment estimated tides value");
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ when(contact.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+
+ service.updateSampleMonthTidesValue(transaction, null,
+ contact, false);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 1 : verification sampleMonth estimated tides = 1");
+ checkTidesValue(1, false);
+
+ logger.info("test 2 : ContactState changed from BOARDING_DONE to " +
+ "BOAT_REFUSED -> decrement estimated tides value");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contactReference.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+
+ when(contact.getContactState()).
+ thenReturn(ContactState.BOAT_REFUSED);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, false);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 2 : verification sampleMonth estimated tides = 0");
+ checkTidesValue(0, false);
+
+ // Reset contactState to BOARDING_DONE for next test
+ when(contact.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+
+ logger.info("test 3 : CompanyValidation changed from null to " +
+ "FALSE -> do nothing");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contactReference.getValidationCompany()).thenReturn(null);
+
+ when(contact.getValidationCompany()).thenReturn(Boolean.FALSE);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 3 : verification sampleMonth real tides = 0");
+ checkTidesValue(0, true);
+
+ logger.info("test 4 : CompanyValidation changed from FALSE to " +
+ "TRUE -> increment real tides value");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contactReference.getValidationCompany()).
+ thenReturn(Boolean.FALSE);
+
+ when(contact.getValidationCompany()).thenReturn(Boolean.TRUE);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 4 : verification sampleMonth real tides = 1");
+ checkTidesValue(1, true);
+
+ // ContactReference after saving contact will normally have this value :
+ when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
+
+ logger.info("test 5 : CompanyValidation doesn't changed but " +
+ "ProgramValidation is set to FALSE -> decrement real tides");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contact.getValidationProgram()).thenReturn(Boolean.FALSE);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 5 : verification sampleMonth real tides = 0");
+ checkTidesValue(0, true);
+
+ logger.info("test 6 : Prepare data for delete case");
+ // PREPARE DATA : update estimated to 1 and real to 1
+ transaction = manager.getContext().beginTransaction();
+ try {
+ // Will update estimatedTides up to 1
+ // contact has already BOARDING_DONE
+ when(contactReference.getContactState()).
+ thenReturn(ContactState.BOARDING_EXPECTED);
+
+ // Will update realTides up to 1
+ // contact has already validationCompany = TRUE
+ when(contactReference.getValidationCompany()).thenReturn(null);
+ when(contact.getValidationProgram()).thenReturn(Boolean.TRUE);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ // ContactReference after saving contact will normally have this values
+ when(contactReference.getValidationProgram()).thenReturn(Boolean.TRUE);
+ when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
+
+ logger.info("test 6 : Delete contact (new contact is null) -> " +
+ "decrement realTides and estimatedTides");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contactReference.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ null, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 6 : verification sampleMonth real tides = 0" +
+ "and estimated tides = 0");
+ checkTidesValue(0, true);
+ checkTidesValue(0, false);
+
+ logger.info("test 7 : SampleMonth will change from 03/2010 to 04/2010" +
+ " -> decrement estimated tides from oldMonth");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ // contactReference BOARDING_DONE, validations true/true
+ // contact BOARDING_DONE, validations true/true
+ when(contactReference.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+ when(contact.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+ when(contact.getTideBeginDate()).
+ thenReturn(DateUtils.createDate(3, 4, 2010));
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 7 : verification old sampleMonth estimated tides = 0");
+ checkTidesValue(0, false);
+
+ logger.info("test 7 : verification new sampleMonth estimated " +
+ "tides = 1 and real tides = 1");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
+
+ TopiaQuery query = dao.createQuery();
+ query.add(SampleMonth.PERIOD_DATE, DateUtils.createDate(1, 4, 2010));
+
+ SampleMonth month = dao.findByQuery(query);
+
+ assertEquals(1, month.getEstimatedTidesValue());
+ assertEquals(1, month.getRealTidesValue());
+
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
+ @Test
+ public void testDecrementSampleMonthContactRefused()
+ throws TopiaException, NullSampleMonthException {
+ logger.info("testDecrementSampleMonthContactRefused");
+
+ /** PREPARE DATA **/
+ prepareData(false, false);
+
+ // contactReference as the same tideBeginDate and sampleRow as contact
+ Date tideBeginDate = new Date(contact.getTideBeginDate().getTime());
+ when(contactReference.getTideBeginDate()).thenReturn(tideBeginDate);
+ when(contactReference.getSampleRow()).thenReturn(sampleRow);
+
+ // Initialize correct old status in contactReference
+ when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE);
+ when(contactReference.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+ when(contactReference.getValidationProgram()).thenReturn(null);
+
+
+ // Initialize data in sampleMonth
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
+
+ sampleMonth.addEstimatedTideTime(1);
+ sampleMonth.addRealTideTime(1);
+
+ dao.update(sampleMonth);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ // both estimated and real as value = 1
+ checkTidesValue(1, false);
+ checkTidesValue(1, true);
+
+ /** EXEC METHOD **/
+ logger.info("test 1 : validationProgram null -> FALSE, estimated -1" +
+ " and real -1");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contact.getValidationCompany()).thenReturn(Boolean.TRUE);
+ when(contact.getContactState()).
+ thenReturn(ContactState.BOARDING_DONE);
+ when(contact.getValidationProgram()).thenReturn(Boolean.FALSE);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ checkTidesValue(0, false);
+ checkTidesValue(0, true);
+
+ logger.info("test 2 : validationProgram FALSE -> null, estimated +1" +
+ " and real +1");
+ transaction = manager.getContext().beginTransaction();
+ try {
+ when(contactReference.getValidationProgram()).
+ thenReturn(Boolean.FALSE);
+ when(contact.getValidationProgram()).thenReturn(null);
+
+ service.updateSampleMonthTidesValue(transaction, contactReference,
+ contact, true);
+
+ transaction.commitTransaction();
+ } finally {
+ transaction.closeContext();
+ }
+
+ checkTidesValue(1, false);
+ checkTidesValue(1, true);
+ }
+
+ protected void checkTidesValue(int expected, boolean real)
+ throws TopiaException {
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction);
+
+ SampleMonth result = dao.findByTopiaId(sampleMonth.getTopiaId());
+ int test = real ? result.getRealTidesValue() :
+ result.getEstimatedTidesValue();
+ assertEquals(expected, test);
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
+ @Test
+ public void testLoadContactCsv() throws TopiaException,
+ WaoBusinessException,
+ IOException,
+ ImportRefusedException,
+ ImportRefusedException,
+ ParseException {
+ logger.info("testLoadContactCsv");
+
+ /** PREPARE DATA **/
+ prepareData(true, true);
+
+ when(reader.get(CONTACT.CONT_ETAT.name())).
+ thenReturn(ContactState.BOARDING_DONE.libelle());
+ when(reader.get(CONTACT.OBSERV_ID.name())).
+ thenReturn(observer.getLogin());
+ when(reader.get(SAMPLING.PLAN_CODE.name())).
+ thenReturn(sampleRow.getCode());
+ when(reader.get(BOAT.NAVS_COD.name())).
+ thenReturn(String.valueOf(boat.getImmatriculation()));
+ when(reader.get(CONTACT.CONT_DEBUT_MAREE.name())).
+ thenReturn("22/03/2010");
+ when(reader.get(CONTACT.CONT_FIN_MAREE.name())).
+ thenReturn("22/03/10");
+ when(reader.get(CONTACT.CONT_NB_OBSERV.name())).
+ thenReturn("1");
+ when(reader.get(CONTACT.CONT_MAM_CAPT.name())).
+ thenReturn("");
+ when(reader.get(CONTACT.CONT_MAM_OBS.name())).
+ thenReturn("X");
+ when(reader.get(CONTACT.CONT_ALLEGRO.name())).
+ thenReturn("25/03/2010");
+ when(reader.get(CONTACT.CONT_SOCIETE_VALID.name())).
+ thenReturn("A");
+ when(reader.get(CONTACT.CONT_PROGRAM_VALID.name())).
+ thenReturn("");
+ when(reader.get(CONTACT.CONT_CREATION.name())).
+ thenReturn("18/03/10");
+ when(reader.get(CONTACT.CONT_CODE.name())).
+ thenReturn("");
+
+ when(creator.getCompany()).thenReturn(company);
+ when(creator.isAdmin()).thenReturn(false);
+ when(creator.getLogin()).thenReturn(observer.getLogin());
+
+ /** EXEC METHOD **/
+
+ logger.info("test 1 : load contact by Creator jmichmuche -> no error");
+ ContactInput result = new ContactInput();
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ result.initialize(transaction, creator, 1);
+ service.loadContactCsv(reader, result, false);
+ Date createDate = DateUtils.createDate(18,3,2010);
+ assertEquals(createDate, result.getTopiaCreateDate());
+ assertEquals(ContactState.BOARDING_DONE, result.getContactState());
+ assertEquals(observer, result.getObserver());
+ assertEquals(sampleRow, result.getSampleRow());
+ assertEquals(boat, result.getBoat());
+ assertEquals(DateUtils.createDate(22,3,2010),
+ result.getTideBeginDate());
+ assertEquals(DateUtils.createDate(22,3,2010),
+ result.getTideEndDate());
+ assertEquals(1, result.getNbObservants());
+ assertFalse(result.getMammalsCapture());
+ assertTrue(result.getMammalsObservation());
+ assertEquals(DateUtils.createDate(25,3,2010),
+ result.getDataInputDate());
+ // No validation update : creator is not an admin
+ assertNull(result.getValidationCompany());
+ assertNull(result.getValidationProgram());
+ } finally {
+ transaction.closeContext();
+ }
+
+ logger.info("test 2 : Error on boat");
+ when(reader.get(BOAT.NAVS_COD.name())).thenReturn("2222");
+ checkImportError(Contact.BOAT);
+ // Reinit boat
+ when(reader.get(BOAT.NAVS_COD.name())).
+ thenReturn(String.valueOf(boat.getImmatriculation()));
+
+ logger.info("test 3 : Error on company");
+ when(creator.getCompany()).thenReturn(null);
+ checkImportError(WaoUser.COMPANY);
+ // Reinit creator company
+ when(creator.getCompany()).thenReturn(company);
+
+ logger.info("test 4 : Error on observer");
+ when(reader.get(CONTACT.OBSERV_ID.name())).thenReturn("FAKE");
+ checkImportError(Contact.OBSERVER);
+ // Reinit observer
+ when(reader.get(CONTACT.OBSERV_ID.name())).
+ thenReturn(observer.getLogin());
+
+ logger.info("test 5 : Error on sampleRow");
+ when(reader.get(SAMPLING.PLAN_CODE.name())).thenReturn("FAKE");
+ checkImportError(Contact.SAMPLE_ROW);
+ // Reinit sampleRow
+ when(reader.get(SAMPLING.PLAN_CODE.name())).
+ thenReturn(sampleRow.getCode());
+
+ logger.info("test 6 : Error on state");
+ when(reader.get(CONTACT.CONT_ETAT.name())).thenReturn("FAKE");
+ checkImportError(Contact.STATE);
+ // Reinit state
+ when(reader.get(CONTACT.CONT_ETAT.name())).
+ thenReturn(ContactState.BOARDING_DONE.libelle());
+ }
+
+ protected void checkImportError(String field) throws TopiaException {
+ ContactInput result = new ContactInput();
+ TopiaContext transaction = manager.getContext().beginTransaction();
+ try {
+ result.initialize(transaction, creator, 1);
+ service.loadContactCsv(reader, result, false);
+ } catch (Exception eee) {
+ logger.error("Error : " + eee.getMessage());
+ assertEquals(ImportRefusedException.class, eee.getClass());
+ ImportRefusedException ex = (ImportRefusedException)eee;
+ assertEquals(field, ex.getField());
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
+ @Test
+ public void testCreateOrUpdateContact()
+ throws TopiaException, NullSampleMonthException {
+ logger.info("testCreateOrUpdateContact");
+
+ /** PREPARE DATA **/
+ prepareData(true, true);
+
+ // Don't use a mock in this case
+ Contact newContact = service.getNewContact(observer, sampleRow, boat);
+ newContact.setTopiaCreateDate(DateUtils.createDate(2, 3, 2010));
+
+ /** EXEC METHOD **/
+
+ logger.info("test 1 : Create new contact with state CONTACT_START");
+ TopiaContext transaction = null;
+ String newTopiaId = null;
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ service.createOrUpdateContact(dao, newContact, null, false);
+ transaction.commitTransaction();
+
+ newTopiaId = newContact.getTopiaId();
+ assertNotNull(newTopiaId);
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+
+ logger.info("test 1 : Check contact existence");
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ Contact existingContact = dao.findByTopiaId(newTopiaId);
+ assertNotNull(existingContact);
+ assertEquals(boat, existingContact.getBoat());
+ assertEquals(sampleRow, existingContact.getSampleRow());
+ assertEquals(observer, existingContact.getObserver());
+ assertEquals(ContactState.CONTACT_START,
+ existingContact.getContactState());
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+
+ logger.info("test 2 : Update the contact with state BOARDING_DONE, " +
+ "tideBeginDate, tideEndDate and NbObservants");
+ Date tideBeginDate = DateUtils.createDate(18,3,2010);
+ Date tideEndDate = DateUtils.createDate(19,3,2010);
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ newContact.setContactState(ContactState.BOARDING_DONE);
+ newContact.setTideBeginDate(tideBeginDate);
+ newContact.setTideEndDate(tideEndDate);
+ newContact.setNbObservants(1);
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+ Contact oldContact = dao.findByTopiaId(newTopiaId);
+
+ service.createOrUpdateContact(dao, newContact, oldContact, false);
+ transaction.commitTransaction();
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+
+ logger.info("test 2 : Check update contact");
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ Contact existingContact = dao.findByTopiaId(newTopiaId);
+ assertNotNull(existingContact);
+ assertEquals(1, existingContact.getNbObservants());
+ assertEquals(tideBeginDate, existingContact.getTideBeginDate());
+ assertEquals(tideEndDate, existingContact.getTideEndDate());
+ assertEquals(ContactState.BOARDING_DONE,
+ existingContact.getContactState());
+
+ // Will have an update on sampleMonth 03/2010 for estimatedTides
+ SampleMonthDAO monthDAO =
+ WaoDAOHelper.getSampleMonthDAO(transaction);
+ SampleMonth existingMonth =
+ monthDAO.findByTopiaId(sampleMonth.getTopiaId());
+ assertNotNull(existingMonth);
+ assertEquals(1, existingMonth.getEstimatedTidesValue());
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+ }
+
+ @Test
+ public void testImportContactCsv()
+ throws TopiaException, WaoBusinessException, IOException {
+ logger.info("testImportContactCsv");
+
+ /** PREPARE DATA **/
+ prepareData(true, true);
+
+ when(creator.getCompany()).thenReturn(company);
+ when(creator.isAdmin()).thenReturn(false);
+ when(creator.getLogin()).thenReturn(observer.getLogin());
+
+ /** EXEC METHOD **/
+ logger.info("test 1 : Import new contact with observer creator");
+ InputStream input =
+ getClass().getResourceAsStream("/import/contacts.csv");
+ try {
+ ImportResults results = service.importContactCsv(creator, input);
+ assertEquals(1, results.getNbRowsImported());
+ assertEquals(0, results.getNbRowsRefused());
+ assertTrue(results.getErrors().isEmpty());
+ } finally {
+ input.close();
+ }
+
+ logger.info("test 1 : Check creation of the contact");
+ TopiaContext transaction = null;
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ List<Contact> contactsFound = dao.findAll();
+ assertEquals(1, contactsFound.size());
+ Contact contactFound = contactsFound.get(0);
+ assertNull(contactFound.getValidationCompany());
+ assertNull(contactFound.getValidationProgram());
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+
+ logger.info("test 2 : Import new contact with super admin creator");
+ when(creator.getCompany()).thenReturn(company);
+ when(creator.isAdmin()).thenReturn(true);
+ when(creator.getLogin()).thenReturn("admin");
+
+ input = getClass().getResourceAsStream("/import/contacts.csv");
+ try {
+ ImportResults results = service.importContactCsv(creator, input);
+ assertEquals(1, results.getNbRowsImported());
+ assertEquals(0, results.getNbRowsRefused());
+ assertTrue(results.getErrors().isEmpty());
+ } finally {
+ input.close();
+ }
+
+ logger.info("test 2 : Check update validations of the contact");
+ try {
+ transaction = manager.getContext().beginTransaction();
+
+ ContactDAO dao = WaoDAOHelper.getContactDAO(transaction);
+
+ List<Contact> contactsFound = dao.findAll();
+ assertEquals(1, contactsFound.size());
+ Contact contactFound = contactsFound.get(0);
+ assertTrue(contactFound.getValidationCompany());
+ assertTrue(contactFound.getValidationProgram());
+ } finally {
+ if (transaction != null) {
+ transaction.closeContext();
+ }
+ }
+ }
+}
Property changes on: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactInternalTest.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: svn:mergeinfo
+
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -358,6 +358,7 @@
public void onSelectedFromSearch() throws WaoException {
if (log.isDebugEnabled()) {
log.debug("REFRESH FILTERS DATA");
+ log.debug("observerSelect : " + observerSelect);
}
SampleRow row = getSampleRowSelectModel().findObject(sampleRowId);
getFilter().setSampleRow(row);
@@ -370,6 +371,10 @@
if (observerSelect) {
WaoUser observer = getObserverSelectModel().findObject(observerId);
+ if (log.isDebugEnabled()) {
+ log.debug("Observer selected : " +
+ (observer != null ? observer.getFullName() : "null"));
+ }
getFilter().setObserver(observer);
}
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -37,9 +37,7 @@
import fr.ifremer.wao.entity.Contact;
import fr.ifremer.wao.entity.SampleRow;
import fr.ifremer.wao.entity.WaoUser;
-import fr.ifremer.wao.service.ServiceBoat;
import fr.ifremer.wao.service.ServiceContact;
-import fr.ifremer.wao.service.ServiceSampling;
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.AbstractFilteredPage;
import fr.ifremer.wao.ui.data.ContactDataSource;
@@ -113,7 +111,7 @@
contactsForm.clearErrors();
// Initialize filters if needed
if (isFiltersVisible()) {
- initSelectFilters(true, false, true);
+ initSelectFilters(true, true, true);
}
// Initialize fullView to true for admin user
if (fullView == null) {
@@ -171,7 +169,7 @@
Object onActionFromShowFilters() {
// Initialize filters
- initSelectFilters(true, false, true);
+ initSelectFilters(true, true, true);
return filtersZone.getBody();
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-05-03 17:48:07 UTC (rev 475)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -47,8 +47,8 @@
this.response = response;
this.serviceAuthentication = serviceAuthentication;
- if (logger.isDebugEnabled()) {
- logger.debug("Construct");
+ if (logger.isTraceEnabled()) {
+ logger.trace("Construct");
}
}
@@ -57,8 +57,8 @@
ComponentEventRequestParameters parameters,
ComponentRequestHandler handler) throws IOException {
- if (logger.isDebugEnabled()) {
- logger.debug("handleComponentEvent");
+ if (logger.isTraceEnabled()) {
+ logger.trace("handleComponentEvent");
}
if (dispatchedToLoginPage(parameters.getActivePageName())) {
@@ -73,8 +73,8 @@
public void handlePageRender(PageRenderRequestParameters parameters,
ComponentRequestHandler handler) throws IOException {
- if (logger.isDebugEnabled()) {
- logger.debug("handlePageRender");
+ if (logger.isTraceEnabled()) {
+ logger.trace("handlePageRender");
}
if (dispatchedToLoginPage(parameters.getLogicalPageName())) {
@@ -88,12 +88,12 @@
Component page = componentSource.getPage(pageName);
- if (logger.isDebugEnabled()) {
- logger.debug("Page name : " + pageName);
- logger.debug("Page class : " + page.getClass());
- logger.debug("RequiresLogin annotation : " +
+ if (logger.isTraceEnabled()) {
+ logger.trace("Page name : " + pageName);
+ logger.trace("Page class : " + page.getClass());
+ logger.trace("RequiresLogin annotation : " +
page.getClass().isAnnotationPresent(RequiresAuthentication.class));
- logger.debug("User in session : " +
+ logger.trace("User in session : " +
serviceAuthentication.isUserConnected());
}
@@ -105,10 +105,10 @@
if (serviceAuthentication.isUserConnected()) {
WaoUser user = serviceAuthentication.getUserConnected();
- if (logger.isDebugEnabled()) {
- logger.debug("User connected : " + user);
- logger.debug("User role : " + user.getUserRole().name());
- logger.debug("User allowed : " +
+ if (logger.isTraceEnabled()) {
+ logger.trace("User connected : " + user);
+ logger.trace("User role : " + user.getUserRole().name());
+ logger.trace("User allowed : " +
serviceAuthentication.isAllowed(page.getClass()));
}
@@ -122,8 +122,8 @@
Link link = pageRender.createPageRenderLinkWithContext(redirectPage,
pageName);
- if (logger.isDebugEnabled()) {
- logger.debug("Redirection to " + redirectPage.getSimpleName() +
+ if (logger.isTraceEnabled()) {
+ logger.trace("Redirection to " + redirectPage.getSimpleName() +
" page...");
}
Added: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ContactsTest.java
===================================================================
--- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ContactsTest.java (rev 0)
+++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ContactsTest.java 2010-05-03 19:57:42 UTC (rev 476)
@@ -0,0 +1,77 @@
+
+package test.fr.ifremer.wao.ui.pages;
+
+import com.formos.tapestry.testify.core.ForComponents;
+import fr.ifremer.wao.bean.ContactFilter;
+import fr.ifremer.wao.entity.Contact;
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.service.ServiceContact;
+import java.util.HashMap;
+import java.util.Map;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import test.fr.ifremer.wao.ui.AbstractApplicationTest;
+
+/**
+ * ContactsTest
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class ContactsTest extends AbstractApplicationTest {
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(ContactsTest.class);
+
+ @Mock
+ protected WaoUser observer;
+
+ @Mock
+ protected ContactFilter filter;
+
+ @Mock
+ @ForComponents
+ protected ServiceContact serviceContact;
+
+ @Test
+ public void testObserverFilter() {
+ logger.info("## testObserverFilter");
+
+ /** PREPARE DATA **/
+ Mockito.when(observer.getFullName()).thenReturn("Jean Michmuche");
+ Mockito.when(observer.getTopiaId()).thenReturn("ID1");
+
+
+ WaoUser observer2 = Mockito.mock(WaoUser.class);
+ Mockito.when(observer2.getFullName()).thenReturn("Paul Newman");
+ Mockito.when(observer2.getTopiaId()).thenReturn("ID2");
+
+
+ Contact contact1 = Mockito.mock(Contact.class);
+ Contact contact2 = Mockito.mock(Contact.class);
+
+ Mockito.when(contact1.getObserver()).thenReturn(observer);
+ Mockito.when(contact1.getTopiaId()).thenReturn("C1");
+ Mockito.when(contact2.getObserver()).thenReturn(observer2);
+ Mockito.when(contact1.getTopiaId()).thenReturn("C2");
+
+ Map<String, Contact> contacts = new HashMap<String, Contact>();
+ contacts.put("C1", contact1);
+ contacts.put("C2", contact2);
+
+ Mockito.when(filter.getObserver()).thenReturn(observer);
+
+
+ Mockito.when(serviceContact.getNbContacts(filter)).thenReturn(2);
+
+ Mockito.when(serviceContact.getContacts(filter)).thenReturn(contacts);
+
+ // TODO-FD20100503 : to test page render need more data
+ }
+
+}
Property changes on: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ContactsTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
[Suiviobsmer-commits] r475 - in trunk/wao-ui/src/main/java/fr/ifremer/wao/ui: base components pages services
by fdesbois@users.labs.libre-entreprise.org 03 May '10
by fdesbois@users.labs.libre-entreprise.org 03 May '10
03 May '10
Author: fdesbois
Date: 2010-05-03 17:48:07 +0000 (Mon, 03 May 2010)
New Revision: 475
Log:
Remove no more used WaoPage
Removed:
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java
Modified:
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ExceptionReport.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/AbstractFilteredPage.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -80,7 +80,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
-public abstract class AbstractFilteredPage implements WaoPage {
+public abstract class AbstractFilteredPage {
@Inject
private Logger log;
@@ -140,8 +140,7 @@
* Need to be call in setupRender of the page which inherits this abstract
* class.
*/
- @Override
- public void initialize() {
+ public void initCompanyFilter() {
// Very very important to do that at beginning
if (!user.isAdmin()) {
if (log.isDebugEnabled()) {
Deleted: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -1,51 +0,0 @@
-/*
- * #%L
- * Wao :: Web Interface
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 Ifremer
- * %%
- * 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%
- */
-
-package fr.ifremer.wao.ui.base;
-
-/**
- * WaoPage
- *
- * Created: 3 déc. 2009
- *
- * @author fdesbois <fdesbois at codelutin.com>
- */
-public interface WaoPage {
-
- /**
- * Used to determine if the page has to be displayed (depends on user right)
- *
- * @return true if the page has to be displayed
- * @deprecated since 1.2.1
- */
- @Deprecated
- boolean canDisplay();
-
- /**
- * Used to initialize data in renderer of Layout component
- */
- void initialize();
-
-}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -27,12 +27,9 @@
import fr.ifremer.wao.WaoProperty;
import fr.ifremer.wao.entity.WaoUser;
-import fr.ifremer.wao.service.ServiceUser;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.pages.Index;
import fr.ifremer.wao.ui.services.ServiceAuthentication;
import fr.ifremer.wao.ui.services.WaoManager;
-import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectContainer;
@@ -67,9 +64,6 @@
@InjectComponent
private FeedBack contentFeedback;
- @InjectContainer
- private WaoPage page;
-
@Inject
private Request request;
@@ -84,14 +78,6 @@
private boolean fatal = false;
- void setupRender() {
- if (logger.isDebugEnabled()) {
- logger.debug("Initialize page from Layout");
- logger.debug("currentUserExists : " + isCurrentUserExists());
- }
- page.initialize();
- }
-
boolean afterRender() {
// Check if fatal errors has been added to the layout
// Reload the page if feedBack hasn't been reloaded yet to display
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -35,7 +35,6 @@
import fr.ifremer.wao.service.ServiceReferential;
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.GenericSelectModel;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.services.WaoManager;
@@ -64,22 +63,8 @@
*/
@RequiresAuthentication(value = UserRole.ADMIN, readOnlyAllowed = true)
@IncludeStylesheet("context:css/administration.css")
-public class Administration implements WaoPage {
+public class Administration {
- /**
- * The access to the page is only for admin with no readOnly right.
- *
- * @return true if the Administration page can be displayed in Layout
- */
- @Override
- public boolean canDisplay() {
- return currentUser.isAdmin() && !currentUser.getReadOnly();
- }
-
- @Override
- public void initialize() {
- }
-
@Inject
private Logger log;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -33,7 +33,6 @@
import fr.ifremer.wao.entity.Boat;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceBoat;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.util.Collections;
import java.util.List;
@@ -55,23 +54,8 @@
*/
@RequiresAuthentication
@IncludeStylesheet("context:css/boats.css")
-public class BoatActivityCalendar implements WaoPage {
+public class BoatActivityCalendar {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
- @Override
- public void initialize() {
-
- }
-
@Inject
private Logger log;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -94,20 +94,6 @@
@IncludeStylesheet("context:css/boats.css")
public class Boats extends AbstractFilteredPage {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
- @Override
- public void initialize() {
- }
-
@Inject
private Logger log;
@@ -173,6 +159,8 @@
// Initialize filters using AbstractFilteredPage superclass
initSelectFilters(false, false, false);
+ // The company of connected user will be contributed to abstractFilteredPage
+ initCompanyFilter();
companyBoatInfos = null;
}
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -90,16 +90,6 @@
@IncludeStylesheet("context:css/contacts.css")
public class Contacts extends AbstractFilteredPage {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
@Inject
private Logger log;
@@ -129,6 +119,8 @@
if (fullView == null) {
fullView = user.isAdmin();
}
+ // The company of connected user will be contributed to abstractFilteredPage
+ initCompanyFilter();
}
/**************************** CONTACT FILTERS *****************************/
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ExceptionReport.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ExceptionReport.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/ExceptionReport.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -26,7 +26,6 @@
package fr.ifremer.wao.ui.pages;
import fr.ifremer.wao.WaoException;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.services.WaoManager;
import org.apache.tapestry5.annotations.InjectComponent;
@@ -43,21 +42,8 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
-public class ExceptionReport implements ExceptionReporter, WaoPage {
-/**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
+public class ExceptionReport implements ExceptionReporter {
- @Override
- public void initialize() {
- }
-
@InjectComponent
private Layout layout;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -26,12 +26,10 @@
package fr.ifremer.wao.ui.pages;
import fr.ifremer.wao.WaoException;
-import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.News;
import fr.ifremer.wao.entity.NewsImpl;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceNews;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -57,22 +55,8 @@
*/
@RequiresAuthentication
@IncludeStylesheet("context:css/news.css")
-public class Index implements WaoPage {
-
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
+public class Index {
- @Override
- public void initialize() {
- }
-
@Inject
private ServiceNews serviceNews;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -42,7 +42,6 @@
import fr.ifremer.wao.service.ServiceSampling;
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.GenericSelectModel;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.data.WaoPropertyChangeListener;
import fr.ifremer.wao.ui.services.WaoManager;
@@ -82,22 +81,8 @@
*/
@RequiresAuthentication(value = UserRole.ADMIN, readOnlyAllowed = false)
@IncludeStylesheet("context:css/sampling.css")
-public class SampleRowForm implements WaoPage {
+public class SampleRowForm {
- /**
- * Only admin with no readOnly rights can display SampleRowForm.
- *
- * @return true if the user can display the page
- */
- @Override
- public boolean canDisplay() {
- return user.isAdmin() && !user.getReadOnly();
- }
-
- @Override
- public void initialize() {
- }
-
@Inject
private Logger log;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -32,7 +32,6 @@
import fr.ifremer.wao.entity.SampleRowLog;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceSampling;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.FeedBack;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
@@ -57,22 +56,8 @@
*/
@RequiresAuthentication
@IncludeStylesheet("context:css/sampling.css")
-public class SampleRowHistoric implements WaoPage {
+public class SampleRowHistoric {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
- @Override
- public void initialize() {
- }
-
@Inject
private Logger log;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -76,16 +76,6 @@
@IncludeStylesheet("context:css/sampling.css")
public class SamplingPlan extends AbstractFilteredPage {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
@Inject
private Logger logger;
@@ -122,6 +112,8 @@
if (fullView == null) {
fullView = user.isAdmin();
}
+ // The company of connected user will be contributed to abstractFilteredPage
+ initCompanyFilter();
}
/**************************** IMPORT (ADMIN) *******************************/
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -76,17 +76,7 @@
@RequiresAuthentication
@IncludeStylesheet("context:css/synthesis.css")
public class Synthesis extends AbstractFilteredPage {
-
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
+
@Inject
private ServiceSynthesis serviceSynthesis;
@@ -106,6 +96,11 @@
@InjectComponent
private Zone delegator;
+ void setupRender() {
+ // The company of connected user will be contributed to abstractFilteredPage
+ initCompanyFilter();
+ }
+
public Block getActiveBlock() throws WaoException {
if (activeSynthesis == null) {
// Initialize default synthesis by Data Sampling
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -1,7 +1,6 @@
package fr.ifremer.wao.ui.pages;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
import org.apache.tapestry5.annotations.InjectComponent;
@@ -13,22 +12,13 @@
* @author fdesbois
* $Id$
*/
-public class Unavailable implements WaoPage {
+public class Unavailable {
@InjectComponent
private Layout layout;
private String pageName;
- @Override
- public boolean canDisplay() {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public void initialize() {
- }
-
void setupRender() {
layout.addError("Vous n'êtes pas autorisé à accéder à la page " +
pageName + " !");
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -30,7 +30,6 @@
import fr.ifremer.wao.WaoException;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceUser;
-import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.RequiresAuthentication;
import org.apache.commons.lang.StringUtils;
@@ -50,22 +49,8 @@
*/
@RequiresAuthentication
@IncludeStylesheet("context:css/userProfile.css")
-public class UserProfile implements WaoPage {
+public class UserProfile {
- /**
- * No restriction to display this page.
- *
- * @return true
- */
- @Override
- public boolean canDisplay() {
- return true;
- }
-
- @Override
- public void initialize() {
- }
-
@Inject
private ServiceUser serviceUser;
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java 2010-05-03 16:48:00 UTC (rev 474)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java 2010-05-03 17:48:07 UTC (rev 475)
@@ -2,7 +2,6 @@
package fr.ifremer.wao.ui.services;
import fr.ifremer.wao.entity.WaoUser;
-import fr.ifremer.wao.ui.base.WaoPage;
/**
* ServiceAuthentication
1
0
[Suiviobsmer-commits] r474 - in trunk/wao-ui: . src/main/java/fr/ifremer/wao/ui/base src/main/java/fr/ifremer/wao/ui/components src/main/java/fr/ifremer/wao/ui/data src/main/java/fr/ifremer/wao/ui/pages src/main/java/fr/ifremer/wao/ui/services src/main/resources/fr/ifremer/wao/ui/components src/main/webapp src/test/java/test/fr/ifremer/wao/ui src/test/java/test/fr/ifremer/wao/ui/pages
by fdesbois@users.labs.libre-entreprise.org 03 May '10
by fdesbois@users.labs.libre-entreprise.org 03 May '10
03 May '10
Author: fdesbois
Date: 2010-05-03 16:48:00 +0000 (Mon, 03 May 2010)
New Revision: 474
Log:
- Improve user connection managment using a filter on ComponentRequestHandler service.
- Layout doesn't manage authentication anymore, use RequiresAuthentication annotation + ServiceAuthentication service + two new pages Unavailable and Connexion. No need canDisplay method anymore in WaoPage.
- Tests is working fine using Testify :)
Added:
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthenticationImpl.java
trunk/wao-ui/src/main/webapp/Connexion.tml
trunk/wao-ui/src/main/webapp/Unavailable.tml
trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/AdministrationTest.java
Modified:
trunk/wao-ui/pom.xml
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java
trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java
trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml
trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java
trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java
Modified: trunk/wao-ui/pom.xml
===================================================================
--- trunk/wao-ui/pom.xml 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/pom.xml 2010-05-03 16:48:00 UTC (rev 474)
@@ -203,9 +203,10 @@
</build>
</profile>
</profiles>
-<!-- <repositories>
+
+ <repositories>
- Repository for fckeditor component needed for News page
+ <!-- Repository for fckeditor component needed for News page -->
<repository>
<id>m2-release-repository.orientimport.kenai.com</id>
<name>Orient Import Oy Maven Release Repository</name>
@@ -219,7 +220,7 @@
<url>http://tapestry.formos.com/maven-repository</url>
</repository>
- </repositories>-->
+ </repositories>
<scm>
<url>http://labs.libre-entreprise.org/scm/viewvc.php/trunk/wao-ui/?root=suiviobs…</url>
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/base/WaoPage.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -38,7 +38,9 @@
* Used to determine if the page has to be displayed (depends on user right)
*
* @return true if the page has to be displayed
+ * @deprecated since 1.2.1
*/
+ @Deprecated
boolean canDisplay();
/**
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -25,25 +25,20 @@
package fr.ifremer.wao.ui.components;
-import fr.ifremer.wao.WaoBusinessException;
-import fr.ifremer.wao.WaoBusinessException.Type;
-import fr.ifremer.wao.WaoException;
import fr.ifremer.wao.WaoProperty;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.pages.Index;
+import fr.ifremer.wao.ui.services.ServiceAuthentication;
import fr.ifremer.wao.ui.services.WaoManager;
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectContainer;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Parameter;
-import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
@@ -62,37 +57,20 @@
private WaoManager manager;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
+ @Property
private String pageTitle;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
+ @Property
private String contentId;
- /**
- * Objet de session représentant l'utilisateur identifié
- */
- @SessionState
- private WaoUser currentUser;
-
- /**
- * vrai si l'utilisateur s'est identifié, faux sinon
- */
- //@SuppressWarnings("unused")
- //@Property
- //private boolean currentUserExists;
-
@InjectComponent
- private FeedBack connexionFeedback;
-
- @InjectComponent
private FeedBack contentFeedback;
@InjectContainer
private WaoPage page;
@Inject
- private ServiceUser serviceUser;
-
- @Inject
private Request request;
@Inject
@@ -101,13 +79,12 @@
@Inject
private Messages messages;
+ @Inject
+ private ServiceAuthentication serviceAuthentication;
+
private boolean fatal = false;
void setupRender() {
- if(isCurrentUserExists() && !canShowPage()) {
- contentFeedback.addError("Vous n'êtes pas autorisé à accéder" +
- " à cette page !");
- }
if (logger.isDebugEnabled()) {
logger.debug("Initialize page from Layout");
logger.debug("currentUserExists : " + isCurrentUserExists());
@@ -147,7 +124,7 @@
* contributeApplicationStateManager(MappedConfiguration)
*/
public boolean isCurrentUserExists() {
- return StringUtils.isNotEmpty(currentUser.getTopiaId());
+ return serviceAuthentication.isUserConnected();
}
public String getContextPath() {
@@ -157,34 +134,9 @@
public String getVersion() {
return WaoProperty.APP_VERSION.getValue();
}
-
- /**
- * User for connexion form data
- */
- @Property
- private String login;
-
- @Property
- private String password;
-
- @Persist(PersistenceConstants.FLASH)
- @Property
- private String email;
-
- public String getPageTitle() {
- return this.pageTitle;
- }
-
- public String getContentId() {
- return this.contentId;
- }
- public void setCurrentUser(WaoUser user) {
- this.currentUser = user;
- }
-
public WaoUser getCurrentUser() {
- return this.currentUser;
+ return serviceAuthentication.getUserConnected();
}
public FeedBack getFeedBack() {
@@ -192,7 +144,7 @@
}
public String getAdminClass() {
- return this.currentUser.isAdmin() ? " admin" : "";
+ return getCurrentUser().isAdmin() ? " admin" : "";
}
public String getSamplingSelected() {
@@ -215,27 +167,16 @@
return this.contentId.equals("so-admin") ? "selected" : "";
}
- public boolean canShowPage() {
- return page.canDisplay();
- }
-
public String getAccessText() {
- String text = currentUser.getUserRole().getLibelle();
- if (currentUser.getReadOnly()) {
+ String text = getCurrentUser().getUserRole().getLibelle();
+ if (getCurrentUser().getReadOnly()) {
text += " lecture seule";
}
return text;
}
-
-// @InjectPage
-// private Administration administration;
-//
-// public boolean canAccessAdministration() {
-// return administration.canDisplay();
-// }
public boolean displayBody() {
- return canShowPage() && !fatal;
+ return !fatal;
}
/**
@@ -266,50 +207,12 @@
fatal = true;
}
- @Log
- Object onSuccessFromConnexionForm() throws WaoException {
- try {
- if (logger.isDebugEnabled()) {
- logger.debug("Login : " + login);
- }
- if (login != null && password != null) {
- currentUser = serviceUser.connect(login, password);
- if (logger.isDebugEnabled()) {
- logger.debug("User connected : " +
- currentUser.getFullName());
- }
- }
- } catch (WaoBusinessException eee) {
- if (eee.getType().equals(Type.BAD_CONNECTION)) {
- connexionFeedback.addError(eee.getMessage());
- email = login;
- } else if (eee.getType().equals(Type.ILLEGAL_CONNECTION)) {
- connexionFeedback.addInfo(eee.getMessage());
- }
- if (logger.isDebugEnabled()) {
- logger.error("WaoBusinessException : " + eee.getMessage(), eee);
- }
- }
- return null;
- }
- public boolean hasConnexionErrors() {
- return connexionFeedback.hasErrors();
- }
- void onSuccessFromForgetPassword() throws WaoException {
- try {
- serviceUser.forgetPassword(email);
- connexionFeedback.addInfo("Un email avec votre nouveau mot de passe vous a été envoyé.");
- } catch (WaoBusinessException eee) {
- connexionFeedback.addError(eee.getMessage());
- }
- }
-
@Log
Object onActionFromExit() {
- setCurrentUser(null);
- request.getSession(false).invalidate();
- return Index.class;
+ serviceAuthentication.setUserConnected(null);
+ request.getSession(false).invalidate();
+ return Index.class;
}
}
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,30 @@
+
+package fr.ifremer.wao.ui.data;
+
+import fr.ifremer.wao.bean.UserRole;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation is used on pages and components that need authentication
+ * to be rendered.
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+ at Target( { ElementType.TYPE })
+ at Retention(RetentionPolicy.RUNTIME)
+ at Documented
+public @interface RequiresAuthentication {
+
+ // By default everybody can access
+ UserRole[] value() default
+ {UserRole.OBSERVER, UserRole.ADMIN, UserRole.COORDINATOR};
+
+ boolean readOnlyAllowed() default true;
+}
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/RequiresAuthentication.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -28,6 +28,7 @@
import fr.ifremer.wao.WaoBusinessException;
import fr.ifremer.wao.WaoBusinessException.Type;
import fr.ifremer.wao.WaoException;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.Company;
import fr.ifremer.wao.entity.CompanyImpl;
import fr.ifremer.wao.entity.WaoUser;
@@ -36,6 +37,7 @@
import fr.ifremer.wao.ui.base.GenericSelectModel;
import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.services.WaoManager;
import java.util.List;
import org.apache.commons.lang.StringUtils;
@@ -60,6 +62,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication(value = UserRole.ADMIN, readOnlyAllowed = true)
@IncludeStylesheet("context:css/administration.css")
public class Administration implements WaoPage {
@@ -74,8 +77,7 @@
}
@Override
- public void initialize() {
-
+ public void initialize() {
}
@Inject
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/BoatActivityCalendar.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -34,11 +34,11 @@
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceBoat;
import fr.ifremer.wao.ui.base.WaoPage;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.annotations.IncludeStylesheet;
-import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
@@ -53,6 +53,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/boats.css")
public class BoatActivityCalendar implements WaoPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Boats.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -50,6 +50,7 @@
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.BoatDataSource;
import fr.ifremer.wao.ui.data.ExportStreamResponse;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.services.WaoManager;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -89,6 +90,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/boats.css")
public class Boats extends AbstractFilteredPage {
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,118 @@
+
+package fr.ifremer.wao.ui.pages;
+
+import fr.ifremer.wao.WaoBusinessException;
+import fr.ifremer.wao.WaoBusinessException.Type;
+import fr.ifremer.wao.WaoException;
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.service.ServiceUser;
+import fr.ifremer.wao.ui.components.FeedBack;
+import org.apache.tapestry5.PersistenceConstants;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Log;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.slf4j.Logger;
+
+/**
+ * Login
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class Connexion {
+
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private ServiceUser serviceUser;
+
+ @Inject
+ private PageRenderLinkSource pageRender;
+
+ /**
+ * Objet de session représentant l'utilisateur identifié
+ */
+ @SessionState
+ private WaoUser currentUser;
+
+ @InjectComponent
+ private FeedBack connexionFeedback;
+
+ private String redirectPage;
+
+ /**
+ * User for connexion form data
+ */
+ @Property
+ private String login;
+
+ @Property
+ private String password;
+
+ @Persist(PersistenceConstants.FLASH)
+ @Property
+ private String email;
+
+ void onActivate(String page) {
+ this.redirectPage = page;
+ }
+
+ String onPassivate() {
+ return redirectPage;
+ }
+
+ void onValidateFormFromConnexionForm() {
+ try {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Login : " + login);
+ }
+ if (login != null && password != null) {
+ currentUser = serviceUser.connect(login, password);
+ if (logger.isDebugEnabled()) {
+ logger.debug("User connected : " +
+ currentUser.getFullName());
+ }
+ }
+ } catch (WaoBusinessException eee) {
+ if (eee.getType().equals(Type.BAD_CONNECTION)) {
+ connexionFeedback.addError(eee.getMessage());
+ email = login;
+ } else if (eee.getType().equals(Type.ILLEGAL_CONNECTION)) {
+ connexionFeedback.addInfo(eee.getMessage());
+ }
+ if (logger.isDebugEnabled()) {
+ logger.error("WaoBusinessException : " + eee.getMessage(), eee);
+ }
+ }
+ }
+
+ @Log
+ Object onSuccessFromConnexionForm() throws WaoException {
+ if (hasConnexionErrors()) {
+ return this;
+ }
+ // If redirectPage is defined, return a new Link to this page
+ return pageRender.createPageRenderLink(redirectPage);
+ }
+
+ public boolean hasConnexionErrors() {
+ return connexionFeedback.hasErrors();
+ }
+
+ void onSuccessFromForgetPassword() throws WaoException {
+ try {
+ serviceUser.forgetPassword(email);
+ connexionFeedback.addInfo("Un email avec votre nouveau mot de " +
+ "passe vous a été envoyé.");
+ } catch (WaoBusinessException eee) {
+ connexionFeedback.addError(eee.getMessage());
+ }
+ }
+}
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Contacts.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -47,6 +47,7 @@
import fr.ifremer.wao.ui.base.GenericSelectModel;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.ExportStreamResponse;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.services.ContactModelFactory;
import fr.ifremer.wao.ui.services.WaoManager;
import java.io.IOException;
@@ -85,6 +86,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/contacts.css")
public class Contacts extends AbstractFilteredPage {
@@ -111,12 +113,6 @@
@Inject
private ServiceContact serviceContact;
- @Inject
- private ServiceSampling serviceSampling;
-
- @Inject
- private ServiceBoat serviceBoat;
-
@Log
void setupRender() throws WaoException {
if (log.isDebugEnabled()) {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Index.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -26,11 +26,13 @@
package fr.ifremer.wao.ui.pages;
import fr.ifremer.wao.WaoException;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.News;
import fr.ifremer.wao.entity.NewsImpl;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.service.ServiceNews;
import fr.ifremer.wao.ui.base.WaoPage;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -53,6 +55,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/news.css")
public class Index implements WaoPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowForm.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -27,6 +27,7 @@
import fr.ifremer.wao.WaoBusinessException;
import fr.ifremer.wao.WaoException;
+import fr.ifremer.wao.bean.UserRole;
import fr.ifremer.wao.entity.Boat;
import fr.ifremer.wao.entity.Company;
import fr.ifremer.wao.entity.FishingZone;
@@ -42,6 +43,7 @@
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.GenericSelectModel;
import fr.ifremer.wao.ui.base.WaoPage;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.data.WaoPropertyChangeListener;
import fr.ifremer.wao.ui.services.WaoManager;
import java.text.DateFormat;
@@ -78,6 +80,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication(value = UserRole.ADMIN, readOnlyAllowed = false)
@IncludeStylesheet("context:css/sampling.css")
public class SampleRowForm implements WaoPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SampleRowHistoric.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -35,6 +35,7 @@
import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.FeedBack;
import fr.ifremer.wao.ui.components.Layout;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
@@ -54,6 +55,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/sampling.css")
public class SampleRowHistoric implements WaoPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/SamplingPlan.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -41,6 +41,7 @@
import fr.ifremer.wao.ui.base.AbstractFilteredPage;
import fr.ifremer.wao.ui.components.Layout;
import fr.ifremer.wao.ui.data.ExportStreamResponse;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
@@ -71,6 +72,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/sampling.css")
public class SamplingPlan extends AbstractFilteredPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Synthesis.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -39,6 +39,7 @@
import fr.ifremer.wao.ui.data.BusinessUtils;
import fr.ifremer.wao.ui.data.ChartUtils;
import fr.ifremer.wao.ui.data.ChartUtils.ChartType;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import fr.ifremer.wao.ui.data.SynthesisId;
import java.text.DateFormat;
import java.text.NumberFormat;
@@ -72,6 +73,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/synthesis.css")
public class Synthesis extends AbstractFilteredPage {
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,40 @@
+
+package fr.ifremer.wao.ui.pages;
+
+import fr.ifremer.wao.ui.base.WaoPage;
+import fr.ifremer.wao.ui.components.Layout;
+import org.apache.tapestry5.annotations.InjectComponent;
+
+/**
+ * Unavailable
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class Unavailable implements WaoPage {
+
+ @InjectComponent
+ private Layout layout;
+
+ private String pageName;
+
+ @Override
+ public boolean canDisplay() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void initialize() {
+ }
+
+ void setupRender() {
+ layout.addError("Vous n'êtes pas autorisé à accéder à la page " +
+ pageName + " !");
+ }
+
+ void onActivate(String pageName) {
+ this.pageName = pageName;
+ }
+}
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Unavailable.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/UserProfile.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -32,6 +32,7 @@
import fr.ifremer.wao.service.ServiceUser;
import fr.ifremer.wao.ui.base.WaoPage;
import fr.ifremer.wao.ui.components.Layout;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
@@ -39,7 +40,6 @@
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.BeanEditForm;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.slf4j.Logger;
/**
* UserProfile
@@ -48,6 +48,7 @@
*
* @author fdesbois <fdesbois at codelutin.com>
*/
+ at RequiresAuthentication
@IncludeStylesheet("context:css/userProfile.css")
public class UserProfile implements WaoPage {
Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/AppModule.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -26,6 +26,7 @@
package fr.ifremer.wao.ui.services;
import fr.ifremer.wao.WaoContextImpl;
+import fr.ifremer.wao.entity.CompanyImpl;
import fr.ifremer.wao.entity.WaoUser;
import fr.ifremer.wao.entity.WaoUserImpl;
import fr.ifremer.wao.service.*;
@@ -39,11 +40,14 @@
import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
import org.apache.tapestry5.services.ApplicationStateContribution;
import org.apache.tapestry5.services.ApplicationStateCreator;
+import org.apache.tapestry5.services.ApplicationStateManager;
+import org.apache.tapestry5.services.ComponentRequestFilter;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestFilter;
import org.apache.tapestry5.services.RequestHandler;
import org.apache.tapestry5.services.Response;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This module is automatically included as part of the Tapestry IoC Registry,
@@ -54,6 +58,9 @@
*/
public class AppModule {
+ private static final Logger logger =
+ LoggerFactory.getLogger(AppModule.class);
+
public static void bind(ServiceBinder binder) {
binder.bind(ContactModelFactory.class);
}
@@ -131,6 +138,13 @@
return instance;
}
+ public ServiceAuthentication buildServiceAuthentication(
+ ApplicationStateManager stateManager) {
+ ServiceAuthentication instance =
+ new ServiceAuthenticationImpl(stateManager);
+ return instance;
+ }
+
public static void contributeApplicationDefaults(
MappedConfiguration<String, String> configuration) {
// Contributions to ApplicationDefaults will override any contributions to
@@ -210,14 +224,16 @@
* Used to instanciate SessionState WaoUser when session expires.
*
* @param configuration to add the ApplicationStateCreator.
+ * @param serviceAuthentication used to instantiate the new user
*/
public void contributeApplicationStateManager(MappedConfiguration<Class<?>,
- ApplicationStateContribution> configuration) {
+ ApplicationStateContribution> configuration,
+ final ServiceAuthentication serviceAuthentication) {
ApplicationStateCreator<WaoUser> creator =
new ApplicationStateCreator<WaoUser>() {
@Override
public WaoUser create() {
- return new WaoUserImpl();
+ return serviceAuthentication.getNewUserInstance();
}
};
@@ -225,6 +241,24 @@
new ApplicationStateContribution("session", creator));
}
+ /**
+ * Contribution to ComponentRequestHandler service. The
+ * {@link RequiresAuthenticationFilter} is added to the configuration of
+ * the service to provide authentication managment on user connected.
+ *
+ * @param configuration
+ * @see ServiceAuthentication
+ * @see RequiresAuthenticationFilter
+ * @see ComponentRequestFilter
+ */
+ public static void contributeComponentRequestHandler(
+ OrderedConfiguration<ComponentRequestFilter> configuration) {
+ configuration.addInstance("RequiresAuthentication",
+ RequiresAuthenticationFilter.class);
+ }
+
+
+
// public void contributeValidationMessagesSource(OrderedConfiguration<String> configuration) {
// configuration.add("myValidationMessages", "jumpstart/web/validators/ValidationMessages");
// configuration.add("myTranslationMessages", "jumpstart/web/translators/TranslationMessages");
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,135 @@
+package fr.ifremer.wao.ui.services;
+
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
+import fr.ifremer.wao.ui.pages.Connexion;
+import fr.ifremer.wao.ui.pages.Unavailable;
+import java.io.IOException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.runtime.Component;
+import org.apache.tapestry5.services.ComponentEventRequestParameters;
+import org.apache.tapestry5.services.ComponentRequestFilter;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.ComponentSource;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.apache.tapestry5.services.PageRenderRequestParameters;
+import org.apache.tapestry5.services.Response;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * RequiresLoginFilter
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class RequiresAuthenticationFilter implements ComponentRequestFilter {
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(RequiresAuthenticationFilter.class);
+
+ private final PageRenderLinkSource pageRender;
+
+ private final ComponentSource componentSource;
+
+ private final Response response;
+
+ private final ServiceAuthentication serviceAuthentication;
+
+ public RequiresAuthenticationFilter(PageRenderLinkSource renderLinkSource,
+ ComponentSource componentSource, Response response,
+ ServiceAuthentication serviceAuthentication) {
+ this.pageRender = renderLinkSource;
+ this.componentSource = componentSource;
+ this.response = response;
+ this.serviceAuthentication = serviceAuthentication;
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Construct");
+ }
+ }
+
+ @Override
+ public void handleComponentEvent(
+ ComponentEventRequestParameters parameters,
+ ComponentRequestHandler handler) throws IOException {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("handleComponentEvent");
+ }
+
+ if (dispatchedToLoginPage(parameters.getActivePageName())) {
+ return;
+ }
+
+ handler.handleComponentEvent(parameters);
+
+ }
+
+ @Override
+ public void handlePageRender(PageRenderRequestParameters parameters,
+ ComponentRequestHandler handler) throws IOException {
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("handlePageRender");
+ }
+
+ if (dispatchedToLoginPage(parameters.getLogicalPageName())) {
+ return;
+ }
+
+ handler.handlePageRender(parameters);
+ }
+
+ private boolean dispatchedToLoginPage(String pageName) throws IOException {
+
+ Component page = componentSource.getPage(pageName);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Page name : " + pageName);
+ logger.debug("Page class : " + page.getClass());
+ logger.debug("RequiresLogin annotation : " +
+ page.getClass().isAnnotationPresent(RequiresAuthentication.class));
+ logger.debug("User in session : " +
+ serviceAuthentication.isUserConnected());
+ }
+
+ if (!page.getClass().isAnnotationPresent(RequiresAuthentication.class)) {
+ return false;
+ }
+
+ Class<?> redirectPage = Connexion.class;
+
+ if (serviceAuthentication.isUserConnected()) {
+ WaoUser user = serviceAuthentication.getUserConnected();
+ if (logger.isDebugEnabled()) {
+ logger.debug("User connected : " + user);
+ logger.debug("User role : " + user.getUserRole().name());
+ logger.debug("User allowed : " +
+ serviceAuthentication.isAllowed(page.getClass()));
+ }
+
+ if (serviceAuthentication.isAllowed(page.getClass())) {
+ return false;
+ }
+
+ redirectPage = Unavailable.class;
+ }
+
+ Link link = pageRender.createPageRenderLinkWithContext(redirectPage,
+ pageName);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Redirection to " + redirectPage.getSimpleName() +
+ " page...");
+ }
+
+ response.sendRedirect(link);
+
+ return true;
+ }
+}
+
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,27 @@
+
+package fr.ifremer.wao.ui.services;
+
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.ui.base.WaoPage;
+
+/**
+ * ServiceAuthentication
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public interface ServiceAuthentication {
+
+ boolean isUserConnected();
+
+ WaoUser getUserConnected();
+
+ void setUserConnected(WaoUser user);
+
+ boolean isAllowed(Class<?> page);
+
+ WaoUser getNewUserInstance();
+
+}
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthentication.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthenticationImpl.java
===================================================================
--- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthenticationImpl.java (rev 0)
+++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthenticationImpl.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,73 @@
+
+package fr.ifremer.wao.ui.services;
+
+import fr.ifremer.wao.bean.UserRole;
+import fr.ifremer.wao.entity.WaoUser;
+import fr.ifremer.wao.entity.WaoUserImpl;
+import fr.ifremer.wao.ui.data.RequiresAuthentication;
+import org.apache.tapestry5.services.ApplicationStateManager;
+
+/**
+ * ServiceAuthenticationImpl
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class ServiceAuthenticationImpl implements ServiceAuthentication {
+
+ private final ApplicationStateManager stateManager;
+
+ public ServiceAuthenticationImpl(ApplicationStateManager stateManager) {
+ this.stateManager = stateManager;
+ }
+
+ @Override
+ public boolean isUserConnected() {
+ return stateManager.exists(WaoUser.class);
+ }
+
+ @Override
+ public WaoUser getUserConnected() {
+ return stateManager.getIfExists(WaoUser.class);
+ }
+
+ @Override
+ public void setUserConnected(WaoUser user) {
+ stateManager.set(WaoUser.class, user);
+ }
+
+ @Override
+ public boolean isAllowed(Class<?> page) {
+ if (page.isAnnotationPresent(RequiresAuthentication.class) &&
+ isUserConnected()) {
+
+ RequiresAuthentication check =
+ page.getAnnotation(RequiresAuthentication.class);
+
+ WaoUser user = getUserConnected();
+
+ // Check if user readOnly is allowed
+ if (user.getReadOnly() && !check.readOnlyAllowed()) {
+ return false;
+ }
+
+ // Check if user role is allowed
+ for (UserRole role : check.value()) {
+ if (role.equals(user.getUserRole())) {
+ return true;
+ }
+ }
+ return false;
+ }
+ // No restriction if annotation is not present
+ return true;
+ }
+
+ @Override
+ public WaoUser getNewUserInstance() {
+ return new WaoUserImpl();
+ }
+
+}
Property changes on: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/ServiceAuthenticationImpl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml
===================================================================
--- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml 2010-05-03 16:48:00 UTC (rev 474)
@@ -2,7 +2,7 @@
<!--
#%L
Wao :: Web Interface
-
+
$Author$
$LastChangedDate$
$LastChangedRevision$
@@ -15,17 +15,17 @@
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%
- -->
+-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
@@ -35,149 +35,110 @@
<link rel="stylesheet" type="text/css" href="${asset:context:css/common.css}" />
<link rel="stylesheet" type="text/css" href="${asset:context:css/main.css}" />
<script type="text/javascript" src="${asset:context:js/wao.js}"/>
- </head>
- <t:if t:test="currentUserExists">
- <body>
- <t:unless t:test="devEnvironment">
- <!-- Script for Google Analytics -->
- <script type="text/javascript">
- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
- document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
- </script>
- <script type="text/javascript">
- try {
+ </head>
+ <body>
+ <t:unless t:test="devEnvironment">
+ <!-- Script for Google Analytics -->
+ <script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script type="text/javascript">
+ try {
var pageTracker = _gat._getTracker("UA-12982015-1");
pageTracker._trackPageview();
- } catch(err) {}
- </script>
- </t:unless>
- <div id="so-session" class="clearfix">
- <div class="fleft">
- <a t:type="pagelink" t:page="index" title="Page d'accueil">
- <img src="${asset:context:img/logo-wao-48px.png}" alt="WAO logo" title="Retourner sur la page d'accueil"/>
- </a>
- </div>
- <div class="fleft">
- <a href="mailto:obsmer at ifremer.fr" title="Contacter un responsable Obsmer">
- <img src="${asset:context:img/MiniLogo.jpg}" alt="Obsmer logo"/>
- </a>
- </div>
- <div id="user-infos" class="fleft">
- Vous êtes <strong>${currentUser.fullName}</strong> de la société <strong>${currentUser.company.name}</strong>
- (${accessText})
- </div>
- <div id="user-actions" class="fright">
- <a t:type="pagelink" t:page="index" title="Page d'accueil">
- <img src="${asset:context:img/home.png}" alt="Accueil" title="Page d'accueil" />
- </a>
- <a t:type="pagelink" t:page="userProfile" title="Gestion profil">
- <img src="${asset:context:img/user.png}" alt="Preferences" title="Gestion profil"/>
- </a>
- <a t:type="actionlink" t:id="exit" title="Déconnexion">
- <img src="${asset:context:img/exit.png}" alt="Exit" title="Déconnexion"/>
- </a>
- </div>
+ } catch(err) {}
+ </script>
+ </t:unless>
+ <div id="so-session" class="clearfix">
+ <div class="fleft">
+ <a t:type="pagelink" t:page="index" title="Page d'accueil">
+ <img src="${asset:context:img/logo-wao-48px.png}" alt="WAO logo" title="Retourner sur la page d'accueil"/>
+ </a>
</div>
- <ul class="clearfix" id="so-menu">
- <li class="link${adminClass} ${samplingSelected}" onclick="location.href='${contextPath}/samplingPlan'"
- title="Plan d'échantillonnage">
- Plan d'Echantillonnage
- </li>
+ <div class="fleft">
+ <a href="mailto:obsmer at ifremer.fr" title="Contacter un responsable Obsmer">
+ <img src="${asset:context:img/MiniLogo.jpg}" alt="Obsmer logo"/>
+ </a>
+ </div>
+ <div id="user-infos" class="fleft">
+ Vous êtes <strong>${currentUser.fullName}</strong> de la société <strong>${currentUser.company.name}</strong>
+ (${accessText})
+ </div>
+ <div id="user-actions" class="fright">
+ <a t:type="pagelink" t:page="index" title="Page d'accueil">
+ <img src="${asset:context:img/home.png}" alt="Accueil" title="Page d'accueil" />
+ </a>
+ <a t:type="pagelink" t:page="userProfile" title="Gestion profil">
+ <img src="${asset:context:img/user.png}" alt="Preferences" title="Gestion profil"/>
+ </a>
+ <a t:type="actionlink" t:id="exit" title="Déconnexion">
+ <img src="${asset:context:img/exit.png}" alt="Exit" title="Déconnexion"/>
+ </a>
+ </div>
+ </div>
+ <ul class="clearfix" id="so-menu">
+ <li class="link${adminClass} ${samplingSelected}" onclick="location.href='${contextPath}/samplingPlan'"
+ title="Plan d'échantillonnage">
+ Plan d'Echantillonnage
+ </li>
+ <li class="sep"> </li>
+ <li class="link${adminClass} ${boatsSelected}" onclick="location.href='${contextPath}/boats'" title="Liste des navires">
+ Navires
+ </li>
+ <li class="sep"> </li>
+ <li class="link${adminClass} ${contactsSelected}" onclick="location.href='${contextPath}/contacts'" title="Liste des contacts">
+ Contacts
+ </li>
+ <li class="sep"> </li>
+ <li class="link${adminClass} ${synthesisSelected}" onclick="location.href='${contextPath}/synthesis'" title="Synthèses et indicateurs">
+ Synthèse
+ </li>
+ <t:if t:test="currentUser.admin">
<li class="sep"> </li>
- <li class="link${adminClass} ${boatsSelected}" onclick="location.href='${contextPath}/boats'" title="Liste des navires">
- Navires
+ <li class="link${adminClass} ${adminSelected}" onclick="location.href='${contextPath}/administration'" title="Administration">
+ Administration
</li>
- <li class="sep"> </li>
- <li class="link${adminClass} ${contactsSelected}" onclick="location.href='${contextPath}/contacts'" title="Liste des contacts">
- Contacts
- </li>
- <li class="sep"> </li>
- <li class="link${adminClass} ${synthesisSelected}" onclick="location.href='${contextPath}/synthesis'" title="Synthèses et indicateurs">
- Synthèse
- </li>
- <t:if t:test="currentUser.admin">
- <li class="sep"> </li>
- <li class="link${adminClass} ${adminSelected}" onclick="location.href='${contextPath}/administration'" title="Administration">
- Administration
- </li>
- </t:if>
- </ul>
+ </t:if>
+ </ul>
- <div id="${contentId}">
- <t:feedback t:id="contentFeedback" t:autoClear="false"/>
- <t:if t:test="displayBody()">
- <t:body />
- </t:if>
- </div>
- <div id="so-footer">
- <p>
- <a href="http://suiviobsmer.labs.libre-entreprise.org/wao/" title="Documentation de l'application" target="blank">
- WAO
- </a>
- <a href="http://suiviobsmer.labs.libre-entreprise.org/wao/release-note.html" title="Modifications faites pour cette version" target="blank">
- ${version}
- </a> -
- <a href="mailto:obsmer at ifremer.fr" title="Contacter un responsable Obsmer" target="blank">
- Obsmer
- </a> -
- <a href="http://www.ifremer.fr/sih" title="Page d'accueil du SIH" target="blank">
- Ifremer SIH
- </a> -
- <a href="http://www.gnu.org/licenses/gpl.html" title="License GPL v3" target="blank">
- GPLv3
- </a> - Copyright 2009-2010
- <a href="http://www.ifremer.fr" title="Ifremer" target="blank">
- Ifremer</a>,
- <a href="http://www.codelutin.com" title="Code Lutin" target="blank">
- Code Lutin
- </a>
- <!-- -
- <a href="https://labs.libre-entreprise.org/tracker/?atid=692&group_id=154&func=browse" title="Bug Tracker">
- Bugs
- </a>-->
- </p>
- <p class="cnil">
- Le site de "SUIVI DU REALISE DU PLAN D'ECHANTILLONNAGE DES OBSERVATIONS A LA MER" a fait l'objet d'une déclaration à
- la CNIL sous le numéro suivant : 1414476
- </p>
- </div>
- </body>
-
- <!-- Connexion -->
- <p:else>
- <body class="so-connexion">
- <div id="so-connexion-feedback">
- <t:feedback t:id="connexionFeedback" />
- <t:if t:test="hasConnexionErrors()">
- <form t:type="form" t:id="forgetPassword">
- <strong>Mot de passe oublié ?</strong>
- <t:label t:for="email" /> :
- <input t:type="textfield" t:id="email" value="email" />
- <input class="ico accept" t:type="submit" value="Go" title="Envoyez moi un nouveau mot de passe" />
- </form>
- </t:if>
- </div>
- <div class="clearfix" id="so-connexion-box">
- <form t:id="connexionForm" t:type="form">
- <div class="fleft clearfix" id="so-connexion-form">
- <p><t:label for="login" /> : </p>
- <p><input t:type="textfield" t:id="login" t:value="login" /></p>
- <p><t:label for="password" /> : </p>
- <p><input t:type="passwordfield" t:id="password" t:value="password" /></p>
- <div class="fright" id="so-connexion-form-buttons">
- <input class="ico accept" t:type="submit" value="Connexion" title="Connexion à l'application Wao" />
- </div>
- </div>
- <div class="fright" id="so-connexion-logo">
- <img src="${asset:context:img/logo-wao-48px.png}" alt="Logo Obsmer"/>
- </div>
- </form>
- </div>
-
- </body>
- <!--<div class="acenter">
- <img src="${asset:context:}/img/logo_WAO.png" alt="Logo WAO" title="WAO - Web Applicatif Obsmer"/>
- </div>-->
- </p:else>
- </t:if>
+ <div id="${contentId}">
+ <t:feedback t:id="contentFeedback" t:autoClear="false"/>
+ <t:if t:test="displayBody()">
+ <t:body />
+ </t:if>
+ </div>
+ <div id="so-footer">
+ <p>
+ <a href="http://suiviobsmer.labs.libre-entreprise.org/wao/" title="Documentation de l'application" target="blank">
+ WAO
+ </a>
+ <a href="http://suiviobsmer.labs.libre-entreprise.org/wao/release-note.html" title="Modifications faites pour cette version" target="blank">
+ ${version}
+ </a> -
+ <a href="mailto:obsmer at ifremer.fr" title="Contacter un responsable Obsmer" target="blank">
+ Obsmer
+ </a> -
+ <a href="http://www.ifremer.fr/sih" title="Page d'accueil du SIH" target="blank">
+ Ifremer SIH
+ </a> -
+ <a href="http://www.gnu.org/licenses/gpl.html" title="License GPL v3" target="blank">
+ GPLv3
+ </a> - Copyright 2009-2010
+ <a href="http://www.ifremer.fr" title="Ifremer" target="blank">
+ Ifremer</a>,
+ <a href="http://www.codelutin.com" title="Code Lutin" target="blank">
+ Code Lutin
+ </a>
+ <!-- -
+ <a href="https://labs.libre-entreprise.org/tracker/?atid=692&group_id=154&func=browse" title="Bug Tracker">
+ Bugs
+ </a>-->
+ </p>
+ <p class="cnil">
+ Le site de "SUIVI DU REALISE DU PLAN D'ECHANTILLONNAGE DES OBSERVATIONS A LA MER" a fait l'objet d'une déclaration à
+ la CNIL sous le numéro suivant : 1414476
+ </p>
+ </div>
+ </body>
</html>
Added: trunk/wao-ui/src/main/webapp/Connexion.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/Connexion.tml (rev 0)
+++ trunk/wao-ui/src/main/webapp/Connexion.tml 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ #%L
+ Wao :: Web Interface
+
+ $Author$
+ $LastChangedDate$
+ $LastChangedRevision$
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2010 Ifremer
+ %%
+ 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%
+-->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <title>WAO - Web Applicatif Obsmer : Connexion</title>
+ <link rel="stylesheet" type="text/css" href="${asset:context:css/common.css}" />
+ <link rel="stylesheet" type="text/css" href="${asset:context:css/main.css}" />
+ </head>
+ <body class="so-connexion">
+
+ <!-- Connexion -->
+ <div id="so-connexion-feedback">
+ <t:feedback t:id="connexionFeedback" />
+ <t:if t:test="hasConnexionErrors()">
+ <form t:type="form" t:id="forgetPassword" action="tapestry">
+ <div>
+ <strong>Mot de passe oublié ?</strong>
+ <t:label t:for="email" /> :
+ <input t:type="textfield" t:id="email" value="email" />
+ <input class="ico accept" t:type="submit" value="Go" title="Envoyez moi un nouveau mot de passe" />
+ </div>
+ </form>
+ </t:if>
+ </div>
+ <div class="clearfix" id="so-connexion-box">
+ <form t:id="connexionForm" t:type="form" action="tapestry">
+ <div class="fleft clearfix" id="so-connexion-form">
+ <p><t:label for="login" /> : </p>
+ <p><input t:type="textfield" t:id="login" t:value="login" /></p>
+ <p><t:label for="password" /> : </p>
+ <p><input t:type="passwordfield" t:id="password" t:value="password" /></p>
+ <div class="fright" id="so-connexion-form-buttons">
+ <input class="ico accept" t:type="submit" value="Connexion" title="Connexion à l'application Wao" />
+ </div>
+ </div>
+ <div class="fright" id="so-connexion-logo">
+ <img src="${asset:context:img/logo-wao-48px.png}" alt="Logo Obsmer"/>
+ </div>
+ </form>
+ </div>
+
+ </body>
+ <!--<div class="acenter">
+ <img src="${asset:context:}/img/logo_WAO.png" alt="Logo WAO" title="WAO - Web Applicatif Obsmer"/>
+ </div>-->
+</html>
Property changes on: trunk/wao-ui/src/main/webapp/Connexion.tml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/wao-ui/src/main/webapp/Unavailable.tml
===================================================================
--- trunk/wao-ui/src/main/webapp/Unavailable.tml (rev 0)
+++ trunk/wao-ui/src/main/webapp/Unavailable.tml 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ #%L
+ Wao :: Web Interface
+
+ $Author$
+ $LastChangedDate$
+ $LastChangedRevision$
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2010 Ifremer
+ %%
+ 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%
+ -->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<t:layout t:pageTitle="Accès réservé" t:contentId="so-unavailable"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter" />
\ No newline at end of file
Property changes on: trunk/wao-ui/src/main/webapp/Unavailable.tml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java
===================================================================
--- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -81,4 +81,14 @@
stateManager.set(WaoUser.class, user);
}
}
+
+ protected void prepareAdminUser() {
+ Company company = mock(Company.class);
+ when(company.getName()).thenReturn("ADMIN");
+
+ when(user.getFullName()).thenReturn("Super Admin");
+ when(user.isAdmin()).thenReturn(true);
+ when(user.getUserRole()).thenReturn(UserRole.ADMIN);
+ when(user.getCompany()).thenReturn(company);
+ }
}
Added: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/AdministrationTest.java
===================================================================
--- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/AdministrationTest.java (rev 0)
+++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/AdministrationTest.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -0,0 +1,40 @@
+
+package test.fr.ifremer.wao.ui.pages;
+
+import org.apache.tapestry5.dom.Document;
+import org.apache.tapestry5.dom.Element;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import test.fr.ifremer.wao.ui.AbstractApplicationTest;
+
+/**
+ * AdministrationTest
+ *
+ * Created: 3 mai 2010
+ *
+ * @author fdesbois
+ * $Id$
+ */
+public class AdministrationTest extends AbstractApplicationTest {
+
+ private static final Logger logger =
+ LoggerFactory.getLogger(ConnectionTest.class);
+
+ @Test
+ public void testAuthenticationFailed() {
+ logger.info("## testAuthenticationFailed");
+
+ prepareObserverUser(true);
+
+ Document page = tester.renderPage("administration");
+ // User not allowed will be redirect on Unavailable page
+ Element main = page.getElementById("so-unavailable");
+ Assert.assertNotNull(main);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Page content : " + main);
+ }
+ }
+}
Property changes on: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/AdministrationTest.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java
===================================================================
--- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java 2010-04-29 21:50:44 UTC (rev 473)
+++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java 2010-05-03 16:48:00 UTC (rev 474)
@@ -37,6 +37,7 @@
import java.util.HashMap;
import java.util.Map;
import org.apache.tapestry5.dom.Document;
+import org.apache.tapestry5.dom.Element;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.ApplicationStateManager;
import org.junit.*;
@@ -68,31 +69,54 @@
@Test
public void testObserverSession()
throws WaoException, WaoBusinessException {
- if (logger.isInfoEnabled()) {
- logger.info("testObserverSession");
- }
+ logger.info("## testObserverSession");
+
prepareObserverUser(true);
WaoUser sso = stateManager.getIfExists(WaoUser.class);
Assert.assertNotNull(sso);
Assert.assertFalse(sso.isAdmin());
+
+ Document page = tester.renderPage("index");
+ Element main = page.getElementById("so-news");
+ if (logger.isInfoEnabled()) {
+ logger.info("Content page News : " + main);
+ }
+ Assert.assertNotNull(main);
}
@Test
- public void testConnection() throws WaoException, WaoBusinessException {
+ public void testObserverConnection()
+ throws WaoException, WaoBusinessException {
+ logger.info("## testObserverConnection");
+
+ when(serviceNews.getNews()).thenReturn(new ArrayList<News>());
+ Document page = tester.renderPage("index");
+ // Will be redirect to Connexion page
if (logger.isInfoEnabled()) {
- logger.info("testConnection");
+ logger.info("Content : " + page.getRootElement());
}
+
+ prepareObserverUser(false);
+ // Connect the user with connection page
+ connectUser(page);
+ }
+
+ @Test
+ public void testAdminConnection()
+ throws WaoException, WaoBusinessException {
+ logger.info("## testAdminConnection");
+
when(serviceNews.getNews()).thenReturn(new ArrayList<News>());
- Document page = tester.renderPage("Index");
+ Document page = tester.renderPage("index");
if (logger.isInfoEnabled()) {
logger.info("Content : " + page.getRootElement());
}
- prepareObserverUser(false);
+ prepareAdminUser();
connectUser(page);
}
- private void connectUser(Document page)
+ private Element connectUser(Document page)
throws WaoException, WaoBusinessException {
when(serviceUser.connect("jmichmuche", "password")).thenReturn(user);
@@ -101,9 +125,13 @@
fieldValues.put("password", "password");
Document result = tester.submitForm(
page.getElementById("connexionForm"), fieldValues);
+
+ Element main = result.getElementById("so-news");
if (logger.isInfoEnabled()) {
- logger.info("Content : " + result.getRootElement());
+ logger.info("Content page News : " + main);
}
+ Assert.assertNotNull(main);
+ return main;
}
}
1
0