Pollen-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
- November
- October
- September
- August
- 3196 discussions
r2975 - in trunk: pollen-business/src/main/java/org/chorem/pollen pollen-business/src/main/java/org/chorem/pollen/service pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin pollen-ui/src/main/resources/i18n pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin pollen-ui/src/main/webapp/admin
by fdesbois@users.chorem.org 26 Apr '10
by fdesbois@users.chorem.org 26 Apr '10
26 Apr '10
Author: fdesbois
Date: 2010-04-26 16:12:40 +0200 (Mon, 26 Apr 2010)
New Revision: 2975
Log:
- Add message when email was not sent (password is still generated)
- Add tooltip to help admin for password managment
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java
trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties
trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-26 14:12:40 UTC (rev 2975)
@@ -27,8 +27,10 @@
this.type = type;
}
- public PollenBusinessException(Throwable exception, PollenExceptionType type, Object... args) {
+ public PollenBusinessException(Throwable exception,
+ PollenExceptionType type, Object... args) {
super(type.getMessage(), exception);
+ this.args = args;
this.type = type;
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-26 14:12:40 UTC (rev 2975)
@@ -61,12 +61,12 @@
errorArgs.add(pollenEmail.getPort());
errorArgs.add(pollenEmail.getTo());
errorArgs.add(pollenEmail.getFrom());
+
try {
-
// Create the SimpleEmail to send
SimpleEmail email = pollenEmail.createSimpleEmail();
email.send();
-
+
if (log.isInfoEnabled()) {
log.info("Mail sent to : " + pollenEmail.getTo());
@@ -80,7 +80,7 @@
}
} catch (EmailException eee) {
if (log.isErrorEnabled()) {
- log.error("Error on email send", eee);
+ log.error("Error on email send to " + pollenEmail.getTo(), eee);
}
throw new PollenBusinessException(eee,
PollenExceptionType.SMTP_NOT_AVAILABLE,
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java 2010-04-26 14:12:40 UTC (rev 2975)
@@ -330,6 +330,9 @@
} catch (PollenBusinessException eee) {
String message = manager.getErrorMessage(eee, messages, logger);
addError(message);
+ addInfo(messages.format(
+ "pollen.ui.user.create.emailFailedShowPassword",
+ newPassword));
}
}
// Remove accounts to reset order and current page
Modified: trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-26 14:12:40 UTC (rev 2975)
@@ -5,6 +5,9 @@
pollen.email.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
pollen.email.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
+############################ GLOBAL ############################################
+pollen.ui.help.title=Aide
+
############################ USER ##############################################
pollen.ui.user.register.autoConnection=Vous \u00EAtes maintenant connect\u00E9 avec l'identifiant %1$s.
pollen.ui.user.register.sendEmail=Un email vous a \u00E9t\u00E9 envoy\u00E9 \u00E0 l'adresse %1$s.
@@ -14,9 +17,11 @@
pollen.ui.user.display.notAllowed=Vous n'avez pas les droits n\u00E9cessaires pour acc\u00E9der \u00E0 cette page.
pollen.ui.user.create=Ajouter
pollen.ui.user.create.title=Cr\u00E9er un nouvel utilisateur
-pollen.ui.user.create.passwordGenerated=Le password du nouvel utilisateur a \u00E9t\u00E9 g\u00E9n\u00E9r\u00E9.
-pollen.ui.user.create.passwordSameAsLogin=Le password du nouvel utilisateur est le m\u00EAme que son identifiant.
+pollen.ui.user.create.passwordGenerated=Le mot de passe du nouvel utilisateur a \u00E9t\u00E9 g\u00E9n\u00E9r\u00E9.
+pollen.ui.user.create.passwordSameAsLogin=Le mot de passe du nouvel utilisateur est le m\u00EAme que son identifiant.
+pollen.ui.user.create.password.help=Si vous pr\u00E9cisez un email, un mot de passe sera g\u00E9n\u00E9r\u00E9 et envoy\u00E9 \u00E0 l'utilisateur. Sinon le mot de passe sera identique au login.
pollen.ui.user.create.sendEmail=Un email a \u00E9t\u00E9 envoy\u00E9 au nouvel utilisateur %1$s \u00E0 l'adresse %2$s.
+pollen.ui.user.create.emailFailedShowPassword=Le mot de passe g\u00E9n\u00E9r\u00E9 est le suivant : %1$s
pollen.ui.user.create.success=L'utilisateur %1$s a \u00E9t\u00E9 cr\u00E9\u00E9 avec succ\u00E8s.
pollen.ui.user.update.edit=Modifier cet utilisateur.
pollen.ui.user.update.save=Enregistrer les modifications.
@@ -30,12 +35,6 @@
login-label=Identifiant
email-label=Email
-login-required-message=Vous devez fournir un identifiant
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Email invalide
-newEmail-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-newEmail-regexp-message=Email invalide
-
############################ CHOICE ############################################
pollen.ui.choice.delete.confirm=Etes-vous s\u00FBr de vouloir d\u00E9finitivement supprimer ce choix ?
pollen.ui.choice.delete.title=Supprimer ce choix
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties 2010-04-26 14:12:40 UTC (rev 2975)
@@ -22,4 +22,12 @@
#
#login-required-message=Vous devez fournir un identifiant.
#email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-#email-regexp-message=Email invalide.
\ No newline at end of file
+#email-regexp-message=Email invalide.
+
+
+
+login-required-message=Vous devez fournir un identifiant
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Email invalide
+newEmail-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+newEmail-regexp-message=Email invalide
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml 2010-04-23 17:12:06 UTC (rev 2974)
+++ trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml 2010-04-26 14:12:40 UTC (rev 2975)
@@ -70,7 +70,10 @@
<label t:type="label" for="newLogin">${message:login-label}</label>* :
<input t:type="textfield" t:id="newLogin" value="newUser.login" t:validate="required" />
<label t:type="label" for="newEmail">${message:email-label}</label> :
- <input t:type="textfield" t:id="newEmail" value="newUser.email" t:validate="regexp" />
+ <input t:type="textfield" t:id="newEmail" value="newUser.email" t:validate="regexp" />
+ <span t:type="ck/Tooltip" title="message:pollen.ui.help.title" t:value="message:pollen.ui.user.create.password.help" t:effect="appear">
+ <img src="${asset:context:img/help.png}" alt="message:help"/>
+ </span>
<input t:type="submit" value="${message:pollen.ui.user.create}" title="${message:pollen.ui.user.create.title}" />
</p>
</form>
1
0
Author: fdesbois
Date: 2010-04-23 19:12:06 +0200 (Fri, 23 Apr 2010)
New Revision: 2974
Log:
No need to use las ToPIA snapshot
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-23 17:09:22 UTC (rev 2973)
+++ trunk/pom.xml 2010-04-23 17:12:06 UTC (rev 2974)
@@ -309,7 +309,7 @@
<!-- customized versions -->
<!--javadoc.version>2.4</javadoc.version-->
- <topia.version>2.4-SNAPSHOT</topia.version>
+ <topia.version>2.3.3</topia.version>
<eugene.version>2.0.1</eugene.version>
<i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
1
0
Author: fdesbois
Date: 2010-04-23 19:09:22 +0200 (Fri, 23 Apr 2010)
New Revision: 2973
Log:
- Refactor page AdminUsers (behavior and render)
- Add AbstractMappedGridDataSource + create UserAccountDataSource to manage pagination on users list. Use Filter bean in business to prepare the TopiaQuery to retrieve userAccount list
- Add PollenPage and AbstractPollenPage to manage permissions from Border layout component + loginComponent use if necessary (using a delegate)
- Remove useless language property from model
- Add createDefaultAdmin if it's not already exist
Added:
trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollenPage.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollsPage.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/PollenPage.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AbstractMappedGridDataSource.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/UserAccountDataSource.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_fr.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties
trunk/pollen-ui/src/main/webapp/admin/AdminPolls.tml
trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml
trunk/pollen-ui/src/main/webapp/img/save.png
trunk/pollen-ui/src/main/webapp/img/undo.png
Removed:
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/Polls.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/PollsAdmin.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/PasswordGenerator.java
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_fr.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_fr.properties
trunk/pollen-ui/src/main/webapp/admin/PollsAdmin.tml
trunk/pollen-ui/src/main/webapp/admin/UsersAdmin.tml
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractUploadPage.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/ErrorPage.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CloseValidation.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ConfirmPoll.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CreationValidation.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ModificationValidation.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/PollForm.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/Results.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsCreated.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsParticipated.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
trunk/pollen-ui/src/main/resources/i18n/pollen-ui-en_GB.properties
trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border.tml
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border_fr.properties
trunk/pollen-ui/src/main/webapp/css/common.css
trunk/pom.xml
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,6 +1,7 @@
package org.chorem.pollen;
import java.util.Date;
+import org.chorem.pollen.service.ServiceUser;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
import org.nuiton.util.ApplicationConfig;
@@ -17,7 +18,7 @@
* </pre>
* @param config ApplicationConfig
*/
- public void loadConfiguration(ApplicationConfig config);
+ void loadConfiguration(ApplicationConfig config);
/**
* start :
@@ -30,14 +31,15 @@
* - Initialize i18n for error messages
* - Create default admin if needed (this will load the topiaRootContext).
* </pre>
+ * @param serviceUser to manage default admin if needed
*/
- public void start();
+ void start(ServiceUser serviceUser);
/**
* stop :
* Stop the application. Close the Topia rootContext.
*/
- public void stop();
+ void stop();
/**
* getProperty :
@@ -45,7 +47,7 @@
* @param property PollenProperty
* @return String
*/
- public String getProperty(PollenProperty property);
+ String getProperty(PollenProperty property);
/**
* hasProperty :
@@ -53,7 +55,7 @@
* @param property PollenProperty
* @return boolean
*/
- public boolean hasProperty(PollenProperty property);
+ boolean hasProperty(PollenProperty property);
/**
* getConfiguration :
@@ -61,21 +63,21 @@
* if needed.
* @return ApplicationConfig
*/
- public ApplicationConfig getConfiguration();
+ ApplicationConfig getConfiguration();
/**
* getCurrentDate :
* Return the current date from context
* @return Date
*/
- public Date getCurrentDate();
+ Date getCurrentDate();
/**
* encodePassword :
* @param password
* @return String
*/
- public String encodePassword(String password);
+ String encodePassword(String password);
/**
* createPollenUrlId :
@@ -83,14 +85,14 @@
* This UId represent the entity in UI module.
* @return String
*/
- public String createPollenUrlId();
+ String createPollenUrlId();
/**
* beginTransaction :
* @return TopiaContext
* @throws TopiaException
*/
- public TopiaContext beginTransaction() throws TopiaException;
+ TopiaContext beginTransaction() throws TopiaException;
/**
* doCatch :
@@ -99,7 +101,7 @@
* @param args
* @throws PollenException
*/
- public void treateError(Exception eee, String message, Object... args)
+ void treateError(Exception eee, String message, Object... args)
throws PollenException;
/**
@@ -110,14 +112,14 @@
* @param args
* @throws PollenException
*/
- public void treateError(TopiaContext transaction, Exception eee,
+ void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException;
/**
* doFinally :
* @param transaction
*/
- public void closeTransaction(TopiaContext transaction);
+ void closeTransaction(TopiaContext transaction);
} //PollenContext
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -3,10 +3,13 @@
import java.security.NoSuchAlgorithmException;
import java.util.Date;
+import java.util.Locale;
import java.util.Properties;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.service.ServiceUser;
import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
@@ -102,31 +105,26 @@
*
*/
@Override
- public void start() {
+ public void start(ServiceUser serviceUser) {
try {
- if (log.isInfoEnabled()) {
- log.info("Start Pollen");
-// log.info("Initialize i18n bundle");
- }
I18n.setInitializer(new DefaultI18nInitializer("pollen-business"));
I18n.init();
+ if (log.isInfoEnabled()) {
+ log.info(_("pollen.info.start"));
+ }
+
// Set context in PollenProperty enum to use easily method
// getValue() on PollenProperty
PollenProperty.setContext(this);
-
-// ServiceUserImpl serviceUser = new ServiceUserImpl(this);
-// serviceUser.createDefaultAdmin(
-// getProperty(PollenProperty.ADMIN_LOGIN),
-// getProperty(PollenProperty.ADMIN_PASSWORD),
-// getProperty(PollenProperty.ADMIN_EMAIL)
-// );
+
+ createSuperAdmin(serviceUser);
//
// sendMail = new SendMail(this);
// sendMail.start();
if (log.isInfoEnabled()) {
- log.info("pollen is started !");
+ log.info(_("pollen.info.started"));
}
} catch (Exception eee) {
@@ -135,13 +133,43 @@
}
/**
+ * Create the super admin if needed using {@code serviceUser}.
+ * The login, password and email are defined from configuration (in
+ * properties file).
+ *
+ * @param serviceUser used to create the admin user
+ * @see PollenProperty#ADMIN_EMAIL
+ * @see PollenProperty#ADMIN_LOGIN
+ * @see PollenProperty#ADMIN_PASSWORD
+ */
+ protected void createSuperAdmin(ServiceUser serviceUser) {
+ UserAccount user = serviceUser.getNewUser();
+ user.setAdmin(true);
+ String login = PollenProperty.ADMIN_LOGIN.getValue();
+ user.setLogin(login);
+ user.setEmail(PollenProperty.ADMIN_EMAIL.getValue());
+ user.setNewPassword(PollenProperty.ADMIN_PASSWORD.getValue());
+ try {
+ serviceUser.createUser(user);
+ if (log.isInfoEnabled()) {
+ log.info(_("pollen.info.admin.created", login));
+ }
+ } catch (PollenBusinessException eee) {
+ if (log.isInfoEnabled()) {
+ log.info(_("pollen.info.admin.exists") + " : " +
+ _(eee.getMessage()));
+ }
+ }
+ }
+
+ /**
* Stop the application. Close the Topia rootContext.
*/
@Override
public void stop() {
try {
if (log.isDebugEnabled()) {
- log.debug("Stop Pollen");
+ log.debug(_("pollen.info.stop"));
}
getTopiaRootContext().closeContext();
// sendMail.stopExec();
Added: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java (rev 0)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,143 @@
+
+package org.chorem.pollen.bean;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.persistence.TopiaEntity;
+
+/**
+ * Filter
+ *
+ * Created: 23 avr. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class Filter {
+
+ protected Integer startIndex;
+
+ protected Integer endIndex;
+
+ protected String orderBy;
+
+ private PropertyChangeSupport propertyChangeSupport =
+ new PropertyChangeSupport(this);
+
+ public static final String PROPERTY_START_INDEX = "startIndex";
+
+ public static final String PROPERTY_END_INDEX = "endIndex";
+
+ public static final String PROPERTY_ORDER_BY = "orderBy";
+
+ /**
+ * Get the value of startIndex
+ *
+ * @return the value of startIndex
+ */
+ public Integer getStartIndex() {
+ return startIndex;
+ }
+
+ /**
+ * Set the value of startIndex
+ *
+ * @param startIndex new value of startIndex
+ */
+ public void setStartIndex(Integer startIndex) {
+ Integer oldStartIndex = this.startIndex;
+ this.startIndex = startIndex;
+ propertyChangeSupport.firePropertyChange(PROPERTY_START_INDEX, oldStartIndex, startIndex);
+ }
+
+ /**
+ * Get the value of orderBy
+ *
+ * @return the value of orderBy
+ */
+ public String getOrderBy() {
+ return orderBy;
+ }
+
+ /**
+ * Set the value of orderBy
+ *
+ * @param orderBy new value of orderBy
+ */
+ public void setOrderBy(String orderBy) {
+ String oldOrderBy = this.orderBy;
+ this.orderBy = orderBy;
+ propertyChangeSupport.firePropertyChange(PROPERTY_ORDER_BY, oldOrderBy, orderBy);
+ }
+
+ /**
+ * Get the value of endIndex
+ *
+ * @return the value of endIndex
+ */
+ public Integer getEndIndex() {
+ return endIndex;
+ }
+
+ /**
+ * Set the value of endIndex
+ *
+ * @param endIndex new value of endIndex
+ */
+ public void setEndIndex(Integer endIndex) {
+ Integer oldEndIndex = this.endIndex;
+ this.endIndex = endIndex;
+ propertyChangeSupport.firePropertyChange(PROPERTY_END_INDEX, oldEndIndex, endIndex);
+ }
+
+ /**
+ * Add PropertyChangeListener.
+ *
+ * @param listener
+ */
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ /**
+ * Remove PropertyChangeListener.
+ *
+ * @param listener
+ */
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+
+ public void prepareQuery(TopiaQuery query) {
+ // Add limits. Only startIndex do nothing.
+ // startIndex + endIndex provides the limit
+ if (startIndex != null && endIndex != null) {
+ query.setLimit(startIndex, endIndex);
+
+ // endIndex only provides the maxResults wanted
+ } else if (endIndex != null) {
+ query.setMaxResults(endIndex);
+ }
+ }
+
+ public void prepareQueryWithOrder(TopiaQuery query) {
+ // Add order to the query, splitted by comma and trimmed using
+ // {@link StringUtils#stripAll(String[])}
+ if (orderBy != null) {
+ String[] order = StringUtils.stripAll(orderBy.split(","));
+ query.addOrder(order);
+
+ // Default order by creation date
+ } else {
+ query.addOrderDesc(TopiaEntity.TOPIA_CREATE_DATE);
+ }
+
+ prepareQuery(query);
+ }
+
+}
Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/Filter.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -84,7 +84,7 @@
}
throw new PollenBusinessException(eee,
PollenExceptionType.SMTP_NOT_AVAILABLE,
- pollenEmail.getTo());
+ pollenEmail.getTo());
}
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -3,6 +3,7 @@
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -11,6 +12,7 @@
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenDAOHelper;
import org.chorem.pollen.PollenException;
+import org.chorem.pollen.bean.Filter;
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountDAO;
@@ -19,6 +21,8 @@
import org.nuiton.topia.TopiaException;
import org.nuiton.topia.framework.TopiaQuery;
import org.nuiton.topia.framework.TopiaQuery.Op;
+import org.nuiton.util.beans.BinderBuilder;
+import org.nuiton.util.beans.BinderProvider;
/**
* ServiceUserImpl
@@ -39,8 +43,35 @@
public void setContext(PollenContext context) {
this.context = context;
+ prepareUserAccountBinder();
}
+ protected void prepareUserAccountBinder() {
+ BinderBuilder builder = new BinderBuilder(UserAccount.class,
+ UserAccount.ADMIN,
+ UserAccount.FIRST_NAME,
+ UserAccount.LAST_NAME);
+ BinderProvider.registerBinder(builder);
+ }
+
+ /**
+ * Copy {@code source} user account to {@code destination} one.
+ * The email is lower cased in the {@code destination} user account.
+ *
+ * @param source user account to copy
+ * @param destination which receive the copy
+ * @see org.nuiton.util.beans.Binder#copy(Object, Object, String...)
+ */
+ protected void copyUserAccount(UserAccount source, UserAccount destination) {
+ BinderProvider.getBinder(UserAccount.class).copy(source, destination);
+ destination.setEmail(StringUtils.lowerCase(source.getEmail()));
+ // Manage new password if needed
+ String password = source.getNewPassword();
+ if (StringUtils.isNotEmpty(password)) {
+ destination.setPassword(context.encodePassword(password));
+ }
+ }
+
@Override
protected TopiaContext beginTransaction() throws TopiaException {
return context.beginTransaction();
@@ -58,27 +89,6 @@
}
/**
- * Used to manage the new password of the user. This newPassword will be
- * encoded then set into the real password.
- *
- * @param user to treate
- * @return true if the newPassword is encoded and set, false otherwise
- */
- protected boolean manageNewPassword(UserAccount user) {
- // Manage password encoding
- String newPassword = user.getNewPassword();
- if (StringUtils.isNotEmpty(newPassword)) {
- user.setPassword(context.encodePassword(newPassword));
- if (log.isDebugEnabled()) {
- log.debug("Reset newPassword from UserAccount");
- }
- user.setNewPassword(null);
- return true;
- }
- return false;
- }
-
- /**
* Check if the {@code login} and {@code password} correspond to an
* existing user.
*
@@ -140,7 +150,7 @@
if (query == null) {
query = dao.createQuery();
}
- int count = query.add(UserAccount.EMAIL, email).
+ int count = query.add(UserAccount.EMAIL, StringUtils.lowerCase(email)).
executeCount();
// existing user found
if (count > 0) {
@@ -172,16 +182,14 @@
}
@Override
- protected UserAccount executeGetNewUser(Locale locale) {
+ protected UserAccount executeGetNewUser() {
UserAccount user = new UserAccountImpl();
- user.setAdmin(false);
- user.setLanguage(locale.getLanguage());
return user;
}
@Override
protected void executeCreateUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user)
+ List<Object> errorArgs, UserAccount user)
throws TopiaException, PollenBusinessException {
errorArgs.add(user.getLogin());
@@ -196,9 +204,11 @@
// Check email not exist
checkEmailNotExist(dao, user.getEmail(), null);
+
// Execute create
- manageNewPassword(user);
- dao.create(user);
+ UserAccount newUser = dao.create(user.getLogin());
+ copyUserAccount(user, newUser);
+ user.setTopiaId(newUser.getTopiaId());
transaction.commitTransaction();
}
@@ -207,7 +217,7 @@
@Override
protected void executeUpdateUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user)
+ List<Object> errorArgs, UserAccount user, boolean byAdmin)
throws TopiaException, PollenBusinessException {
errorArgs.add(user.getLogin());
@@ -215,16 +225,12 @@
errorArgs.add(user.getAdmin());
UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
-
- // Check the password
- String encodedPassword = context.encodePassword(user.getPassword());
- checkPassword(dao, user.getLogin(), encodedPassword);
- // Change password if needed
- boolean passwordChanged = manageNewPassword(user);
- // Otherwise set the encodedPassword to properly save the user
- if (!passwordChanged) {
- user.setPassword(encodedPassword);
+ // Do not manage password for an admin update
+ if (!byAdmin) {
+ // Check the password
+ String encodedPassword = context.encodePassword(user.getPassword());
+ checkPassword(dao, user.getLogin(), encodedPassword);
}
// In case of email change, check if an other user has not already
@@ -234,24 +240,50 @@
checkEmailNotExist(dao, user.getEmail(), query);
// Execute update
- dao.update(user);
+ UserAccount editedUser = dao.findByLogin(user.getLogin());
+ copyUserAccount(user, editedUser);
+ dao.update(editedUser);
transaction.commitTransaction();
}
@Override
- protected void executeDeleteUser(TopiaContext transaction, UserAccount user)
+ protected void executeDeleteUser(TopiaContext transaction, String login)
throws TopiaException {
- throw new UnsupportedOperationException("Not supported yet.");
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+ UserAccount user = dao.findByLogin(login);
+ dao.delete(user);
+ transaction.commitTransaction();
}
@Override
- protected List<UserAccount> executeGetUsers(TopiaContext transaction)
- throws TopiaException {
- throw new UnsupportedOperationException("Not supported yet.");
+ protected Map<String, UserAccount> executeGetUsers(TopiaContext transaction,
+ Filter filter) throws TopiaException {
+
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+ TopiaQuery query = dao.createQuery();
+
+ filter.prepareQueryWithOrder(query);
+
+ Map<String, UserAccount> results = dao.findAllMappedByQuery(query,
+ UserAccount.LOGIN, String.class);
+ return results;
}
@Override
+ protected int executeGetNbUsers(TopiaContext transaction,
+ Filter filter) throws TopiaException {
+
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+ TopiaQuery query = dao.createQuery();
+
+ filter.prepareQuery(query);
+
+ int result = query.executeCount();
+ return result;
+ }
+
+ @Override
protected PollAccount executeGetNewList(TopiaContext transaction)
throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -41,6 +41,7 @@
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
+pollen.error.serviceUser.getNbUsers=
pollen.error.serviceUser.getNewList=
pollen.error.serviceUser.getNewPerson=
pollen.error.serviceUser.getNewUser=
@@ -57,3 +58,8 @@
pollen.exception.user_login_exist=
pollen.exception.user_not_exist=
pollen.exception.user_wrong_password=
+pollen.info.admin.created=Super admin was created with login %1$s
+pollen.info.admin.exists=Super admin already exists
+pollen.info.start=Start Pollen
+pollen.info.started=Pollen is started \!
+pollen.info.stop=Stop Pollen
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -40,6 +40,7 @@
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
+pollen.error.serviceUser.getNbUsers=
pollen.error.serviceUser.getNewList=
pollen.error.serviceUser.getNewPerson=
pollen.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur.
@@ -56,3 +57,8 @@
pollen.exception.user_login_exist=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet identifiant.
pollen.exception.user_not_exist=L'identifiant '%1$s' ne correspond \u00E0 aucun utilisateur connu.
pollen.exception.user_wrong_password=Le mot de passe renseign\u00E9 est incorrect pour l'utilisateur '%1$s'.
+pollen.info.admin.created=Le super admin a \u00E9t\u00E9 cr\u00E9\u00E9 avec l'identifiant %1$s.
+pollen.info.admin.exists=Le super admin existe d\u00E9j\u00E0
+pollen.info.start=D\u00E9marrage de Pollen...
+pollen.info.started=Pollen a \u00E9t\u00E9 d\u00E9marr\u00E9 avec succ\u00E8s \!
+pollen.info.stop=Arr\u00EAt de Pollen
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -56,7 +56,7 @@
);
getContext().loadConfiguration(config);
- getContext().start();
+ getContext().start(getServiceUser());
// Set currentDate to 23/02/2010 for tests
Calendar calendar = new GregorianCalendar(2010, 1, 23, 0, 0, 0);
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -2,7 +2,6 @@
package org.chorem.pollen.service;
import java.io.IOException;
-import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.chorem.pollen.PollenBusinessException;
@@ -12,6 +11,7 @@
import org.chorem.pollen.business.TestManager;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountDAO;
+import org.chorem.pollen.entity.UserAccountImpl;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
@@ -19,7 +19,6 @@
import org.junit.BeforeClass;
import org.junit.Test;
import org.nuiton.topia.TopiaContext;
-import org.nuiton.topia.TopiaException;
/**
*
@@ -50,26 +49,28 @@
}
@Test
- public void testManageNewPassword() throws Exception {
+ public void testCopyUserAccount() throws Exception {
TestManager.start("testManageNewPassword");
ServiceUserImpl serviceUser = TestManager.getServiceUser();
- UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user = serviceUser.getNewUser();
user.setLogin("homer");
user.setNewPassword("wouhou");
log.info("test 1 : Encode new password");
- boolean result = serviceUser.manageNewPassword(user);
- Assert.assertTrue(result);
+ UserAccount destination = new UserAccountImpl();
+ serviceUser.copyUserAccount(user, destination);
+ Assert.assertNotNull(destination.getPassword());
String expected = TestManager.getContext().encodePassword("wouhou");
- Assert.assertEquals(expected, user.getPassword());
- Assert.assertNull(user.getNewPassword());
+ Assert.assertEquals(expected, destination.getPassword());
log.info("test 2 : Do not encode new password -> newPassword empty");
- result = serviceUser.manageNewPassword(user);
- Assert.assertFalse(result);
+ user.setPassword(expected);
+ user.setNewPassword(null);
+ serviceUser.copyUserAccount(user, destination);
+ Assert.assertEquals(expected, destination.getPassword());
}
@Test
@@ -78,7 +79,7 @@
ServiceUserImpl serviceUser = TestManager.getServiceUser();
- UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user = serviceUser.getNewUser();
user.setLogin("homer");
user.setNewPassword("wouhou");
serviceUser.createUser(user);
@@ -115,7 +116,7 @@
ServiceUser serviceUser = TestManager.getServiceUser();
- UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user = serviceUser.getNewUser();
user.setLogin("hsimpson");
user.setEmail("hsimpson(a)springfield.us");
user.setNewPassword("wouhou");
@@ -152,11 +153,9 @@
TestManager.start("testGetNewUser");
ServiceUser serviceUser = TestManager.getServiceUser();
- UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user = serviceUser.getNewUser();
Assert.assertNotNull(user);
Assert.assertEquals(false, user.getAdmin());
- Assert.assertEquals("fr", user.getLanguage());
- Assert.assertEquals(Locale.FRENCH, new Locale(user.getLanguage()));
}
/**
@@ -167,7 +166,7 @@
TestManager.start("testCreateUser");
ServiceUser serviceUser = TestManager.getServiceUser();
- UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user = serviceUser.getNewUser();
user.setLogin("hsimpson");
user.setEmail("hsimpson(a)springfield.us");
user.setNewPassword("wouhou");
@@ -181,7 +180,7 @@
Assert.assertNotSame(encodedPassword, user.getPassword());
log.info("test 2 : Creation problem on login -> user exist");
- UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user2 = serviceUser.getNewUser();
user2.setLogin("hsimpson");
// Not the same email
user2.setEmail("hsimpson(a)springfield.com");
@@ -196,7 +195,7 @@
}
log.info("test 3 : Creation problem on email -> user exist");
- UserAccount user3 = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user3 = serviceUser.getNewUser();
user3.setLogin("homer");
user3.setEmail("hsimpson(a)springfield.us");
user3.setNewPassword("troubidou");
@@ -210,7 +209,7 @@
}
log.info("test 4 : Creation OK with no email");
- UserAccount user4 = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user4 = serviceUser.getNewUser();
user4.setLogin("marge");
user4.setNewPassword("troubidou");
@@ -226,13 +225,13 @@
TestManager.start("testUpdateUser");
ServiceUser serviceUser = TestManager.getServiceUser();
- UserAccount user1 = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user1 = serviceUser.getNewUser();
user1.setLogin("hsimpson");
user1.setEmail("hsimpson(a)springfield.us");
user1.setNewPassword("wouhou");
serviceUser.createUser(user1);
- UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
+ UserAccount user2 = serviceUser.getNewUser();
String user2Password = "wouhou";
user2.setLogin("homer");
user2.setEmail("hsimpson(a)springfield.fr");
@@ -243,7 +242,7 @@
user2.setLogin("homersimpson");
user2.setPassword(user2Password);
try {
- serviceUser.updateUser(user2);
+ serviceUser.updateUser(user2, false);
} catch (PollenBusinessException eee) {
log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
@@ -254,26 +253,54 @@
log.info("test 2 : Change email OK");
user2.setEmail("homersimpson(a)springield.fr");
user2.setPassword(user2Password);
- serviceUser.updateUser(user2);
+ serviceUser.updateUser(user2, false);
log.info("test 3 : Change email problem -> user exist");
user2.setEmail(user1.getEmail());
user2.setPassword(user2Password);
try {
- serviceUser.updateUser(user2);
+ serviceUser.updateUser(user2, false);
} catch (PollenBusinessException eee) {
log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_EMAIL_EXIST,
eee.getType());
}
+
+ // TODO test 4 with byAdmin = true
}
/**
* Test of executeDeleteUser method, of class ServiceUserImpl.
+ * @throws Exception
*/
- //@Test
+ @Test
public void testExecuteDeleteUser() throws Exception {
- System.out.println("executeDeleteUser");
+ TestManager.start("testUpdateUser");
+ ServiceUser serviceUser = TestManager.getServiceUser();
+
+ try {
+ serviceUser.deleteUser("test");
+ } catch (PollenException eee) {
+ log.error(eee);
+ Assert.assertEquals(IllegalArgumentException.class,
+ eee.getCause().getClass());
+ }
+
+ UserAccount user = serviceUser.getNewUser();
+ user.setLogin("user");
+ serviceUser.createUser(user);
+
+ serviceUser.deleteUser("user");
+
+ TopiaContext transaction = null;
+ try {
+ transaction = TestManager.beginTransaction();
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+ UserAccount userFound = dao.findByLogin("user");
+ Assert.assertNull(userFound);
+ } finally {
+ transaction.closeContext();
+ }
}
/**
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollenPage.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollenPage.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollenPage.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,128 @@
+
+package org.chorem.pollen.ui.base;
+
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.ui.components.Border;
+
+/**
+ * AbstractPollenPage
+ *
+ * Created: 22 avr. 2010
+ *
+ * @author fdesbois
+ */
+public abstract class AbstractPollenPage implements PollenPage {
+
+ /** Connected UserAccount from Session **/
+ @SessionState
+ @Property
+ private UserAccount user;
+
+ @Property
+ private boolean userExists;
+
+ /**
+ * Retrieve the border layout of the page.
+ *
+ * @return the Border
+ */
+ public abstract Border getBorder();
+
+ /**
+ * Default value set to false for needAuthentification.
+ *
+ * @return false
+ * @see PollenPage#isNeedAuthentification()
+ */
+ @Override
+ public boolean isNeedAuthentification() {
+ return false;
+ }
+
+ /**
+ * Default value set to true for canDisplayPage.
+ *
+ * @return true
+ * @see PollenPage#canDisplayPage()
+ */
+ @Override
+ public boolean canDisplayPage() {
+ return true;
+ }
+
+ /**
+ * Retrieve the connected user from Session.
+ *
+ * @return the UserAccount corresponding to connected user
+ */
+ public UserAccount getUserConnected() {
+ return user;
+ }
+
+ /**
+ * Change connected user in session.
+ *
+ * @param user to set in session.
+ */
+ public void setUserConnected(UserAccount user) {
+ this.user = user;
+ }
+
+ /**
+ * Return true if a user is already connected to the application.
+ *
+ * @return true if connected user is defined.
+ */
+ public boolean isUserConnected() {
+ return userExists;
+ }
+
+ /**
+ * Return true if the connected user is an admin.
+ *
+ * @return true if the connected user is an admin.
+ */
+ public boolean isAdminConnected() {
+ return isUserConnected() && user.getAdmin();
+ }
+
+ /**
+ * Add an info {@code message} to display.
+ *
+ * @param message to display
+ */
+ public void addInfo(String message) {
+ getBorder().addInfo(message);
+ }
+
+ /**
+ * Add a fatal {@code message} to display. Only the fatal {@code message}
+ * will be displayed, not other elements in the page will be showed.
+ *
+ * @param message to display
+ */
+ public void addFatal(String message) {
+ getBorder().addFatal(message);
+ }
+
+ /**
+ * Add an error {@code message} to display.
+ *
+ * @param message to display
+ */
+ public void addError(String message) {
+ getBorder().addError(message);
+ }
+
+ /**
+ * Retrieve the current url of the page.
+ *
+ * @return the current url of the page.
+ */
+ public String getUrl() {
+ return getBorder().getServerPath();
+ }
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollenPage.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Copied: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollsPage.java (from rev 2972, trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/Polls.java)
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollsPage.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollsPage.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,202 @@
+/* *##% Pollen
+ * Copyright (C) 2009 CodeLutin
+ *
+ * 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/>. ##%*/
+
+package org.chorem.pollen.ui.base;
+
+import java.util.List;
+
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.annotations.InjectPage;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.Retain;
+import org.apache.tapestry5.beaneditor.BeanModel;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.BeanModelSource;
+import org.chorem.pollen.entity.Poll;
+import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.ui.data.EvenOdd;
+import org.chorem.pollen.ui.data.AddressBarItem;
+import org.chorem.pollen.ui.data.PollAction;
+import org.chorem.pollen.ui.pages.admin.AdminPolls;
+import org.chorem.pollen.ui.pages.poll.ConfirmPoll;
+import org.chorem.pollen.ui.pages.user.UserPollsCreated;
+
+/**
+ * Classe de la page d'affichage des sondages.
+ *
+ * @author kmorin
+ * @author rannou
+ * @version $Id$
+ */
+public abstract class AbstractPollsPage extends AbstractPollenPage {
+
+ /**
+ * Liste de sondages de l'utilisateur
+ */
+ @SuppressWarnings("unused")
+ private List<Poll> polls;
+
+ /**
+ * Sondage servant à l'itération des sondages de la liste
+ */
+ @Property
+ private Poll poll;
+
+ /**
+ * Objet servant à changer la couleur à chaque ligne de la liste des
+ * sondages
+ */
+ @SuppressWarnings("unused")
+ @Property
+ private EvenOdd evenOdd;
+
+ @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
+ @Property
+ private String title;
+
+ @SuppressWarnings("unused")
+ @Property
+ private AddressBarItem[] address;
+
+ /**
+ * Sert à créer pollsModel
+ */
+ @Inject
+ private BeanModelSource beanModelSource;
+
+ /**
+ * Sert à passer les messages en paramètre de la création de pollsModel
+ */
+ @Inject
+ private ComponentResources componentResources;
+
+ /**
+ * Modèle pour l'affichage de la liste des sondages
+ */
+ @SuppressWarnings("unchecked")
+ @Property
+ @Retain
+ private BeanModel pollsModel;
+
+ /** Page de validation de la fermeture d'un sondage */
+ @InjectPage
+ private ConfirmPoll confirmPoll;
+
+ /** Injection des services */
+ @Inject
+ private ServicePoll servicePoll;
+// @Inject
+// private ServicePollAccount servicePollAccount;
+// @Inject
+// private ServiceResults serviceResults;
+
+ /**
+ * Récupération de l'identifiant de modification du sondage.
+ *
+ * @return l'identifiant.
+ */
+// public String getAdminId() {
+// PollAccount creator = servicePollAccount.findPollAccountById(poll
+// .getCreatorId());
+// return poll.getPollUId() + ":" + creator.getAccountUId();
+// }
+
+ /**
+ * Fermeture du sondage.
+ *
+ * @return la page de validation
+ */
+ public Object onActionFromClose(String id) {
+ return prepareConfirmPage(id, PollAction.CLOSE);
+ }
+
+ /**
+ * Suppression du sondage.
+ *
+ * @return la page des sondages
+ */
+ public Object onActionFromDeletePoll(String id) {
+ return prepareConfirmPage(id, PollAction.DELETE);
+ }
+
+ /**
+ * Préparation de la page de confirmation.
+ *
+ * @return la page de confirmation
+ */
+ private Object prepareConfirmPage(String pollId, PollAction pollAction) {
+ String backPage = "";
+ if (this instanceof UserPollsCreated) {
+ backPage = "user/PollsCreated";
+ } else if (this instanceof AdminPolls) {
+ backPage = "admin/PollsAdmin";
+ }
+ confirmPoll.setBackPage(backPage);
+ confirmPoll.setAction(pollAction);
+ confirmPoll.setPoll(poll);
+ return confirmPoll;
+ }
+
+ /**
+ * Export XML du sondage.
+ *
+ * @return le flux correspondant au fichier
+ */
+ public Object onActionFromExport(String id) {
+ // FIXME : create service for export
+
+// final String filename = serviceResults.exportPoll(id);
+//
+// // Retour d'un StreamResponse contenant le fichier XML
+// return new StreamResponse() {
+// public String getContentType() {
+// return "text/xml";
+// }
+//
+// public InputStream getStream() throws IOException {
+// return new FileInputStream(new File(filename));
+// }
+//
+// public void prepareResponse(Response response) {
+// }
+// };
+ return null;
+ }
+
+ /**
+ * Méthode d'initialisation des sondages
+ */
+ public void onActivate() {
+ evenOdd = new EvenOdd();
+ }
+
+ /**
+ * Initialisation de l'affichage
+ */
+ public void setupRender() {
+ address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"),
+ new AddressBarItem(title, null) };
+
+ pollsModel = beanModelSource.createDisplayModel(Poll.class,
+ componentResources.getMessages());
+ pollsModel.add("functions", null);
+ pollsModel.include("title", "description", "beginChoiceDate",
+ "beginDate", "endDate", "functions");
+ }
+
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractPollsPage.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Rev Revision"
Added: svn:mergeinfo
+
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractUploadPage.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractUploadPage.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/AbstractUploadPage.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -21,7 +21,7 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class AbstractUploadPage {
+public abstract class AbstractUploadPage extends AbstractPollenPage {
@InjectPage
private ErrorPage errorPage;
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/PollenPage.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/PollenPage.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/PollenPage.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,26 @@
+
+package org.chorem.pollen.ui.base;
+
+/**
+ * PollenPage
+ *
+ * Created: 22 avr. 2010
+ *
+ * @author fdesbois
+ */
+public interface PollenPage {
+
+ /**
+ * Return true if the page need an authentification to be displayed.
+ *
+ * @return true for authentification needed
+ */
+ boolean isNeedAuthentification();
+
+ /**
+ * Return true if the page can be displayed, depends on user rights.
+ *
+ * @return true for display allowed
+ */
+ boolean canDisplayPage();
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/PollenPage.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/Polls.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/Polls.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/Polls.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,221 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * 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/>. ##%*/
-
-package org.chorem.pollen.ui.base;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.StreamResponse;
-import org.apache.tapestry5.annotations.InjectPage;
-import org.apache.tapestry5.annotations.Parameter;
-import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.annotations.Retain;
-import org.apache.tapestry5.annotations.SessionState;
-import org.apache.tapestry5.beaneditor.BeanModel;
-import org.apache.tapestry5.ioc.annotations.Inject;
-import org.apache.tapestry5.services.BeanModelSource;
-import org.apache.tapestry5.services.Response;
-import org.chorem.pollen.entity.Poll;
-import org.chorem.pollen.entity.UserAccount;
-import org.chorem.pollen.service.ServicePoll;
-import org.chorem.pollen.ui.data.EvenOdd;
-import org.chorem.pollen.ui.data.AddressBarItem;
-import org.chorem.pollen.ui.data.PollAction;
-import org.chorem.pollen.ui.pages.admin.PollsAdmin;
-import org.chorem.pollen.ui.pages.poll.ConfirmPoll;
-import org.chorem.pollen.ui.pages.user.UserPollsCreated;
-
-/**
- * Classe de la page d'affichage des sondages.
- *
- * @author kmorin
- * @author rannou
- * @version $Id$
- */
-public class Polls {
-
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SuppressWarnings("unused")
- @SessionState
- @Property
- private UserAccount user;
- @SuppressWarnings("unused")
- @Property
- private boolean userExists;
-
- /**
- * Liste de sondages de l'utilisateur
- */
- @SuppressWarnings("unused")
- private List<Poll> polls;
-
- /**
- * Sondage servant à l'itération des sondages de la liste
- */
- @Property
- private Poll poll;
-
- /**
- * Objet servant à changer la couleur à chaque ligne de la liste des
- * sondages
- */
- @SuppressWarnings("unused")
- @Property
- private EvenOdd evenOdd;
-
- @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
- @Property
- private String title;
-
- @SuppressWarnings("unused")
- @Property
- private AddressBarItem[] address;
-
- /**
- * Sert à créer pollsModel
- */
- @Inject
- private BeanModelSource beanModelSource;
-
- /**
- * Sert à passer les messages en paramètre de la création de pollsModel
- */
- @Inject
- private ComponentResources componentResources;
-
- /**
- * Modèle pour l'affichage de la liste des sondages
- */
- @SuppressWarnings("unchecked")
- @Property
- @Retain
- private BeanModel pollsModel;
-
- /** Page de validation de la fermeture d'un sondage */
- @InjectPage
- private ConfirmPoll confirmPoll;
-
- /** Injection des services */
- @Inject
- private ServicePoll servicePoll;
-// @Inject
-// private ServicePollAccount servicePollAccount;
-// @Inject
-// private ServiceResults serviceResults;
-
- /**
- * Récupération de l'identifiant de modification du sondage.
- *
- * @return l'identifiant.
- */
-// public String getAdminId() {
-// PollAccount creator = servicePollAccount.findPollAccountById(poll
-// .getCreatorId());
-// return poll.getPollUId() + ":" + creator.getAccountUId();
-// }
-
- /**
- * Fermeture du sondage.
- *
- * @return la page de validation
- */
- public Object onActionFromClose(String id) {
- return prepareConfirmPage(id, PollAction.CLOSE);
- }
-
- /**
- * Suppression du sondage.
- *
- * @return la page des sondages
- */
- public Object onActionFromDeletePoll(String id) {
- return prepareConfirmPage(id, PollAction.DELETE);
- }
-
- /**
- * Préparation de la page de confirmation.
- *
- * @return la page de confirmation
- */
- private Object prepareConfirmPage(String pollId, PollAction pollAction) {
- String backPage = "";
- if (this instanceof UserPollsCreated) {
- backPage = "user/PollsCreated";
- } else if (this instanceof PollsAdmin) {
- backPage = "admin/PollsAdmin";
- }
- confirmPoll.setBackPage(backPage);
- confirmPoll.setAction(pollAction);
- confirmPoll.setPoll(poll);
- return confirmPoll;
- }
-
- /**
- * Export XML du sondage.
- *
- * @return le flux correspondant au fichier
- */
- public Object onActionFromExport(String id) {
- // FIXME : create service for export
-
-// final String filename = serviceResults.exportPoll(id);
-//
-// // Retour d'un StreamResponse contenant le fichier XML
-// return new StreamResponse() {
-// public String getContentType() {
-// return "text/xml";
-// }
-//
-// public InputStream getStream() throws IOException {
-// return new FileInputStream(new File(filename));
-// }
-//
-// public void prepareResponse(Response response) {
-// }
-// };
- return null;
- }
-
- /**
- * Méthode d'initialisation des sondages
- */
- public void onActivate() {
- evenOdd = new EvenOdd();
- }
-
- /**
- * Initialisation de l'affichage
- */
- public void setupRender() {
- address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"),
- new AddressBarItem(title, null) };
-
- pollsModel = beanModelSource.createDisplayModel(Poll.class,
- componentResources.getMessages());
- pollsModel.add("functions", null);
- pollsModel.include("title", "description", "beginChoiceDate",
- "beginDate", "endDate", "functions");
- }
-
-}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -23,8 +23,10 @@
import java.util.Locale;
import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.Block;
import org.apache.tapestry5.annotations.Component;
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.Property;
@@ -39,6 +41,7 @@
import org.chorem.pollen.ui.data.AddressBarItem;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.PollenPage;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
import org.chorem.pollen.ui.services.PollenManager;
@@ -103,8 +106,8 @@
/**
* Objet de session (SSO) représentant l'adresse du site.
*/
- @SessionState
- private String siteURL;
+// @SessionState
+// private String siteURL;
/**
* Chaine definissant le logo de la page
@@ -170,16 +173,29 @@
@InjectComponent
private ContextLink feedContext;
+ @InjectContainer
+ private PollenPage page;
+
+ @Inject
+ private Block loginBlock;
+
+ @Inject
+ private Block pageBlock;
+
private boolean fatal;
+ private boolean needAuthentification;
+
+ private String serverPath;
+
/**
* Initialisation de l'affichage
*/
void setupRender() {
// URL du site
- siteURL = "http://" + request.getHeader("host") +
- request.getContextPath() + "/";
+// siteURL = "http://" + request.getHeader("host") +
+// request.getContextPath() + "/";
errorJs.addError(messages.get("errorJs"));
@@ -189,9 +205,20 @@
} else {
logo = "pollen" + pageLogo + "_en.png";
}
+
+ // Error messages for display authorization
+ if (isNeedAuthentification()) {
+ addError(messages.get("pollen.ui.user.display.notConnected"));
+ } else if (!page.canDisplayPage()) {
+ addError(messages.get("pollen.ui.user.display.notAllowed"));
+ }
}
boolean afterRender() {
+ if (needAuthentification) {
+ return false;
+ }
+
// Check if fatal errors has been added to the border
// Reload the page if feedBack hasn't been reloaded yet to display
// errors
@@ -208,6 +235,26 @@
return true;
}
+ public Object getActiveBlock() {
+ if (isNeedAuthentification()) {
+ return loginBlock;
+ } else if (canDisplayBody()) {
+ return pageBlock;
+ }
+ return null;
+ }
+
+ public String getServerPath() {
+ if (serverPath == null) {
+ serverPath = "http://" + request.getHeader("host") +
+ request.getContextPath();
+ if (logger.isDebugEnabled()) {
+ logger.debug("URL : " + serverPath);
+ }
+ }
+ return serverPath;
+ }
+
public void addInfo(String message) {
feedback.addInfo(message);
}
@@ -221,8 +268,12 @@
fatal = true;
}
+ public boolean isNeedAuthentification() {
+ return !userExists && page.isNeedAuthentification();
+ }
+
public boolean canDisplayBody() {
- return !fatal;
+ return !fatal && page.canDisplayPage();
}
public DateFormat getDateFormat() {
@@ -247,7 +298,7 @@
UserAccount current = serviceUser.connect(login, password);
user = current;
// Change locale for user
- localeService.set(new Locale(user.getLanguage()));
+ //localeService.set(new Locale(user.getLanguage()));
feedback.addInfo(messages.get("loginOk"));
} catch (PollenBusinessException eee) {
feedback.addError(
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AbstractMappedGridDataSource.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AbstractMappedGridDataSource.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AbstractMappedGridDataSource.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,211 @@
+/*
+ * #%L
+ * Wao :: Web Interface
+ *
+ * $Id$
+ * $HeadURL: svn+ssh://fdesbois@labs.libre-entreprise.org/svnroot/suiviobsmer/trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AbstractMappedGridDataSource.java $
+ * %%
+ * 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 org.chorem.pollen.ui.data;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.tapestry5.beaneditor.PropertyModel;
+import org.apache.tapestry5.grid.ColumnSort;
+import org.apache.tapestry5.grid.GridDataSource;
+import org.apache.tapestry5.grid.SortConstraint;
+import org.apache.tapestry5.ioc.internal.util.TapestryException;
+import org.chorem.pollen.PollenException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ContactDataSource
+ *
+ * Created: 18 janv. 2010
+ *
+ * @param <K> Type of the map key
+ * @param <E> Type of the map value
+ * @author fdesbois <fdesbois(a)codelutin.com>
+ */
+public abstract class AbstractMappedGridDataSource<K, E extends TopiaEntity> implements GridDataSource {
+
+
+ private Logger log = LoggerFactory.getLogger(AbstractMappedGridDataSource.class);
+
+ private Map<K, E> mapResults;
+
+ private List<E> listResults;
+
+ private int nbRows = -1;
+
+ private int nbRowsPerPage;
+
+ @Override
+ public int getAvailableRows() {
+ if (nbRows < 0) {
+ try {
+ nbRows = count();
+ if (log.isTraceEnabled()) {
+ log.trace("Count : " + nbRows);
+ }
+ } catch (PollenException eee) {
+ throw new TapestryException("", eee);
+ }
+ }
+ return nbRows;
+ }
+
+ @Override
+ public void prepare(int startIndex, int endIndex, List<SortConstraint> sortConstraints) {
+ if (log.isTraceEnabled()) {
+ log.trace("Prepare results : " + startIndex + ", " + endIndex);
+ }
+ nbRowsPerPage = endIndex - startIndex + 1;
+ try {
+ mapResults = execute(startIndex, endIndex, getSortConstraint(sortConstraints));
+ listResults = new ArrayList<E>(mapResults.values());
+
+ // FIXME manage sort columns in execute ???? seems obvious --> needed for Contacts, done for Boats
+ //sortResults(sortConstraints);
+ } catch (PollenException eee) {
+ throw new TapestryException("", eee);
+ }
+ }
+
+ protected abstract Map<K, E> execute(int startIndex, int endIndex,
+ SortConstraint orderBy) throws PollenException;
+
+ protected abstract int count() throws PollenException;
+
+ protected SortConstraint getSortConstraint(List<SortConstraint> sortConstraints) {
+ for (SortConstraint constraint : sortConstraints)
+ {
+ final ColumnSort sort = constraint.getColumnSort();
+
+ if (sort != ColumnSort.UNSORTED) {
+ return constraint;
+ }
+ }
+ return null;
+ }
+
+ protected String resolveOrderBy(SortConstraint orderBy) {
+ String filterOrder = null;
+ if (orderBy != null) {
+ PropertyModel property = orderBy.getPropertyModel();
+ filterOrder = property.getPropertyName();
+
+ ColumnSort sort = orderBy.getColumnSort();
+ if (sort.equals(ColumnSort.DESCENDING)) {
+ filterOrder += " desc";
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Order : " + filterOrder);
+ }
+ }
+ return filterOrder;
+ }
+
+// protected void sortResults(List<SortConstraint> sortConstraints) {
+//
+// for (SortConstraint constraint : sortConstraints)
+// {
+// final ColumnSort sort = constraint.getColumnSort();
+//
+// if (sort == ColumnSort.UNSORTED) continue;
+//
+// final PropertyConduit conduit = constraint.getPropertyModel().getConduit();
+//
+// final Comparator valueComparator = new Comparator<Comparable>()
+// {
+// public int compare(Comparable o1, Comparable o2)
+// {
+// // Simplify comparison, and handle case where both are nulls.
+//
+// if (o1 == o2) return 0;
+//
+// if (o2 == null) return 1;
+//
+// if (o1 == null) return -1;
+//
+// return o1.compareTo(o2);
+// }
+// };
+//
+// final Comparator rowComparator = new Comparator()
+// {
+// public int compare(Object row1, Object row2)
+// {
+// Comparable value1 = (Comparable) conduit.get(row1);
+// Comparable value2 = (Comparable) conduit.get(row2);
+//
+// return valueComparator.compare(value1, value2);
+// }
+// };
+//
+// final Comparator reverseComparator = new Comparator()
+// {
+// public int compare(Object o1, Object o2)
+// {
+// int modifier = sort == ColumnSort.ASCENDING ? 1 : -1;
+//
+// return modifier * rowComparator.compare(o1, o2);
+// }
+// };
+//
+// // We can freely sort this list because its just a copy.
+//
+// Collections.sort(listResults, reverseComparator);
+// }
+// }
+
+ @Override
+ public Object getRowValue(int index) {
+ index = index % nbRowsPerPage;
+ if (index >= listResults.size()) {
+ if (log.isErrorEnabled()) {
+ log.error("Size error : " + index + " / " + listResults.size());
+ }
+ return null;
+ }
+ return CollectionUtils.get(listResults, index);
+ }
+
+ @Override
+ public abstract Class<?> getRowType();
+
+ public E get(K key) {
+ return mapResults.get(key);
+ }
+
+ public List<E> values() {
+ return listResults;
+ }
+
+ public boolean contains(K key) {
+ return mapResults.containsKey(key);
+ }
+
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AbstractMappedGridDataSource.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/UserAccountDataSource.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/UserAccountDataSource.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/UserAccountDataSource.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,52 @@
+
+package org.chorem.pollen.ui.data;
+
+import java.util.Map;
+import org.apache.tapestry5.grid.SortConstraint;
+import org.chorem.pollen.PollenException;
+import org.chorem.pollen.bean.Filter;
+import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.service.ServiceUser;
+
+/**
+ * UserAccountDataSource
+ *
+ * Created: 23 avr. 2010
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class UserAccountDataSource extends AbstractMappedGridDataSource<String, UserAccount> {
+
+ private ServiceUser service;
+
+ private Filter filter;
+
+ public UserAccountDataSource(ServiceUser service, Filter filter) {
+ this.service = service;
+ this.filter = filter;
+ }
+
+ @Override
+ protected Map<String, UserAccount> execute(int startIndex, int endIndex,
+ SortConstraint orderBy) throws PollenException {
+ filter.setStartIndex(startIndex);
+ filter.setEndIndex(endIndex);
+ filter.setOrderBy(resolveOrderBy(orderBy));
+ return service.getUsers(filter);
+ }
+
+ @Override
+ protected int count() throws PollenException {
+ return service.getNbUsers(filter);
+ }
+
+ @Override
+ public Class<?> getRowType() {
+ return UserAccount.class;
+ }
+
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/UserAccountDataSource.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/ErrorPage.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/ErrorPage.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/ErrorPage.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -2,6 +2,7 @@
package org.chorem.pollen.ui.pages;
import org.apache.tapestry5.annotations.InjectComponent;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.data.AddressBarItem;
@@ -17,13 +18,14 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class ErrorPage {
+public class ErrorPage extends AbstractPollenPage {
@InjectComponent
private Border border;
- public void addError(String message) {
- border.addError(message);
+ @Override
+ public Border getBorder() {
+ return border;
}
public AddressBarItem[] getAddress() {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -17,6 +17,7 @@
package org.chorem.pollen.ui.pages;
import org.apache.tapestry5.annotations.InjectComponent;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
@@ -28,20 +29,17 @@
* @author fdesbois <fdesbois(a)codelutin.com>
* @version $Id$
*/
-public class Index {
+public class Index extends AbstractPollenPage {
@InjectComponent
private Border border;
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
public AddressBar getAddressBar() {
return AddressBar.newEmptyBar().appendCurrent("Pollen");
}
-
- public void addInfo(String message) {
- border.addInfo(message);
- }
-
- public void addError(String message) {
- border.addError(message);
- }
}
Copied: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java (from rev 2972, trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/PollsAdmin.java)
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,85 @@
+/* *##% Pollen
+ * Copyright (C) 2009 CodeLutin
+ *
+ * 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/>. ##%*/
+
+package org.chorem.pollen.ui.pages.admin;
+
+import java.util.List;
+
+import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.chorem.pollen.entity.Poll;
+import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.ui.base.AbstractPollsPage;
+import org.chorem.pollen.ui.components.Border;
+import org.chorem.pollen.ui.components.FeedBack;
+
+/**
+ * Classe de la page d'administration des sondages. Si l'utilisateur n'est pas
+ * identifié, on lui demande d'abord de s'identifier via un formulaire.
+ *
+ * @author rannou
+ * @version $Id$
+ */
+@IncludeStylesheet("context:css/pollsAdmin.css")
+public class AdminPolls extends AbstractPollsPage {
+
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
+ /** Affichage des messages pour l'utilisateur */
+ @Component(id = "feedback")
+ private FeedBack feedback;
+
+ /**
+ * Liste de sondages de l'utilisateur
+ */
+ @SuppressWarnings("unused")
+ @Property
+ private List<Poll> polls;
+
+ /**
+ * Messages.
+ */
+ @Inject
+ private Messages messages;
+
+ /** Injection des services */
+ @Inject
+ private ServicePoll servicePoll;
+
+ /**
+ * Méthode d'initialisation des sondages
+ */
+ @Override
+ public void onActivate() {
+ super.onActivate();
+ polls = servicePoll.getAllPolls();
+
+ // Affichage des erreurs
+ if (!isAdminConnected()) {
+ feedback.addError(messages.get("userNotAllowed"));
+ }
+ }
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminPolls.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Rev Revision"
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java (from rev 2972, trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java)
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,351 @@
+/* *##% Pollen
+ * Copyright (C) 2009 CodeLutin
+ *
+ * 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/>. ##%*/
+
+package org.chorem.pollen.ui.pages.admin;
+
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.Field;
+import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.corelib.components.Form;
+import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.chorem.pollen.PollenBusinessException;
+import org.chorem.pollen.bean.Filter;
+import org.chorem.pollen.bean.PollenEmail;
+import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.service.ServiceEmail;
+import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
+import org.chorem.pollen.ui.data.AddressBar;
+import org.chorem.pollen.ui.data.UserAccountDataSource;
+import org.chorem.pollen.ui.services.PollenManager;
+import org.slf4j.Logger;
+
+/**
+ * Management of users by an admin.
+ *
+ * @author fdesbois <fdesbois(a)codelutin.com>
+ * @version $Id$
+ */
+@IncludeStylesheet("context:css/usersAdmin.css")
+public class AdminUsers extends AbstractPollenPage {
+
+ @InjectComponent
+ private Border border;
+
+ /** Page title from Messages **/
+ @Parameter(defaultPrefix = BindingConstants.MESSAGE,
+ value = "pollen.page.AdminUsers.title")
+ @Property
+ private String title;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
+ @Override
+ public boolean isNeedAuthentification() {
+ return true;
+ }
+
+ @Override
+ public boolean canDisplayPage() {
+ return isAdminConnected();
+ }
+
+ public AddressBar getAddressBar() {
+ return AddressBar.newBar().appendCurrent(title);
+ }
+
+ /** Services used by the page **/
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private ComponentResources resources;
+
+ @Inject
+ private Messages messages;
+
+ @Inject
+ private PollenManager manager;
+
+ @Inject
+ private ServiceUser serviceUser;
+
+ @Inject
+ private ServiceEmail serviceEmail;
+
+ /***************************** USERS GRID/FORM ****************************/
+
+ /** Components of the page **/
+ @InjectComponent
+ private Form usersForm;
+
+ /**
+ * Users list : the {@link Persist} is used to keep current page and order
+ * from dataSource.
+ */
+ @Persist
+ private UserAccountDataSource accounts;
+
+ /** Current user from iteration on accounts **/
+ @Property
+ private UserAccount account;
+
+ /** Edited user **/
+ @Property
+ private UserAccount accountEdited;
+
+ /**
+ * Use the {@link UserAccountDataSource} to retrieve existing user accounts.
+ * This will manage pagination and order of the grid.
+ *
+ * @return the UserAccountDataSource which contains displayed users
+ */
+ public UserAccountDataSource getAccounts() {
+ if (accounts == null) {
+ accounts = new UserAccountDataSource(serviceUser, new Filter());
+ }
+ return accounts;
+ }
+
+ /**
+ * Test if the edited account is the current one in the Grid.
+ *
+ * @return true if the accountEdited is defined and correspond to the
+ * current account in the Grid
+ */
+ public boolean isEditionMode() {
+ // The current account in the loop is equals to the edited one
+ return accountEdited != null && account.equals(accountEdited);
+ }
+
+ /**
+ * Test if the current account in the Grid is the connected user.
+ *
+ * @return true if the current account is the user connected
+ */
+ public boolean isAccountConnected() {
+ // The current account in the loop is equals to the edited one
+ return account.equals(getUserConnected());
+ }
+
+ /**
+ * ON_ACTION :: Handler method for action on editAccount actionLink.
+ * The accountEdited will be set to the user selected in the Grid with
+ * {@code login}.
+ *
+ * @param login key of the user from the Grid
+ * @return the usersForm to display form with accountEdited
+ */
+ public Object onActionFromEditAccount(String login) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("User in edition : " + login);
+ }
+ accountEdited = accounts.get(login);
+ return usersForm;
+ }
+
+ /**
+ * ON_ACTION :: Handler method for action on deletedAccount actionLink.
+ * The selected login from the Grid will be used to delete the user.
+ *
+ * @param login used to delete the user
+ * @see ServiceUser#deleteUser(String)
+ */
+ public void onActionFromDeleteAccount(String login) {
+ serviceUser.deleteUser(login);
+ }
+
+ /**
+ * ON_PREPARE_FOR_SUBMIT :: Handler method for prepareSubmit event of the
+ * usersForm. The accountEdited will be initialized to properly be saved in
+ * {@link #onValidateFormFromUsersForm()}
+ */
+ public void onPrepareForSubmitFromUsersForm() {
+ if (accountEdited == null) {
+ accountEdited = serviceUser.getNewUser();
+ }
+ }
+
+ /**
+ * ON_VALIDATE_FORM :: Handler method for validateForm event of the
+ * usersForm. The accountEdited will be updated using serviceUser. Errors
+ * from service will be recorded into the usersForm.
+ *
+ * @see ServiceUser#updateUser(UserAccount, boolean)
+ */
+ public void onValidateFormFromUsersForm() {
+ try {
+ serviceUser.updateUser(accountEdited, true);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ usersForm.recordError(message);
+ }
+ }
+
+ /**
+ * ON_SUCCESS :: Handler method for success event of the usersForm.
+ * No error occurs from validation, a message will be displayed to client.
+ *
+ * @return the current page to refresh
+ */
+ public Object onSuccessFromUsersForm() {
+ addInfo(messages.get("pollen.ui.user.update.success"));
+ return this;
+ }
+
+ /**
+ * ON_FAILURE :: Handler method for failure event of the usersForm.
+ * Errors were recorded into the usersForm. The usersForm will be refresh
+ * to display error messages.
+ *
+ * @return the usersForm to refresh (in the usersZone)
+ */
+ public Object onFailureFromUsersForm() {
+ return usersForm;
+ }
+
+ /***************************** NEW USER FORM ******************************/
+
+ /** newUser to create from newUserForm **/
+ @Property
+ private UserAccount newUser;
+
+ /** Components used for refresh or validations **/
+ @InjectComponent
+ private Form newUserForm;
+
+ @InjectComponent
+ private Field newLogin;
+
+ @InjectComponent
+ private Field newEmail;
+
+ /** newPassword created for the newUser **/
+ private String newPassword;
+
+ /**
+ * ON_PREPARE :: Handler method for prepare events of the newUserForm.
+ * The newUser will be initialized if needed before render and before
+ * submit.
+ */
+ public void onPrepareFromNewUserForm() {
+ if (newUser == null) {
+ newUser = serviceUser.getNewUser();
+ }
+ }
+
+ /**
+ * ON_VALIDATE_FORM :: Handler method for validateForm event of the
+ * newUserForm. The newUser will be created using serviceUser. Errors
+ * from service will be recorded into the newUserForm. The password will
+ * be generated if an email is set into the form. Otherwise the password
+ * will be the same as the newUser login.
+ *
+ * @see ServiceUser#createUser(UserAccount)
+ */
+ public void onValidateFormFromNewUserForm() {
+ try {
+ String passwordInfo;
+ if (StringUtils.isNotEmpty(newUser.getEmail())) {
+ // Generate new password
+ newPassword = RandomStringUtils.randomAlphanumeric(8);
+ passwordInfo =
+ messages.get("pollen.ui.user.create.passwordGenerated");
+ } else {
+ // Password will be the same as the login
+ newPassword = newUser.getLogin();
+ passwordInfo =
+ messages.get("pollen.ui.user.create.passwordSameAsLogin");
+ }
+
+ newUser.setNewPassword(newPassword);
+ serviceUser.createUser(newUser);
+ addInfo(passwordInfo);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ switch (eee.getType()) {
+ case USER_EMAIL_EXIST:
+ newUserForm.recordError(newEmail, message); break;
+ case USER_LOGIN_EXIST:
+ newUserForm.recordError(newLogin, message);
+ }
+ }
+ }
+
+ /**
+ * ON_SUCCESS :: Handler method for success event of the newUserForm.
+ * No error occurs from validation, success message is displayed to client
+ * and an email is sent to the newUser created if it's defined.
+ * The persist fields of the page will be discarded to refresh the grid with
+ * no order or page filter.
+ *
+ * @return the current page to refresh
+ * @see ServiceEmail#sendEmail(PollenEmail)
+ */
+ public Object onSuccessFromNewUserForm() {
+ addInfo(messages.format("pollen.ui.user.create.success",
+ newUser.getLogin()));
+ // send email if needed
+ if (StringUtils.isNotEmpty(newUser.getEmail())) {
+ try {
+ PollenEmail email = serviceEmail.getNewEmail(newUser);
+ email.setSubject(
+ messages.format("pollen.email.userRegister.subject",
+ newUser.getLogin()));
+ email.setContent(
+ messages.format("pollen.email.userRegister.content",
+ newUser.getDisplayName(), newUser.getLogin(),
+ newPassword, getUrl()));
+
+ serviceEmail.sendEmail(email);
+ addInfo(messages.format("pollen.ui.user.create.sendEmail",
+ newUser.getLogin(), newUser.getEmail()));
+
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ addError(message);
+ }
+ }
+ // Remove accounts to reset order and current page
+ // This will display the new user created in the first row of the grid
+ resources.discardPersistentFieldChanges();
+ return this;
+ }
+
+ /**
+ * ON_FAILURE :: Handler method for failure event of the newUserForm.
+ * Errors were recorded into the newUserForm. The newUserForm will be
+ * refresh to display error messages.
+ *
+ * @return the newUserForm to refresh (in the newUserZone)
+ */
+ public Object onFailureFromNewUserForm() {
+ return newUserForm;
+ }
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/AdminUsers.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Rev Revision"
Added: svn:mergeinfo
+
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/PollsAdmin.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/PollsAdmin.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/PollsAdmin.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,84 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * 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/>. ##%*/
-
-package org.chorem.pollen.ui.pages.admin;
-
-import java.util.List;
-
-import org.apache.tapestry5.annotations.Component;
-import org.apache.tapestry5.annotations.IncludeStylesheet;
-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.chorem.pollen.entity.Poll;
-import org.chorem.pollen.entity.UserAccount;
-import org.chorem.pollen.service.ServicePoll;
-import org.chorem.pollen.ui.base.Polls;
-import org.chorem.pollen.ui.components.FeedBack;
-
-/**
- * Classe de la page d'administration des sondages. Si l'utilisateur n'est pas
- * identifié, on lui demande d'abord de s'identifier via un formulaire.
- *
- * @author rannou
- * @version $Id$
- */
-@IncludeStylesheet("context:css/pollsAdmin.css")
-public class PollsAdmin extends Polls {
-
- /** Affichage des messages pour l'utilisateur */
- @Component(id = "feedback")
- private FeedBack feedback;
-
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- private UserAccount user;
- private boolean userExists;
-
- /**
- * Liste de sondages de l'utilisateur
- */
- @SuppressWarnings("unused")
- @Property
- private List<Poll> polls;
-
- /**
- * Messages.
- */
- @Inject
- private Messages messages;
-
- /** Injection des services */
- @Inject
- private ServicePoll servicePoll;
-
- /**
- * Méthode d'initialisation des sondages
- */
- @Override
- public void onActivate() {
- super.onActivate();
- polls = servicePoll.getAllPolls();
-
- // Affichage des erreurs
- if (userExists && !user.getAdmin()) {
- feedback.addError(messages.get("userNotAllowed"));
- }
- }
-}
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,257 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * 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/>. ##%*/
-
-package org.chorem.pollen.ui.pages.admin;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.tapestry5.BindingConstants;
-import org.apache.tapestry5.ComponentResources;
-import org.apache.tapestry5.ValueEncoder;
-import org.apache.tapestry5.annotations.Component;
-import org.apache.tapestry5.annotations.IncludeStylesheet;
-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.chorem.pollen.PollenProperty;
-import org.chorem.pollen.entity.UserAccount;
-import org.chorem.pollen.mail.PreventRuleManager;
-import org.chorem.pollen.service.ServiceUser;
-import org.chorem.pollen.ui.components.FeedBack;
-import org.chorem.pollen.ui.data.AddressBarItem;
-import org.chorem.pollen.ui.services.PollenManager;
-
-/**
- * Classe d'administration des comptes utilisateurs. Si l'utilisateur n'est pas
- * identifié, on lui demande d'abord de s'identifier via un formulaire.
- *
- * @author rannou
- * @version $Id$
- */
-@IncludeStylesheet("context:css/usersAdmin.css")
-public class UsersAdmin {
-
- /** Affichage des messages pour l'utilisateur */
- @Component(id = "feedback")
- private FeedBack feedback;
-
- /**
- * Objet de session représentant l'url du site.
- */
- @SessionState
- private String siteURL;
-
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- @Property
- private UserAccount user;
- @Property
- private boolean userExists;
-
- /**
- * Titre de la page.
- */
- @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
- @Property
- private String title;
-
- /**
- * Adresse de la page.
- */
- @SuppressWarnings("unused")
- @Property
- private AddressBarItem[] address;
-
- /**
- * Liste des utilisateurs.
- */
- @Property
- @Persist
- private List<UserAccount> accounts;
-
- /**
- * Utilisateur courant.
- */
- @Property
- private UserAccount account;
-
- /**
- * Ressources de la page.
- */
- @Inject
- private ComponentResources resources;
-
- /**
- * Messages.
- */
- @Inject
- private Messages messages;
-
- /** Injection des services */
- @Inject
- private ServiceUser serviceUser;
-// @Inject
-// private ServiceList serviceList;
-
- /**
- * Initialisation du formulaire.
- */
- public void onPrepareFromUsersForm() {
- if (accounts == null) {
- accounts = serviceUser.getUsers();
- }
- }
-
- /**
- * Méthode appelée lors de la soumission du formulaire.
- */
- public Object onSuccessFromUsersForm() {
- for (UserAccount usr : accounts) {
-// serviceUser.createUpdateUser(usr);
-
- // FIXME : test and refactor to manage errors
-
-// if (serviceUser.findUserById(usr.getId()) != null) {
-// serviceUser.createUpdateUser(usr);
-// } else {
-// String password = PasswordGenerator.generate(8);
-// if (serviceUser.createUser(usr, MD5.encode(password)) != null) {
-// feedback.addInfo(messages.format("userCreated", usr
-// .getLogin()));
-// sendMailNotification(usr, password);
-// } else {
-// feedback.addError(messages.format("userNotCreated", usr
-// .getLogin()));
-// }
-// }
- }
- feedback.addInfo(messages.get("dataSaved"));
- resources.discardPersistentFieldChanges();
- return this;
- }
-
- /**
- * Méthode appelée lors de l'ajout d'un utilisateur.
- */
-// Object onAddRowFromUsersLoop() {
-// // FIXME : wtf ?
-//
-//
-// UserAccount usr = new UserAccountImpl();
-// //usr.setId(String.valueOf(System.nanoTime()));
-// accounts.add(usr);
-// return usr;
-// }
-
- /**
- * Méthode appelée lors de la suppression d'un utilisateur.
- */
-// void onRemoveRowFromUsersLoop(UserAccount usr) {
-// if (serviceUser.findUserById(usr.getId()) != null) {
-//
-// // suppression des listes de votants de l'utilisateur
-// serviceList.deletePersonLists(usr.getId());
-//
-// // suppression de l'utilisateur
-// if (serviceUser.deleteUser(usr)) {
-// accounts.remove(usr);
-// }
-// } else {
-// accounts.remove(usr);
-// }
-// }
-
- /**
- * Encoder permettant de transformer un ID en user.
- */
- public ValueEncoder<UserAccount> getUserEncoder() {
- return new ValueEncoder<UserAccount>() {
-
- public String toClient(UserAccount value) {
- return value.getTopiaId();
- }
-
- public UserAccount toValue(String key) {
- for (UserAccount usr : accounts) {
- if (key.equals(usr.getTopiaId())) {
- return usr;
- }
- }
- throw new IllegalArgumentException("La clé \"" + key
- + "\" n'existe pas dans la collection : " + accounts);
- }
- };
- }
-
- @Inject
- private PollenManager manager;
-
- /** Envoi du mail de notification */
- private void sendMailNotification(UserAccount newUser, String password) {
- Map<String, String> data = new HashMap<String, String>();
- data.put("host", manager.getProperty(PollenProperty.EMAIL_HOST));
- data.put("port", manager.getProperty(PollenProperty.EMAIL_PORT));
- data.put("from", manager.getProperty(PollenProperty.EMAIL_FROM));
- data.put("to", newUser.getEmail());
- data.put("title", messages.format("registerEmail_subject", newUser
- .getLogin()));
- data.put("msg", messages.format("registerEmail_msg", newUser
- .getFirstName(), newUser.getLastName(), newUser.getLogin(),
- password, siteURL));
-
- // FIXME call directly MailUtil.sendMail()
- // skip fill map, get from map...
- PreventRuleManager.emailAction(data);
- }
-
- /**
- * Détermine si le compte courant est le compte de l'utilisateur.
- */
- public boolean isMyAccount() {
- if (userExists) {
- return user.equals(account);
- }
- return false;
- }
-
- /**
- * Méthode d'activation de la page.
- */
- public void onActivate() {
-
- // Affichage des erreurs
- if (userExists && !user.getAdmin()) {
- feedback.addError(messages.get("userNotAllowed"));
- }
- }
-
- /**
- * Initialisation de l'affichage.
- */
- public void setupRender() {
- accounts = serviceUser.getUsers();
-
- address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"),
- new AddressBarItem(title, null) };
- }
-}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CloseValidation.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CloseValidation.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CloseValidation.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -18,6 +18,7 @@
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -28,6 +29,8 @@
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.service.ServicePoll;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
@@ -38,8 +41,16 @@
* @author rannou
* @version $Id$
*/
-public class CloseValidation {
+public class CloseValidation extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/** Affichage des messages pour l'utilisateur */
@Component(id = "feedback")
private FeedBack feedback;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ConfirmPoll.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ConfirmPoll.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ConfirmPoll.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -19,15 +19,17 @@
import java.util.Date;
import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBarItem;
import org.chorem.pollen.ui.data.PollAction;
@@ -38,8 +40,16 @@
* @author rannou
* @version $Id$
*/
-public class ConfirmPoll {
+public class ConfirmPoll extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
@Persist
private Poll poll;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CreationValidation.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CreationValidation.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/CreationValidation.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -18,6 +18,7 @@
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -26,9 +27,10 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PollAccount;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
-import org.chorem.pollen.votecounting.dto.PollDTO;
/**
* Classe de la page de confirmation de la création d'un sondage.
@@ -37,8 +39,16 @@
* @author rannou
* @version $Id$
*/
-public class CreationValidation {
+public class CreationValidation extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/** Affichage des messages pour l'utilisateur */
@Component(id = "feedback")
private FeedBack feedback;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ModificationValidation.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ModificationValidation.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/ModificationValidation.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -18,6 +18,7 @@
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -26,6 +27,8 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PollAccount;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
@@ -36,8 +39,16 @@
* @author rannou
* @version $Id$
*/
-public class ModificationValidation {
+public class ModificationValidation extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/** Affichage des messages pour l'utilisateur */
@Component(id = "feedback")
private FeedBack feedback;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/PollForm.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/PollForm.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/PollForm.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -16,7 +16,6 @@
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.corelib.components.Form;
import org.apache.tapestry5.corelib.components.FormFragment;
import org.apache.tapestry5.ioc.Messages;
@@ -27,9 +26,9 @@
import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PreventRule;
-import org.chorem.pollen.entity.UserAccount;
-import org.chorem.pollen.mail.PreventRuleManager;
import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.data.ChoiceField;
import org.slf4j.Logger;
@@ -61,17 +60,19 @@
*/
@IncludeStylesheet("context:css/poll.css")
@IncludeJavaScriptLibrary("context:js/pollForm.js")
-public class PollForm {
+public class PollForm extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
@Inject
private Logger log;
-
- @SessionState
- private UserAccount user;
- @Property
- private boolean userExists;
-
@Inject
private Messages messages;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/Results.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/Results.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/Results.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -22,12 +22,9 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
@@ -48,12 +45,11 @@
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.Result;
import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.components.Chart;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
-import org.chorem.pollen.votecounting.business.NumberMethod;
-import org.chorem.pollen.votecounting.dto.ChoiceDTO;
-import org.chorem.pollen.votecounting.dto.VoteCountingResultDTO;
import org.slf4j.Logger;
/**
@@ -64,7 +60,16 @@
*/
@IncludeStylesheet({"context:css/results.css", "context:css/lightbox.css"})
@IncludeJavaScriptLibrary({"${tapestry.scriptaculous}/builder.js","context:js/lightbox.js"})
-public class Results {
+public class Results extends AbstractPollenPage {
+
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
@Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
@Property
private String title;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -36,7 +36,6 @@
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.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
@@ -48,7 +47,6 @@
import org.chorem.pollen.entity.CommentImpl;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PollAccount;
-import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.Vote;
import org.chorem.pollen.service.ServicePoll;
import org.chorem.pollen.service.ServiceUser;
@@ -73,6 +71,14 @@
@IncludeStylesheet({"context:css/vote.css", "context:css/lightbox.css"})
@IncludeJavaScriptLibrary({"${tapestry.scriptaculous}/builder.js","context:js/lightbox.js"})
public class VoteForPoll extends AbstractUploadPage {
+
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
//
// @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
// @Property
@@ -936,9 +942,6 @@
@Property
private PollUri uri;
-
- @InjectComponent
- private Border border;
/** TEMP : Affichage des messages pour l'utilisateur */
@Component(id = "feedback")
@@ -966,15 +969,6 @@
@Property
private boolean pollNull;
-
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- private UserAccount user;
-
- @Property
- private boolean userExists;
/** Compte du votant */
private PollAccount pollAccount;
@@ -1103,7 +1097,7 @@
}
if (pollAccount == null) {
- pollAccount = serviceUser.getNewPerson(user);//new PollAccountDTO();
+ pollAccount = serviceUser.getNewPerson(getUserConnected());//new PollAccountDTO();
// if (userExists) {
// if (user.getFirstName() != null && user.getLastName() != null) {
// pollAccount.setVotingId(
@@ -1128,7 +1122,8 @@
* @throws PollenBusinessException
*/
public boolean isCreatorUser() throws PollenBusinessException {
- return userExists && user.equals(getPoll().getCreator().getUserAccount());
+ return isUserConnected() && getUserConnected().equals(
+ getPoll().getCreator().getUserAccount());
}
/************** PAGER *****************************************************/
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserLists.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -16,7 +16,6 @@
package org.chorem.pollen.ui.pages.user;
-import java.util.List;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.tapestry5.BindingConstants;
@@ -25,10 +24,8 @@
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Parameter;
-import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.Retain;
-import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Zone;
@@ -37,12 +34,11 @@
import org.apache.tapestry5.services.BeanModelSource;
import org.apache.tapestry5.upload.services.UploadedFile;
import org.chorem.pollen.entity.PollAccount;
-import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.EvenOdd;
import org.chorem.pollen.ui.data.AddressBarItem;
-import org.chorem.pollen.ui.utils.CSVAccountUtil;
-import org.chorem.pollen.ui.utils.LDAPAccountUtil;
/**
* Classe de la page d'affichage des listes de votants favorites de
@@ -53,16 +49,16 @@
* @version $Id$
*/
@IncludeStylesheet("context:css/lists.css")
-public class UserLists {
+public class UserLists extends AbstractPollenPage {
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- private UserAccount user;
- @Property
- private boolean userExists;
+ @InjectComponent
+ private Border border;
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/** Affichage des messages pour l'utilisateur */
@Component(id = "feedback")
private FeedBack feedback;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsCreated.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsCreated.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsCreated.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -19,16 +19,16 @@
import java.util.List;
import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.upload.services.UploadedFile;
import org.chorem.pollen.entity.Poll;
-import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServicePoll;
-import org.chorem.pollen.ui.base.Polls;
+import org.chorem.pollen.ui.base.AbstractPollsPage;
+import org.chorem.pollen.ui.components.Border;
/**
* Classe de la page d'affichage des sondages que l'utilisateur a créés. Si
@@ -39,15 +39,16 @@
* @version $Id$
*/
@IncludeStylesheet("context:css/pollsCreated.css")
-public class UserPollsCreated extends Polls {
+public class UserPollsCreated extends AbstractPollsPage {
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- private UserAccount user;
- private boolean userExists;
+ @InjectComponent
+ private Border border;
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/**
* Liste de sondages de l'utilisateur
*/
@@ -103,8 +104,8 @@
@Override
public void onActivate() {
super.onActivate();
- if (userExists) {
- polls = servicePoll.getPollsByUser(user);
+ if (isUserConnected()) {
+ polls = servicePoll.getPollsByUser(getUserConnected());
}
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsParticipated.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsParticipated.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserPollsParticipated.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -19,14 +19,13 @@
import java.util.List;
import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.entity.Poll;
-import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServicePoll;
-import org.chorem.pollen.ui.base.Polls;
-import org.chorem.pollen.votecounting.dto.PollDTO;
+import org.chorem.pollen.ui.base.AbstractPollsPage;
+import org.chorem.pollen.ui.components.Border;
/**
* Classe de la page d'affichage des sondages auxquels l'utilisateur a
@@ -37,15 +36,16 @@
* @version $Id$
*/
@IncludeStylesheet("context:css/pollsParticipated.css")
-public class UserPollsParticipated extends Polls {
+public class UserPollsParticipated extends AbstractPollsPage {
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- private UserAccount user;
- private boolean userExists;
+ @InjectComponent
+ private Border border;
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
/**
* Liste des sondages auxquels l'utilisateur a participé
*/
@@ -86,8 +86,9 @@
@Override
public void onActivate() {
super.onActivate();
- if (userExists) {
- invitedPolls = participatedPolls = servicePoll.getPollsByUser(user);
+ if (isUserConnected()) {
+ invitedPolls = participatedPolls = servicePoll.getPollsByUser(
+ getUserConnected());
// invitedPolls = servicePoll.findInvitedPolls(user.getId());
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -27,7 +27,6 @@
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.corelib.components.Form;
import org.apache.tapestry5.corelib.components.PasswordField;
import org.apache.tapestry5.corelib.components.TextField;
@@ -36,6 +35,7 @@
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.services.PollenManager;
@@ -49,26 +49,32 @@
* @version $Id$
*/
@IncludeStylesheet("context:css/account.css")
-public class UserProfile {
+public class UserProfile extends AbstractPollenPage {
+ @InjectComponent
+ private Border border;
+
+ @Override
+ public Border getBorder() {
+ return border;
+ }
+
+ @Override
+ public boolean isNeedAuthentification() {
+ return true;
+ }
+
+ @Override
+ public boolean canDisplayPage() {
+ return isUserConnected();
+ }
+
@Inject
private Logger logger;
@Inject
private PollenManager manager;
- @InjectComponent
- private Border border;
-
- /**
- * Objet de session représentant l'utilisateur identifié.
- */
- @SessionState
- @Property
- private UserAccount user;
- @Property
- private boolean userExists;
-
@Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
@Property
private String title;
@@ -127,7 +133,7 @@
public UserAccount getUserEditable() {
if (userEditable == null) {
- userEditable = user;
+ userEditable = getUserConnected();
}
return userEditable;
}
@@ -135,10 +141,10 @@
/**
* ON_VALIDATE_FORM :: <br \>
* UI validation : check if the two passwords are equals. <br \>
- * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#updateUser(org.chorem.pollen.entity.UserAccount) }
+ * BUSINESS validation : execute {@link ServiceUser#updateUser(UserAccount) }
* which throws errors
- * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_WRONG_PASSWORD}
- * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
+ * {@link PollenBusinessException.PollenExceptionType.USER_WRONG_PASSWORD}
+ * and {@link PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
@Log
void onValidateFormFromAccountForm() {
@@ -147,19 +153,19 @@
if (StringUtils.isNotEmpty(newPassword) &&
!newPassword.equals(passwordVerify)) {
accountForm.recordError(newPasswordField,
- messages.get("pollen.ui.user.passwordsDontMatch"));
+ messages.get("pollen.ui.user.validate.passwords"));
}
// If no UI errors, call business to save the user
if (!accountForm.getHasErrors()) {
try {
// Update the user
if (logger.isDebugEnabled()) {
- logger.debug("TopiaId : " + user.getTopiaId());
- logger.debug("Login : " + user.getLogin());
- logger.debug("Password : " + user.getPassword());
- logger.debug("NewPassword : " + user.getNewPassword());
+ logger.debug("TopiaId : " + userEditable.getTopiaId());
+ logger.debug("Login : " + userEditable.getLogin());
+ logger.debug("Password : " + userEditable.getPassword());
+ logger.debug("NewPassword : " + userEditable.getNewPassword());
}
- serviceUser.updateUser(userEditable);
+ serviceUser.updateUser(userEditable, false);
} catch (PollenBusinessException eee) {
String message = manager.getErrorMessage(eee, messages, logger);
switch (eee.getType()) {
@@ -174,7 +180,7 @@
@Log
Object onSuccessFromAccountForm() {
- border.addInfo(messages.get("pollen.ui.user.updateSuccess"));
+ addInfo(messages.get("pollen.ui.user.update.success"));
return this;
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -26,7 +26,6 @@
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
-import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.PasswordField;
import org.apache.tapestry5.corelib.components.TextField;
@@ -37,6 +36,7 @@
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceEmail;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.AbstractPollenPage;
import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
@@ -52,24 +52,31 @@
* @version $Id$
*/
@IncludeStylesheet("context:css/register.css")
-public class UserRegister {
+public class UserRegister extends AbstractPollenPage {
- @Inject
- private Logger logger;
-
@InjectComponent
private Border border;
- /**
- * Identified user
- */
- @SessionState
- private UserAccount user;
+ @Override
+ public Border getBorder() {
+ return border;
+ }
- @Property
- private boolean userExists;
+ @Override
+ public boolean isNeedAuthentification() {
+ return false;
+ }
+ @Override
+ public boolean canDisplayPage() {
+ addInfo("Vous devez vous déconnecter pour créer un compte");
+ return !isUserConnected();
+ }
+
@Inject
+ private Logger logger;
+
+ @Inject
private ServiceUser serviceUser;
@Inject
@@ -85,16 +92,9 @@
@Property
private String title;
- /**
- * Session property loaded from configuration to know what is the current
- * server url
- */
- @SessionState
- private String siteURL;
+// @Inject
+// private Locale currentLocale;
- @Inject
- private Locale currentLocale;
-
/**
* New user to create
*/
@@ -129,7 +129,7 @@
public UserAccount getNewUser() {
if (newUser == null) {
- newUser = serviceUser.getNewUser(currentLocale);
+ newUser = serviceUser.getNewUser();
}
return newUser;
}
@@ -137,17 +137,17 @@
/**
* ON_VALIDATE_FORM :: <br \>
* UI validation : check if the two passwords are equals. <br \>
- * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#createUser(org.chorem.pollen.entity.UserAccount) }
+ * BUSINESS validation : execute {@link ServiceUser#createUser(UserAccount)}
* which throws errors
- * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_LOGIN_EXIST}
- * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
+ * {@link PollenBusinessException.PollenExceptionType.USER_LOGIN_EXIST}
+ * and {@link PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
void onValidateFormFromRegister() {
// Check newPassword that must be equals to passwordVerify
String password = newUser.getNewPassword();
if (!password.equals(passwordVerify)) {
register.recordError(passwordField,
- messages.get("pollen.ui.user.passwordsDontMatch"));
+ messages.get("pollen.ui.user.validate.passwords"));
}
// If no UI errors, call business to save the user
@@ -180,30 +180,30 @@
*/
Object onSuccessFromRegister() {
// Set the newUser in session : connect the new registered user
- user = newUser;
+ setUserConnected(newUser);
index.addInfo(
- messages.format("pollen.ui.user.autoConnection",
- user.getLogin()));
+ messages.format("pollen.ui.user.register.autoConnection",
+ newUser.getLogin()));
// Send an email to the new user if not empty
- if (StringUtils.isNotEmpty(user.getEmail())) {
+ if (StringUtils.isNotEmpty(newUser.getEmail())) {
try {
- PollenEmail mail = serviceEmail.getNewEmail(user);
+ PollenEmail mail = serviceEmail.getNewEmail(newUser);
mail.setSubject(
messages.format("pollen.email.userRegister.subject",
- user.getLogin()));
+ newUser.getLogin()));
mail.setContent(
messages.format("pollen.email.userRegister.content",
- user.getDisplayName(), user.getLogin(),
- passwordForEmail, siteURL));
+ newUser.getDisplayName(), newUser.getLogin(),
+ passwordForEmail, getUrl()));
serviceEmail.sendEmail(mail);
index.addInfo(
- messages.format("pollen.ui.user.sendRegisterEmail",
- user.getEmail()));
+ messages.format("pollen.ui.user.register.sendEmail",
+ newUser.getEmail()));
} catch (PollenBusinessException eee) {
String message = manager.getErrorMessage(eee, messages, logger);
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -16,6 +16,7 @@
package org.chorem.pollen.ui.services;
+import java.util.Locale;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.ioc.Configuration;
import org.apache.tapestry5.ioc.MappedConfiguration;
@@ -96,15 +97,20 @@
*
* @param configuration to add the manager to registry startup
* @param manager to launch at startup
+ * @param serviceUser used to start pollen context in manager
* @param shutdownHub to register manager for registry shutdown
*/
public static void contributeRegistryStartup(
OrderedConfiguration<Runnable> configuration,
- PollenManager manager, RegistryShutdownHub shutdownHub) {
+ ServiceUser serviceUser,
+ PollenManager manager,
+ RegistryShutdownHub shutdownHub) {
+
if (logger.isInfoEnabled()) {
logger.info("Execute contributeRegistryStartup");
}
shutdownHub.addRegistryShutdownListener(manager);
+ manager.setServiceUser(serviceUser);
configuration.add("PollenStartup", manager);
}
@@ -204,9 +210,11 @@
* Used to instanciate SessionState UserAccount when session expires.
*
* @param configuration to add the ApplicationStateCreator.
+ * @param serviceUser to instantiate user
*/
public void contributeApplicationStateManager(MappedConfiguration<Class<?>,
- ApplicationStateContribution> configuration) {
+ ApplicationStateContribution> configuration,
+ final ServiceUser serviceUser) {
if (logger.isInfoEnabled()) {
logger.info("Execute contributeApplicationStateManager");
}
@@ -215,7 +223,7 @@
new ApplicationStateCreator<UserAccount>() {
@Override
public UserAccount create() {
- return new UserAccountImpl();
+ return serviceUser.getNewUser();
}
};
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -32,6 +32,8 @@
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
+import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.base.PollenPage;
import org.nuiton.util.ApplicationConfig;
import org.slf4j.Logger;
@@ -58,6 +60,8 @@
private PollenContext context;
+ private ServiceUser serviceUser;
+
/**
* Constructor of WaoManager. It needs the WaoContext to start and stop.
*
@@ -67,12 +71,16 @@
this.context = context;
}
+ void setServiceUser(ServiceUser serviceUser) {
+ this.serviceUser = serviceUser;
+ }
+
/**
* Called to start the application.
*/
@Override
public void run() {
- context.start();
+ context.start(serviceUser);
// Copy properties to propertiesMap (insentitive) for SymbolProvider
Properties properties = getConfiguration().getOptions();
for (Object key : properties.keySet()) {
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/PasswordGenerator.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/PasswordGenerator.java 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/PasswordGenerator.java 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,56 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * 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/>. ##%*/
-
-package org.chorem.pollen.ui.utils;
-
-/**
- * Classe permettant de générer un mot de passe aléatoire.
- *
- * @author rannou
- * @version $Id$
- */
-public class PasswordGenerator {
-
- /**
- * Génération d'un mot de passe aléatoire.
- *
- * @param length longueur du mot de passe
- */
- public static String generate(int length) {
- char[] chars = new char[length];
- int c = '0';
-
- for (int i = 0; i < length; i++) {
- int charType = (int) (Math.random() * 3);
- switch (charType) {
- case 0:
- c = '0' + (int) (Math.random() * 10);
- break;
- case 1:
- c = 'a' + (int) (Math.random() * 26);
- break;
- case 2:
- c = 'A' + (int) (Math.random() * 26);
- break;
- default:
- break;
- }
- chars[i] = (char) c;
- }
-
- return String.copyValueOf(chars);
- }
-}
Modified: trunk/pollen-ui/src/main/resources/i18n/pollen-ui-en_GB.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/i18n/pollen-ui-en_GB.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-en_GB.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,6 +1,6 @@
# User registration emails
-pollen.mail.userRegister.subject=[Pollen] Confirmation of account creation %s
-pollen.mail.userRegister.content=Welcome %1$s. You had just created an account on the web application Pollen.\n\nLogin: %2$s\nPassword: %3$s\n\nYou can now manage your polls by logging on the website : \n%4$s
+pollen.email.userRegister.subject=[Pollen] Confirmation of account creation %s
+pollen.email.userRegister.content=Welcome %1$s. You had just created an account on the web application Pollen.\n\nLogin: %2$s\nPassword: %3$s\n\nYou can now manage your polls by logging on the website : \n%4$s
# Poll creation emails
creatorEmail_subject=[Pollen] Poll creation (%s)
@@ -50,6 +50,16 @@
pollen.ui.choice.add.submit=Add
pollen.ui.error.upload=An error occurred while uploading files. Maximum size allowed is %$1s per file, and %$2s total.
+pollen.ui.user.edit=Edit this user account
+pollen.ui.user.cancelEdit=Cancel changes
+pollen.ui.user.save=Save this user account
+pollen.ui.user.delete=Delete this user account
+pollen.ui.user.delete.confirmMessage=Are you sure you want to definitively delete this user ?
+
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Invalid email
+login-required-message=You must provide a username
+
# Tapestry messages for VoteForPoll.tml
# FORM:: addChoice
choiceDescription-label=Description
@@ -62,4 +72,4 @@
choiceImage-label=Image
addChoice-choiceImage-regexp=\\.(jpe?g|gif|png|JPE?G|GIF|PNG)$
addChoice-choiceImage-regexp-message=The image must be a JPG, GIF or PNG file.
-addChoice-choiceImage-required-message=You must provide a choice.
\ No newline at end of file
+addChoice-choiceImage-required-message=You must provide a choice.
Modified: trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,51 +1,42 @@
-# User registration emails
+############################ PAGES #############################################
+pollen.page.AdminUsers.title=Gestion des utilisateurs
+
+############################ EMAIL #############################################
pollen.email.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
pollen.email.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
-# Poll creation emails
-creatorEmail_subject=[Pollen] Cr\u00E9ation d'un sondage (%s)
-creatorEmail_msg=Vous venez de cr\u00E9er le sondage "%s".\nVous pouvez y acc\u00E9der en suivant les liens ci-dessous.\n\nPage de vote : \n%s\nPage de modification : \n%s
-votingEmail_subject=[Pollen] Invitation au vote (%s)
-votingEmail_msg=Un nouveau sondage a \u00E9t\u00E9 cr\u00E9\u00E9 : "%s".\nVous pouvez y participer avec l'identifiant %s \u00E0 l'adresse suivante : \n%s
+############################ USER ##############################################
+pollen.ui.user.register.autoConnection=Vous \u00EAtes maintenant connect\u00E9 avec l'identifiant %1$s.
+pollen.ui.user.register.sendEmail=Un email vous a \u00E9t\u00E9 envoy\u00E9 \u00E0 l'adresse %1$s.
+pollen.ui.user.validate.passwords=Les deux mots de passe ne correspondent pas.
+pollen.ui.user.update.success=Modification enregistr\u00E9e avec succ\u00E8s.
+pollen.ui.user.display.notConnected=Vous devez vous connecter pour acc\u00E9der \u00E0 cette page.
+pollen.ui.user.display.notAllowed=Vous n'avez pas les droits n\u00E9cessaires pour acc\u00E9der \u00E0 cette page.
+pollen.ui.user.create=Ajouter
+pollen.ui.user.create.title=Cr\u00E9er un nouvel utilisateur
+pollen.ui.user.create.passwordGenerated=Le password du nouvel utilisateur a \u00E9t\u00E9 g\u00E9n\u00E9r\u00E9.
+pollen.ui.user.create.passwordSameAsLogin=Le password du nouvel utilisateur est le m\u00EAme que son identifiant.
+pollen.ui.user.create.sendEmail=Un email a \u00E9t\u00E9 envoy\u00E9 au nouvel utilisateur %1$s \u00E0 l'adresse %2$s.
+pollen.ui.user.create.success=L'utilisateur %1$s a \u00E9t\u00E9 cr\u00E9\u00E9 avec succ\u00E8s.
+pollen.ui.user.update.edit=Modifier cet utilisateur.
+pollen.ui.user.update.save=Enregistrer les modifications.
+pollen.ui.user.update.cancel=Annuler les changements.
+pollen.ui.user.delete=Supprimer cet utilisateur.
+pollen.ui.user.delete.confirmMessage=Etes-vous s\u00FBr de vouloir d\u00E9finitivement supprimer cet utilisateur ?
-# Notification emails
-voteEmail_subject=[Pollen] Notification de vote (%s)
-voteEmail_msg=Un vote vient d'\u00EAtre enregistr\u00E9 pour le sondage "%s". Ce sondage compte d\u00E9sormais %d votes.\nVous pouvez acc\u00E9der \u00E0 ce sondage en suivant les liens ci-dessous.\n\nPage de vote : \n%s\nPage de modification : \n%s
+# FORM:: user
+firstName-label=Pr\u00E9nom
+lastName-label=Nom
+login-label=Identifiant
+email-label=Email
-# Reminder emails
-reminderEmail_subject=[Pollen] Rappel (%s)
-reminderEmail_msg=Vous n'avez pas encore vot\u00E9 pour le sondage "%s".\nVous pouvez encore y participer avec l'identifiant %s \u00E0 l'adresse suivante : \n%s
+login-required-message=Vous devez fournir un identifiant
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Email invalide
+newEmail-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+newEmail-regexp-message=Email invalide
-# Poll feed
-pollFeed_title=Pollen : %s
-pollFeed_desc=%s
-pollFeed_createTitle=Sondage cr\u00E9\u00E9 par %s
-pollFeed_createContent=
-pollFeed_voteTitle=Nouveau vote de %s
-pollFeed_voteContent=\u00C9tat du sondage : %s
-pollFeed_choiceTitle=Nouveau choix : %s
-pollFeed_choiceContent=%s
-pollFeed_commentTitle=Nouveau commentaire de %s
-pollFeed_commentContent=%s
-
-# Actions
-create=Cr\u00E9er
-edit=Modifier
-delete=Supprimer
-add=Ajouter
-save=Enregistrer
-load=Charger
-ok=Ok
-validate=Valider
-cancel=Annuler
-return=Retour
-help=Aide
-
-pollen.ui.user.autoConnection=Vous \u00EAtes maintenant connect\u00E9 avec l'identifiant %1$s.
-pollen.ui.user.sendRegisterEmail=Un email vous a \u00E9t\u00E9 envoy\u00E9 \u00E0 l'adresse %1$s.
-pollen.ui.user.passwordsDontMatch=Les deux mots de passe ne correspondent pas.
-pollen.ui.user.updateSuccess=Modification enregistr\u00E9e avec succ\u00E8s.
-
+############################ CHOICE ############################################
pollen.ui.choice.delete.confirm=Etes-vous s\u00FBr de vouloir d\u00E9finitivement supprimer ce choix ?
pollen.ui.choice.delete.title=Supprimer ce choix
pollen.ui.vote.noVote=Aucune personne n'a encore particip\u00E9 au sondage
@@ -68,3 +59,43 @@
addChoice-choiceImage-regexp=\\.(jpe?g|gif|png|JPE?G|GIF|PNG)$
addChoice-choiceImage-regexp-message=L'image doit-\u00EAtre au format JPG, GIF ou PNG.
addChoice-choiceImage-required-message=Vous devez saisir un choix.
+
+
+# Poll creation emails
+#creatorEmail_subject=[Pollen] Cr\u00E9ation d'un sondage (%s)
+#creatorEmail_msg=Vous venez de cr\u00E9er le sondage "%s".\nVous pouvez y acc\u00E9der en suivant les liens ci-dessous.\n\nPage de vote : \n%s\nPage de modification : \n%s
+#votingEmail_subject=[Pollen] Invitation au vote (%s)
+#votingEmail_msg=Un nouveau sondage a \u00E9t\u00E9 cr\u00E9\u00E9 : "%s".\nVous pouvez y participer avec l'identifiant %s \u00E0 l'adresse suivante : \n%s
+
+# Notification emails
+#voteEmail_subject=[Pollen] Notification de vote (%s)
+#voteEmail_msg=Un vote vient d'\u00EAtre enregistr\u00E9 pour le sondage "%s". Ce sondage compte d\u00E9sormais %d votes.\nVous pouvez acc\u00E9der \u00E0 ce sondage en suivant les liens ci-dessous.\n\nPage de vote : \n%s\nPage de modification : \n%s
+
+# Reminder emails
+#reminderEmail_subject=[Pollen] Rappel (%s)
+#reminderEmail_msg=Vous n'avez pas encore vot\u00E9 pour le sondage "%s".\nVous pouvez encore y participer avec l'identifiant %s \u00E0 l'adresse suivante : \n%s
+
+# Poll feed
+#pollFeed_title=Pollen : %s
+#pollFeed_desc=%s
+#pollFeed_createTitle=Sondage cr\u00E9\u00E9 par %s
+#pollFeed_createContent=
+#pollFeed_voteTitle=Nouveau vote de %s
+#pollFeed_voteContent=\u00C9tat du sondage : %s
+#pollFeed_choiceTitle=Nouveau choix : %s
+#pollFeed_choiceContent=%s
+#pollFeed_commentTitle=Nouveau commentaire de %s
+#pollFeed_commentContent=%s
+
+# Actions
+#create=Cr\u00E9er
+#edit=Modifier
+#delete=Supprimer
+#add=Ajouter
+#save=Enregistrer
+#load=Charger
+#ok=Ok
+#validate=Valider
+#cancel=Annuler
+#return=Retour
+#help=Aide
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border.tml
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border.tml 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border.tml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -101,13 +101,13 @@
</li>
<t:if test="userExists">
<li>
- <t:pagelink t:page="user/UserPollsCreated">${message:createdPolls}</t:pagelink>
+ <t:pagelink t:page="user/pollsCreated">${message:createdPolls}</t:pagelink>
</li>
<li>
- <t:pagelink t:page="user/UserPollsParticipated">${message:participatedPolls}</t:pagelink>
+ <t:pagelink t:page="user/pollsParticipated">${message:participatedPolls}</t:pagelink>
</li>
<li>
- <t:pagelink t:page="user/UserLists">${message:votingLists}</t:pagelink>
+ <t:pagelink t:page="user/lists">${message:votingLists}</t:pagelink>
</li>
</t:if>
</ul>
@@ -122,10 +122,10 @@
<div class="top_left${pageLogo}"></div>
<ul class ="top_middle${pageLogo}">
<li>
- <t:pagelink t:page="admin/PollsAdmin">${message:pollsAdmin}</t:pagelink>
+ <t:pagelink t:page="admin/polls">${message:pollsAdmin}</t:pagelink>
</li>
<li>
- <t:pagelink t:page="admin/UsersAdmin">${message:usersAdmin}</t:pagelink>
+ <t:pagelink t:page="admin/users">${message:usersAdmin}</t:pagelink>
</li>
</ul>
</div>
@@ -159,9 +159,21 @@
<t:feedback t:id="errorJs" />
</noscript>
<t:feedback t:id="borderFeedback" t:autoClear="false"/>
- <t:if t:test="canDisplayBody()">
+ <t:delegate t:to="activeBlock" />
+ <t:block t:id="loginBlock">
+ <t:LoginComponent />
+ </t:block>
+ <t:block t:id="pageBlock">
<t:body />
- </t:if>
+ </t:block>
+ <!--<t:if t:test="needAuthentification">
+ <t:LoginComponent />
+ <p:else>
+ <t:if t:test="canDisplayBody()">
+ <t:body />
+ </t:if>
+ </p:else>
+ </t:if>-->
</div>
</div>
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border_fr.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border_fr.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -11,8 +11,8 @@
createdPolls=Sondages cr\u00E9\u00E9s
participatedPolls=Sondages particip\u00E9s
votingLists=Listes de votants
-pollsAdmin=G\u00E9rer les sondages
-usersAdmin=G\u00E9rer les utilisateurs
+pollsAdmin=Sondages
+usersAdmin=Utilisateurs
account=Mon compte
logout=D\u00E9connexion
or=ou
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_en.properties (from rev 2972, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_en.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_en.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_en.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,4 @@
+title=Polls administration
+noUser=You must be logged to access polls administration.\n Please fill the form below.
+userNotAllowed=You are not allowed to access this page.
+noPolls=No poll exists.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_en.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_fr.properties (from rev 2972, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_fr.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_fr.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_fr.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,4 @@
+title=Gestion des sondages
+noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir administrer les sondages.\n Veuillez remplir le formulaire ci-dessous.
+userNotAllowed=Vous n'\u00EAtes pas autoris\u00E9 \u00E0 acc\u00E9der \u00E0 cette page.
+noPolls=Aucun sondage existant.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminPolls_fr.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_en.properties (from rev 2972, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_en.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_en.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_en.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,23 @@
+title=Users administration
+noUser=You must be logged to access users administration.\n Please fill the form below.
+userNotAllowed=You are not allowed to access this page.
+noPolls=No user exists.
+userCreated=User %s created.
+userNotCreated=Error in creating user %s.
+userUpdated=User %s updated.
+userNotUpdated=Error in updating user %s.
+userDeleted=User %s deleted.
+userNotDeleted=Error in deleting user %s.
+dataSaved=Data saved.
+
+#grid
+login-label=Login
+firstName-label=First Name
+lastName-label=Last Name
+email-label=Email
+administrator-label=Admin
+addUser=Add user
+
+login-required-message=You must provide a username.
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Invalid email.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_en.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties (from rev 2972, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_fr.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,25 @@
+#title=Gestion des utilisateurs
+
+
+#noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir administrer les utilisateurs.\n Veuillez remplir le formulaire ci-dessous.
+#userNotAllowed=Vous n'\u00EAtes pas autoris\u00E9 \u00E0 acc\u00E9der \u00E0 cette page.
+#noPolls=Aucun utilisateur existant.
+#userCreated=L'utilisateur %s a \u00E9t\u00E9 cr\u00E9\u00E9.
+#userNotCreated=Erreur lors de la cr\u00E9ation de l'utilisateur %s.
+#userUpdated=L'utilisateur %s a \u00E9t\u00E9 mis \u00E0 jour.
+#userNotUpdated=Erreur lors de la mise \u00E0 jour de l'utilisateur %s.
+#userDeleted=L'utilisateur %s a \u00E9t\u00E9 supprim\u00E9.
+#userNotDeleted=Erreur lors de la suppression de l'utilisateur %s.
+#dataSaved=Les donn\u00E9es ont \u00E9t\u00E9 enregistr\u00E9es.
+#
+##grid
+#login-label=Identifiant
+#firstName-label=Pr\u00E9nom
+#lastName-label=Nom
+#email-label=Email
+#administrator-label=Admin
+#addUser=Ajouter un utilisateur
+#
+#login-required-message=Vous devez fournir un identifiant.
+#email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+#email-regexp-message=Email invalide.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/AdminUsers_fr.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_en.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_en.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_en.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,4 +0,0 @@
-title=Polls administration
-noUser=You must be logged to access polls administration.\n Please fill the form below.
-userNotAllowed=You are not allowed to access this page.
-noPolls=No poll exists.
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_fr.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/PollsAdmin_fr.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,4 +0,0 @@
-title=Gestion des sondages
-noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir administrer les sondages.\n Veuillez remplir le formulaire ci-dessous.
-userNotAllowed=Vous n'\u00EAtes pas autoris\u00E9 \u00E0 acc\u00E9der \u00E0 cette page.
-noPolls=Aucun sondage existant.
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_en.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_en.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_en.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,23 +0,0 @@
-title=Users administration
-noUser=You must be logged to access users administration.\n Please fill the form below.
-userNotAllowed=You are not allowed to access this page.
-noPolls=No user exists.
-userCreated=User %s created.
-userNotCreated=Error in creating user %s.
-userUpdated=User %s updated.
-userNotUpdated=Error in updating user %s.
-userDeleted=User %s deleted.
-userNotDeleted=Error in deleting user %s.
-dataSaved=Data saved.
-
-#grid
-login-label=Login
-firstName-label=First Name
-lastName-label=Last Name
-email-label=Email
-administrator-label=Admin
-addUser=Add user
-
-login-required-message=You must provide a username.
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Invalid email.
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_fr.properties 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/admin/UsersAdmin_fr.properties 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,23 +0,0 @@
-title=Gestion des utilisateurs
-noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir administrer les utilisateurs.\n Veuillez remplir le formulaire ci-dessous.
-userNotAllowed=Vous n'\u00EAtes pas autoris\u00E9 \u00E0 acc\u00E9der \u00E0 cette page.
-noPolls=Aucun utilisateur existant.
-userCreated=L'utilisateur %s a \u00E9t\u00E9 cr\u00E9\u00E9.
-userNotCreated=Erreur lors de la cr\u00E9ation de l'utilisateur %s.
-userUpdated=L'utilisateur %s a \u00E9t\u00E9 mis \u00E0 jour.
-userNotUpdated=Erreur lors de la mise \u00E0 jour de l'utilisateur %s.
-userDeleted=L'utilisateur %s a \u00E9t\u00E9 supprim\u00E9.
-userNotDeleted=Erreur lors de la suppression de l'utilisateur %s.
-dataSaved=Les donn\u00E9es ont \u00E9t\u00E9 enregistr\u00E9es.
-
-#grid
-login-label=Identifiant
-firstName-label=Pr\u00E9nom
-lastName-label=Nom
-email-label=Email
-administrator-label=Admin
-addUser=Ajouter un utilisateur
-
-login-required-message=Vous devez fournir un identifiant.
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Email invalide.
\ No newline at end of file
Copied: trunk/pollen-ui/src/main/webapp/admin/AdminPolls.tml (from rev 2972, trunk/pollen-ui/src/main/webapp/admin/PollsAdmin.tml)
===================================================================
--- trunk/pollen-ui/src/main/webapp/admin/AdminPolls.tml (rev 0)
+++ trunk/pollen-ui/src/main/webapp/admin/AdminPolls.tml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,50 @@
+
+<t:border t:address="address" t:pageLogo="literal:Index"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+
+ <t:feedback t:id="feedback"/>
+ <t:if test="userExists">
+ <t:if test="user.administrator">
+ <h1 class="titleIndex">${message:title}</h1>
+
+ <t:grid t:id="pollsGrid" t:source="polls" t:row="poll" model="pollsModel" t:inPlace="true"
+ t:rowsPerPage="10" t:pagerPosition="bottom" t:rowClass="prop:evenodd.next">
+ <p:functionsCell>
+ <t:PageLink t:page="poll/VoteForPoll" t:context="poll.pollId">
+ <img src="${asset:context:img/vote.png}" title="${message:vote-help}" alt="${message:vote}" />
+ </t:PageLink>
+ <t:PageLink t:page="poll/results" t:context="adminId">
+ <img src="${asset:context:img/count.png}" title="${message:count-help}" alt="${message:count}" />
+ </t:PageLink>
+
+ <t:unless test="poll.isClosed()">
+ <t:PageLink t:page="poll/modification" t:context="adminId">
+ <img src="${asset:context:img/edit.png}" title="${message:edit-help}" alt="${message:edit}" />
+ </t:PageLink>
+ <t:ActionLink t:id="close" t:context="poll.pollId">
+ <img src="${asset:context:img/close.png}" title="${message:close-help}" alt="${message:close}" />
+ </t:ActionLink>
+ </t:unless>
+
+ <t:ActionLink t:id="export" t:context="poll.pollId">
+ <img src="${asset:context:img/export.png}" title="${message:export-help}" alt="${message:export}" />
+ </t:ActionLink>
+ <t:PageLink t:page="poll/creation" t:context="poll.pollId">
+ <img src="${asset:context:img/copy.png}" title="${message:copy-help}" alt="${message:copy}" />
+ </t:PageLink>
+ <t:ActionLink t:id="deletePoll" t:context="poll.pollId">
+ <img src="${asset:context:img/delete.png}" title="${message:delete-help}" alt="${message:delete}" />
+ </t:ActionLink>
+ </p:functionsCell>
+ <p:empty>
+ ${message:noPolls}
+ </p:empty>
+ </t:grid>
+
+ </t:if>
+ <p:else>
+ <h4>${message:noUser}</h4>
+ <t:LoginComponent />
+ </p:else>
+ </t:if>
+</t:border>
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/webapp/admin/AdminPolls.tml
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml (from rev 2972, trunk/pollen-ui/src/main/webapp/admin/UsersAdmin.tml)
===================================================================
--- trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml (rev 0)
+++ trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<t:border t:addressBar="addressBar" t:pageLogo="literal:Index" t:pageTitle="prop:title"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+
+ <h1 class="titleIndex">${title}</h1>
+
+ <t:zone t:id="usersZone" t:update="show">
+ <t:form t:id="usersForm" t:zone="usersZone">
+ <t:if t:test="accountEdited">
+ <input t:type="hidden" value="accountEdited.login" />
+ </t:if>
+ <t:errors />
+ <div t:type="grid" t:source="accounts" t:row="account"
+ t:include="login, firstName, lastName, email, admin" t:add="actions" t:rowsPerPage="20">
+ <p:firstNameCell>
+ <t:if t:test="editionMode">
+ <input t:type="textfield" t:id="firstName" value="accountEdited.firstName" />
+ <p:else>${account.firstName}</p:else>
+ </t:if>
+ </p:firstNameCell>
+ <p:lastNameCell>
+ <t:if t:test="editionMode">
+ <input t:type="textfield" t:id="lastName" value="accountEdited.lastName" />
+ <p:else>${account.lastName}</p:else>
+ </t:if>
+ </p:lastNameCell>
+ <p:emailCell>
+ <t:if t:test="editionMode">
+ <input t:type="textfield" t:id="email" value="accountEdited.email" t:validate="regexp" />
+ <p:else>${account.email}</p:else>
+ </t:if>
+ </p:emailCell>
+ <p:adminCell>
+ <t:if t:test="editionMode">
+ <input t:type="checkbox" t:id="admin" value="accountEdited.admin" disabled="accountConnected" />
+ <!-- Keep the admin value, the disabled checkbox is not saved in form submission -->
+ <t:if t:test="accountConnected">
+ <input t:type="hidden" value="accountEdited.admin" />
+ </t:if>
+ <p:else>
+ <t:if t:test="account.admin">X</t:if>
+ </p:else>
+ </t:if>
+ </p:adminCell>
+ <p:actionsCell>
+ <t:if t:test="editionMode">
+ <a t:type="pagelink" t:page="admin/users" t:id="cancelEdition">
+ <img src="${asset:context:img/undo.png}" alt="Cancel" title="${message:pollen.ui.user.update.cancel}" />
+ </a>
+ <input t:type="submit" class="ico save" t:id="save" value="Save" title="${message:pollen.ui.user.update.save}" />
+ <p:else>
+ <a t:type="actionlink" t:id="editAccount" t:context="account.login" t:zone="usersZone">
+ <img src="${asset:context:img/editSmall.png}" alt="Edit" title="${message:pollen.ui.user.update.edit}" />
+ </a>
+ <a t:type="actionlink" t:id="deleteAccount" t:context="account.login"
+ t:mixins="confirm" t:message="pollen.ui.user.delete.confirmMessage">
+ <img src="${asset:context:img/delete.png}" alt="Delete" title="${message:pollen.ui.user.delete}"/>
+ </a>
+ </p:else>
+ </t:if>
+ </p:actionsCell>
+ </div>
+ </t:form>
+ </t:zone>
+ <t:zone t:id="newUserZone" t:update="show">
+ <h2>${message:pollen.ui.user.create.title}</h2>
+ <form t:type="form" t:id="newUserForm" action="tapestry">
+ <p><t:errors /></p>
+ <p class="center">
+ <label t:type="label" for="newLogin">${message:login-label}</label>* :
+ <input t:type="textfield" t:id="newLogin" value="newUser.login" t:validate="required" />
+ <label t:type="label" for="newEmail">${message:email-label}</label> :
+ <input t:type="textfield" t:id="newEmail" value="newUser.email" t:validate="regexp" />
+ <input t:type="submit" value="${message:pollen.ui.user.create}" title="${message:pollen.ui.user.create.title}" />
+ </p>
+ </form>
+ </t:zone>
+</t:border>
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/webapp/admin/AdminUsers.tml
___________________________________________________________________
Added: svn:mergeinfo
+
Deleted: trunk/pollen-ui/src/main/webapp/admin/PollsAdmin.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/admin/PollsAdmin.tml 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/webapp/admin/PollsAdmin.tml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,50 +0,0 @@
-
-<t:border t:address="address" t:pageLogo="literal:Index"
- xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
-
- <t:feedback t:id="feedback"/>
- <t:if test="userExists">
- <t:if test="user.administrator">
- <h1 class="titleIndex">${message:title}</h1>
-
- <t:grid t:id="pollsGrid" t:source="polls" t:row="poll" model="pollsModel" t:inPlace="true"
- t:rowsPerPage="10" t:pagerPosition="bottom" t:rowClass="prop:evenodd.next">
- <p:functionsCell>
- <t:PageLink t:page="poll/VoteForPoll" t:context="poll.pollId">
- <img src="${asset:context:img/vote.png}" title="${message:vote-help}" alt="${message:vote}" />
- </t:PageLink>
- <t:PageLink t:page="poll/results" t:context="adminId">
- <img src="${asset:context:img/count.png}" title="${message:count-help}" alt="${message:count}" />
- </t:PageLink>
-
- <t:unless test="poll.isClosed()">
- <t:PageLink t:page="poll/modification" t:context="adminId">
- <img src="${asset:context:img/edit.png}" title="${message:edit-help}" alt="${message:edit}" />
- </t:PageLink>
- <t:ActionLink t:id="close" t:context="poll.pollId">
- <img src="${asset:context:img/close.png}" title="${message:close-help}" alt="${message:close}" />
- </t:ActionLink>
- </t:unless>
-
- <t:ActionLink t:id="export" t:context="poll.pollId">
- <img src="${asset:context:img/export.png}" title="${message:export-help}" alt="${message:export}" />
- </t:ActionLink>
- <t:PageLink t:page="poll/creation" t:context="poll.pollId">
- <img src="${asset:context:img/copy.png}" title="${message:copy-help}" alt="${message:copy}" />
- </t:PageLink>
- <t:ActionLink t:id="deletePoll" t:context="poll.pollId">
- <img src="${asset:context:img/delete.png}" title="${message:delete-help}" alt="${message:delete}" />
- </t:ActionLink>
- </p:functionsCell>
- <p:empty>
- ${message:noPolls}
- </p:empty>
- </t:grid>
-
- </t:if>
- <p:else>
- <h4>${message:noUser}</h4>
- <t:LoginComponent />
- </p:else>
- </t:if>
-</t:border>
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/webapp/admin/UsersAdmin.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/admin/UsersAdmin.tml 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/webapp/admin/UsersAdmin.tml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -1,76 +0,0 @@
-
-<t:border t:address="address" t:pageLogo="literal:Index"
- xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
-
- <t:feedback t:id="feedback"/>
- <t:if test="userExists">
- <t:if test="user.administrator">
- <h1 class="titleIndex">${message:title}</h1>
-
- <t:form t:id="usersForm">
- <t:errors />
-
- <div class="t-data-grid">
- <table class="t-data-grid">
- <thead>
- <tr>
- <th>${message:login-label}</th>
- <th>${message:firstName-label}</th>
- <th>${message:lastName-label}</th>
- <th>${message:email-label}</th>
- <th>${message:administrator-label}</th>
- <th></th>
- </tr>
- </thead>
- <tbody>
- <tr t:type="ajaxformloop" t:id="usersLoop" source="accounts" value="account" encoder="userEncoder">
- <t:unless test="account.login">
- <td>
- <t:textfield t:id="login" value="account.login" size="15" t:validate="required"/>
- </td>
- <p:else>
- <td align="left">${account.login}</td>
- </p:else>
- </t:unless>
- <td>
- <t:textfield t:id="firstName" value="account.firstName" size="15"/>
- </td>
- <td>
- <t:textfield t:id="lastName" value="account.lastName" size="15"/>
- </td>
- <td>
- <t:textfield t:id="email" value="account.email" size="20" t:validate="required, regexp"/>
- </td>
- <td>
- <t:checkbox t:id="administrator" value="account.administrator" disabled="myAccount"/>
- </td>
- <td>
- <t:unless test="myAccount">
- <t:removerowlink>
- <img src="${asset:context:img/delete.png}" alt="${message:delete}"/>
- </t:removerowlink>
- </t:unless>
- </td>
- <t:parameter name="addRow">
- <td colspan="6" style="text-align: center">
- <t:addrowlink>${message:addUser}</t:addrowlink>
- </td>
- </t:parameter>
- </tr>
- </tbody>
- </table>
- </div>
-
- <div class="center">
- <input type="submit" value="${message:save}" style="text-align:center"/>
- </div>
-
- </t:form>
-
- </t:if>
- <p:else>
- <h4>${message:noUser}</h4>
- <t:LoginComponent />
- </p:else>
- </t:if>
-</t:border>
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/webapp/css/common.css
===================================================================
--- trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-23 17:09:22 UTC (rev 2973)
@@ -62,3 +62,16 @@
text-align: center;
}
+input.ico {
+ border: 0 none;
+ font-size: 0;
+ width: 16px;
+ height: 16px;
+ cursor: pointer;
+ vertical-align: top;
+}
+
+input.save {
+ background: url(../img/save.png) no-repeat center center;
+}
+
Added: trunk/pollen-ui/src/main/webapp/img/save.png
===================================================================
(Binary files differ)
Property changes on: trunk/pollen-ui/src/main/webapp/img/save.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/pollen-ui/src/main/webapp/img/undo.png
===================================================================
(Binary files differ)
Property changes on: trunk/pollen-ui/src/main/webapp/img/undo.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-20 14:05:44 UTC (rev 2972)
+++ trunk/pom.xml 2010-04-23 17:09:22 UTC (rev 2973)
@@ -309,11 +309,11 @@
<!-- customized versions -->
<!--javadoc.version>2.4</javadoc.version-->
- <topia.version>2.3.3-SNAPSHOT</topia.version>
- <eugene.version>2.0.1-SNAPSHOT</eugene.version>
+ <topia.version>2.4-SNAPSHOT</topia.version>
+ <eugene.version>2.0.1</eugene.version>
<i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
- <nuiton-utils.version>1.2.2-SNAPSHOT</nuiton-utils.version>
+ <nuiton-utils.version>1.2.2</nuiton-utils.version>
<processor.version>1.0.2</processor.version>
<!--Multilanguage maven-site -->
1
0
Author: tchemit
Date: 2010-04-20 16:05:44 +0200 (Tue, 20 Apr 2010)
New Revision: 2972
Log:
Utilisation de mavenpom4redmine 2.1.2
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-11 22:04:47 UTC (rev 2971)
+++ trunk/pom.xml 2010-04-20 14:05:44 UTC (rev 2972)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.0.7</version>
+ <version>2.1.2</version>
</parent>
<groupId>org.chorem</groupId>
1
0
Author: fdesbois
Date: 2010-04-12 00:04:47 +0200 (Mon, 12 Apr 2010)
New Revision: 2971
Log:
Improve some rules for sonar + change db mode to create for tests
Added:
trunk/pollen-business/src/test/resources/PollenTest.properties
Removed:
trunk/pollen-business/src/test/resources/pollen.properties
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -21,14 +21,14 @@
protected Object[] args;
- public PollenBusinessException(PollenExceptionType type) {
+ public PollenBusinessException(PollenExceptionType type, Object... args) {
super(type.getMessage());
+ this.args = args;
this.type = type;
}
- public PollenBusinessException(PollenExceptionType type, Object... args) {
- super(type.getMessage());
- this.args = args;
+ public PollenBusinessException(Throwable exception, PollenExceptionType type, Object... args) {
+ super(type.getMessage(), exception);
this.type = type;
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -5,13 +5,8 @@
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-//import org.chorem.pollen.PollenDAOHelper;
-//import org.chorem.pollen.business.services.SendMail;
-//import org.chorem.pollen.business.services.ServiceUserImpl;
import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
@@ -50,16 +45,7 @@
/** Conversion service for services **/
// private PollenConverter converter;
-
- public PollenContextImpl() {
-
- }
-
- @Override
- public void finalize() {
- stop();
- }
-
+
/**
* Default configuration file will be loaded using
* {@link org.nuiton.util.ApplicationConfig }.
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -47,9 +47,9 @@
/** Charset of Pollen **/
CHARSET("pollen.charset");
- String key;
+ private String key;
- static PollenContext context;
+ private static PollenContext context;
PollenProperty(String key) {
this.key = key;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. ##%*/
-package org.chorem.pollen.business.utils;
+package org.chorem.pollen.mail;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -22,7 +22,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.chorem.pollen.business.utils.MailUtil;
import org.chorem.pollen.entity.PreventRule;
/**
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -29,7 +29,6 @@
import java.util.Map;
import org.apache.commons.io.FileUtils;
-import org.chorem.pollen.business.utils.MailUtil;
import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -82,7 +82,7 @@
if (log.isErrorEnabled()) {
log.error("Error on email send", eee);
}
- throw new PollenBusinessException(
+ throw new PollenBusinessException(eee,
PollenExceptionType.SMTP_NOT_AVAILABLE,
pollenEmail.getTo());
}
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -43,7 +43,7 @@
log.info("## START ## : " + dbname);
InputStream input = TestManager.class.
- getResourceAsStream("/pollen.properties");
+ getResourceAsStream("/PollenTest.properties");
Properties options = new Properties();
options.load(input);
Copied: trunk/pollen-business/src/test/resources/PollenTest.properties (from rev 2966, trunk/pollen-business/src/test/resources/pollen.properties)
===================================================================
--- trunk/pollen-business/src/test/resources/PollenTest.properties (rev 0)
+++ trunk/pollen-business/src/test/resources/PollenTest.properties 2010-04-11 22:04:47 UTC (rev 2971)
@@ -0,0 +1,12 @@
+hibernate.hbm2ddl.auto=create
+hibernate.show_sql=false
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.connection.username=sa
+hibernate.connection.password=
+hibernate.connection.driver_class=org.h2.Driver
+hibernate.connection.url=jdbc:h2:file:target/test-base/pollen
+
+adminLogin=admin
+adminPassword=admin
+
+pollen.emails.directory=target/test-emails
\ No newline at end of file
Property changes on: trunk/pollen-business/src/test/resources/PollenTest.properties
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mergeinfo
+
Deleted: trunk/pollen-business/src/test/resources/pollen.properties
===================================================================
--- trunk/pollen-business/src/test/resources/pollen.properties 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/test/resources/pollen.properties 2010-04-11 22:04:47 UTC (rev 2971)
@@ -1,17 +0,0 @@
-# Configuration de la base de donn\u00C3\u00A9es
-hibernate.hbm2ddl.auto=update
-hibernate.show_sql=false
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.connection.username=sa
-hibernate.connection.password=
-hibernate.connection.driver_class=org.h2.Driver
-hibernate.connection.url=jdbc:h2:file:target/test-base/pollen
-
-# Initialisation de la base de donn\u00C3\u00A9es
-choiceType=DATE,IMAGE,TEXT
-pollType=RESTRICTED,FREE,GROUP
-voteCounting=NORMAL,PERCENTAGE,CONDORCET
-adminLogin=admin
-adminPassword=admin
-
-pollen.emails.directory=target/test-emails
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -23,7 +23,7 @@
*
* @return a String contextPath
*/
- public String getContextPath() ;
+ String getContextPath() ;
/**
* Get a file from context with name defined by filename.
@@ -31,5 +31,5 @@
* @param filename name of the file to get
* @return a File with absolutePath corresponding to contextPath + filename
*/
- public File getFile(String filename) ;
+ File getFile(String filename) ;
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -76,30 +76,30 @@
/** titre du diagramme */
@Parameter
- private String _title = "";
+ private String title = "";
/** type de représentation du diagramme */
@Parameter(required = true)
- private int _type;
+ private int type;
@Parameter(required = true)
- private int _width;
+ private int width;
@Parameter(required = true)
- private int _height;
+ private int height;
/**
* list(array) of paired values(label,value):
* [String,Number,String,Number,...]
*/
@Parameter(required = true)
- private List<Object> _values;
+ private List<Object> values;
@Parameter(required = false)
- private List<Object> _subtitles;
+ private List<Object> subtitles;
@Inject
- private ComponentResources _resources;
+ private ComponentResources resources;
@Inject
private TypeCoercer typeCoercer;
@@ -107,23 +107,23 @@
void beginRender(MarkupWriter writer) {
// event link params
- Object[] params = new Object[] { _title, _type, _width, _height };
+ Object[] params = new Object[] { title, type, width, height };
- if (_subtitles != null) {
- Object[] size = new Object[] { _subtitles.size() };
+ if (subtitles != null) {
+ Object[] size = new Object[] { subtitles.size() };
params = ArrayUtil.concat(params, size);
- params = ArrayUtil.concat(params, _subtitles.toArray());
+ params = ArrayUtil.concat(params, subtitles.toArray());
} else {
Object[] size = new Object[] { 0 };
params = ArrayUtil.concat(params, size);
}
- params = ArrayUtil.concat(params, _values.toArray());
+ params = ArrayUtil.concat(params, values.toArray());
// generate event link
- Link link = _resources.createEventLink("chart", params);
+ Link link = resources.createEventLink("chart", params);
Element img = writer.element("img", "src", link);
- _resources.renderInformalParameters(writer);
+ resources.renderInformalParameters(writer);
}
void afterRender(MarkupWriter writer) {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -55,27 +55,27 @@
/** Chemin du fichier */
@Parameter(required = true)
- private String _filename;
+ private String filename;
/** Type MIME du fichier */
@Parameter
- private String _type;
+ private String type;
@Inject
private Logger logger;
@Inject
- private ComponentResources _resources;
+ private ComponentResources resources;
/**
* Context to get the file
*/
@Parameter(required=true)
- private ContextLink _context;
+ private ContextLink context;
@Log
void beginRender(MarkupWriter writer) {
- Link link = _resources.createEventLink("createLink", _filename, _type);
+ Link link = resources.createEventLink("createLink", filename, type);
writeLink(writer, link);
}
@@ -92,7 +92,7 @@
}
//File file = new File(/*_context.getContextPath() + */filename/* + _context.getExtension()*/);
- File file = _context.getFile(filename);
+ File file = context.getFile(filename);
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
@@ -100,7 +100,7 @@
logger.error("Fichier inexistant : " + file.getAbsolutePath(), e);
}
- if (!_resources.isBound("type")) {
+ if (!resources.isBound("type")) {
MimetypesFileTypeMap mimes = new MimetypesFileTypeMap();
type = mimes.getContentType(file);
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -49,19 +49,19 @@
/** Chemin du fichier */
@Parameter(required = true)
- private ContextLink _context;
+ private ContextLink context;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _href;
+ private String href;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _rel;
+ private String rel;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _type;
+ private String type;
@Parameter
- private String _title;
+ private String title;
@Inject
private Logger logger;
@@ -70,9 +70,9 @@
private ComponentResources _resources;
void beginRender(MarkupWriter writer) {
- Link link = _resources.createEventLink("fileLink", _href, _type);
- writer.element("link", "href", link, "rel", _rel, "type", _type,
- "title", _title);
+ Link link = _resources.createEventLink("fileLink", href, type);
+ writer.element("link", "href", link, "rel", rel, "type", type,
+ "title", title);
_resources.renderInformalParameters(writer);
}
@@ -95,7 +95,7 @@
return null;
}
- File file = _context.getFile(href);
+ File file = context.getFile(href);
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -86,14 +86,6 @@
case IMAGE:
setImageFileName(choice.getName());
}
-// setDescription(dto.getDescription());
-// setHidden(dto.getHidden());
-// setTopiaId(dto.getTopiaId());
-// setValidate(dto.getValidate());
-//// setPollUId(dto.getPollUId());
-// setName(dto.getName());
-// //setValue(dto.getValue());
-// //setVoteId(dto.getVoteId());
}
/**
@@ -231,24 +223,6 @@
name = String.valueOf(getDate().getTime());
break;
case IMAGE:
-// // Get directory to save the image using the context from
-// // pollen properties.
-// File dir = new File(PollenProperty.IMG_DIR.getValue(), imageDir);
-// if (!dir.exists()) {
-// dir.mkdirs();
-// }
-// // Save the image file
-// File file = new File(dir, getImageFileName());
-// image.write(file);
-// if (log.isDebugEnabled()) {
-// log.debug("Image saved: " + getImageFileName() +
-// " (size=" + image.getSize() + ")");
-// }
-// // Create image thumbnail
-// ImageUtil.createThumbnail(dir, file, 100);
-// if (log.isDebugEnabled()) {
-// log.debug("save name for image : " + file.getName());
-// }
name = serviceImage.saveImage(getImage(), getImageDir());
break;
case TEXT:
@@ -261,22 +235,22 @@
choice.setName(name);
}
- public void setDescription(String description) {
- choice.setDescription(description);
- }
-
- public void setChoiceType(ChoiceType choiceType) {
- choice.setChoiceType(choiceType);
- }
-
public String getName() {
return choice.getName();
}
+ public void setDescription(String description) {
+ choice.setDescription(description);
+ }
+
public String getDescription() {
return choice.getDescription();
}
+ public void setChoiceType(ChoiceType choiceType) {
+ choice.setChoiceType(choiceType);
+ }
+
public ChoiceType getChoiceType() {
return choice.getChoiceType();
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -42,6 +42,7 @@
* in your page to ge the {@link PropertyAccess} service.<br>
* !Notice: you must set the created instance both as model and encoder
* parameter for the {@link Select} component.
+ * @param <T>
*/
public class GenericSelectModel<T> extends AbstractSelectModel implements
ValueEncoder<T> {
@@ -53,18 +54,22 @@
public GenericSelectModel(List<T> list, Class<T> clazz, String labelField,
String idField, PropertyAccess access) {
this.list = list;
- if (idField != null)
- this.idFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(
- idField);
- if (labelField != null)
- this.labelFieldAdapter = access.getAdapter(clazz)
- .getPropertyAdapter(labelField);
+ if (idField != null) {
+ this.idFieldAdapter =
+ access.getAdapter(clazz).getPropertyAdapter(idField);
+ }
+ if (labelField != null) {
+ this.labelFieldAdapter =
+ access.getAdapter(clazz).getPropertyAdapter(labelField);
+ }
}
+ @Override
public List<OptionGroupModel> getOptionGroups() {
return null;
}
+ @Override
public List<OptionModel> getOptions() {
List<OptionModel> optionModelList = new ArrayList<OptionModel>();
if (labelFieldAdapter == null) {
@@ -86,6 +91,7 @@
// ValueEncoder methods
+ @Override
public String toClient(T obj) {
if (idFieldAdapter == null) {
return obj + "";
@@ -94,25 +100,30 @@
}
}
+ @Override
public T toValue(String string) {
if (idFieldAdapter == null) {
for (T obj : list) {
- if (nvl(obj).equals(string))
+ if (nvl(obj).equals(string)) {
return obj;
+ }
}
} else {
for (T obj : list) {
- if (nvl(idFieldAdapter.get(obj)).equals(string))
+ if (nvl(idFieldAdapter.get(obj)).equals(string)) {
return obj;
+ }
}
}
return null;
}
private String nvl(Object o) {
- if (o == null)
+ if (o == null) {
return "";
- else
+ }
+ else {
return o.toString();
+ }
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -39,7 +39,8 @@
private static final int THUMB_WIDTH = 100;
- private static final Logger logger = LoggerFactory.getLogger(ServiceImageImpl.class);
+ private static final Logger logger =
+ LoggerFactory.getLogger(ServiceImageImpl.class);
private PollenContext context;
@@ -76,7 +77,8 @@
}
@Override
- public StreamResponse createImageStream(String filename, String filedir, boolean thumb) {
+ public StreamResponse createImageStream(String filename, String filedir,
+ boolean thumb) {
// security : src containing .. are filtered, to not access to full system
if (StringUtils.isEmpty(filename) || filename.contains("..")) {
return null;
1
0
r2970 - in trunk/pollen-business/src/main/java/org/chorem/pollen: . service
by fdesbois@users.chorem.org 09 Apr '10
by fdesbois@users.chorem.org 09 Apr '10
09 Apr '10
Author: fdesbois
Date: 2010-04-10 01:38:58 +0200 (Sat, 10 Apr 2010)
New Revision: 2970
Log:
improve javadoc
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:28:55 UTC (rev 2969)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:38:58 UTC (rev 2970)
@@ -33,12 +33,17 @@
}
public enum PollenExceptionType {
- //LOAD_CONFIGURATION(n_("pollen.exception.load_configuration")),
+ /** Exception when poll is not found in data **/
POLL_NOT_EXIST(n_("pollen.exception.poll_not_exist")),
+ /** Exception when user login exists in data **/
USER_LOGIN_EXIST(n_("pollen.exception.user_login_exist")),
+ /** Exception when user email exists in data **/
USER_EMAIL_EXIST(n_("pollen.exception.user_email_exist")),
+ /** Exception when user is not found in data **/
USER_NOT_EXIST(n_("pollen.exception.user_not_exist")),
+ /** Exception when password is not valid for some user **/
USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password")),
+ /** Exception when stmp server is not available **/
SMTP_NOT_AVAILABLE(n_("pollen.exception.smtp_not_available"));
private String message;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
@@ -86,7 +86,7 @@
* @param login to check
* @param password to check
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_WRONG_PASSWORD
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_WRONG_PASSWORD}
*/
protected void checkPassword(UserAccountDAO dao, String login,
String password) throws TopiaException, PollenBusinessException {
@@ -107,7 +107,7 @@
* @param dao used to execute the query
* @param login to check
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_LOGIN_EXIST
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_LOGIN_EXIST}
*/
protected void checkLoginNotExist(UserAccountDAO dao, String login)
throws PollenBusinessException, TopiaException {
@@ -129,7 +129,7 @@
* @param query existing query to execute. A new one will be created if this
* param is null.
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_EMAIL_EXIST
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_EMAIL_EXIST}
*/
protected void checkEmailNotExist(UserAccountDAO dao, String email,
TopiaQuery query) throws PollenBusinessException, TopiaException {
1
0
Author: fdesbois
Date: 2010-04-10 01:28:55 +0200 (Sat, 10 Apr 2010)
New Revision: 2969
Log:
- Remove PropertiesFileSymbolProvider, PollenManager provide this service
- PollenContext is no longer a service to Inject, PollenManager contains the context and can be injected
- Change EmailException to PollenBusinessException to show correct message on smtp error
- Implements updateUser for UserProfile page + add method for validations
- Improve tests and password managment (no more encoding in UI, add newPassword getter/setter in UserAccount)
Added:
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties
trunk/pollen-ui/src/main/webapp/user/UserProfile.tml
Removed:
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties
trunk/pollen-ui/src/main/webapp/user/Account.tml
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
trunk/pollen-business/src/main/xmi/pollen.properties
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
trunk/pollen-business/src/test/resources/log4j.properties
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
trunk/pollen-ui/src/main/resources/log4j.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties
trunk/pollen-ui/src/main/webapp/css/common.css
trunk/pollen-ui/src/main/webapp/user/UserRegister.tml
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -38,7 +38,8 @@
USER_LOGIN_EXIST(n_("pollen.exception.user_login_exist")),
USER_EMAIL_EXIST(n_("pollen.exception.user_email_exist")),
USER_NOT_EXIST(n_("pollen.exception.user_not_exist")),
- USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password"));
+ USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password")),
+ SMTP_NOT_AVAILABLE(n_("pollen.exception.smtp_not_available"));
private String message;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -120,7 +120,7 @@
try {
if (log.isInfoEnabled()) {
log.info("Start Pollen");
- log.info("Initialize i18n bundle");
+// log.info("Initialize i18n bundle");
}
I18n.setInitializer(new DefaultI18nInitializer("pollen-business"));
I18n.init();
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,7 +18,30 @@
private static final long serialVersionUID = 1L;
+ protected String newPassword;
+
+ /**
+ * Get the value of newPassword
+ *
+ * @return the value of newPassword
+ */
@Override
+ public String getNewPassword() {
+ return newPassword;
+ }
+
+ /**
+ * Set the value of newPassword
+ *
+ * @param newPassword new value of newPassword
+ */
+ @Override
+ public void setNewPassword(String newPassword) {
+ this.newPassword = newPassword;
+ }
+
+
+ @Override
public void addFavoriteList(PollAccount list) {
throw new UnsupportedOperationException("Not supported yet.");
}
@@ -26,11 +49,13 @@
@Override
public String getDisplayName() {
String name = "";
+ String separator = "";
if (StringUtils.isNotEmpty(getFirstName())) {
name += getFirstName();
+ separator = " ";
}
if (StringUtils.isNotEmpty(getLastName())) {
- name += getLastName();
+ name += separator + getLastName();
}
if (StringUtils.isEmpty(name)) {
name = getLogin();
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -6,6 +6,8 @@
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
+import org.chorem.pollen.PollenBusinessException;
+import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenException;
import org.chorem.pollen.bean.PollenEmail;
@@ -53,27 +55,36 @@
@Override
protected void executeSendEmail(List<Object> errorArgs,
- PollenEmail pollenEmail) throws EmailException {
+ PollenEmail pollenEmail) throws PollenBusinessException {
errorArgs.add(pollenEmail.getHost());
errorArgs.add(pollenEmail.getPort());
errorArgs.add(pollenEmail.getTo());
errorArgs.add(pollenEmail.getFrom());
+ try {
- // Create the SimpleEmail to send
- SimpleEmail email = pollenEmail.createSimpleEmail();
- email.send();
+ // Create the SimpleEmail to send
+ SimpleEmail email = pollenEmail.createSimpleEmail();
+ email.send();
- if (log.isInfoEnabled()) {
- log.info("Mail sent to : " + pollenEmail.getTo());
+ if (log.isInfoEnabled()) {
+ log.info("Mail sent to : " + pollenEmail.getTo());
- if (log.isDebugEnabled()) {
- log.debug("Email infos : " +
- "\ndate: " + email.getSentDate() +
- "\nhostname: " + email.getHostName() +
- "\nport: " + email.getSmtpPort() +
- "\nfrom: " + email.getFromAddress().toString());
+ if (log.isDebugEnabled()) {
+ log.debug("Email infos : " +
+ "\ndate: " + email.getSentDate() +
+ "\nhostname: " + email.getHostName() +
+ "\nport: " + email.getSmtpPort() +
+ "\nfrom: " + email.getFromAddress().toString());
+ }
}
+ } catch (EmailException eee) {
+ if (log.isErrorEnabled()) {
+ log.error("Error on email send", eee);
+ }
+ throw new PollenBusinessException(
+ PollenExceptionType.SMTP_NOT_AVAILABLE,
+ pollenEmail.getTo());
}
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -4,6 +4,8 @@
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
import org.chorem.pollen.PollenContext;
@@ -15,6 +17,8 @@
import org.chorem.pollen.entity.UserAccountImpl;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.framework.TopiaQuery.Op;
/**
* ServiceUserImpl
@@ -29,6 +33,8 @@
*/
public class ServiceUserImpl extends ServiceUserAbstract {
+ private Log log = LogFactory.getLog(ServiceUserImpl.class);
+
private PollenContext context;
public void setContext(PollenContext context) {
@@ -51,12 +57,107 @@
context.closeTransaction(transaction);
}
+ /**
+ * Used to manage the new password of the user. This newPassword will be
+ * encoded then set into the real password.
+ *
+ * @param user to treate
+ * @return true if the newPassword is encoded and set, false otherwise
+ */
+ protected boolean manageNewPassword(UserAccount user) {
+ // Manage password encoding
+ String newPassword = user.getNewPassword();
+ if (StringUtils.isNotEmpty(newPassword)) {
+ user.setPassword(context.encodePassword(newPassword));
+ if (log.isDebugEnabled()) {
+ log.debug("Reset newPassword from UserAccount");
+ }
+ user.setNewPassword(null);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Check if the {@code login} and {@code password} correspond to an
+ * existing user.
+ *
+ * @param dao used to execute the query
+ * @param login to check
+ * @param password to check
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_WRONG_PASSWORD
+ */
+ protected void checkPassword(UserAccountDAO dao, String login,
+ String password) throws TopiaException, PollenBusinessException {
+ int count = dao.createQuery().
+ add(UserAccount.LOGIN, login).
+ add(UserAccount.PASSWORD, password).
+ executeCount();
+ // no user found
+ if (count == 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_WRONG_PASSWORD, login);
+ }
+ }
+
+ /**
+ * Check if the {@code login} doesn't already exist.
+ *
+ * @param dao used to execute the query
+ * @param login to check
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_LOGIN_EXIST
+ */
+ protected void checkLoginNotExist(UserAccountDAO dao, String login)
+ throws PollenBusinessException, TopiaException {
+ int count = dao.createQuery().
+ add(UserAccount.LOGIN, login).
+ executeCount();
+ // existing user found
+ if (count > 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_LOGIN_EXIST);
+ }
+ }
+
+ /**
+ * Check if the {@code email} doesn't already exist, only if not empty.
+ *
+ * @param dao used to execute the query
+ * @param email to check
+ * @param query existing query to execute. A new one will be created if this
+ * param is null.
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_EMAIL_EXIST
+ */
+ protected void checkEmailNotExist(UserAccountDAO dao, String email,
+ TopiaQuery query) throws PollenBusinessException, TopiaException {
+ // Don't check if email is empty
+ if (StringUtils.isEmpty(email)) {
+ return;
+ }
+ if (query == null) {
+ query = dao.createQuery();
+ }
+ int count = query.add(UserAccount.EMAIL, email).
+ executeCount();
+ // existing user found
+ if (count > 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_EMAIL_EXIST);
+ }
+ }
+
@Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
+
+ String encodedPassword = context.encodePassword(password);
+
errorArgs.add(login);
- errorArgs.add(password);
+ errorArgs.add(encodedPassword);
UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
@@ -65,10 +166,8 @@
if (user == null) {
throw new PollenBusinessException(
PollenExceptionType.USER_NOT_EXIST, login);
- } else if (!user.getPassword().equals(password)) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_WRONG_PASSWORD, login);
}
+ checkPassword(dao, login, encodedPassword);
return user;
}
@@ -81,7 +180,7 @@
}
@Override
- protected void executeCreateUpdateUser(TopiaContext transaction,
+ protected void executeCreateUser(TopiaContext transaction,
List<Object> errorArgs, UserAccount user)
throws TopiaException, PollenBusinessException {
@@ -90,27 +189,53 @@
errorArgs.add(user.getAdmin());
UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ // Check login not exist
+ checkLoginNotExist(dao, user.getLogin());
- // New User
- if (StringUtils.isEmpty(user.getTopiaId())) {
- // Check login exist
- UserAccount userFound = dao.findByLogin(user.getLogin());
- if (userFound != null) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_LOGIN_EXIST);
- }
- // Check email exist
- userFound = dao.findByEmail(user.getEmail());
- if (userFound != null) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_EMAIL_EXIST);
- }
- dao.create(user);
- // Update existing user
- } else {
- dao.update(user);
+ // Check email not exist
+ checkEmailNotExist(dao, user.getEmail(), null);
+
+ // Execute create
+ manageNewPassword(user);
+ dao.create(user);
+
+ transaction.commitTransaction();
+ }
+
+
+
+ @Override
+ protected void executeUpdateUser(TopiaContext transaction,
+ List<Object> errorArgs, UserAccount user)
+ throws TopiaException, PollenBusinessException {
+
+ errorArgs.add(user.getLogin());
+ errorArgs.add(user.getEmail());
+ errorArgs.add(user.getAdmin());
+
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ // Check the password
+ String encodedPassword = context.encodePassword(user.getPassword());
+ checkPassword(dao, user.getLogin(), encodedPassword);
+
+ // Change password if needed
+ boolean passwordChanged = manageNewPassword(user);
+ // Otherwise set the encodedPassword to properly save the user
+ if (!passwordChanged) {
+ user.setPassword(encodedPassword);
}
+ // In case of email change, check if an other user has not already
+ // the new email
+ TopiaQuery query = dao.createQuery().
+ add(UserAccount.LOGIN, Op.NEQ, user.getLogin());
+ checkEmailNotExist(dao, user.getEmail(), query);
+
+ // Execute update
+ dao.update(user);
+
transaction.commitTransaction();
}
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -37,6 +37,7 @@
pollen.error.serviceUser.createDefaultAdmin=
pollen.error.serviceUser.createUpdateList=
pollen.error.serviceUser.createUpdateUser=
+pollen.error.serviceUser.createUser=
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
@@ -45,11 +46,13 @@
pollen.error.serviceUser.getNewUser=
pollen.error.serviceUser.getPerson=
pollen.error.serviceUser.getUsers=
+pollen.error.serviceUser.updateUser=
pollen.error.serviceVote.getVote=
pollen.error.serviceVote.getVotesByPoll=Unable to load votes from poll with uid \= %1$s
pollen.error.serviceVote.hasAlreadyVoted=Unable test vote existing for account with votingId \= %1$s and poll with uid \= %2$s
pollen.exception.load_configuration=
pollen.exception.poll_not_exist=No such poll exists. Please make sure that you are using the correct link and copy it completely into your browser's address field.
+pollen.exception.smtp_not_available=
pollen.exception.user_email_exist=
pollen.exception.user_login_exist=
pollen.exception.user_not_exist=
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -36,6 +36,7 @@
pollen.error.serviceUser.createDefaultAdmin=Impossible de cr\u00E9er l'administrateur par d\u00E9faut \: %1$s (%2$s)
pollen.error.serviceUser.createUpdateList=
pollen.error.serviceUser.createUpdateUser=Impossible de cr\u00E9er l'utilisateur '%1$s' <%2$s> (admin \= %$3b)
+pollen.error.serviceUser.createUser=
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
@@ -44,11 +45,13 @@
pollen.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur.
pollen.error.serviceUser.getPerson=
pollen.error.serviceUser.getUsers=
+pollen.error.serviceUser.updateUser=
pollen.error.serviceVote.getVote=
pollen.error.serviceVote.getVotesByPoll=
pollen.error.serviceVote.hasAlreadyVoted=
pollen.exception.load_configuration=La configuration n'a pas \u00E9t\u00E9 charg\u00E9e correctement \! Veuillez v\u00E9rifier le d\u00E9marrage de l'application.
pollen.exception.poll_not_exist=Il n'y a pas de sondage \u00E0 cette adresse. Veuillez verifier que vous utilisez le lien correcte et copiez-le compl\u00E8tement dans le champ d'adresse de votre navigateur.
+pollen.exception.smtp_not_available=Impossible d'envoyer un email \u00E0 %1$s. Serveur smtp indisponible pour l'envoi d'email, veuillez contacter un administrateur.
pollen.exception.user_email_exist=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
pollen.exception.user_login_exist=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet identifiant.
pollen.exception.user_not_exist=L'identifiant '%1$s' ne correspond \u00E0 aucun utilisateur connu.
Modified: trunk/pollen-business/src/main/xmi/pollen.properties
===================================================================
--- trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -3,5 +3,6 @@
#model.tagvalue.dbSchema=Pollen
model.tagvalue.java.lang.String=text
model.tagvalue.exceptionClass=org.chorem.pollen.PollenException
-#org.chorem.pollen.business.persistence.PollAccount.attribute.accountId.tagvalue.naturalId=true
-#org.chorem.pollen.business.persistence.Poll.attribute.pollId.tagvalue.naturalId=true
\ No newline at end of file
+
+org.chorem.pollen.entity.UserAccount.attribute.login.tagvalue.naturalId=true
+org.chorem.pollen.entity.UserAccount.attribute.email.tagvalue.unique=true
\ No newline at end of file
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -78,19 +78,19 @@
return getContext().beginTransaction();
}
- public static ServiceUser getServiceUser() {
+ public static ServiceUserImpl getServiceUser() {
ServiceUserImpl instance = new ServiceUserImpl();
instance.setContext(getContext());
return instance;
}
- public static ServiceEmail getServiceEmail() {
+ public static ServiceEmailImpl getServiceEmail() {
ServiceEmailImpl instance = new ServiceEmailImpl();
instance.setContext(getContext());
return instance;
}
- public static ServicePoll getServicePoll() {
+ public static ServicePollImpl getServicePoll() {
ServicePollImpl instance = new ServicePollImpl();
instance.setContext(getContext());
return instance;
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -7,14 +7,19 @@
import org.apache.commons.logging.LogFactory;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
+import org.chorem.pollen.PollenDAOHelper;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.business.TestManager;
import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.entity.UserAccountDAO;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
/**
*
@@ -44,12 +49,99 @@
TestManager.stop();
}
+ @Test
+ public void testManageNewPassword() throws Exception {
+ TestManager.start("testManageNewPassword");
+
+ ServiceUserImpl serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("homer");
+ user.setNewPassword("wouhou");
+
+ log.info("test 1 : Encode new password");
+ boolean result = serviceUser.manageNewPassword(user);
+ Assert.assertTrue(result);
+
+ String expected = TestManager.getContext().encodePassword("wouhou");
+ Assert.assertEquals(expected, user.getPassword());
+ Assert.assertNull(user.getNewPassword());
+
+ log.info("test 2 : Do not encode new password -> newPassword empty");
+ result = serviceUser.manageNewPassword(user);
+ Assert.assertFalse(result);
+ }
+
+ @Test
+ public void testCheckPassword() throws Exception {
+ TestManager.start("testCheckPassword");
+
+ ServiceUserImpl serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("homer");
+ user.setNewPassword("wouhou");
+ serviceUser.createUser(user);
+
+ String encodedPassword =
+ TestManager.getContext().encodePassword("wouhou");
+
+ TopiaContext transaction = TestManager.beginTransaction();
+ try {
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ log.info("test 1 : Good password");
+ serviceUser.checkPassword(dao, "homer", encodedPassword);
+
+ log.info("test 2 : Wrong password");
+ try {
+ serviceUser.checkPassword(dao, "homer", "bad");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
/**
* Test of executeConnect method, of class ServiceUserImpl.
*/
- //@Test
+ @Test
public void testExecuteConnect() throws Exception {
TestManager.start("testExecuteConnect");
+
+ ServiceUser serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("hsimpson");
+ user.setEmail("hsimpson(a)springfield.us");
+ user.setNewPassword("wouhou");
+ serviceUser.createUser(user);
+
+ log.info("test 1 : Connection OK");
+ UserAccount connected = serviceUser.connect("hsimpson", "wouhou");
+ Assert.assertEquals(user, connected);
+
+ log.info("test 2 : Connection problem on login -> user not exist");
+ try {
+ serviceUser.connect("homer", "wouhou");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_NOT_EXIST,
+ eee.getType());
+ }
+
+ log.info("test 3 : Connection problem on password -> don't match with login");
+ try {
+ serviceUser.connect("hsimpson", "coucou");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
}
/**
@@ -71,55 +163,114 @@
* Test of executeCreateUpdateUser method, of class ServiceUserImpl.
*/
@Test
- public void testExecuteCreateUpdateUser() throws Exception {
- TestManager.start("testCreateUpdateUser");
+ public void testExecuteCreateUser() throws Exception {
+ TestManager.start("testCreateUser");
ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
user.setLogin("hsimpson");
user.setEmail("hsimpson(a)springfield.us");
+ user.setNewPassword("wouhou");
+
String encodedPassword =
TestManager.getContext().encodePassword("wouhou");
- user.setPassword(encodedPassword);
- serviceUser.createUpdateUser(user);
+ log.info("test 1 : Creation OK");
+ serviceUser.createUser(user);
Assert.assertNotNull(user.getTopiaId());
- Assert.assertNotSame("wouhou", user.getPassword());
+ Assert.assertNotSame(encodedPassword, user.getPassword());
- // User 2 with same login
+ log.info("test 2 : Creation problem on login -> user exist");
UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
user2.setLogin("hsimpson");
// Not the same email
user2.setEmail("hsimpson(a)springfield.com");
- user2.setPassword("troubidou");
+ user2.setNewPassword("troubidou");
try {
- serviceUser.createUpdateUser(user2);
+ serviceUser.createUser(user2);
} catch (PollenBusinessException eee) {
- log.error("Error : " + eee.getMessage(), eee);
+ log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_LOGIN_EXIST,
eee.getType());
}
- // User 3 with same email as user
+ log.info("test 3 : Creation problem on email -> user exist");
UserAccount user3 = serviceUser.getNewUser(Locale.FRENCH);
user3.setLogin("homer");
user3.setEmail("hsimpson(a)springfield.us");
- user3.setPassword("troubidou");
+ user3.setNewPassword("troubidou");
try {
- serviceUser.createUpdateUser(user3);
+ serviceUser.createUser(user3);
} catch (PollenBusinessException eee) {
- log.error("Error : " + eee.getMessage(), eee);
+ log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_EMAIL_EXIST,
eee.getType());
}
+ log.info("test 4 : Creation OK with no email");
+ UserAccount user4 = serviceUser.getNewUser(Locale.FRENCH);
+ user4.setLogin("marge");
+ user4.setNewPassword("troubidou");
+
+ serviceUser.createUser(user4);
+ Assert.assertNull(user4.getEmail());
}
/**
* Test of executeDeleteUser method, of class ServiceUserImpl.
*/
+ @Test
+ public void testExecuteUpdateUser() throws Exception {
+ TestManager.start("testUpdateUser");
+ ServiceUser serviceUser = TestManager.getServiceUser();
+
+ UserAccount user1 = serviceUser.getNewUser(Locale.FRENCH);
+ user1.setLogin("hsimpson");
+ user1.setEmail("hsimpson(a)springfield.us");
+ user1.setNewPassword("wouhou");
+ serviceUser.createUser(user1);
+
+ UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
+ String user2Password = "wouhou";
+ user2.setLogin("homer");
+ user2.setEmail("hsimpson(a)springfield.fr");
+ user2.setNewPassword(user2Password);
+ serviceUser.createUser(user2);
+
+ log.info("test 1 : Can't change login -> don't match with password");
+ user2.setLogin("homersimpson");
+ user2.setPassword(user2Password);
+ try {
+ serviceUser.updateUser(user2);
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
+ user2.setLogin("homer");
+
+ log.info("test 2 : Change email OK");
+ user2.setEmail("homersimpson(a)springield.fr");
+ user2.setPassword(user2Password);
+ serviceUser.updateUser(user2);
+
+ log.info("test 3 : Change email problem -> user exist");
+ user2.setEmail(user1.getEmail());
+ user2.setPassword(user2Password);
+ try {
+ serviceUser.updateUser(user2);
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_EMAIL_EXIST,
+ eee.getType());
+ }
+ }
+
+ /**
+ * Test of executeDeleteUser method, of class ServiceUserImpl.
+ */
//@Test
public void testExecuteDeleteUser() throws Exception {
System.out.println("executeDeleteUser");
Modified: trunk/pollen-business/src/test/resources/log4j.properties
===================================================================
--- trunk/pollen-business/src/test/resources/log4j.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/resources/log4j.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -8,7 +8,7 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n
-log4j.logger.org.chorem.pollen=debug
+log4j.logger.org.chorem.pollen=info
log4j.logger.org.chorem.pollen.business.PollenContextImpl=warn
log4j.logger.org.chorem.pollen.business.services.SendMail=warn
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -33,7 +33,6 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PersistentLocale;
import org.apache.tapestry5.services.Request;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.ui.base.ContextLink;
@@ -42,7 +41,7 @@
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
-import org.chorem.pollen.ui.utils.BusinessUtils;
+import org.chorem.pollen.ui.services.PollenManager;
import org.slf4j.Logger;
/**
@@ -150,7 +149,7 @@
private PersistentLocale localeService;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
/** Injection des services */
@Inject
@@ -245,14 +244,14 @@
// No need to connect if user exists
if (!userExists) {
try {
- String encodedPassword = pollen.encodePassword(password);
- UserAccount current =
- serviceUser.connect(login, encodedPassword);
+ UserAccount current = serviceUser.connect(login, password);
user = current;
+ // Change locale for user
+ localeService.set(new Locale(user.getLanguage()));
feedback.addInfo(messages.get("loginOk"));
} catch (PollenBusinessException eee) {
feedback.addError(
- BusinessUtils.getErrorMessage(eee, messages, logger));
+ manager.getErrorMessage(eee, messages, logger));
}
}
return this;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -3,9 +3,9 @@
import java.io.File;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.ui.base.ContextLink;
import org.chorem.pollen.PollenProperty;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* FeedLink
@@ -21,11 +21,11 @@
public class FeedContextLink implements ContextLink {
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Override
public String getContextPath() {
- return pollen.getProperty(PollenProperty.FEED_DIR);
+ return manager.getProperty(PollenProperty.FEED_DIR);
}
@Override
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -55,13 +55,13 @@
* Champ login du formulaire d'identification
*/
@Property
- private String loginComp;
+ private String connectionLogin;
/**
* Champ password du formulaire d'identification
*/
@Property
- private String passwordComp;
+ private String connectionPassword;
@Inject
private Messages messages;
@@ -82,14 +82,13 @@
// Récupération de l'utilisateur identifié
UserAccount current;
try {
- current = serviceUser.connect(loginComp,
- manager.encodePassword(passwordComp));
+ current = serviceUser.connect(connectionLogin, connectionPassword);
if (current != null) {
user = current;
} else {
feedback.addError(messages.get("loginFailed"));
}
- } catch (PollenBusinessException ex) {
+ } catch (PollenBusinessException eee) {
// TODO
feedback.addError(messages.get("loginFailed"));
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -16,9 +16,9 @@
package org.chorem.pollen.ui.pages;
-import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
-import org.chorem.pollen.ui.data.AddressBarItem;
/**
* Page de départ de l'application.
@@ -30,7 +30,18 @@
*/
public class Index {
+ @InjectComponent
+ private Border border;
+
public AddressBar getAddressBar() {
return AddressBar.newEmptyBar().appendCurrent("Pollen");
}
+
+ public void addInfo(String message) {
+ border.addInfo(message);
+ }
+
+ public void addError(String message) {
+ border.addError(message);
+ }
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -31,13 +31,13 @@
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.mail.PreventRuleManager;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* Classe d'administration des comptes utilisateurs. Si l'utilisateur n'est pas
@@ -204,14 +204,14 @@
}
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
/** Envoi du mail de notification */
private void sendMailNotification(UserAccount newUser, String password) {
Map<String, String> data = new HashMap<String, String>();
- data.put("host", pollen.getProperty(PollenProperty.EMAIL_HOST));
- data.put("port", pollen.getProperty(PollenProperty.EMAIL_PORT));
- data.put("from", pollen.getProperty(PollenProperty.EMAIL_FROM));
+ data.put("host", manager.getProperty(PollenProperty.EMAIL_HOST));
+ data.put("port", manager.getProperty(PollenProperty.EMAIL_PORT));
+ data.put("from", manager.getProperty(PollenProperty.EMAIL_FROM));
data.put("to", newUser.getEmail());
data.put("title", messages.format("registerEmail_subject", newUser
.getLogin()));
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -42,7 +42,6 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Comment;
@@ -60,6 +59,7 @@
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.data.ChoiceField;
import org.chorem.pollen.ui.data.PollUri;
+import org.chorem.pollen.ui.services.PollenManager;
import org.chorem.pollen.ui.services.ServiceImage;
import org.slf4j.Logger;
@@ -932,7 +932,7 @@
private Messages messages;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Property
private PollUri uri;
@@ -1171,7 +1171,7 @@
public int getPagerRange() {
return Integer.parseInt(
- pollen.getProperty(PollenProperty.NB_VOTES_PER_PAGE));
+ manager.getProperty(PollenProperty.NB_VOTES_PER_PAGE));
}
public String getNoPagerText() throws PollenBusinessException {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -16,9 +16,14 @@
package org.chorem.pollen.ui.pages.user;
+import java.util.Locale;
+import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -26,12 +31,15 @@
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.PasswordField;
import org.apache.tapestry5.corelib.components.TextField;
-import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
+import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
-import org.chorem.pollen.ui.data.AddressBarItem;
+import org.chorem.pollen.ui.components.Border;
+import org.chorem.pollen.ui.data.AddressBar;
+import org.chorem.pollen.ui.services.PollenManager;
+import org.slf4j.Logger;
/**
* Classe de la page d'un utilisateur.
@@ -43,6 +51,15 @@
@IncludeStylesheet("context:css/account.css")
public class UserProfile {
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private PollenManager manager;
+
+ @InjectComponent
+ private Border border;
+
/**
* Objet de session représentant l'utilisateur identifié.
*/
@@ -52,137 +69,121 @@
@Property
private boolean userExists;
- /**
- * Utilisateur dont les données sont affichées et modifiées dans le
- * formulaire
- */
+ @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
@Property
- @Persist
- private UserAccount newUser;
+ private String title;
- /** Ancien mot de passe */
- @Persist
- private String oldEmail;
+ @Inject
+ private ServiceUser serviceUser;
- @Component
- private Zone myAccountZone;
+ @Inject
+ private Messages messages;
- @Component
- private Form myAccountForm;
+ public AddressBar getAddressBar() {
+ return AddressBar.newBar().appendCurrent(title);
+ }
- @Component(id = "password")
- private PasswordField passwordField;
+ /***************************** DISPLAY MODE *******************************/
- @Component(id = "newPassword1")
- private PasswordField newPasswordField;
-
- @Component(id = "email")
- private TextField emailField;
-
/**
- * Champ password du formulaire d'enregsitrement d'un utilisateur
+ * State of the form. is currently edited or not.
*/
+ @Persist(PersistenceConstants.FLASH)
@Property
- private String password;
+ private boolean edited;
+
+ void onActionFromEditAccount() {
+ edited = true;
+ // Don't refresh the form zone to reset border messages
+ }
+ /***************************** EDIT MODE **********************************/
+
/**
- * Champ password1 du formulaire d'enregsitrement d'un utilisateur
+ * UserAccount for form edition
*/
- @Property
- private String newPassword1;
- /**
- * Champ password2 du formulaire d'enregsitrement d'un utilisateur
- */
- @Property
- private String newPassword2;
+ private UserAccount userEditable;
@Inject
- private Messages messages;
+ private Locale currentLocale;
- @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
- @Property
- private String title;
+ @InjectComponent
+ private Form accountForm;
- @SuppressWarnings("unused")
- @Property
- private AddressBarItem[] address;
+ @Component(id = "password")
+ private PasswordField passwordField;
- /**
- * Vrai lorsque l'utilisateur modifie son compte.
- */
- @SuppressWarnings("unused")
- @Property
- private boolean modify = false;
+ @Component(id = "newPassword1")
+ private PasswordField newPasswordField;
- /** Injection des services */
- @Inject
- private ServiceUser serviceUser;
-// @Inject
-// private ServiceAuth serviceAuth;
+ @Component(id = "email")
+ private TextField emailField;
/**
- * Méthode appelée quand l'utilisateur modifie ses données
- *
- * @return la zone de compte mise à jour
+ * Property to check password (newPassword must be equals to passwordVerify)
*/
- Object onSuccessFromMyAccountForm() {
- modify = true;
-//
-// // L'utilisateur a renseigné le mauvais mot de passe
-// if (!serviceAuth.isLoginRight(newUser.getLogin(), MD5.encode(password))) {
-// myAccountForm.recordError(passwordField, messages
-// .get("badPassword"));
-// }
-//
-// // L'utilisateur ne s'est pas trompé en répétant son mot de passe
-// if (newPassword1 != null && !newPassword1.equals("")) {
-// if (!newPassword1.equals(newPassword2)) {
-// myAccountForm.recordError(newPasswordField, messages
-// .get("passwords-dont-match"));
-// }
-// }
-//
-// // L'email existe déjà
-// if (!oldEmail.equals(newUser.getEmail())) {
-// if (serviceUser.isUserEmailExisting(newUser.getEmail())) {
-// myAccountForm.recordError(emailField, messages
-// .get("emailAlreadyExists"));
-// }
-// }
-//
-// // Modification de l'utilisateur
-// if (!myAccountForm.getHasErrors()) {
-// if (serviceUser.updateUser(newUser)) {
-// if (newPassword1 != null && !newPassword1.equals("")) {
-// serviceUser.updatePasswordUser(newUser, MD5
-// .encode(newPassword1));
-// }
-// modify = false;
-// }
-// }
+ @Property
+ private String passwordVerify;
- return myAccountZone.getBody();
+ public UserAccount getUserEditable() {
+ if (userEditable == null) {
+ userEditable = user;
+ }
+ return userEditable;
}
/**
- * Méthode appelée quand l'utilisateur veut modifier son compte
- *
- * @return le formulaire de modification du compte
+ * ON_VALIDATE_FORM :: <br \>
+ * UI validation : check if the two passwords are equals. <br \>
+ * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#updateUser(org.chorem.pollen.entity.UserAccount) }
+ * which throws errors
+ * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_WRONG_PASSWORD}
+ * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
- Object onActionFromModifyButton() {
- modify = true;
- return myAccountZone.getBody();
+ @Log
+ void onValidateFormFromAccountForm() {
+ // Check newPassword that must be equals to passwordVerify
+ String newPassword = userEditable.getNewPassword();
+ if (StringUtils.isNotEmpty(newPassword) &&
+ !newPassword.equals(passwordVerify)) {
+ accountForm.recordError(newPasswordField,
+ messages.get("pollen.ui.user.passwordsDontMatch"));
+ }
+ // If no UI errors, call business to save the user
+ if (!accountForm.getHasErrors()) {
+ try {
+ // Update the user
+ if (logger.isDebugEnabled()) {
+ logger.debug("TopiaId : " + user.getTopiaId());
+ logger.debug("Login : " + user.getLogin());
+ logger.debug("Password : " + user.getPassword());
+ logger.debug("NewPassword : " + user.getNewPassword());
+ }
+ serviceUser.updateUser(userEditable);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ switch (eee.getType()) {
+ case USER_WRONG_PASSWORD:
+ accountForm.recordError(passwordField, message); break;
+ case USER_EMAIL_EXIST:
+ accountForm.recordError(emailField, message);
+ }
+ }
+ }
}
- /**
- * Initialisation de l'affichage
- */
- void setupRender() {
- address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"),
- new AddressBarItem(title, null) };
- if (userExists) {
- newUser = user;
- oldEmail = user.getEmail();
- }
+ @Log
+ Object onSuccessFromAccountForm() {
+ border.addInfo(messages.get("pollen.ui.user.updateSuccess"));
+ return this;
}
+
+ @Log
+ Object onFailureFromAccountForm() {
+ // Stay in edited mode to show errors
+ edited = true;
+ // Reset new password
+ userEditable.setNewPassword(null);
+ return accountForm;
+ }
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,10 +18,12 @@
import java.util.Locale;
+import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
@@ -31,14 +33,14 @@
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.PollenBusinessException;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.bean.PollenEmail;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceEmail;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
-import org.chorem.pollen.ui.utils.BusinessUtils;
+import org.chorem.pollen.ui.services.PollenManager;
import org.slf4j.Logger;
/**
@@ -55,8 +57,11 @@
@Inject
private Logger logger;
+ @InjectComponent
+ private Border border;
+
/**
- * Objet de session représentant l'utilisateur identifié.
+ * Identified user
*/
@SessionState
private UserAccount user;
@@ -64,16 +69,14 @@
@Property
private boolean userExists;
- /** Injection des services */
@Inject
private ServiceUser serviceUser;
- /** Injection des services */
@Inject
private ServiceEmail serviceEmail;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Inject
private Messages messages;
@@ -83,17 +86,17 @@
private String title;
/**
- * Objet de session représentant l'url du site.
+ * Session property loaded from configuration to know what is the current
+ * server url
*/
@SessionState
private String siteURL;
- /** Locale courante */
@Inject
private Locale currentLocale;
/**
- * Utilisateur créé via le formulaire
+ * New user to create
*/
private UserAccount newUser;
@@ -110,22 +113,16 @@
private PasswordField passwordField;
/**
- * Champ password1 du formulaire d'enregsitrement d'un utilisateur
+ * password2 field to verify if equals to password1
*/
@Property
- private String password1;
- /**
- * Champ password2 du formulaire d'enregsitrement d'un utilisateur
- */
- @Property
- private String password2;
+ private String passwordVerify;
- /**
- * Initialisation de l'affichage
- */
- void setupRender() {
- }
+ private String passwordForEmail;
+ @InjectPage
+ private Index index;
+
public AddressBar getAddressBar() {
return AddressBar.newBar().appendCurrent(title);
}
@@ -138,15 +135,40 @@
}
/**
- * ON_VALIDATE_FORM :: Check if two passwords are equals.
+ * ON_VALIDATE_FORM :: <br \>
+ * UI validation : check if the two passwords are equals. <br \>
+ * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#createUser(org.chorem.pollen.entity.UserAccount) }
+ * which throws errors
+ * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_LOGIN_EXIST}
+ * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
void onValidateFormFromRegister() {
- // L'utilisateur s'est pas trompé en répétant son mot de passe
- if (!password1.equals(password2)) {
- password1 = null;
+ // Check newPassword that must be equals to passwordVerify
+ String password = newUser.getNewPassword();
+ if (!password.equals(passwordVerify)) {
register.recordError(passwordField,
- messages.get("passwords-dont-match"));
+ messages.get("pollen.ui.user.passwordsDontMatch"));
}
+
+ // If no UI errors, call business to save the user
+ if (!register.getHasErrors()) {
+ try {
+ // Set passwordForEmail, newPassword will be reset after
+ // createUser
+ passwordForEmail = newUser.getNewPassword();
+
+ // Saving new user
+ serviceUser.createUser(newUser);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ switch (eee.getType()) {
+ case USER_EMAIL_EXIST:
+ register.recordError(emailField, message); break;
+ case USER_LOGIN_EXIST:
+ register.recordError(loginField, message);
+ }
+ }
+ }
}
/**
@@ -157,38 +179,38 @@
* @return the form if errors are recorded, or Index page otherwise
*/
Object onSuccessFromRegister() {
- try {
- // Encode the password before saving user
- getNewUser().setPassword(pollen.encodePassword(password1));
-
- // Saving new user
- serviceUser.createUpdateUser(getNewUser());
+ // Set the newUser in session : connect the new registered user
+ user = newUser;
- // Send an email to the new user
- PollenEmail mail = serviceEmail.getNewEmail(getNewUser());
+ index.addInfo(
+ messages.format("pollen.ui.user.autoConnection",
+ user.getLogin()));
- mail.setSubject(
- messages.format("pollen.mail.userRegister.subject",
- getNewUser().getLogin()));
- mail.setContent(
- messages.format("pollen.mail.userRegister.content",
- getNewUser().getDisplayName(), getNewUser().getLogin(),
- password1, siteURL));
+ // Send an email to the new user if not empty
+ if (StringUtils.isNotEmpty(user.getEmail())) {
+ try {
+ PollenEmail mail = serviceEmail.getNewEmail(user);
- serviceEmail.sendEmail(mail);
+ mail.setSubject(
+ messages.format("pollen.email.userRegister.subject",
+ user.getLogin()));
+ mail.setContent(
+ messages.format("pollen.email.userRegister.content",
+ user.getDisplayName(), user.getLogin(),
+ passwordForEmail, siteURL));
- return Index.class;
- } catch (PollenBusinessException eee) {
- String message =
- BusinessUtils.getErrorMessage(eee, messages, logger);
- switch (eee.getType()) {
- case USER_EMAIL_EXIST:
- register.recordError(emailField, message); break;
- case USER_LOGIN_EXIST:
- register.recordError(loginField, message);
+ serviceEmail.sendEmail(mail);
+
+ index.addInfo(
+ messages.format("pollen.ui.user.sendRegisterEmail",
+ user.getEmail()));
+
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ index.addError(message);
}
}
- return register;
+ return index;
}
/**
@@ -197,6 +219,8 @@
* @return the form
*/
Object onFailureFromRegister() {
+ // Reset password from session
+ newUser.setNewPassword(null);
return register;
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -29,7 +29,6 @@
import org.apache.tapestry5.services.ApplicationStateContribution;
import org.apache.tapestry5.services.ApplicationStateCreator;
import org.apache.tapestry5.upload.services.UploadSymbols;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenContextImpl;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountImpl;
@@ -40,6 +39,8 @@
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.service.ServiceUserImpl;
import org.chorem.pollen.ui.data.PollUri;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This module is automatically included as part of the Tapestry IoC Registry,
@@ -50,18 +51,18 @@
*/
public class AppModule {
+ private static Logger logger = LoggerFactory.getLogger(AppModule.class);
+
public static void bind(ServiceBinder binder) {
}
/**
* Build the application manager.
*
- * @param hub to register the manager for tapestry registry shutdown
* @return PollenManager
*/
- public static PollenManager buildPollenManager(RegistryShutdownHub hub) {
+ public static PollenManager buildPollenManager() {
PollenManager manager = new PollenManager(new PollenContextImpl());
- hub.addRegistryShutdownListener(manager);
return manager;
}
@@ -87,8 +88,31 @@
return new ServiceImageImpl(manager.getContext());
}
+ /**
+ * Execute PollenManager when registry startup.
+ * The manager will be instantiated using
+ * {@link #buildPollenManager(org.apache.tapestry5.ioc.services.RegistryShutdownHub) }.
+ * The serviceUser is needed to start the application.
+ *
+ * @param configuration to add the manager to registry startup
+ * @param manager to launch at startup
+ * @param shutdownHub to register manager for registry shutdown
+ */
+ public static void contributeRegistryStartup(
+ OrderedConfiguration<Runnable> configuration,
+ PollenManager manager, RegistryShutdownHub shutdownHub) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeRegistryStartup");
+ }
+ shutdownHub.addRegistryShutdownListener(manager);
+ configuration.add("PollenStartup", manager);
+ }
+
public static void contributeApplicationDefaults(
MappedConfiguration<String, String> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeApplicationDefaults");
+ }
// Contributions to ApplicationDefaults will override any contributions to
// FactoryDefaults (with the same key). Here we're restricting the supported
// locales to just "en" (English). As you add localised message catalogs and other assets,
@@ -109,6 +133,24 @@
}
/**
+ * Contribution SymbolSource service to access our configuration
+ * symbols from our services, pages and components.
+ *
+ * @param configuration
+ * @param symbolProvider PollenManager
+ */
+ public static void contributeSymbolSource(
+ OrderedConfiguration<SymbolProvider> configuration,
+ @InjectService("PollenManager") SymbolProvider symbolProvider) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeSymbolSource");
+ }
+ configuration.add(
+ "PollenManager", symbolProvider,
+ "after:SystemProperties", "before:ApplicationDefaults");
+ }
+
+ /**
* TypeCoercion for PollUri. This will convert automatically between String
* and PollUri. So pollUri can be used in activation/passivation page
* context.
@@ -116,7 +158,10 @@
* @param configuration
*/
public static void contributeTypeCoercer(
- Configuration<CoercionTuple> configuration) {
+ Configuration<CoercionTuple<?, ?>> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeTypeCoercer");
+ }
Coercion<String, PollUri> coercion1 = new Coercion<String, PollUri>() {
@Override
@@ -154,35 +199,18 @@
// return new BackgroundWorkerImpl(messages, servicePoll, context);
// }
- /**
- * Make configuration from a Properties file available as symbols.
- * @param context
- * @return
- */
- public PropertiesFileSymbolProvider buildConfigPropertiesFileSymbolProvider(
- @InjectService("PollenContext") PollenContext context) {
- return new PropertiesFileSymbolProvider(context);
- }
/**
- * Contribution SymbolSource service so that we can access our configuration
- * symbols from our services, pages and components.
- */
- public static void contributeSymbolSource(
- OrderedConfiguration<SymbolProvider> configuration,
- @InjectService("ConfigPropertiesFileSymbolProvider") SymbolProvider configPropertiesFileSymbolProvider) {
- configuration.add("ConfigPropertiesFile",
- configPropertiesFileSymbolProvider, "after:SystemProperties",
- "before:ApplicationDefaults");
- }
-
-
- /**
- * Used to instanciate SessionState WaoUser when session expires.
+ * Used to instanciate SessionState UserAccount when session expires.
*
* @param configuration to add the ApplicationStateCreator.
*/
- public void contributeApplicationStateManager(MappedConfiguration<Class<?>, ApplicationStateContribution> configuration) {
+ public void contributeApplicationStateManager(MappedConfiguration<Class<?>,
+ ApplicationStateContribution> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeApplicationStateManager");
+ }
+
ApplicationStateCreator<UserAccount> creator =
new ApplicationStateCreator<UserAccount>() {
@Override
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -21,13 +21,19 @@
package org.chorem.pollen.ui.services;
+import java.util.Arrays;
import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
+import org.apache.tapestry5.ioc.services.SymbolProvider;
+import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
+import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.nuiton.util.ApplicationConfig;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* WaoManager
@@ -40,11 +46,16 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class PollenManager implements Runnable, RegistryShutdownListener {
+public class PollenManager implements Runnable,
+ RegistryShutdownListener,
+ SymbolProvider {
- private static final Logger log =
- LoggerFactory.getLogger(PollenManager.class);
+// private static final Logger logger =
+// LoggerFactory.getLogger(PollenManager.class);
+ private final Map<String, String> propertiesMap =
+ new CaseInsensitiveMap<String>();
+
private PollenContext context;
/**
@@ -62,8 +73,19 @@
@Override
public void run() {
context.start();
+ // Copy properties to propertiesMap (insentitive) for SymbolProvider
+ Properties properties = getConfiguration().getOptions();
+ for (Object key : properties.keySet()) {
+ propertiesMap.put((String)key,
+ properties.getProperty((String) key));
+ }
}
+ @Override
+ public String valueForSymbol(String key) {
+ return propertiesMap.get(key);
+ }
+
/**
* Called to stop the application
*/
@@ -93,8 +115,19 @@
return context.getCurrentDate();
}
- public String encodePassword(String password) {
- return context.encodePassword(password);
+ public String getErrorMessage(PollenBusinessException eee,
+ Messages messages, Logger logger) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("ERROR from business : " + eee.getMessage() +
+ " _ args = " + Arrays.toString(eee.getArgs()));
+ }
+ String message = null;
+ if (eee.getArgs() != null) {
+ message = messages.format(eee.getMessage(), eee.getArgs());
+ } else {
+ message = messages.get(eee.getMessage());
+ }
+ return message;
}
}
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,138 +0,0 @@
-package org.chorem.pollen.ui.services;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
-import org.chorem.pollen.PollenContext;
-import org.slf4j.Logger;
-
-public class PropertiesFileSymbolProvider implements SymbolProvider {
-
- private final Map<String, String> propertiesMap = new CaseInsensitiveMap<String>();
-
- private PollenContext context;
-
- /**
- * Instantiate a new PropertiesFileSymbolProvider using a given resource
- * name
- *
- * @param logger the logger to log error messages to
- * @param resourceName the name of the resource to load
- * @param classPath whether to look on the classpath or filesystem
- */
- public PropertiesFileSymbolProvider(Logger logger, String resourceName,
- boolean classPath) {
- try {
- InputStream in;
-
- if (classPath) {
- in = ClassLoader.getSystemResourceAsStream(resourceName);
-
- // ClassLoader.getSystemResourceAsStream() returns null if
- // the resource cannot be found on the classpath
- if (in == null)
- throw new FileNotFoundException();
- } else
- in = new FileInputStream(resourceName);
-
- initialize(logger, in);
-
- } catch (FileNotFoundException e) {
- String msg = "Could not find '" + resourceName + "'";
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- /**
- * Instantiate a new PropertiesFileSymbolProvider using a given resource
- * name (looking in filesystem and classpath)
- *
- * @param context PollenContext
- */
- public PropertiesFileSymbolProvider(PollenContext context) {
- Properties conf = context.getConfiguration().getOptions();
- initializeProperties(conf);
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider using a given InputStream
- *
- * @param logger the logger
- * @param in an InputStream representing the resource
- */
- public PropertiesFileSymbolProvider(Logger logger, InputStream in) {
- initialize(logger, in);
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider from a given URL.
- *
- * @param logger the logger
- * @param url an URL to open
- */
- public PropertiesFileSymbolProvider(Logger logger, URL url) {
- try {
- initialize(logger, url.openStream());
- } catch (IOException e) {
- String msg = "IOException while opening URL '" + url + "': "
- + e.getMessage();
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider from a given Properties.
- *
- * @param logger the logger
- * @param properties a Properties object
- */
- public PropertiesFileSymbolProvider(Logger logger, Properties properties) {
- initializeProperties(properties);
- }
-
- private void initialize(Logger logger, InputStream in) {
- Properties properties = new Properties();
-
- try {
- properties.load(in);
-
- for (Object key : properties.keySet()) {
- propertiesMap.put((String) key, properties
- .getProperty((String) key));
- }
- } catch (IOException e) {
- String msg = "IOEception while loading properties: "
- + e.getMessage();
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- private void initializeProperties(Properties properties) {
- for (Object key : properties.keySet()) {
- propertiesMap.put((String) key, properties
- .getProperty((String) key));
- }
- }
-
- @Override
- public String valueForSymbol(String arg0) {
- return propertiesMap.get(arg0);
- }
-
-}
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,37 +0,0 @@
-
-package org.chorem.pollen.ui.utils;
-
-import java.util.Arrays;
-import org.apache.tapestry5.ioc.Messages;
-import org.chorem.pollen.PollenBusinessException;
-import org.slf4j.Logger;
-
-/**
- * BusinessUtils
- *
- * Created: 30 mars 2010
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public class BusinessUtils {
-
- public static String getErrorMessage(
- PollenBusinessException eee, Messages messages, Logger logger) {
- if (logger.isDebugEnabled()) {
- logger.debug("ERROR from business : " + eee.getMessage() +
- " _ args = " + Arrays.toString(eee.getArgs()));
- }
- String message = null;
- if (eee.getArgs() != null) {
- message = messages.format(eee.getMessage(), eee.getArgs());
- } else {
- message = messages.get(eee.getMessage());
- }
- return message;
- }
-
-}
Modified: trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,6 +1,6 @@
# User registration emails
-pollen.mail.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
-pollen.mail.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
+pollen.email.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
+pollen.email.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
# Poll creation emails
creatorEmail_subject=[Pollen] Cr\u00E9ation d'un sondage (%s)
@@ -41,6 +41,11 @@
return=Retour
help=Aide
+pollen.ui.user.autoConnection=Vous \u00EAtes maintenant connect\u00E9 avec l'identifiant %1$s.
+pollen.ui.user.sendRegisterEmail=Un email vous a \u00E9t\u00E9 envoy\u00E9 \u00E0 l'adresse %1$s.
+pollen.ui.user.passwordsDontMatch=Les deux mots de passe ne correspondent pas.
+pollen.ui.user.updateSuccess=Modification enregistr\u00E9e avec succ\u00E8s.
+
pollen.ui.choice.delete.confirm=Etes-vous s\u00FBr de vouloir d\u00E9finitivement supprimer ce choix ?
pollen.ui.choice.delete.title=Supprimer ce choix
pollen.ui.vote.noVote=Aucune personne n'a encore particip\u00E9 au sondage
Modified: trunk/pollen-ui/src/main/resources/log4j.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/log4j.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/log4j.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,5 +1,5 @@
# Default to info level output; this is very handy if you eventually use Hibernate as well.
-log4j.rootCategory=warn, A1
+log4j.rootCategory=warn, A1, globalfile
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
@@ -8,6 +8,17 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n
+log4j.appender.globalfile=org.apache.log4j.RollingFileAppender
+# pollen.log.home must be defined when starting server
+# ex : -Dpollen.log.home=/home/user/.local/pollen
+log4j.appender.globalfile.File=${pollen.log.home}/pollen.log
+log4j.appender.globalfile.MaxFileSize=500KB
+log4j.appender.globalfile.Append=true
+log4j.appender.globalfile.MaxBackupIndex=10
+log4j.appender.globalfile.Threshold=TRACE
+log4j.appender.globalfile.layout=org.apache.log4j.PatternLayout
+log4j.appender.globalfile.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
+
# Service category names are the name of the defining module class
# and then the service id.
log4j.category.org.chorem.test.services.AppModule.TimingFilter=info
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -4,12 +4,12 @@
<legend>${message:connectionLegend}</legend>
<t:feedback t:id="loginCompFeedback" />
<div>
- <t:label for="loginComp" />
- <input t:type="TextField" t:id="loginComp" validate="required" />
+ <t:label for="connectionLogin" />
+ <input t:type="TextField" t:id="connectionLogin" validate="required" />
</div>
<div>
- <t:label for="passwordComp" />
- <input t:type="PasswordField" t:id="passwordComp" validate="required" />
+ <t:label for="connectionPassword" />
+ <input t:type="PasswordField" t:id="connectionPassword" validate="required" />
</div>
<div class="buttons">
<input t:id="submitLoginCompForm" t:type="Submit" t:value="${message:loginSubmit}" />
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,23 +0,0 @@
-title=My Account
-login-label=User name
-password-label=Password *
-newPassword1-label=New password
-newPassword2-label=Reenter new password
-firstName-label=First name
-lastName-label=Last name
-email-label=Em@il *
-submit-label=Submit
-modify=Modify
-connectionInfoLegend=Connection information
-userInfoLegend=User information
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Invalid email.
-login-required-message=You must provide a username.
-password1-required-message=You must provide a password.
-password1-minlength-message=Your password must be at least 6 characters long.
-password2-required-message=You must repeat your password for confirmation.
-password2-minlength-message=Your password must be at least 6 characters long.
-passwords-dont-match=Two versions of password do not match.
-noUser=You must be logged to access to your account.\n Please fill the form below.
-badPassword=Your password is invalid.
-emailAlreadyExists=A user already registered with this email.
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,23 +0,0 @@
-title=Mon Compte
-login-label=Identifiant
-password-label=Mot de passe *
-newPassword1-label=Nouveau mot de passe
-newPassword2-label=R\u00E9p\u00E9tez votre nouveau mot de passe
-firstName-label=Pr\u00E9nom
-lastName-label=Nom
-email-label=Em@il *
-submit-label=Valider
-modify=Modifier
-connectionInfoLegend=Informations de connexion
-userInfoLegend=Informations de l'utilisateur
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Email invalide.
-login-required-message=Vous devez fournir un identifiant.
-password1-required-message=Vous devez fournir un mot de passe.
-password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-password2-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
-password2-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-passwords-dont-match=Les deux mots de passe ne correspondent pas.
-noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir acc\u00E9der \u00E0 votre compte.\n Veuillez remplir le formulaire ci-dessous.
-badPassword=Votre mot de passe est invalide.
-emailAlreadyExists=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
\ No newline at end of file
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties (from rev 2966, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,23 @@
+title=My Account
+login-label=User name
+password-label=Password *
+newPassword1-label=New password
+newPassword2-label=Reenter new password
+firstName-label=First name
+lastName-label=Last name
+email-label=Em@il *
+submit-label=Submit
+editAccount-action=Modify
+connectionInfoLegend=Connection information
+userInfoLegend=User information
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Invalid email.
+login-required-message=You must provide a username.
+password1-required-message=You must provide a password.
+password1-minlength-message=Your password must be at least 6 characters long.
+password2-required-message=You must repeat your password for confirmation.
+password2-minlength-message=Your password must be at least 6 characters long.
+passwords-dont-match=Two versions of password do not match.
+noUser=You must be logged to access to your account.\n Please fill the form below.
+badPassword=Your password is invalid.
+emailAlreadyExists=A user already registered with this email.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties (from rev 2966, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,23 @@
+title=Mon Compte
+login-label=Identifiant
+password-label=Mot de passe *
+newPassword1-label=Nouveau mot de passe
+passwordVerify-label=R\u00E9p\u00E9tez votre nouveau mot de passe
+firstName-label=Pr\u00E9nom
+lastName-label=Nom
+email-label=Em@il
+submit-label=Valider
+edit-action=Modifier
+cancel-action=Annuler
+connectionInfoLegend=Informations de connexion
+userInfoLegend=Informations de l'utilisateur
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Email invalide.
+login-required-message=Vous devez fournir un identifiant.
+password1-required-message=Vous devez fournir un mot de passe.
+password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+passwordVerify-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
+passwordVerify-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir acc\u00E9der \u00E0 votre compte.\n Veuillez remplir le formulaire ci-dessous.
+badPassword=Votre mot de passe est invalide.
+emailAlreadyExists=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,10 +1,10 @@
title=S'enregistrer
login-label=Identifiant *
password1-label=Mot de passe *
-password2-label=R\u00E9p\u00E9tez votre mot de passe *
+passwordVerify-label=R\u00E9p\u00E9tez votre mot de passe *
firstName-label=Pr\u00E9nom
lastName-label=Nom
-email-label=Em@il *
+email-label=Em@il
submit-label=S'enregistrer
connectionInfoLegend=Informations de connexion
userInfoLegend=Informations de l'utilisateur
@@ -13,6 +13,6 @@
login-required-message=Vous devez fournir un identifiant.
password1-required-message=Vous devez fournir un mot de passe.
password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-password2-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
-password2-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+passwordVerify-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
+passwordVerify-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
passwords-dont-match=Les deux mots de passe ne correspondent pas.
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/webapp/css/common.css
===================================================================
--- trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-09 23:28:55 UTC (rev 2969)
@@ -44,6 +44,7 @@
border: solid;
border-color: #f00;
border-width: 2px;
+ margin-bottom: 10px;
}
.fb-info {
Deleted: trunk/pollen-ui/src/main/webapp/user/Account.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/Account.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/user/Account.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,95 +0,0 @@
-
-<t:border t:address="address" t:pageLogo="literal:Creation"
- xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
- <h1 class="titleCreation">${message:title}</h1>
- <t:if test="userExists">
-
- <t:zone t:id="myAccountZone" show="show" update="show">
- <div id="myAccountFormDiv">
- <t:form t:id="myAccountForm" zone="myAccountZone">
- <div id="myAccountError">
- <t:errors />
- </div>
-
- <FieldSet>
- <legend>${message:connectionInfoLegend}</legend>
- <div>
- <label>${message:login-label}</label>
- ${user.login}
- </div>
- <t:if test="modify">
- <div>
- <t:label for="password" />
- <t:PasswordField t:id="password" t:value="password" t:validate="required,minlength=6" />
- </div>
- <div>
- <t:label for="newPassword1" />
- <t:PasswordField t:id="newPassword1" t:value="newPassword1" t:validate="minlength=6" />
- </div>
- <div>
- <t:label for="newPassword2" />
- <t:PasswordField t:id="newPassword2" t:value="newPassword2" t:validate="minlength=6" />
- </div>
- </t:if>
- </FieldSet>
-
- <FieldSet>
- <legend>${message:userInfoLegend}</legend>
- <div>
- <t:label for="email" />
- <t:if test="modify">
- <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp" />
- <p:else>
- <t:if test="user.email">
- ${user.email}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- <div>
- <t:label for="firstName" />
- <t:if test="modify">
- <t:TextField t:id="firstName" t:value="newUser.firstName" />
- <p:else>
- <t:if test="user.firstName">
- ${user.firstName}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- <div>
- <t:label for="lastName" />
- <t:if test="modify">
- <t:TextField t:id="lastName" t:value="newUser.lastName" />
- <p:else>
- <t:if test="user.lastName">
- ${user.lastName}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- </FieldSet>
-
- <div class="buttons">
- <t:if test="modify">
- <input type="submit" value="${message:submit-label}" />
- <p:else>
- <t:actionLink t:id="modifyButton" t:zone="myAccountZone" style="text-decoration: none;">
- <input type="button" value="${message:modify}" />
- </t:actionLink>
- </p:else>
- </t:if>
- </div>
- </t:form>
- </div>
- </t:zone>
-
- <p:else>
- <h4>${message:noUser}</h4>
- <t:LoginComponent />
- </p:else>
- </t:if>
-</t:border>
\ No newline at end of file
Copied: trunk/pollen-ui/src/main/webapp/user/UserProfile.tml (from rev 2966, trunk/pollen-ui/src/main/webapp/user/Account.tml)
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/UserProfile.tml (rev 0)
+++ trunk/pollen-ui/src/main/webapp/user/UserProfile.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,98 @@
+
+<t:border t:addressBar="addressBar" t:pageLogo="literal:Creation"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+ <h1 class="titleCreation">${message:title}</h1>
+ <t:if test="userExists">
+
+ <t:zone t:id="accountZone" show="show" update="show">
+ <t:form t:id="accountForm" zone="accountZone">
+ <div id="myAccountFormDiv">
+ <div id="myAccountError">
+ <t:errors />
+ </div>
+
+ <FieldSet>
+ <legend>${message:connectionInfoLegend}</legend>
+ <div>
+ <label>${message:login-label}</label>
+ ${user.login}
+ </div>
+ <t:if test="edited">
+ <div>
+ <t:label for="password" />
+ <t:PasswordField t:id="password" t:value="userEditable.password" t:validate="required,minlength=6" />
+ </div>
+ <div>
+ <t:label for="newPassword1" />
+ <t:PasswordField t:id="newPassword1" t:value="userEditable.newPassword" t:validate="minlength=6" />
+ </div>
+ <div>
+ <t:label for="passwordVerify" />
+ <t:PasswordField t:id="passwordVerify" t:value="passwordVerify" t:validate="minlength=6" />
+ </div>
+ </t:if>
+ </FieldSet>
+
+ <FieldSet>
+ <legend>${message:userInfoLegend}</legend>
+ <div>
+ <t:label for="email" />
+ <t:if test="edited">
+ <t:TextField t:id="email" t:value="userEditable.email" t:validate="regexp" />
+ <p:else>
+ <t:if test="user.email">
+ ${user.email}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ <div>
+ <t:label for="firstName" />
+ <t:if test="edited">
+ <t:TextField t:id="firstName" t:value="userEditable.firstName" />
+ <p:else>
+ <t:if test="user.firstName">
+ ${user.firstName}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ <div>
+ <t:label for="lastName" />
+ <t:if test="edited">
+ <t:TextField t:id="lastName" t:value="userEditable.lastName" />
+ <p:else>
+ <t:if test="user.lastName">
+ ${user.lastName}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ </FieldSet>
+
+ <div class="buttons">
+ <t:if test="edited">
+ <input type="submit" value="${message:submit-label}" />
+ <a t:type="pagelink" t:page="user/profile" style="text-decoration: none;">
+ <input type="button" value="${message:cancel-action}" />
+ </a>
+ <p:else>
+ <a t:type="actionlink" t:id="editAccount" style="text-decoration: none;">
+ <input type="button" value="${message:edit-action}" />
+ </a>
+ </p:else>
+ </t:if>
+ </div>
+ </div>
+ </t:form>
+ </t:zone>
+
+ <p:else>
+ <h4>${message:noUser}</h4>
+ <t:LoginComponent />
+ </p:else>
+ </t:if>
+</t:border>
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/webapp/user/UserProfile.tml
___________________________________________________________________
Added: svn:mergeinfo
+
Modified: trunk/pollen-ui/src/main/webapp/user/UserRegister.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/UserRegister.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/user/UserRegister.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,11 +18,11 @@
</div>
<div>
<t:label for="password1"/>
- <t:PasswordField t:id="password1" t:value="password1" t:validate="required, minlength=6"/>
+ <t:PasswordField t:id="password1" t:value="newUser.newPassword" t:validate="required, minlength=6"/>
</div>
<div>
- <t:label for="password2"/>
- <t:PasswordField t:id="password2" t:value="password2" t:validate="required, minlength=6"/>
+ <t:label for="passwordVerify"/>
+ <t:PasswordField t:id="passwordVerify" t:value="passwordVerify" t:validate="required, minlength=6"/>
</div>
</fieldset>
@@ -30,7 +30,7 @@
<legend>${message:userInfoLegend}</legend>
<div>
<t:label for="email"/>
- <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp"/>
+ <t:TextField t:id="email" t:value="newUser.email" t:validate="regexp"/>
</div>
<div>
<t:label for="firstName"/>
1
0
r2968 - in trunk/pollen-business/src/main/java/org/chorem/pollen: . service
by fdesbois@users.chorem.org 08 Apr '10
by fdesbois@users.chorem.org 08 Apr '10
08 Apr '10
Author: fdesbois
Date: 2010-04-08 12:23:22 +0200 (Thu, 08 Apr 2010)
New Revision: 2968
Log:
- Remove old folders
- Change service implementation cause of ServiceTransformer modification in ToPIA
Removed:
trunk/pollen-business/src/main/java/org/chorem/pollen/business/
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -36,28 +36,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected void executeSendEmail(List<Object> errorArgs,
PollenEmail pollenEmail) throws EmailException {
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -35,28 +35,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected Poll executeGetNewPoll() {
return new PollImpl();
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -36,28 +36,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
1
0
Author: fdesbois
Date: 2010-04-08 11:42:50 +0200 (Thu, 08 Apr 2010)
New Revision: 2967
Log:
- Update ServiceTransformer usage for ToPIA 2.3.3
- Use nuiton-utils snapshot 1.2.2
- Create PollenManager to manipulate context in Tapestry
- Remove MD5 class, use StringUtil.encodeMD5 instead
Added:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
Removed:
trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
trunk/pollen-business/src/main/xmi/pollen.properties
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
trunk/pom.xml
Deleted: trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,59 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * 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/>. ##%*/
-
-package org.chorem.pollen;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Classe utilitaire permettant d'encoder des chaîne en MD5.
- *
- * @version $Id$
- */
-public class MD5 {
-
- /**
- * Encode la chaine passé en paramètre avec l’algorithme MD5
- *
- * @param key : la chaine à encoder
- * @return la valeur (string) hexadécimale sur 32 bits
- */
- public static String encode(String key) {
-
- byte[] uniqueKey = key.getBytes();
- byte[] hash = null;
-
- try {
- // on récupère un objet qui permettra de crypter la chaine
- hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
- } catch (NoSuchAlgorithmException e) {
- throw new Error("no MD5 support in this VM");
- }
-
- StringBuffer hashString = new StringBuffer();
- for (int i = 0; i < hash.length; ++i) {
- String hex = Integer.toHexString(hash[i]);
- if (hex.length() == 1) {
- hashString.append("0");
- hashString.append(hex.charAt(hex.length() - 1));
- } else {
- hashString.append(hex.substring(hex.length() - 2));
- }
- }
- return hashString.toString();
- }
-}
Added: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java (rev 0)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,123 @@
+package org.chorem.pollen;
+
+import java.util.Date;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.util.ApplicationConfig;
+
+
+public interface PollenContext {
+
+ /**
+ * loadConfiguration :
+ * Load the application configuration :
+ * <pre>
+ * - Add entities implementation classes for Topia-persistence
+ * - Add model version for Topia-migration-service
+ * </pre>
+ * @param config ApplicationConfig
+ */
+ public void loadConfiguration(ApplicationConfig config);
+
+ /**
+ * start :
+ * Start of the application. The application configuration will be loaded
+ * automatically if needed using {@link #loadDefaultConfiguration }. Also
+ * you can manually load the configuration using
+ * {@link #loadConfiguration(ApplicationConfig)}
+ * This start does :
+ * <pre>
+ * - Initialize i18n for error messages
+ * - Create default admin if needed (this will load the topiaRootContext).
+ * </pre>
+ */
+ public void start();
+
+ /**
+ * stop :
+ * Stop the application. Close the Topia rootContext.
+ */
+ public void stop();
+
+ /**
+ * getProperty :
+ * Get a property from the configuration.
+ * @param property PollenProperty
+ * @return String
+ */
+ public String getProperty(PollenProperty property);
+
+ /**
+ * hasProperty :
+ * Test if the property is defined in this context
+ * @param property PollenProperty
+ * @return boolean
+ */
+ public boolean hasProperty(PollenProperty property);
+
+ /**
+ * getConfiguration :
+ * Get the configuration of the application. Instantiate the default one
+ * if needed.
+ * @return ApplicationConfig
+ */
+ public ApplicationConfig getConfiguration();
+
+ /**
+ * getCurrentDate :
+ * Return the current date from context
+ * @return Date
+ */
+ public Date getCurrentDate();
+
+ /**
+ * encodePassword :
+ * @param password
+ * @return String
+ */
+ public String encodePassword(String password);
+
+ /**
+ * createPollenUrlId :
+ * Create a unique UId for entities which need it (PollAccount, Poll).
+ * This UId represent the entity in UI module.
+ * @return String
+ */
+ public String createPollenUrlId();
+
+ /**
+ * beginTransaction :
+ * @return TopiaContext
+ * @throws TopiaException
+ */
+ public TopiaContext beginTransaction() throws TopiaException;
+
+ /**
+ * doCatch :
+ * @param eee
+ * @param message
+ * @param args
+ * @throws PollenException
+ */
+ public void treateError(Exception eee, String message, Object... args)
+ throws PollenException;
+
+ /**
+ * doCatch :
+ * @param transaction
+ * @param eee
+ * @param message
+ * @param args
+ * @throws PollenException
+ */
+ public void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException;
+
+ /**
+ * doFinally :
+ * @param transaction
+ */
+ public void closeTransaction(TopiaContext transaction);
+
+
+} //PollenContext
Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,16 +1,17 @@
package org.chorem.pollen;
+import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//import org.chorem.pollen.PollenDAOHelper;
//import org.chorem.pollen.business.services.SendMail;
//import org.chorem.pollen.business.services.ServiceUserImpl;
-import org.chorem.pollen.service.ServiceEmail;
-import org.chorem.pollen.service.ServiceEmailImpl;
import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
@@ -21,6 +22,7 @@
import static org.nuiton.i18n.I18n.n_;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.topia.TopiaNotFoundException;
+import org.nuiton.util.StringUtil;
/**
* PollenContext
@@ -33,7 +35,7 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class PollenContextImpl implements PollenContextImplementor {
+public class PollenContextImpl implements PollenContext {
/** log. */
private static final Log log = LogFactory.getLog(PollenContextImpl.class);
@@ -78,7 +80,7 @@
loadConfiguration(conf);
} catch (ArgumentsParserException eee) {
- doCatch(eee, n_("pollen.error.context.parse"),
+ treateError(eee, n_("pollen.error.context.parse"),
PollenContextImpl.DEFAULT_FILENAME);
}
}
@@ -142,7 +144,7 @@
}
} catch (Exception eee) {
- doCatch(eee, n_("pollen.error.context.start"));
+ treateError(eee, n_("pollen.error.context.start"));
}
}
@@ -158,7 +160,7 @@
getTopiaRootContext().closeContext();
// sendMail.stopExec();
} catch (Exception eee) {
- doCatch(eee, n_("pollen.error.context.stop"));
+ treateError(eee, n_("pollen.error.context.stop"));
}
}
@@ -172,7 +174,6 @@
*
* @param property PollenProperty
* @return value of this property
- * @throws PollenBusinessException
*/
@Override
public String getProperty(PollenProperty property) {
@@ -235,7 +236,7 @@
try {
return TopiaContextFactory.getContext(getProperties());
} catch (TopiaNotFoundException eee) {
- doCatch(eee, n_("pollen.error.context.getRootContext"));
+ treateError(eee, n_("pollen.error.context.getRootContext"));
}
return null;
}
@@ -264,9 +265,9 @@
* @throws PollenException which contains the exception as the cause
*/
@Override
- public void doCatch(Exception eee, String message, Object... args)
+ public void treateError(Exception eee, String message, Object... args)
throws PollenException {
- doCatch(null, eee, message, args);
+ treateError(null, eee, message, args);
}
/**
@@ -282,8 +283,8 @@
* @throws PollenException
*/
@Override
- public void doCatch(TopiaContext transaction, Exception eee, String message,
- Object... args) throws PollenException {
+ public void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
if (log.isErrorEnabled()) {
log.error(_(message, args), eee);
}
@@ -317,10 +318,11 @@
* @param transaction current TopiaContext
*/
@Override
- public void doFinally(TopiaContext transaction) {
+ public void closeTransaction(TopiaContext transaction) {
if (transaction != null) {
try {
transaction.closeContext();
+ //stop();
} catch (TopiaException eee) {
if (log.isErrorEnabled()) {
log.error(_("pollen.error.context.close"), eee);
@@ -360,19 +362,14 @@
this.currentDate = currentDate;
}
-// @Override
-// public ServiceEmail getServiceEmail() {
-// if (serviceEmail == null) {
-// ServiceEmailImpl instance = new ServiceEmailImpl();
-// instance.setContext(this);
-// serviceEmail = instance;
-// }
-// return serviceEmail;
-// }
-
@Override
public String encodePassword(String password) {
- return MD5.encode(password);
+ try {
+ return StringUtil.encodeMD5(password);
+ } catch (NoSuchAlgorithmException eee) {
+ treateError(eee, n_("pollen.error.encodePassword"));
+ }
+ return null;
}
}
Added: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java (rev 0)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,39 @@
+package org.chorem.pollen;
+
+
+
+public class PollenException extends RuntimeException {
+
+ protected Object[] args;
+ /**
+ * PollenException :
+ * @param eee
+ * @param message
+ * @param args
+ */
+
+ public PollenException(Throwable eee, String message, Object... args) {
+ super(message, eee);
+ this.args = args;
+ }
+
+ /**
+ * getArgs :
+ * @return Object[]
+ */
+
+ public Object[] getArgs() {
+ return args;
+ }
+
+ /**
+ * hasArgs :
+ * @return boolean
+ */
+
+ public boolean hasArgs() {
+ return args.length > 0;
+ }
+
+
+} //PollenException
Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -37,7 +37,7 @@
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
import org.apache.commons.io.IOUtils;
-import org.chorem.pollen.PollenContextImplementor;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
/**
@@ -64,7 +64,7 @@
/** logger. */
private static final Logger log = LoggerFactory.getLogger(SendMail.class);
- protected PollenContextImplementor context;
+ protected PollenContext context;
public static final String EXTENSION_MAIL = ".mail";
public static final String EXTENSION_INDEX = ".index";
@@ -74,7 +74,7 @@
protected volatile boolean stop;
- public SendMail(PollenContextImplementor context) {
+ public SendMail(PollenContext context) {
this.context = context;
if (log.isInfoEnabled()) {
log.info("P:[ SendMail ] init");
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -6,9 +6,13 @@
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.bean.PollenEmail;
import org.chorem.pollen.bean.PollenEmailImpl;
import org.chorem.pollen.entity.UserAccount;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
/**
* ServiceMailImpl
@@ -25,7 +29,35 @@
private static final Log log = LogFactory.getLog(ServiceEmailImpl.class);
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void executeSendEmail(List<Object> errorArgs,
PollenEmail pollenEmail) throws EmailException {
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -3,16 +3,15 @@
import java.util.List;
import org.chorem.pollen.PollenBusinessException;
-import org.chorem.pollen.PollenContextImplementor;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenDAOHelper;
-import org.chorem.pollen.entity.PollDAO;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Comment;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.PollImpl;
import org.chorem.pollen.entity.UserAccount;
-import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
@@ -29,7 +28,35 @@
*/
public class ServicePollImpl extends ServicePollAbstract {
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected Poll executeGetNewPoll() {
return new PollImpl();
}
@@ -53,91 +80,87 @@
@Override
protected void executeUpdatePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ Poll poll) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeSavePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ protected void executeSavePoll(TopiaContext transaction, Poll poll)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeletePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ protected void executeDeletePoll(TopiaContext transaction, Poll poll)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeleteChoice(TopiaContext transaction,
- List<Object> errorArgs, Choice choice) throws TopiaException {
+ protected void executeDeleteChoice(TopiaContext transaction, Choice choice)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeCreateUpdateVote(TopiaContext transaction,
- List<Object> errorArgs, PollAccount person) throws TopiaException {
+ PollAccount person) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeleteVote(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, PollAccount person)
- throws TopiaException {
+ protected void executeDeleteVote(TopiaContext transaction, Poll poll,
+ PollAccount person) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForUpdate(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForUpdate(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<Poll> executeGetAllPolls(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<Poll> executeGetAllPolls(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<Poll> executeGetRunningPolls(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<Poll> executeGetRunningPolls(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<Poll> executeGetPollsByUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ UserAccount user) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<Comment> executeGetComments(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, int startIndex, int endIndex)
+ Poll poll, int startIndex, int endIndex)
throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<PollAccount> executeGetVotes(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, int startIndex, int endIndex)
+ Poll poll, int startIndex, int endIndex)
throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForResults(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForResults(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForVote(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForVote(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -6,7 +6,9 @@
import org.apache.commons.lang.StringUtils;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenDAOHelper;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountDAO;
@@ -27,7 +29,35 @@
*/
public class ServiceUserImpl extends ServiceUserAbstract {
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
@@ -91,51 +121,50 @@
}
@Override
- protected void executeDeleteUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ protected void executeDeleteUser(TopiaContext transaction, UserAccount user)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<UserAccount> executeGetUsers(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<UserAccount> executeGetUsers(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected PollAccount executeGetNewList(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected PollAccount executeGetNewList(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeCreateUpdateList(TopiaContext transaction,
- List<Object> errorArgs, PollAccount list) throws TopiaException {
+ PollAccount list) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeDeleteList(TopiaContext transaction,
- List<Object> errorArgs, PollAccount list) throws TopiaException {
+ PollAccount list) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<PollAccount> executeGetFavoriteLists(
- TopiaContext transaction, List<Object> errorArgs)
- throws TopiaException {
+ TopiaContext transaction) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected PollAccount executeGetNewPerson(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ UserAccount user) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected PollAccount executeGetPerson(TopiaContext transaction,
- List<Object> errorArgs, String accountUId)
+ String accountUId)
throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -4,6 +4,7 @@
pollen.error.context.rollback=
pollen.error.context.start=
pollen.error.context.stop=
+pollen.error.encodePassword=
pollen.error.serviceEmail.getNewEmail=
pollen.error.serviceEmail.sendEmail=
pollen.error.serviceList.createAccountForPersonList=
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -4,6 +4,7 @@
pollen.error.context.rollback=Erreur lors de l'annulation de la transaction
pollen.error.context.start=Erreur lors du d\u00E9marrage de l'application
pollen.error.context.stop=Erreur lors de l'arr\u00EAt de l'application
+pollen.error.encodePassword=
pollen.error.serviceEmail.getNewEmail=
pollen.error.serviceEmail.sendEmail=
pollen.error.serviceList.createAccountForPersonList=
Modified: trunk/pollen-business/src/main/xmi/pollen.properties
===================================================================
--- trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -2,5 +2,6 @@
model.tagvalue.copyright=/* *##%\n Copyright (C) 2009 Pollen\n *##%*/
#model.tagvalue.dbSchema=Pollen
model.tagvalue.java.lang.String=text
+model.tagvalue.exceptionClass=org.chorem.pollen.PollenException
#org.chorem.pollen.business.persistence.PollAccount.attribute.accountId.tagvalue.naturalId=true
#org.chorem.pollen.business.persistence.Poll.attribute.pollId.tagvalue.naturalId=true
\ No newline at end of file
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,8 +1,6 @@
package org.chorem.pollen.business;
-import org.chorem.pollen.PollenContextImplementor;
-import org.chorem.pollen.PollenContextImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
@@ -10,6 +8,12 @@
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenContextImpl;
+import org.chorem.pollen.service.ServiceEmail;
+import org.chorem.pollen.service.ServiceEmailImpl;
+import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.service.ServicePollImpl;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.service.ServiceUserImpl;
import org.junit.Ignore;
@@ -33,7 +37,7 @@
private static final Log log = LogFactory.getLog(TestManager.class);
- private static PollenContextImplementor context;
+ private static PollenContext context;
public static void start(String dbname) throws IOException {
log.info("## START ## : " + dbname);
@@ -63,7 +67,7 @@
getContext().stop();
}
- public static PollenContextImplementor getContext() {
+ public static PollenContext getContext() {
if (context == null) {
context = new PollenContextImpl();
}
@@ -74,10 +78,22 @@
return getContext().beginTransaction();
}
- public static ServiceUser newServiceUser() {
+ public static ServiceUser getServiceUser() {
ServiceUserImpl instance = new ServiceUserImpl();
instance.setContext(getContext());
return instance;
}
+ public static ServiceEmail getServiceEmail() {
+ ServiceEmailImpl instance = new ServiceEmailImpl();
+ instance.setContext(getContext());
+ return instance;
+ }
+
+ public static ServicePoll getServicePoll() {
+ ServicePollImpl instance = new ServicePollImpl();
+ instance.setContext(getContext());
+ return instance;
+ }
+
}
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -58,7 +58,7 @@
@Test
public void testExecuteGetNewUser() throws Exception {
TestManager.start("testGetNewUser");
- ServiceUser serviceUser = TestManager.newServiceUser();
+ ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
Assert.assertNotNull(user);
@@ -73,7 +73,7 @@
@Test
public void testExecuteCreateUpdateUser() throws Exception {
TestManager.start("testCreateUpdateUser");
- ServiceUser serviceUser = TestManager.newServiceUser();
+ ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
user.setLogin("hsimpson");
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -16,18 +16,16 @@
package org.chorem.pollen.ui.components;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
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.chorem.pollen.MD5;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* Formulaire d'identification. Formulaire que l'utilisateur doit remplir pour
@@ -72,6 +70,9 @@
@Inject
private ServiceUser serviceUser;
+ @Inject
+ private PollenManager manager;
+
/**
* Methode appelée lorsque l'utilisateur s'identifie
*
@@ -81,7 +82,8 @@
// Récupération de l'utilisateur identifié
UserAccount current;
try {
- current = serviceUser.connect(loginComp, MD5.encode(passwordComp));
+ current = serviceUser.connect(loginComp,
+ manager.encodePassword(passwordComp));
if (current != null) {
user = current;
} else {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -29,7 +29,6 @@
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.MD5;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.data.AddressBarItem;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -24,13 +24,13 @@
import org.apache.tapestry5.ioc.annotations.InjectService;
import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.CoercionTuple;
+import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
import org.apache.tapestry5.ioc.services.SymbolProvider;
import org.apache.tapestry5.services.ApplicationStateContribution;
import org.apache.tapestry5.services.ApplicationStateCreator;
import org.apache.tapestry5.upload.services.UploadSymbols;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenContextImpl;
-import org.chorem.pollen.PollenContextImplementor;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountImpl;
import org.chorem.pollen.service.ServiceEmail;
@@ -54,40 +54,37 @@
}
/**
- * Build the main application context PollenContext.
+ * Build the application manager.
*
- * @return PollenContextImplementor type to use injection in services build
+ * @param hub to register the manager for tapestry registry shutdown
+ * @return PollenManager
*/
- public static PollenContextImplementor buildPollenContext() {
- PollenContextImplementor context = new PollenContextImpl();
- context.start();
- return context;
+ public static PollenManager buildPollenManager(RegistryShutdownHub hub) {
+ PollenManager manager = new PollenManager(new PollenContextImpl());
+ hub.addRegistryShutdownListener(manager);
+ return manager;
}
- public static ServiceUser buildServiceUser(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServiceUser buildServiceUser(PollenManager manager) {
ServiceUserImpl service = new ServiceUserImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServicePoll buildServicePoll(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServicePoll buildServicePoll(PollenManager manager) {
ServicePollImpl service = new ServicePollImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServiceEmail buildServiceEmail(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServiceEmail buildServiceEmail(PollenManager manager) {
ServiceEmailImpl service = new ServiceEmailImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServiceImage buildServiceImage(
- @InjectService("PollenContext") PollenContextImplementor context) {
- return new ServiceImageImpl(context);
+ public static ServiceImage buildServiceImage(PollenManager manager) {
+ return new ServiceImageImpl(manager.getContext());
}
public static void contributeApplicationDefaults(
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,100 @@
+/*
+ * *##%
+ * Wao :: Web Interface
+ * 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 Lesser 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>.
+ * ##%*
+ */
+
+package org.chorem.pollen.ui.services;
+
+import java.util.Date;
+import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenProperty;
+import org.nuiton.util.ApplicationConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WaoManager
+ *
+ * Created: 24 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class PollenManager implements Runnable, RegistryShutdownListener {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(PollenManager.class);
+
+ private PollenContext context;
+
+ /**
+ * Constructor of WaoManager. It needs the WaoContext to start and stop.
+ *
+ * @param context used to manage application lifecycle
+ */
+ public PollenManager(PollenContext context) {
+ this.context = context;
+ }
+
+ /**
+ * Called to start the application.
+ */
+ @Override
+ public void run() {
+ context.start();
+ }
+
+ /**
+ * Called to stop the application
+ */
+ @Override
+ public void registryDidShutdown() {
+ context.stop();
+ }
+
+ /**
+ * Context to inject in new service instances.
+ *
+ * @return the WaoContext of the application
+ */
+ PollenContext getContext() {
+ return context;
+ }
+
+ public String getProperty(PollenProperty property) {
+ return context.getProperty(property);
+ }
+
+ public ApplicationConfig getConfiguration() {
+ return context.getConfiguration();
+ }
+
+ public Date getCurrentDate() {
+ return context.getCurrentDate();
+ }
+
+ public String encodePassword(String password) {
+ return context.encodePassword(password);
+ }
+
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pom.xml 2010-04-08 09:42:50 UTC (rev 2967)
@@ -309,13 +309,12 @@
<!-- customized versions -->
<!--javadoc.version>2.4</javadoc.version-->
- <topia.version>2.3.1</topia.version>
+ <topia.version>2.3.3-SNAPSHOT</topia.version>
<eugene.version>2.0.1-SNAPSHOT</eugene.version>
<i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
- <nuiton-utils.version>1.2.1-SNAPSHOT</nuiton-utils.version>
+ <nuiton-utils.version>1.2.2-SNAPSHOT</nuiton-utils.version>
<processor.version>1.0.2</processor.version>
-<!-- <chorem-commons.version>1.0.0-alpha-2-SNAPSHOT</chorem-commons.version>-->
<!--Multilanguage maven-site -->
<siteLocales>en,fr</siteLocales>
1
0
Author: tchemit
Date: 2010-04-03 12:41:29 +0200 (Sat, 03 Apr 2010)
New Revision: 2966
Log:
Evolution #151: Utilisation i18n 1.2.1 + goal tapestry-bundle pour synchoniser tapestry et i18n
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-02 14:27:47 UTC (rev 2965)
+++ trunk/pom.xml 2010-04-03 10:41:29 UTC (rev 2966)
@@ -311,7 +311,7 @@
<!--javadoc.version>2.4</javadoc.version-->
<topia.version>2.3.1</topia.version>
<eugene.version>2.0.1-SNAPSHOT</eugene.version>
- <i18n.version>1.2</i18n.version>
+ <i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
<nuiton-utils.version>1.2.1-SNAPSHOT</nuiton-utils.version>
<processor.version>1.0.2</processor.version>
1
0