Author: fdesbois Date: 2010-03-30 19:57:40 +0200 (Tue, 30 Mar 2010) New Revision: 2960 Log: - Implement createUpdate and connect method for user (UserRegister / Border) - Add BusinessUtils with method to manage errors from business (PollenBusinessException) - Improve errors and exceptions (FeedBack / BusinessTransformer improved in ToPIA) - Add common.css - Add ServiceEmail + PollenEmail bean Added: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/ trunk/pollen-business/src/main/java/org/chorem/pollen/bean/PollenEmailImpl.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/test/java/org/chorem/pollen/service/ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.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/utils/BusinessUtils.java trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_en.properties 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 Removed: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Account.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Register.java trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_en.properties trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_fr.properties trunk/pollen-ui/src/main/webapp/user/Register.tml Modified: trunk/pollen-business/pom.xml 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/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/resources/pollen.properties trunk/pollen-business/src/main/xmi/pollen.zargo trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedBack.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AddressBar.java trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/EvenOdd.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/admin/UsersAdmin.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/services/AppModule.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/Index.tml trunk/pollen-ui/src/main/webapp/css/main.css trunk/pollen-ui/src/main/webapp/css/register.css trunk/pollen-ui/src/main/webapp/poll/PollForm.tml trunk/pom.xml Modified: trunk/pollen-business/pom.xml =================================================================== --- trunk/pollen-business/pom.xml 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/pom.xml 2010-03-30 17:57:40 UTC (rev 2960) @@ -113,7 +113,8 @@ <defaultPackage>org.chorem.pollen</defaultPackage> <templates> org.nuiton.topia.generator.TopiaMetaTransformer, - org.nuiton.topia.generator.BusinessTransformer + org.nuiton.topia.generator.BusinessTransformer, + org.nuiton.topia.generator.BeanTransformer </templates> </configuration> <goals> Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -23,16 +23,22 @@ public PollenBusinessException(PollenExceptionType type) { super(type.getMessage()); + this.type = type; } public PollenBusinessException(PollenExceptionType type, Object... args) { super(type.getMessage()); this.args = args; + this.type = type; } public enum PollenExceptionType { //LOAD_CONFIGURATION(n_("pollen.exception.load_configuration")), - POLL_NOT_EXIST(n_("pollen.exception.poll_not_exist")); + POLL_NOT_EXIST(n_("pollen.exception.poll_not_exist")), + 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")); private String message; @@ -48,4 +54,8 @@ public Object[] getArgs() { return args; } + + public PollenExceptionType getType() { + return 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -9,6 +9,8 @@ //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; @@ -95,8 +97,8 @@ configuration = conf; configuration.setOption("topia.persistence.classes", PollenDAOHelper.getImplementationClassesAsString()); - configuration.setOption("topia.service.migration.version", - PollenDAOHelper.getModelVersion()); +// configuration.setOption("topia.service.migration.version", +// PollenDAOHelper.getModelVersion()); } /** @@ -170,6 +172,7 @@ * * @param property PollenProperty * @return value of this property + * @throws PollenBusinessException */ @Override public String getProperty(PollenProperty property) { @@ -192,6 +195,7 @@ * * @param key of the property * @return value of this property + * @throws PollenBusinessException */ public String getProperty(String key) { return getConfiguration().getOption(key); @@ -201,6 +205,7 @@ * Get all properties from the configuration * * @return the Properties of the application + * @throws PollenBusinessException */ public Properties getProperties() { return getConfiguration().getOptions(); @@ -223,6 +228,8 @@ * Get the Topia rootContext. * * @return the main TopiaContext needed to begin new transaction + * @throws PollenException + * @throws PollenBusinessException */ public TopiaContext getTopiaRootContext() { try { @@ -272,6 +279,7 @@ * @param eee the exception to manage * @param message the message to add to the new PollenException * @param args for message + * @throws PollenException */ @Override public void doCatch(TopiaContext transaction, Exception eee, String message, @@ -292,7 +300,12 @@ } // PollenBusinessException must be managed (catch and throw) when needed // if (! (eee instanceof PollenBusinessException)) { - throw new PollenException(eee, message, args); +// throw new PollenException(eee, message, args); +// } else { +// if (log.isDebugEnabled()) { +// log.debug("Business error : " + _(message, args)); +// } +// throw eee; // } } @@ -346,4 +359,19 @@ 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); + } + } Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -15,7 +15,12 @@ public enum PollenProperty { /** version of the application **/ APP_VERSION("version"), - /** url of the server **/ + /** + * url of the server + * @deprecated don't need to use it from properties file. Will be analysing + * from url in ui module. + */ + @Deprecated SERVER_URL("siteUrl"), /** login for default admin **/ ADMIN_LOGIN("adminLogin"), @@ -38,7 +43,9 @@ /** path for uploaded images directory **/ IMG_DIR("upImgDir"), /** nb votes to display per page **/ - NB_VOTES_PER_PAGE("pollen.ui.nbVotesPerPage"); + NB_VOTES_PER_PAGE("pollen.ui.nbVotesPerPage"), + /** Charset of Pollen **/ + CHARSET("pollen.charset"); String key; Added: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/PollenEmailImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/bean/PollenEmailImpl.java (rev 0) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/bean/PollenEmailImpl.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,75 @@ + +package org.chorem.pollen.bean; + +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.SimpleEmail; +import org.chorem.pollen.PollenProperty; + +/** + * PollenMail + * + * Created: 30 mars 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class PollenEmailImpl extends PollenEmail { + + /** + * Get the value of host + * + * @return the value of host + */ + @Override + public String getHost() { + if (host == null) { + host = PollenProperty.EMAIL_HOST.getValue(); + } + return host; + } + + @Override + public String getFrom() { + if (from == null) { + from = PollenProperty.EMAIL_FROM.getValue(); + } + return from; + } + + @Override + public Integer getPort() { + if (port == null) { + port = Integer.parseInt(PollenProperty.EMAIL_PORT.getValue()); + } + return port; + } + + @Override + public SimpleEmail createSimpleEmail() throws EmailException { + SimpleEmail result = new SimpleEmail(); + result.setHostName(getHost()); + result.setSmtpPort(getPort()); + result.setFrom(getFrom()); + result.addTo(getTo()); + result.setSubject(getSubject()); + result.setMsg(getContent()); + result.setCharset(PollenProperty.CHARSET.getValue()); + return result; + } + + @Override + public String toString() { + String result = new ToStringBuilder(this) + .append("host", this.host) + .append("port", this.port) + .append("from", this.from) + .append("to", this.to) + .append("subject", this.subject). + toString(); + return result; + } +} Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/bean/PollenEmailImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Added: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java (rev 0) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,41 @@ + +package org.chorem.pollen.entity; + +import org.apache.commons.lang.StringUtils; + +/** + * UserAccountImpl + * + * Created: 30 mars 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class UserAccountImpl extends UserAccountAbstract { + + private static final long serialVersionUID = 1L; + + @Override + public void addFavoriteList(PollAccount list) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public String getDisplayName() { + String name = ""; + if (StringUtils.isNotEmpty(getFirstName())) { + name += getFirstName(); + } + if (StringUtils.isNotEmpty(getLastName())) { + name += getLastName(); + } + if (StringUtils.isEmpty(name)) { + name = getLogin(); + } + return name; + } + +} Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -41,7 +41,9 @@ * @param to Adresse email du destinataire * @param subject Sujet * @param msg Message + * @deprecated use {@link org.chorem.pollen.service.ServiceEmail#sendEmail(org.chorem.pollen.bean.PollenEmail)} */ + @Deprecated public static void sendMail(String host, int port, String from, String to, String subject, String msg) { SimpleEmail email = new SimpleEmail(); 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -16,6 +16,7 @@ package org.chorem.pollen.mail; +import org.chorem.pollen.bean.PollenEmailImpl; import java.lang.reflect.Method; import java.util.Map; @@ -190,6 +191,16 @@ log.warn("emailAction data parameter is not instance of Map"); } } - } + + public static void emailAction(PollenEmailImpl mail) { + MailUtil.sendMail( + mail.getHost(), + mail.getPort(), + mail.getFrom(), + mail.getTo(), + mail.getSubject(), + mail.getContent() + ); + } } Added: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java =================================================================== --- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java (rev 0) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,52 @@ + +package org.chorem.pollen.service; + +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.SimpleEmail; +import org.chorem.pollen.bean.PollenEmail; + +/** + * ServiceMailImpl + * + * Created: 30 mars 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class ServiceEmailImpl extends ServiceEmailAbstract { + + private static final Log log = LogFactory.getLog(ServiceEmailImpl.class); + + @Override + protected void executeSendEmail(List<Object> errorArgs, + PollenEmail pollenEmail) throws EmailException { + + errorArgs.add(pollenEmail.getHost()); + errorArgs.add(pollenEmail.getPort()); + errorArgs.add(pollenEmail.getTo()); + errorArgs.add(pollenEmail.getFrom()); + + // Create the SimpleEmail to send + SimpleEmail email = pollenEmail.createSimpleEmail(); + email.send(); + + 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()); + } + } + } + +} Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -2,10 +2,15 @@ package org.chorem.pollen.service; import java.util.List; +import java.util.Locale; +import org.apache.commons.lang.StringUtils; import org.chorem.pollen.PollenBusinessException; -import org.chorem.pollen.PollenContextImplementor; +import org.chorem.pollen.PollenBusinessException.PollenExceptionType; +import org.chorem.pollen.PollenDAOHelper; import org.chorem.pollen.entity.PollAccount; import org.chorem.pollen.entity.UserAccount; +import org.chorem.pollen.entity.UserAccountDAO; +import org.chorem.pollen.entity.UserAccountImpl; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -26,13 +31,63 @@ protected UserAccount executeConnect(TopiaContext transaction, List<Object> errorArgs, String login, String password) throws PollenBusinessException, TopiaException { - throw new UnsupportedOperationException("Not supported yet."); + errorArgs.add(login); + errorArgs.add(password); + + UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction); + + UserAccount user = dao.findByLogin(login); + + 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); + } + return user; } @Override + protected UserAccount executeGetNewUser(Locale locale) { + UserAccount user = new UserAccountImpl(); + user.setAdmin(false); + user.setLanguage(locale.getLanguage()); + return user; + } + + @Override protected void executeCreateUpdateUser(TopiaContext transaction, - List<Object> errorArgs, UserAccount user) throws TopiaException { - throw new UnsupportedOperationException("Not supported yet."); + 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); + + // 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); + } + + transaction.commitTransaction(); } @Override 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -4,8 +4,10 @@ pollen.error.context.rollback= pollen.error.context.start= pollen.error.context.stop= +pollen.error.serviceEmail.sendEmail= pollen.error.serviceList.createAccountForPersonList= pollen.error.serviceList.deleteAccountFromPersonList= +pollen.error.serviceMail.sendEmail= pollen.error.servicePoll.addComment= pollen.error.servicePoll.createChoice= pollen.error.servicePoll.createPoll= @@ -38,6 +40,7 @@ pollen.error.serviceUser.getFavoriteLists= pollen.error.serviceUser.getNewList= pollen.error.serviceUser.getNewPerson= +pollen.error.serviceUser.getNewUser= pollen.error.serviceUser.getPerson= pollen.error.serviceUser.getUsers= pollen.error.serviceVote.getVote= @@ -45,3 +48,7 @@ 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.user_email_exist= +pollen.exception.user_login_exist= +pollen.exception.user_not_exist= +pollen.exception.user_wrong_password= 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -4,8 +4,10 @@ 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.serviceEmail.sendEmail= pollen.error.serviceList.createAccountForPersonList= pollen.error.serviceList.deleteAccountFromPersonList= +pollen.error.serviceMail.sendEmail=Erreur lors de l'envoi de l'email sur le serveur %1$s\:%2$d pour %3$s de la part de %4$s pollen.error.servicePoll.addComment=Impossible d'ajouter un nouveau commentaire cr\u00E9\u00E9 par %1$s pour le sondage %2$s (%3$s) pollen.error.servicePoll.createChoice= pollen.error.servicePoll.createPoll=Impossible d'enregistrer le sondage %1$s cr\u00E9\u00E9 par %2$s @@ -28,15 +30,16 @@ pollen.error.servicePoll.savePoll= pollen.error.servicePoll.updatePoll=Impossible de mettre \u00E0 jour le sondage %1$s (%2$s) pollen.error.serviceResults.importPoll= -pollen.error.serviceUser.connect= +pollen.error.serviceUser.connect=Impossible d'\u00E9tablir la connexion pour l'identifiant %1$s et le mot de passe encod\u00E9 %2$s 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= +pollen.error.serviceUser.createUpdateUser=Impossible de cr\u00E9er l'utilisateur '%1$s' <%2$s> (admin \= %$3b) pollen.error.serviceUser.deleteList= pollen.error.serviceUser.deleteUser= pollen.error.serviceUser.getFavoriteLists= pollen.error.serviceUser.getNewList= pollen.error.serviceUser.getNewPerson= +pollen.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur. pollen.error.serviceUser.getPerson= pollen.error.serviceUser.getUsers= pollen.error.serviceVote.getVote= @@ -44,3 +47,7 @@ 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.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. +pollen.exception.user_wrong_password=Le mot de passe renseign\u00E9 est incorrect pour l'utilisateur '%1$s'. Modified: trunk/pollen-business/src/main/resources/pollen.properties =================================================================== --- trunk/pollen-business/src/main/resources/pollen.properties 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/resources/pollen.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -15,10 +15,10 @@ #hibernate.default_schema=public ## Configuration de topia-migration -topia.service.migration=org.nuiton.topia.migration.TopiaMigrationServiceImpl -topia.service.migration.callbackhandlers=org.chorem.pollen.business.migration.PollenMigrationCallbackHandler -topia.service.migration.mappingsdir=oldmappings -topia.service.migration.modelnames=pollen +#topia.service.migration=org.nuiton.topia.migration.TopiaMigrationServiceImpl +#topia.service.migration.callbackhandlers=org.chorem.pollen.business.migration.PollenMigrationCallbackHandler +#topia.service.migration.mappingsdir=oldmappings +#topia.service.migration.modelnames=pollen ## Initialisation de la base de donn\u00E9es #choiceType=DATE,IMAGE,TEXT @@ -47,12 +47,13 @@ ## Repertoire de stockage des mails a envoyer pollen.emails.directory=${HOME}/.pollen/emails +pollen.charset=UTF-8 ## Nombre de votes a afficher par page pollen.ui.nbVotesPerPage=25 ## Adresse du site (utilis\u00C3\u00A9e pour les emails de rappel) -siteUrl= +##siteUrl= ## Version de l'application version=${project.version} \ No newline at end of file Modified: trunk/pollen-business/src/main/xmi/pollen.zargo =================================================================== --- trunk/pollen-business/src/main/xmi/pollen.zargo 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/main/xmi/pollen.zargo 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,134 +1,148 @@ -PK�hz<pollen.argo�TKn�0���@�AQt!kcwѢA��]�4� E�9�z�^��H��g�Mh1�=�<�3,��D6�T(�u�1�lDm8�j�:�b��^ȁr��" R8Ev�}��P��'�Ȫ,N�gP��1V�2O�.�� -�ơS!� <����A���[�"���T/{��U��)(�%�FAg�1�B��K0f�J��z>��&佢� >�F4J�aG���x�G9����2�|�G�(�R��D4J�q\l�ǑW$�&�R8ۛ4��d��~Cp꣖Z\���6��V���P/ﱁ=6(�v�AmZi+�j��؝��<[{��+�3y��Z=xn�Vϧ0!���vI�)�N&h�v���Q4��2�t �c���*�~���z �:������ͯ���S����ۙ�|������z��0��s۴���?삂��>�e�g��sǾ�n�8{�x8r-'R3;q�\Ȏ���pF�X�ܫP�Z � �o�ƭ�z͋i��P�m�����N�O��f~c��;y�oXע���L��/�η/��B]��̎��@u�PK(�:K/.PK�hz<pollen_Modèle.pgml�]���8�����8,�@�G$E}dҽ�t���#�I��v��m5l�����=�Ŏ�mI$Ke�j�$��,�毊���U����a1y -W�(^^���l.��,Z�/�>}|�M�v����x�����?��<�� -�����w?N����Y2;cW�o���t=&�ū�E���v�3���*x�X'AM�{��6�d� -/6�ŧ�Y����5�:w��s�;G��Y�����8�+��;���ݝ��ܳ,�U<�X��7��X��ُ�����Ͼ�b�_�W��q���hn��=���OI�Q�rb��� "���<��o�:�]��w�b~�N�U'_�ߢ���]�����������$YE��$Og��~�]����;���h�`�^O�E��<�|%a�v�ϰx������E0�'�*}���*z -�p��[����*�&�r���D�}�t�����v��s4K��$�1�a4�O�)��OI#+�~\�xB�d��n,�]�h*�Vo~�ta�w��� -��(|�9��B�;$�r��v���W`�eJ�r5PAVH -����A��rو3�`�I�/�8$��H���q`=j��8&���w��%��:/�y~6J�E4�<Km[~�6^̔������rP����:��i��07�M���WY$��?�l�|�˜�b^�?koX�ٸ{!�}`L��rc��;Lےr�!�A��!�+��/��i�Y&���+hm�s�p���U���}g�����;e�,�ܩ��3s#=3��>�y���5�8 -��@=�͘b3nSP�����0U�xuԘ�L�Uv���)LbU�8r�=�h��{:�0�`�A�K�r�aS�:#�ꔳ=w�,�?�9g�R�՛s�s��Igd�qy4�t�=�I���i�J6]H!�fׇp�»$��g�W�_��YęT�L-����#�g��>�v -�HUh��@s�Ç Z�#Mk�&�J�Έ4G�s:v�,ް�Q-�N -ԐK��F�9���!Z2�o�x�Z����Q�ˠ~���-c�m�O-�^ -Ԯ��k�X�x��!ެ��_���hō��"Z'0��Z\xe�iʱo_V9�x�ı_���Em"Ld�|�m��`B��<��0Qn�;&BR�Ȳ�İ����h��Dm:y�I*d4LTx�w;L��0�UX���)C7�DYTơ�b�D)�a"$��DcB2�(7&}}Z�+�02&�f�dg�p��\[.k��$3�0�3s�83w���/LT�$�2�5!��=�k��V��T%n��UL0�����lA�b��)����^>�Ѭ� �X>�Ѻ��QO��������:��Q5�fx�C�Ѻ����������>5Z'k��r~ȁS������J��� -��d�]� �,w��C��ן�ftA;m_�kdy#���h�N~Ҏ�" r'S(Rn(�1@�AS�����6ਁ�wD�I��;ki6D����Q�M0o��r�NF�t�� -q%V�kQOBR<�@��xR���$�Өm�����q�Nz��S�$,��p�t�c�ԑt��,�C]ԥ�G���h��@F�I�w<���`.�ދ��B7bIX�%���I���7�q�}��PBI�!ɝ�冤�$�d� -!a�!�Զ���m�qkˏ���l�\�� -7�0�ݨ�o!$A�8J����-�NT��u|����&~\M��oq�`����j�Hg��E@�E8W1��d�"��N���r����]��a��f����}M���R���.E�<\��� �Z��օ�I���v6|dk���e-�n5����oq_�O�� -�2;@AxՂ��Ȇ,��&�:���_�b�Wc�ʏ�h�1_0�����ڣ�e��d��[tS0��������L���B�=x�|u"0>Cܢ���$�d�8�����:�}�sTa�d�ߟ�Q%'�)^x@�AG�P��6U=��+sTqq4tT���8��l?UԠ����)�.́�T?fZ|$�P��(Yh��`%�O��H�R�fT�j��U�r;�o�y�ܮ�u`%�OA�9S�G� ���"���P�P��Y���Aԃ��hFR��/[#��-C;���`W;���`�z�a�E�gڞ~���V Ð;�S���ͮ��s3ث}<Qu�O�U��^���^R:�f��AC��굥�@|�;��qs�>��p�Y$�0�^f:�h�˭z������^��t|@���S�#o��DիMׂV�c���b\D������)�c�6E;�F��P�^m�DUjؿ7��GykET�k7�aaS��}@��)�I��{�\�y�<�E�x/"䵼���LQ@p�C� ����ܼtjO��������X�%���K(�-�)#���� -T���0�w|OQ���E3&*� -��SF�=e."�0��ck��qOY�xŞ2"�)�I�.7$}�Sv?�4��me�춲Լy6ݙ���U�����u���L6o"=�����H�6� R��Q���_���U�lrܖM�h7��P����� ȻM7��ӭg�qeӍK��to�L�#Jj�� -*�t�*?��J��J!"Jn�~qz�N�閛�zt�� ���U�.��r9�`��ǫ��)��e�]ў�+u��^��(�1��X.�[�c<L��x����U�~��MbcL�o�m�c�~�g�W��U|#��~"�zş9LHLl�a�3$S�3�^Z���߳����r�P����>����L�S�S��ş��ʜh�#�I|#�U�gʯ��[��0 ��u�Yt�7�$zd�,J��x�)I�Du�o�;�(���n9�^.�D�`�%۸��ҝA��Sos�q�iGq&կ������;K�~i�l�z���ٯ��\\����"SE��+S��o��ZV���\�/t+H^����7�)�Ka��!�E7�s��ωu��,t�j�O��lJA�+4�Tl� -�͌����N~���������Mj,�)�NE\�pQw<�I��f��*)A7b�T�i�� �zx�N�1���]ѤBDS0y���|�=��a>�lĞتM3�d6�q��a��h�n�� -�P%�)6�rI!����Lڷh&�2�ˢ��ܙH�E;�I��29p��4��AN39�)���ӬX���iֳ(&<,N3��&Ub��&�L҃���\O�GͪT aJ0{@��Xsb�s�d��h�h.C�{F���n� -nX�qKJ -���A���9�hl��J���!U����`�DOa��*��E?�jP���e�1zh�[����C̀x���zU�A��㝚��?��7����Vl����=�S�-?�n�̞M=X~ �:���N}���*��*���y?�*#bNOR���r�,���O��A���Ŝ Osd5���'��t��ӟd�CS���~�9�~D�_���t=��v��q\8�E��˵2r�o�ơT������W��"<�Qȋ������H㬃h\v�քw{E���r��ƹ}�q -1WO�,-��q�{L��o�ƹ}�q�[a`��8l7���<�8��y��u����]��e�6�ޱQ3��w�Omu|�H�/'��<���v��2���ΥN%�zBr��E�r�z�5�B�=�m7�������c,��(�'�zJ�����blEU�n��zJ���K��Z��r}c�k�xE��'$�Jf$/o[nF��溭�W����pMmE�ζ���[�mm%�yJ��l�(R��@�Vl��v��,WA -�4J���<����)��Um�:Ǝ��qx�_O����N�$�a1�Q�=9�ǯ�4~WD`�������W4����]�=����輥������3���r��.���h�.��UU��zL��= -ʒRnȠ?gm6�o��h�FCZ%�RC��} -�6�o��Ï+���O�ؠ���x�� Ѝ�iz��o_�k���P;Г�ҒM���KL�'���lMi� �Z��#��d�ABKv�~�UF>��$�/T��rZ� -��G���� -�NZ���~v��ϴ�Ӊ�tf�ߟ̖A�Jn���Ǩ�Ln9�����Z�����˵�U -��-Q���8�U��������od?Lk�#�'��H�*��2�⽡u����L��e���ӝӄ���Fw���*7¼�t�D��r��:�C�R�0��b%uuK�'V��c����*T/3N����!T�ٞ3��K��/Nl�)�诘�C�r_�?�|-�(�>r9}�c��h��0d6�p��i:��&��t��l�����9�}>�)f1M+,�MF�� -M�w��0���i#�·�ӍjH���}��A>�f�]�;K[1�v�e�?Em��h�;�[7�0�e���|}��sD�,w�:����h�����,��l�>O�w��5�X��w�4" -�������j��MoN�9����Q������_N|t�G*_�� "�``�_q�nν������7�o��"�k���8��t���R�A�ka٧�A7���@�8\i��w�>�}�����=�D3�����H���'��1�_+5m.ݙ6����9h�is��$�i�Ǚ��6ɥ���.9A�8ʺ������&��kBm�+��O����|ܔ�`*�N7r���z:�7ˤdov��`D7<K�E{�l��S��jNѡjު�����R�GQs�'�Sg���g�B����q�S������xs+uH��K�������u{{) -�ͼy�� -�=�J�}���Л|��^v�NO*��v睄��:M�~�$�_o[����6S��B���qJ�_N��_�뤟�`���'���ж� -��+�2��l�P^�-G!5�(����jZp�w�QHG�m��Ⱛ���t�QHG�m��8���X���(L!�rR�Q(�Ovv���_��f�T� -�YWaj܈Cw��Ԓ�x��ڒ�*�Bٸ1x�۳.�i�\�6�$�Gɒ���&e��⊹�?E����� -��d����~���)e�!�?N��,^��c� -���J'�wOQ�=���,���,�v�5]�h�EM�&�hc�"7��.�)�Oq¦�q��\���mW�m���S�^���&-:_O�b�!�ȭ�q�+=p�*u�6��Я.�V9NW��wm��^�|L�֖��Q��l��-&�k��r`m An��I�;m��tՓηڦ.XĄ8p(�;.6���M�G<knD��ƫWT��U����q���Ā�s����nύ� -�g�Q8��n��q�7��܈֗4�����M�7��:ߠ�oT�-�s��ķҹ� -��9:����\|��B����=�-�9� 6װ��?2w�X��td��%���~]m��y�'s&�7N�^�9}�5��ɜ�{2gD��xT̒��6��*�]�Wњ3���U�f(�`\����.+iW?q��u���aq���PK�GCY�8PK�hz<pollen_Services.pgml�\�o�8���NSOJR�#]�i��Ӥ�6���4�(8�78i{�?�l |ٸ�I��B�d�1��y^��k?����җ60�QLd0Pd N�����_.��,����y�q��ۧi���]}�� ɴ0p�+���N�V8�-���y�4��^d/1�1r��q�v�:��5\x?��8~����o�}������7U����8�̑=�[�}KQ�s���F1�)� �%��W0� ��ɔԏ�(\��K��S����椗w���v���'я>R{����W6^|E1���dn�1|��0��+��ۉ�2\�Ȧύ� -I���:�E�0��+}@�8�5�{N�,��j��2S�>���I���a4�o#�?`�iZ�5��m��4M.�W��f��J1�������a��AN��DV���}�p�\����m�"o�'2{[U3�ɪ�QJ��n�$�e��}gP���Rw��= ��vY���n�A3K��j���L�&U��3ڛ��5�k����Ecq��{���}�X����F�U#t� -k�w2Bic�$ї�_��y2 -��W�"l�ș��VT߄��TҾc�E�D����9r�t�� �3���/|��~�v&}� -������"ЇJ�à�i��A>>K&��PG?R}��� �<an�nF��3e�<��N��ǧ��+�2QD{Z���f�reGxI�����B�j��$�(Lݡb�&�%��.��?%��.�V�����p�;��b�%~�+�8K�dS�9�ی���NB��r�����<#7�A����zl�y�� �������Alx�8�Ѓ�xK���ߤs�>�q��D`��%0���+�����w�p��ୀ�x'�$���߄�}x]<'i�<>~�rw��q<^������<vS�����v�p�������U�{,��!I�N��/zZn -�H����jj��Ky��Nf��!��$�� ���ܚ L���3�QG������b��Fѡθкq��AV���0J�FB��;�@�#x��@��*oL��06^�>E9N���(�t7�n��P����0��ڴŖ4!E� -�Cvdh�7Q')��A@��A��ʪΎ��ڭ���$�����at�&_���R��#S��Z59'�f�L��%���+�>�v��.�#5(�=��b+����Q(L�+K�-���TN!]��:��_S�5^�5�g��l0>m�'���� -�e�|��'?QP=��1�@�E������oP�h*�~�\dl�Q�C�' -��������P�v�L�n�"w#H�ܨ��l���Os�Oһ���ݪ~�'����"��%x��D�n���C�ś1U�+:�Uz�7�H���F���4o��y�������!z��"�د�-�'�aO��\��R�F�V(� -7��?+4����M�Va��F�� -(�l���� -0�7�X)�VN�9mw� �<y��[�q|F�̱���@̮����.�T�7>����)�`���CK���8������%�!=Cޕ]L/�Ѻ#��b�x�C�9-�����!FgG�y'�G82R/e$WK� -�u��]�NP/��{�|=A��C�� JwΑА��] PNX�.��3,\ڛ0B)��L<&<q~����n�H�/x$b����cb��֨�Z��z��`�h�N9D<x(*��{8�9ԩ����Gӓ�PK5��I��CPK�hz<pollen_Context.pgml�Zmo�H��_��S�J�a�1�خzNZEj���T�N� Â���hY祺��v�g%!�df_`�yfg�y �`�ɨ��^8�%$__�SLYz3>�v�ir���L -}Xp�����$����]f�.�FB�F�߱�O�0I|\b�̞w"ns��q�t���Βt�?~�v������{�b� -���bh�����B����y�@1UU����/H��x$O��;.�A<�]���;��?���9<�y�����G��t5�HB��5���3��4�#�"|�\L�}�?|;ROh��-��'���A���a��EU�)�5�4��Ȝ�ڷp�}�P��G��(�;4�l$��� -�o8?u%I&O��&����0d���8�;.ܮd;�^��A�I���z��}�斸|6���k����tc-*�դ�Z)�((�$Ilj"e��d���V�r�z@�^lY��kn�]�\��:��M3N�!�����<ʠ/�_���r.`d���� -��ۤn��� �����QT¨*��%�G)�n��$����.G2�p@�LJ�g$����4p+B�wD��j���eĉG{!,8s=<~��!k&}�>�c�ݚI�Ln��O�Uf���=�t��ɣ��u���s���l�b�� -�HRa��R�f�=��>��jB����3����mo�M��~�u۩��E{+�=�۶����ĩ��E�ip�3�.9��]$@;e��i+��s�sz�9-�P#�,�"Y�5��+�1�l�����Z=�&ɩF�'�e��;w�=���Sj��]�+�9t�;i � -� Y����7��y��E�ۆB���AC�E�[۹�jg����X{�v���f�[�ܫ��fh/vv�1�`�����a���:2�G������~+5Ōf�0K��̎�CbJi���F(�V(����=|UJ��E1㾮K�0[0��P`��:C��%cpb>�Z#6���\זi��IKM�߶UŨ(hh��\�f��/۳�5E -��I�}��v'�{E��l��{�����[�����ˢ��e�^���E�=o̢Jc�g�� -W=`?:��ҙ�Y�֬Y=�~����5�#�YTh� $C��@�Uo�|X��(kkӢݶic�C�J�N���U}ZT�Ӗ����i�c�=�Fm� -�ھnm���W�*�ڊ7h5�O��o��+[��W.�u+V�f��{X�<�X��B�����+_2K= ��[@��F�AAq��:��%sP��-�5(��C��q�ց�O��:�*?��YGdb��S@h���y'���_������=�}/@�8�6oO�nϷ ����mԴ��w�i劣G$ 5��*���Cp(HM���*KYE+�]��>�@� ��V襜ݚ%G��<�����iz���?��PKd>�7�0'PK�hz<pollen.todo�����Q(K-*���S�UP2�3PRH�K�O��K ����Z()��q�(��;�D�*���+G���*(�8z)%)J -@% ���,.2���E���9e�)�E�%��� Y,B3PK4�[-m�PK�hz<pollen_profile.profile�����Q(K-*���S�UP2�3PRH�K�O��K ����Z()��qq��e��q��ÙPK7Rp:BPK�hz< -pollen.xmi�]m��6���_��me���LR�$:Y�i��sU���c�~�IHËD�Hjl����ȡ���@|%hw� -��Fw㗿~�m�'���J�|'A��l���/>=��;�o������a��z��ۺ��O���������m���v0�яwR�?C���v+ߑ~���%e�Z�^+i�|�TY���|'I�u�Gl近��m�:���[�_����3�aZ~<x�`hB����|59� -��_^ez��9n�F�ӡ���'ɇONm =�O�ly2����J��u�_��d����G�YB���E�~��$eߚ� zy�a�M;���p+%���h�ߧ'�/�+C��Wo�'=�0��!z��#Q���xfcm0�N�>(�:�����kE��������`*��k9����w���t�G���[��IN�q-g�X�x�Ok� - ��煙/~�`�����`f��T��dG��B̴a6h�L=7{x��0d����L�4Ե�ZQ��ش�dՅ<�;>]��T�S"�6AL�:�y��s�C�o�L��&�v\'�'���#���w�2���%���㜽�2i�(�Q���B���ɼ��`��SEE����Z�M{���Z7 -�ZCH�"k���L�04����n������ �Ѭ��*ɮ�]�dž�-��F|P��lNmY1#Q6F�m[:I����]��/�?z���F��1�?�[�bdIe��/��y�dN��YVX�Kȱ��c����,��a�:ZEx��e���Ⱥ�����O��"B�� <�y����w�CH^�����fD��&d����t�g�?�|�u���}��E�k�M;�X���@����-zL� -ϟsΑ�l��lW1�6t��\�xR�dѤ�]�O�H�UC6�9����Rg��H>[�R����~�����>���fP等s��m2s�Y��ҨI� �-��"%HUu(�� )A�>���7�`z������H�mX����-`���s�a`!` ���`@��alc�4_D�d:QT��IJ��L�"��S�sԺ�S� �OwX c�!���U,k�)�� ��������ohf@��?Y�m+��,^��a���A\��H���Ŗ�C�0��y���T_�s���C� -����սG������G��x����$�*$�z���tJ�vYzZ|��*t���v�e! �.�c�{�eWޙ�P�4G`����J�I�| ��ָ�Q̚�B]<b�9�N��C1�mϚO[��g'�j����ͅ��;��1QMMi&���6l�9!�05�-��}��s3�WhB�Z?�����F�F��<>KK�����#�T���W��������a����+'fA�Y���dp��'��(b�����E��*�NS��=/����s���{��;�oC�9���FA��:���ps|����^���B?}e^�xY��/+���S�$i������F0e:��F&�Wj�?��<R��cA\!F�N�:Z��{�@1�(r�o�!��f��>�E�8k������PR�����ݖ�Y�wpCn�Tz���XQ5�B���L��f����Oo�ۍ�`�h�Q��4�@�L����B/�x�)��Yٹ�&��2}DD���c�g�P���Ep���"+O�4(Yi$�%�=F�</<����#�x-8���)�^%l�\3%ceC��YN�I��� /z���int�1�S���.ӳ���=P���u�}�Po1.B=`��d�s�[���O�A�C��a��(�"��B�+���*��ړS�>>��a�Z�\�����*����4�L��V�B�� �烎���Ө�����/�o2��>r�̃p���/"g8��yY�#�6L0�0գ�t��m2�䃓�n�m�ψ����ɫ�w�nrqPF���S���k�x� -α���sȭ�?zt��Bkq��A�N���2�}���@a2f:�:��#���)�%�u9��p�0�k�ҭh9�����T#ѬMO�E�5C����) GǙ��W�1D;��x-ؓ�m�& �O/ -�?��@��e7�_�>!��W��W_ -�U[o<q����\�P�>qsB�CO���Dbe���^�{�<|��o,�#�G� �eu �a*�u�nu��Inr�(�XҲ��!���ɉ�Z��Xg��{M�I�<U�-��އO�>��Bn�hN�}M� �1�ZT��SC։�eT�~���vUhf�����L�H��t�2]c -����"�rV��F� ������ �Ej -��V,82��;�V�fNU5/��|�G����c��;��2�h� -<Hu�S?�Nk��Bw;�L4�Lm���J��g:( _��@����c�X�ڝ^P�ƅP2�Æ�2-D�M�|���Ġ�v0|�@��6�Na&r$� ݡoND��Wgu`�W ��'^ϞX����N7}�;�/�GI�8m�t��FQ�������N�kp����"o�G���pH����;{,��ت���� ��4m=Rm�$O!\k� ��[��}��@� 7����T ���8n�မ�me&R�t������H�5�"T����|m��+���[��@���tm�,\m��+���[��aC!�I�]�;�5�ޙ��,\m��T:�ĕ���}����ª/��n9$���]}�N�����p�E��W�FX��?����z$�!o; -#�N�#�t�$8�aT���S�8�l} -e9'��0��xw�g/�7��<n3���H_��p5���M��F�˘:�]9 �'&����0���QD����m@�&_1W���b� -#kۄFd:\ -dHc]PNja<����$�t(j᱁幡��B� -Wc"01���J����($C�up���`{(���������|Mj���I�gG+�7�B�_rٮ��n)�YC��fN�&9g���t��+�Fbbl�u��E�2�2zb�Mte.�0^��9��1q9��l x�B8Ǘ%;�F�_;� -�t�� -��PZ�)�O��n�Ϧ P�Sg:ܶ��Rc -ck@`W��A��@G���K���E)v��K4)�ݘsV�����ܘ�(��5��Ɯ<�Y�&no�Q��댐@^���7�Μ47j�B�0�A�_"�VL�!˄�VxXҲ���M�xXm>���B����Ǘ>0�����Rŗ9� -e�XҲ��ɵ�$V��!��Y�"Z�#�'s7q�l_���Y�\�@�m�2 �Sl��f�������a�>4|�x��H1%�R�!$.��.���P�b�9���m7%���{7!���87�1�M3�Oy�L(f�Էh�$��Dc��c��'�V�آ�����U�9E���ݖ�M!���MxMz����M���7�D�bIa���|N�`0��8bc���s�c��8Q�0>s���@cg�Xf"4���m�N�>�D�~j,=���&�tU���R�H��� T� -�z��,�,Y#so�/&���z�k2�1��1�rCU�uT�K��cM��|��9�!��0�גY���69ƙW{�Rk&�59m���s���Ts��v�VζY���FQ�9��*k�L��m�##�?]kk*[�J4�E�!|��ۅ�vSu�:}��@�C�ԁ:��Yx�s�c�&�v�?hF6���x����*pS�/]���E�ހ~�� -F��"�H}�����D�mһ�f������g!�� -V�m��r��u3��Mնuҍs�"���*����*��u� �RN%i���Q�=pC6leqYթ� �ԣ=� �%]��֕��[.�ŷ�'�3Nv�=����X��i�o����ɨNdO���:(2DV9��@�Y�\��eeU���3�饖�4tb̛�T��I��1H��I>l{�M��=qys�^��8G���\��\&(o�W������3����Љ�խF�#��̶w����� -Z�"��,�^�*F�[�vU�JQ�z\�tٍ2V���r��#��fJ�ܖ:��]ulф:v;8[���6�Ø�,*p�8�P,�Bֆ�6�&֡z -<�P��Qb,�1�5ᷢ��{N�4���אa�Ǡ[��#ε3e$���NB;��qɟW#��"��!�-�Ghј�v�Rβδ���DWa��L��WN%�NIՈ'w��fW��k\�=�x+���O�L#8AL7ú�Q���[�Zԭ -�x��0�;e4=Pւ7L�C,l|�����m���9��U�<���h���m�����O{�Pܦ���S�5g��rd_o˭"n�6�V�<��5z,���M�̱�NT*Ei�W}0��n/��'U�x0fo/q!�*F���%��بN��8�D� &��qI�:�\����D -�4y�Е���L��ij�d��o���a/�T,�&1��@�+��`�ϡ�æ���R,��A��C�_��2)$��'��(�s+/�( N5k�O5ɗ�&!�|�j6W����/����C'���s��Ug1�nn@� �'W �}����ˣ0�����܉r�����;p��'�Dkp�ҏ|��!��5e?��_�%!$� =�d�6�k;EW�V8�,�v���zj��w2�� +��[`�Ъң�Vy�i��?����9ѭ�%�5S5 -u�- -�A�ԉ�W�%��O��ʡS�t�n���a!�_�PxK��&bř�X[ -c��5��ʴZ�,�gȿ1��eSi��7x�J{�51���-��zF_�T\86λř����{��B�T'��K� �����^����#C�逤�!�iJ������b����uC��L�]{��r��<S;�L��sKgBg{C�L�;�ӕ�H��}Uȉߜ �a��������p7�{�-t���2|���Y>��a���5"+��d_�q��K�x�Ԉ�Ce~ -�/bne>��[�o���[�*�',���5h,���jL��,�fQ+�6��pVݩŃ��=�<��]��b* -4��p6�ɇ*_���F������Fӹ t�� -��Y�D{�J�,��"��KynmH�c������+��)(IAs�F!i=f�en���U3Ù���a�rO����mo4��D��̉���$Bf��cQ�/3���Y�#�k��B^�&�}�G��;�d����kL�a�� \'�`Z_=e��9198�b����_�f��5�2�"�ڟqVC�Z��Ҋ���Vדh6L]����c�V�&E��F8$�x 4��� -�tH.�fMe�Rg��;PY9���'7�Z��܈?z��K@�Y�<���堀Y��/�mͬzwg�ճbw�hw�uJ -���#&W��U�:י)v��-�O�mu�0��=�/*t�D;.R�2�}U}Օ�5Vr�%శ����X8'��JO���^c!Q�=�CG���'n����larr��,�,T�º�xH��5rn-b��%-[������=FBy^�e�-Za�Z!1/6=%sZ��-̽(R`�5`�0)=����E� 4lC�(8��9-[�bBzr�gY�k������ -�6r|vr�}��g�`�e�H@�@�#{�=P�2��(/�meq_e�1���@�!��{���b�l^?<� �tr��ܢ��7����{���:m`�ݸ+Ϗuv���� -�O���֧�v�PqT�bT��8�)X�m����"q�܌G>�e�#!{1#��_J�>\�q7l�'4�9) -��Gj�K�+�}6 ��o���Չ���ͫD� �3��yf��g�IN�\&c����je��sq`a�#o���&Z?��1L4=3��l�F ��÷� -��2'��~������k��豦Px���PZ����N�EM����E�$O�Q�L"ԄvCbJ�م����@qw�5~/A`p�2�xw���0PLKi�_Õ�TT)XP�a�+Ƨ�l��N��q����r \l��.e�[/�8�1�ۅY�e�q0��!������8V�i��K���JŊ���^F�<?��0[o�t����^Y�l�F����x�P^83�Oqa�a�F�U�r�K�Ox�Y��J�^3"*r�zzl���Y�C�����,�f,������j)��Zz5�V�\��O^����_~s�6lG�_��)��Œ���u��~&1~�I�����R��6������0�"����=q�9��汰4�B`a��P^�/e�����;1 ��fJ��/#��2�pY���~y�\U�#mxHn%?��=�^�d$Nj���F�a�ƙڳ��[CC�t����P�e�*/#��z}�G? -1x��i/풱Y�M�;�s��HQ���'�)ZMT�H��W'cyᅧ�*i(��Z��wC�����qef��~t6.�^Ȁ�� �DžA��j�=y�99�-�DBb���$����q1;ֹ������X.RM�<�9DLs~IN6�����ݎ�'����ڟ������./�.�-w;gۺS� -m�!�� -M�>B ����Vz����S�U�a�������䫁4�m �G��@rv��Y����}��|���;`�osq�M&�>b�9-=�QǗ;g�1��41�����>�����>��/��q��ĝ���!������)5ŋ��PX���K�� b��p`o\�aP��)�9�A��РC�c���7���P��D` -�f/���F|E�JNwi ٢WR��}���.���=��I�M[��YxNT�v\|]��j�ac�*�G<���>U;��C����n%J��v��C��Pl��$g-���%l�n�������!���aƔ��9�f��K���;Hp�p���~��%zz�)����<�����tzxt)Zے�!�X�~��l�����Lc�>��Y�`����(�S���J��9n�1?���3�������-��P��em�F�n�櫮5;57�������P���p�hi$�auaׅ�E�R�I7�I�ό�^�.����]��m���^]�۟o-����ȉ*�/�8J�U*q���-�<9�-�#���o�[���L�:��W�bi�<����v窻�����Qˑ�]��W��O�F�SDpd�#�2�0a9���r�cpa͘PZ�a�zz�[f�F�8콐� -�����{�e5ivf]����QX��ªhժ�-]�U��{ر%q�-�dc4��丱Vd��#a^\�y�r����3O��[�}Do�����B�(jߵ�Q��m��/Jo4��[���q��/L�47�2= -+n`(�ڷ?rk��}�q�D -�z�b|�m'AB�{L -:F -�c��SZ��ٹ�{-��n� ��(�RFD&J�jq�K�!�""��.�T ɍ֮S ���ϰ��`�1��y�E��WW�Q�x�O���H�E�9T!�)�[���*M��!v�� �٪5����ǣ-������<o��"��Wu�2�z��_!R�p:0�0����]��L��}�����H��Ш0e%��$^��-�]'���+ -�I��T�������� �J���qb`RQ�ˣc=FN=� ��2��U�,�?^2���C�߇{X���|��o����[\e谅�9x��|�90����ş�Uy~��/0,����'����&�^T`���G�T腗�`5��cVo\��r�/#� �w�����_/mNXVT赺�k$~�B��� =wx�-�e^Ӳ����1�Ύy����V�<�{�r�#m�a-ٞu8V���tN�pw؆���b�=������>p7yF_����Bz�ح�����t���'��=o�%���:_dU����d�m{v�>.UV�����l� -N�<s�Ԗ�A���d0��XU�@�)�F��.��A� ���� -_0��y�f�\l:i�E��f�&��Rs�Ԉ��}]j�j�nۊe@�y�أ�d�u������1_6@�l�S�K�v�s�,�$����C�N-��\����v�?���v����9�O;��q^`/�wM9������#`�nF�9QT����˘�Ԕ� -pW' #�G�VR�=HAv1T�At�\��n�&/�K���p}�n�Z6��}�%n`D��Ȗͩ-+ft5�12l�"�-/�u.6V��MnMJY�r���e���K���h:�0R#�!T� -��ոN�e�B�g�O'*бA��3��X3&D�G -�]u�\�^bz��Ј�Sy��j�9�V���&K{�b>k�h�0JŖS�5���Sѱ^�Lx�;��y����������o~���AMż�{�|^��� -�+���c>_p��yOW߂�eK��p.V�b�S�-UطT�r��P�q��QO����M�*�\�9�e�ٷRx`ߪ�z� g=㾲��� -z*�.����m�W�mŅ"[m=pY5⭧��lw�Ͽ����9���x����S��B�b�)�]~ʈ����} -��B��PxP^JO�~U�}������B���t�6�FCEׁi�s�y��.��h��Z��r�?��Y#�~�oGF��8e����GF�[~��m�+�qazh}��h<�MZ�۔O��\l�zOO,c.4�q_�.c.�o�W�˔���Ŵ���)�;�k������(�Zq�>.<����k�4�e1�Bxg}�a��y�M'��|���ˬ<J�S�q�r��4Rmq��q�=9Ğ������1��[?~���;�i��b��Q����K�s��,ʋ�qʾ%��8-��~�R'�1�1��\k\=\ij�jL��89��ՄUAK'6mI�&|y�4p↧��Մ>GK'�-��\qR!���[��[�=eE�r��xg]#9.�4pjAKv��4pfAIv#�ݴ4��j5%i�5�5q�CK'1��d�Mm�����6-�MĤ��@���=�8�&�~n:�Ę�m��~���٩��@M��\, -���� o.�� -�bho�b -d��*w��r����*���,�Tp����D�\2 -�x�� �4�zFCW�4�7GFCWqd4�7�CCE�Y�/��#�6L0����t:�ֶL Y��:�\��w�۲�\�������c��<�`yLJ$+u"��;�Jd!������&>�2�j�Z����p�Bsǒ��O2k�˱��ZF��8���O˨������=o,4���`y�eYh�3����zw<�대`y��$�;��rQӢ)�Ʋ�Wٸ���c0w\�9&=� -�6'@�4���6�I��<��Ф$��|S�@�64�_+�x��G�f���֛,�踼�͈'�85��\뭋LpcoF�6�&�y2�(�m�dL�5㍉�>2�!L�N?�� -%�V&`�q| �]�gAmٌ��r�sF�]�g�W�2Ь� -�� (�䙻�@i�Ȏ��,��D��9N� �����4�z1ܜ�U�Y�x�Ttn��(h�x�TZK�oA\H�z�s���ION���O�{0ћ�$'�����v,:��Z�m�/</|����N��L���>���V�<���^��8���!���N������� -�4�(��Yf(�5�`G� -��pDލV�i����v�s���sk#Y^�}#m_��<�m[�� -���⳧}�Yn����E��W���0�� -�|����PK�X��U&g3PK�hz<(�:K/.pollen.argoPK�hz<�GCY�8hpollen_Modèle.pgmlPK�hz<5��I��Cpollen_Services.pgmlPK�hz<d>�7�0'pollen_Context.pgmlPK�hz<4�[-m��$pollen.todoPK�hz<7Rp:B�%pollen_profile.profilePK�hz<�X��U&g3 -&pollen.xmiPK��L \ No newline at end of file +PK�~<pollen.argo�TKn�0���@�AQt!kcwѢA��]�4� E�9�z�^��H��g�Mh1�=�<�3,��D6�T(�u�1�lDm8�j�:�b��^ȁr��" R8Ev�}��P��'�Ȫ,N�gP��1V�2O�.�� +�ơS!� <����A���[�"���T/{��U��)(�%�FAg�1�B��K0f�J��z>��&佢� >�F4J�aG���x�G9����2�|�G�(�R��D4J�q\l�ǑW$�&�R8ۛ4��d��~Cp꣖Z\���6��V���P/ﱁ=6(�v�AmZi+�j��؝��<[{��+�3y��Z=xn�Vϧ0!���vI�)�N&h�v���Q4��2�t �c���*�~���z �:������ͯ���S����ۙ�|������z��0��s۴���?삂��>�e�g��sǾ�n�8{�x8r-'R3;q�\Ȏ���pF�X�ܫP�Z � �o�ƭ�z͋i��P�m�����N�O��f~c��;y�oXע���L��/�η/��B]��̎��@u�PK(�:K/.PK�~<pollen_Modèle.pgml�]�n�8����7X,�@�)Q�6�4mw��-f���b�X�����r�,����/vIږD�H�lZ���˒m�����>����~>y���$]�9C��$^L�(Y�ޜ}����?��������oן�����aFo���}z��䌽����^�߈��t�<d�����"\��5�����p��/VY�%����z�����:����O��p�z����]�����9?G>��w3���B�������ܷ,�U>�Z��w~,������i��;�Ͼ���_ϖ��a�·df������O�?��r�8�� ��+���fw_�Ur3��܆�U��*��q�==�_�����!^��kW���?�Y�Ln�Y,����2�}s�/J�o���n���R^x=M�����$��7����K7g������[������1�����s�x����<.�"'�7�M��˧7g�ݫ�I����������.��{wJZY��v���&��k���@D��6|�[�����TY��g�͑\%z +�!�Wct��D$��[�bT���2+@�Pb�8�,�z����V��]L��u y���@]�u���a�c2a�~�6]�_A��<�g�,�'�7g\��o�y��d��J��@-��,�M��f�\��)vo_�q����гI���}E����}�N��ݸ}!� L��ja��;L˒j�!�A��!�k�����W�i�^d���+qm ����v��?���~�V̹�݊9��J�Yʹc�9�I�Q���.��X�sL��Q����>��Mu�s��=c�6��5i��������c��*$r0�{��bw�u��A��D������U�8�[��f���sN�j�{z{NxNw���t�m7�xOy�J�s��8BU6=�!|;�8?�@G�)��rR~�1����Fe�bVV!@��z��e+8�Έ3Ù���4RڷG���}����& +H�*K@Z1�W�v +u����j�j�%`Y#��0�O�4���k�k`kw��A��f�;��R��?�P� +P{[�y���u�HO��zՂ���@ �F��<Ye0Ң-^9{�r�[�u�8$��p엖 ��M��,��ķ^N�MX���q��齊!)Jd9%f*6떗(�*/�"/=H��D2#*=��#B@��*�=O��VY�!"��,".ˀ��1B�:B��� H��/���D�W�R#@�L����\��q��Y���$�0�_��S�Q]����De2H��U۶�qO���)���p�� ���C��.�~��̋�=S�����|L��֊dd�]�2�����Y�>fq�.Y=�ç_(�/�z[k���tt�=o +v:52���;z��Q��)H�Z5zƔ4��h��ѣ�G��ባFGe�����yC���~w�k���.�<�1��9��j�5]jF�$��&*_�hoѾM����4"�2�.��P��ជmі��2ڀsl�n�n,E@�T�:�8�N�9UA��g��R��B*g�@��)��s[�wH��r�.|W�sx���u���,D�r{��P,�W�;,��p���B�ĕx��,�E]䥣�ﰱ��@F�w%��<|���.�:���B?�wX ������P���`,�ڼy`��;I�x�5]-H��c����6���#�N��&�v���ܨX���b�)��g�����2H�p��Z���P��S���MU9Aq.��Y����*]��:++;��j�cw���Hp�|"������!��?n���1}]ߥ���-AjI�[Ж�GRlIA�W+#{'aC�HN�Y�mv�'jc�\��e#�^=�@� +{��v�ur+�i�_�Z�4�~=!�P�3z�9!�`R'g�F̃źx�P\�4�?��a����l���DJa'cL�Ӏ�=��ٳ6Y�r��O6A��ID�w��~��|+��� �&��M��f�6N��lU�5���{rT��~�^���gL��CK��rT1r�tT��48��d?�Ԡ�� ���P���'�Lʏ��c#s�ds�l�$�)@c���\�tI���]�R"��أ!���&�%�����?+�~ +�@}L�,#��z�T�F�9��"jt�?�����G�>��"��P��p���Z��c�'�t���H���4y|������g6g�(���ӯ�`�����xL����7Yb^�=��7)]�����}��mKׅT��9����ƫ�<k�y���z�T�K8�Ӕ��ה������t���QO�S������Mς�͑�9�师�f�� +N��M��k�v��<i�\omz���P�S�(c(o���ucMj�L�uWSV(Y�הy��y��2��O�︦�۾=E��yp3�Q�� +n~p�ҫ�2[�)� +���X�%���K��Ք��j�dj�)ۏ�=�)���2�,�DF�X�5e�RS�![Z��� +a--k�)��Ԕ�BM�$H +O\� zM�uz��$���l�ee\��ي��qa�����ul��Lo"=������� T��Q���ہ�-ڳ�l��qm"@��FNu�ɹq�6y���F�u� +,5�j�1j��n�-��q���r��[zP�� fq,�R�l%7Ny�Y�x><r���Lףk+ r +�X���b�{�����~�l��e�]ѝ� uUc�J� �1��P]����x���z9�?�ˌ�PٛDט��*5/��G���F�W��U~#��n#n�zŞ9�H��l�a�3$S�3�\Z�G��?���H�3�P�����>���O�Źϩ��ү�xi����w+Ĵ����+noW1L�F݀:�Y�����,y��,ɞ�<�)I�ۈ��w�������Et�X��(����qݥ{A�Y��Y�`㸓���L��L�`-�_���~�@v�G=������]\ї��<gEӺW�6�/7��2�������C�F�+����&s"�f��]���u����m����n8�vESr_)�W�M"�6sՈ�/)������48��Mb,�)�NM\sR�<�I��fI7Yb�~�4���E�r��:cD��]�$BDSE��Z|=��q?����L3Ӥ2�uݭ`��hv.غ +�%�) +6ׅ +����L2�h&<1�Ѣr�<�H�E;�I��2���z�m'���8��?�P<�f���o��E1�m�h�r�����0�Ô9A�$}(��#��i���u�(!L f��{Nlq�ԬO�Tͥh�HմY�l�۩�;�#4��p��T��+�|�QrE��ʆT�F�9��4K�@�u@CF?� +?|��E�)�o�W���ӧ�qgw)���1��;5��(�o$��.�Z����G|�L�ԧ��� +��h�;�����"Nb:�W�>���\���FN�������I}8���q��w8Y{a��s�:�#���x8�����$;���0����3��H�#�%��n�3�n�����a:x�V�C��T��0 +�[r��=���@^dd]¯C5��K������ޠԸ���GS㼡�q-1߬�YZR��X�3��i5����w5�����X�3��a=����z�S�ǡ�lm{��v�_��=<�� +� 켜`;`ɭݍ�o�����p.�*���[�@hU8��yB� �z�o,�Ufc �er�<��W\�@l��c+*#�#��WR\�@�����j�7&�r�k�\}!�U#�ԉj12�4�M���W�l�+�my[���̂�\�u�|�+9��l#HM�e�������e� +T��Q��T%�!�<_�r��1N�����~}e�����&y��I��q�����+��8돽�7$����$���ݩ�2�]�x�Ҫ�>��;�O�z�ѥ�ي�����[���;ۀ�*��A1!��s�f�V�P�V1j�T��[�*��A�Ձ���4�q�`�+l��g(�K6@���+� +ށ�����S�L��L_HK6��.1��|F��U#��Բ�9�%'-Z�{v��6�$��p�*G�ӢטG?�'�e_�u�Z-�����a����3[��d�� �Vr�VV>F-`dr��H`8�%�}淐�|��.�JW)M~�D�w����DeT��,�U~#�aZ�YQ�$�r-S�">�n/�5t:�-v)��鎄�i���?�n���Un�� չ#�oX�CVߕ9�-� ���[q=�ܖ�\A��R�P�{�qu�J��G�kWs���r77�?��-��[��SV��j~�Z^Q�}��� p��Q�7���9���F���ڀ>�s-ࠖb�A�C���|E,�ªj2����z�jC��q�b(}�~�"/T3�4:�������l�E���c'ݩ�������m����ꎝt +wI��j���|�sd����[ձ{�o�@k���}�"�G3�L<�5��.�c�*���J#"�X� +��S�C���m��qENV������f#۱���� +d�^u@��~���{���p� ^�)������ ��t-�w��K�^�`X��1��c-�}*���_���I�*b������� [��%���7_-F��~�K��6@���Z\�yd+�poD[W5r�&�� +I цm��u�JN �D���?U��{j��8���!ԑk�3������CD7e/(�x!�X�W�i�^d�ٵ���6<���=�vr(��S��lN���{��`��Ӑ{��{�=MrO�{�0���S��a��˽G*�5������4&����⠗�-�� +*K,�j����W���U��s�\���� ���m���S���Sh��S����_�zDz[� +I;��V�8>��� �-��{�,,I�~9��,t���*�ɢ�b,�2T4>��[H�ye�1dR�~{��-tqZ�M�.��o!Q���H���b�Ft���C^�-$��P�#��-��н��ƫ�<����B.�l�l��)��p�֙�L�,�(<z��Y�f24�eJl�Qa7O�Tn)���N*b�I��lm7��n�MvR)� +�N*p�=g;����l��IU�ِ���(>*�4}T���扛(��Q9�v=�Xmˍ�q�9G�y�Y�#Y��k0�N=����g~��%W�q����M�-:��e�vKŢ�D�W�g�����,~���� ��k�2���-AoND��V�Z�Y�h�3���x����n��0$��w@��m��������ă�ضG4=p�b��ܶT���t#Rt0�Ѹ���S�*�z���8�I�e�*��Կ�Ս�[ +����p�����i��F���y�o�����_�u��U@?#�|�X-չ�÷[�s$��4�c� +Apㄱ�����9k/m�e<x��>dU��)s� �9}Л�j�ʜ?xe�$�ƕ9�ʜ>�F�qe��2gD܋�|�쒼��j��]���T�����ŭw��S����w�PK�-��qB:PK�~<pollen_Services.pgml�\io�8��_�5E��:��.�4YH4M�bQ,�v��%C�s,��/)ɺH1�-�A�v"�2�rf8O>zs7��Fn��{`(�$�ہ���q������Io&{G���t����i1#'\|��z�A�э���9"���������%9��ך��|a����6^�h�t��Ώ=+��'��7����4@�4�lE�@S�Yөy80eY>��?�d��'�?�5G�� +o\E�� i?���r��:ug����?9�ʙ�Q8�l�T�}i#ؗ,,|�͍�+�����9�~����v,�(��}�Ձ��9���!� 1���ڶ��9$M�,y�@@>��5���k�����q������H����xhҒ|�Y�O�k�>Z�Q�uP�L�Bdc˟y�@�0#�n܃�j㾸q�:�z�#�Z��;���{�T�V]�V��� +�>I�Aڑ��s8�Ob.�D�KV��G�m��-��Gv=4���2��)�uă�� +��yP4����q}�9���nf�'��r'@�Z��2� �m� �I'$�~x��i��OA�a/��.�<���),o� +<�i��)�B�YF؝�����cD�����+��/w5�����::���E��r�àG���A~tOz�F��N� [˜p������i�\�9��;I�ρ�e���������|a�xN���L] ԍg�Kd�m[�D��l�Kt۟rgB��r/ +w{�Q�8ĜI�X0��iābc ���AN�c��� +�A��29������\w1[�oP���b #��<b-�� +r��|�9�����-��������[�=bC8�s�ݎ�� o)ލqWE��,:����"�Ux���� �xN�t���\8���W8��x +|dݬ�!�]��{{��<����B�u��!P:�s��������z����~��{ht���'�2����,$ +�����v��qc�0�#�80y�������|�oF�g\(ݸ�� ?E�4���ry��/p�����?���Ƅ�!a7Ӯ��GQ��$�܍0] +�,�U�h>�� �|���!=���4!E� +C� +�V�|Y�>[!F�+C�-*49�������P��$o���o�Ȕ0���"����!t���oTr��B|�;莴�>�#�)l6�/�p3 +�iz)4[Q�v���B���_!�kơ0�W�.�k�}A��K�zA�p�;d�ɰx�%?QP.ysk�����⦨� +� +5B���֚�����}I���b�j���n��T�Jr7�d��r��*?0X���5�D�� +��w+�MK��ӍE +O%x��@�n�`�C�ś^��h/���*ٹ�� +0��*�ޡ�5�(i�ʳv>@��n��躀H�����d������6w(O�z���P8��C!�mV�����&{+�Pf�F��b6Ww�P��c�])&����ہ��On��Y��_XQt��̱����Ϯ�㪌�|����EJ +Ud���EK���8i@؉Xb��hbx���(x}����7,��i�TTEu1;2��[��Mb>�[�H��n�1��-��p�Q/��{����e������+7�4$naSFB��q�� d�9�n��MXx�f�1���K8���s���)}�#���N�����Z�B�r a=0��J��U!N����{�ha���8����.�<�G�Y?X���lE����渵S��wI�&�f �/�OX�U(_A�V���[o��y�j��T�y +��-r�����lw�_����W��8�Z}�b;��:l?�-d +����x� +ęٯ��B�BFJ�퐲��M+%ZȔh�y +u�Wa_�FK5�����(�3{�H��dn�¯&��Vic��B�z(��>�Wy�*-d��U���¶ȫ�_X��/�J[b��FM�VU@�S�eZȔiYkPXk��� �"�"�D�Iv�;����{��#?n�-;>�;�R��Bп�ܑ��l�M��PKFƱ��SPK�~<pollen_Context.pgml�[�o�8�}��NZ2l��&Ӯ��JۭR�I�4�1��N�N���kB��!�M{Q�TH�������Oܣ7�f�tE�����=�̝p�Ͻa��廾ٓތ��q�������yp���ӏR��&t҃� I�؏h�Z{;��Tb�ķ�؞ +jS��'��¡������ǁ�$'�:��u��7�>��}$㾁�����!B�U�v]�oʲ|(�?�z~���{�ᜒ_��l�G^.���;ߓWu�����<!vm�|���;�_J���#�N���?�е���N�. �MD���z(�#��ɪ"4O��������ї����5v�kB�9�4Y���0��p� �6*�N��w=�i�0�p����.K����v~�K���Q�W6%�٫��,&��^@JTr2~ +{Z��M��ڟ���J����^�ȋj�j�ժSr���'Iz�u�;������<����z�|/5� �y�[����(�R��#=���xTP_#�F�(�!P�q=n�M��cz�D�� T�Q�!�,�v�N�]:!I���W\��aT8��ԧv�;�^*aE�8&\!k;�3DK$�X$�w}�^��c�4suy�<���ᯔ��p�bͭ�$��I��Yu�0���L<��!-�Y����G�a�y� ++�r����F�>���8�EvLg��T�,m�l +�i�����6�]ڬ�ho�6�T�P�Ph��T{Qz�-��t +S�RH�� I�%��էNz=����+B�: U2 +����g7(�����1?(� �$'�H0���-��Ks�О�v���Xj́��I���( +���5^@�U�O�"'dCic!��a�{6���Ag��V�1����y�su�Yk�Y���<��8{���l�Mo�����2��0.h�Ͻ�L�L3��+K���N�11À��T�T�A��=�rPT3�Q�]K��J�ɏ��T�[��8�� �5R�ٗ��[m�cY�`����C<��ɹ�$�a<9��/���S@Ք�s,7�k���6kU|����"V6c����R2efq���Bs\9���*sU�q�*G�)ע+�U��G2�����j�l�/���8��qժ��Y��G�v�㈳�U�ꏛ|fB�*�����?�*�xU@ +&�d��YfV�q�W�6땧B���)��{,�qfy]��nR��'u�r��Ss�+,��h����Һ�V�q�9 +X��4��}3NL`�-U�s�M�|A����g���|)���|O�0��w +�'Y'@�p;@hL�-�k� -_*��Y�e�ⶺ�cw�/���Fd�!���8� +x�1��8l+ײj�����{]O�ms���nm��bx��t�WSk�5�� N�O:zX�˹�{��&Gɹ�Re-�� +��h���^!c�框^�٭Y�i���������z�ZƸr�1�`Q��)���X�2����= +��Ԏ�T�E����NX��D�ݞ��,p�*�B�8J�����]X���%�\j�(eAm̧��O���.to�Q�pF�R��U�@��T(�S���������'9�l�*�Ğ�֥P*.EMD�}|� +��tf�A�3�l֙H�M��L�ڝ�G���r&Ι�K��M��OgByj�D�� +΄����: +�L���o�IJ`�7Fu�d�8>�XS![:�ys��T�4�n�o��9�r��VNUβvN��u8a\Tβ�q��*�������M*��oXf0��lY6�;��g4 +�m� �Yi�Y�E6���R��0f8�=&����-،l +��.�������,؍����;�3�wg��v�n��G9E9Y���;�F;Ԃ�Ėh�?D�-s1�k|,�[ÆL����R�,=�PK�'�qoPAPK�~<pollen.todoeO�j�0<�_��.YnkW6�M��{��Xk#P�ERL?�5%Ѕeg��aV�/�,`�ƙ�H�3��Tz���ٝ�HɾI����Н?�ģBҞ���J�H��*%a%�u�|�� +���,���\�l�v� +l�:�L�A;��Nx�{�i7�����D�7��=�l5�^8�0�@h�@���h^PZ���ˢ����CYV�j*8�5���ӓ��LB�l�)�?�~�$?PKP����KPK�~<pollen_profile.profile�����Q(K-*���S�UP2�3PRH�K�O��K ����Z()��qq��e��q��ÙPK7Rp:BPK�~< +pollen.xmi�}뗣8����+8�s:�v'<m�]�3?j�|�η9dS����=���xH�!l���+l�+ݟ�K���/ߟ��3B���Ho���F���;���_|���������_~����Kߟ�In��}��·_� +��������x���p�~|#E.�3O<��J��@�dI1ߪ�[Ŕ���_$UV�7��"I�y�G������>>A/��:��� Bc�����t�;|���J����h�������}�j�-�H���'�|��4�Y +�BGB�����[D�<���;E���������ѷ�O�A����w�#���OR����'?^4�� "��K)���W�����?��L��K������E�/�D����t;��Ss7�����;Ÿ�Sd�n��,[������������\��r�� O�Ӆo�����Fr��h�[�����_>�~���7��_��� +V�Ό=M��-�{��6��n�?���A/þ��Bxe��o�[�e�[筢*�eCȄVW���tw��%�e�1q@BՉ��}��U7�~r^�����ܘ��u�e��f��>GI��<)��Osv�d���p������g����]vN $��r��l9s�~��e��B��)�����t +cD��>M�r������U�[%��]����4p�aHXو�ݝ&[sGV�X�M�t� ��z�|���+;���k#����G�����YҘ-�K;r�!�S'&�U��E 9��|���tgZ��V^ASyn�Q<ِ��Q���Iz�C�CL�DǠ��E�u����n*������#��ls~>���O?�x��m�������مi��x;^o�~�G��@��Q�>E��f38ڈg`�Ix7y:�#���E�']�.�̰K�i�#>j��-N��)��D���� +)I��o����{ae�H��y��h�\Mf� ���,j7�;Æ6RM���� cf�� Ř/Ɍ*{�`���w���P%���=`�0@��%�0�0����`@��A�9E�/�y6�)��$�OQfj` +o]�)���.���B����������Ul{�+�� o�FևE��ohf@��?[��(��,^��iZ:��I\ƬJ���%�ߗ�a� +��?2�ھg�zv�m��[�`��{�@���c�|Ϯ���K2�B�U�1�N �.�NKQ��?]�Ɍ����r���O��W��7-��i�Mi;Y.�TӚ\r��ŰR� �g���(���Y�yO"���1y͵�{�����cG[�8%������;uN8�L�qp�Pk�܌�U���ŏg��浑�Y7;�/�҃>"�0��.���YP}c�F>����7��{'a�����dP��S~\�1�����EyЮ�N3��=/�5 )������gw����K�ы���q`���tS�:��Ux�+���[f�y��e�s_����O9���G`��<�)wQE0�63q�Q���4䑮� 0V�r!`D��/����{WSށ����"P��,RЧ=���1�JHa$��J +�w[6�{a��ы��RE�Y�G>cE�U�NX�A̭ʗ�9�_�;������>�@Yi����.� +�tb�S䁳�s5L�gc����#�����Ԉ�E +� ���EV��iP��H��#F�����~�����`��o�6V�N�1�OC�}�L�����aY�D��iiv�1䈏,��.�w╮L*=P�_c�����jZ�z�yro��%Cg��ު4�Fz� �8E�T���A\�E +OU�oPԑD��h��LJj� X��ޏ'� +�b*��`Uq6w�M�j�t���A�O��iT���]0.��2��>s��A8�O�0�3�gμ�q�qLLmL�6����C��89��N����9���9}��&�2��@̞J���X��n8q����@i-�0z���gTZ�[7�"m������� +�1w���@e�<��z��^B����4��mÎ���8�c�u���2z,�G�j�:�$P��s��o�H��� +����4�R-@̟^UJ��'����a�9}B�s\���|5TVm��3,��uBs�D��#�����5�jxU�� +x�q���X�G�.A���$��TZ���.�$6���í�Lb��&��/g''I��Fb�e��іIl���ʖ:��`����SU,!�?���+7<��&���C�)�js�C�,�e��R�ji�ҏ|F��M@��d;���)n��ӹ)D���U�1�ޮ���>�A2)�B�.�A�b-�R�����@Z��W�щ;A�xp���ꅺ�j&��Ѯ�ա[sU-;�Y< z� +g�2�u3�~ИH�hd.hS?�V +k��ʐ�M4�L�3��J��}�.P@ne�B���/�-翲ru8��1�+��.�Z,����e#�ehY��؞b�R0x�ѣ/�z��ٿ��HM�A���9�*��)�bʶ!�'^cO,�i�q��n>����oR(�M�ƶQ�-�D+"�ȍXr +n��Xh1��5 )80����[�[u�a������q��y��[Mup"�<�p�OgD�oS4��'��\/��T��p��a�မ�}�e&R��]pEU�Yӑ*�,ƨp���Y��g�EVE��� +�ʺ��s�p��ҋ�4����q�*�?����],`�j�m���m�s�Wxi�Pz�*+/�{?��t�Ux�9���R�+,�ּ +ߢ2s������,�x]�#����x;PAsEAA�3F���7ǎc�1�P�KN1W&�����G�����}�0)�r\ +20mD���yS�+���G@�h! �'h����T+�j9&��������ԫ)��O0D��a `dm�P�H���W9�Ԑ4�b�Μ�>���E�ؾ��)�pp5&s��Px�დ�L\�Ņ-��c���A~(�k�����d�N�ҫp��K�K^+����#�u���lk��lW���sA~��hBL�������W̞��g�2�o�n-՚AmJ\�4���.q�r�� ���@8М@���,��r1T�Vc +��S�s���|���-���Ԙ��@��a��S(�s���^�(��P��t�.���.-��=���k������KK�^��Im�hiyrj[�!����io2Dߪ,7Z�B���9��n��VL�!˄�VxX3���)=�/��|p����!��e��>0��q��o��|NJSY$�arJ�j���{H����UDۆa(t��d�&:=�k;=@���QlƝ�M���Mr����;%�ᗎ#��SR+uB��;>�W^)��?���pZ�w#bؿNKO!r ��i&�9O� ���������`̱�5`�tb!��j{<�=X� +ᴤs����J�I(��w!� ��hu�z��I^Ʀ�PL91�,W�4�?2g0��Q���&����ت0�T!�/���A +aLk�L��R2���)m�C:H8N�e� ���eKW�N�k�45��A�b��i�Y�F��nL*�����5��)��)�rSU�m\�K��S]��V>��3���0��r����}�/f&R�1�]p��ݐZ3{�ɩ�0��A<s��ե��ණ��r��Bͬ4�Z����ln:�����ӭ���M�DSYt�G?�]`a�0U��'��.�:І�C�v�}u��daGI��`ds������=�n������D��7�?�gw��/�Ȃ#�������7�C��,��pw���{�Y�����g[{�4��ӭa�~���:�A�8�(r��p��7��B�9!��AֻA��r*I�A�.8/b�V�UU�J +�HW��sIbE�ue���5�d��Ѝ�ƌ�]y�hޗ����[ձLr +C�MFs"G�J��8!�)�t�1�*IadcU�� +CyF��1�:1�M�n��Y�}��$f���#�.�⁸<�9�.JL7��Dy^.�s.���U�:52:������X#�|u�p +���f'�����ls�J�����7��W����Ċ�i]�R�h�W9_��5'��+�e��*����nW[u����6����0&�%� +��vk���a�-��uh^�>�A�Dc�� +m��&�V���b�i��6@��2�t��]�\;S4���]$��pp���y�p���U�Ghi#B�δ��#�,�L/-Nu��e�(y���)�:1r'"�-�C�����[�G�c�e:� �qc�1l[5xϺ5�e� +��ϧ[/+O���f_��� +�g�`����o���%��7K<�|��F�K[��ka���DG��P�֝���c�VZDtk6�V�<��u�5 +�ɛ �D�R�$�\�^̃ɵ�K~I%5��;�PҎQx��F�a�6��'�6�."��|���GaW��OհO0D�'����f:�N���3n��5���Фb�0�c)$:��? +���%l�P/�b Z����:��IA 1<�`G��μ\�@ed3�?ۤg+�Mr���#@���fwE���)<c��7u�F-�����,+2L/ +G�Ax����7_�1��8Kw��=�ٜ����{���I�������[S3�u\�Hb� ��K�q�;�3t�h��̢)x��֩zg/4�@�6�6U� ��*�g����9c��[���g�u���n���n�E�4hˆ���r�&����8��HW��V�/�;��bӄ��[��4k�4��f[��ɯM��0�lѽ`@y��m�L�z�O�z��:����K�����y�&���ipY?gj>T:|SŐv��B��]����#���)L2f�+6�Y���w{C1���R���"��L�]i�r��,��'��ɥE4����!H&&��䍩�2���`�Tr�77�����������ir��{�M�e����m���.�{ �hדM|D|��f.��m3P'���5��X��'��q����m���5�!>�x��5U��i�P�1��@r��}�϶��]�sl�PXn{�'��8����Bͫ��݅���?m��0��R�$]��(�w��:��<�S塎�PGw�>�AЩ�t �|���o]���Kg/�3iB��!�-�"jWΛl+���B����+��w~���u��q�h���@z������]�/�$.��y��ٵ��/�:,�w���[4�B^�{���=�t +s��2o�# +����j��)�$/�ǥ�)F����m��Z�)7[� +���P����"+��im��,� +�0� )�����6q�'/_xJ� hz�ŅH�>E��1��O�+�P]��/=Oni�1�1�'���5�>xI7yYz>���n}���N�U��ݝ� +y��<��\�>�ݹ�l��\�;7��Rg�؝�G�0?��թ�j�����ЕR��2a+>=����4��R�,q���3X�G��Kbu���,5��Sjx\�_`a�VZRJ`a��&��ԏ��+�BE����g���5��K�3$������� �e��0�� +�� +�g��S"��dd������7��,\>�qv�@�>��Z�hX2���!�!d'�~��a�>����h�������< �.�������'�P�2��(��me��sܘXYw!�E?����e�@Ò�����h�#��E�6�(��Q�M�R�봃v�n� �م��*<g< XT�F᭯q�����Ÿfq�3����12�Bg�E���|""�+jB�Fw���}:z�����Oh$LsR��+�4r��W���b�?p]ի?)<��W��9xd����:dg�K��\&S�����u��K�da�#o���&�8��:1M4;3��l�f � �����2'����}Bj݈�s�t�XS�l�4�jBO�V���Z�ܱg�8(�M�4��I���oJLm>�PxT(��W��yM��������ӵW��bZj�*�1\�NE1A��EƘ��a~�8Mң؉�4�q�QQ.��}�b�s]S�dԩ��ُ��.<�\�)�_�|�GO�86��0��K����!� +ϧ/G�!���Ԇa������{e˳Q��{@,��By�̨k>ŕ ��W�b��.�s>፟��7"��Q���c3Ȅ��2���X�fG`�5c�VYOo#�"i��d�k鵔[]�>~� + ����}��~sC�6�G�_�J�M�bI���:aY�� +�Ӥ�ja��r��jK��l��/�[y�"���?q����ca�) +��#�ByC��y��~�&�(r�{ +�� +_Fχ�x�u�)���Ǘr�B��Cr+�3z���H4��f@T��H�@��3ud��[CC�v����H���uM�-u��Ph�:�I^�iHG��D��)��v���eK_��uԅ�QZ�M�2�M��E��UF��� +d +_��빙�Z0��Z[u;�!�2yj²�5bی���^&�4IKLn<�F��K8U#�)L���|7�,���C�´�m��U$�+�.�zR?�Ws�X����� �����N�6���"�!�� z4�d���U�w=z��V}A +�8P2��ɩ=����5�k"8T���>�LJ���w�P��K����2���]2T�+��w���T�(i��?{��7���Jz?�M�G?�O\MV�ץ�&|���y`!J���?C׃a��n�~�5�{V���>��K=�;C�ag�EK�ys�����A<ں�c���D�@Eo<)z���M�74�R�%p8����ٖ�&w���������.�{�՝�p �G��Pr� �^��1�z�����;�\�E�)���-�0��g�3����'w��q&^�,1�/Ԍ��P V��qWlb4g����fd�Skb$ �jc�!���з�-�P���H-^�7�i���ꕜ��'d�I�n����B�tZ�i���6�ǭM۲�Yٚ9�M ��}��ji��M��3�P�ߞ���K�����%J��N��c�?�6��H�V� D?K�I��_�������5��q�L�&�b���~�G����c|�}��i��^�}H��?p���J/���R��%�G:r���C3ػ�J�2Od�O�J;��]�NJ%'y] 8O��a�O~r����EX�����y"�캱W�f�܈}h�N-=�?mkv�]K(Got�F�,�5�����B�"N�Ф�Ф�gFs�LW��]��m���]]�?����a�u�D��Wt�%�*�8Q��@�|3{N/@`D?����������_!R�����J��*��߯ߵ��m��w�ǟ������HG�e*a�r�?��8Ƴ�-cBm9��Ii�4��F�$죐�㇖��w|�k����4aU$��l1�BaU�jU�v1kӪ��{ر%q�-��`4���z�Vd'�#a^\�y�sC���Ҙ'���XD��N���x�~T�Z�hͣ��W�������M����#L�ە}azd�і�Q�(c#q����C�Q�b)a�}<G��Q�N��|�t(�)$� �i��ܺep-��K,��n� �'QF����(��!�-/��Ċ@��?(��^���l�6��O�^��!�K�)[�c!<�Q��a�2������Q�X�� +Q5�C�9����4/DK�SNŷ<��G��o~�1lm��ƒ|�w2S��݇'y��R���e��/?#1_��c}ԉ:g��jeZ��!V+{�VZ��;O^��!��� +�>��xkS�ew��b��57���ʪ�D2��4�����\������Ɋ���ߐ1�7���#/���t�\�X��{'9-��Y���ڏq�Cr#�'�I�������C���b�vr�w��O��ǥ{("&�����`������ş���&^aX� ����Q5��B�o��Ǣ��W{_z�l���� 譨�����*w�#[!n��뵡F̰^KX����!��IxAsƯ�1g,�*���t�p�o��F�79F���,���.�Xo��B��H�Ҏ�gؙ���K�͒���>�� 7�W)�<�����~��|�[,J:e�0 ��+�y�?�q�Ct��oHFw��H��!�wB��QC{qTq�5��ȳ�Ftm��5r��ta�i�؏��i��_��Y�����H�!�a{ĪJb�� +�h�4:���8`�P���X�y�0��b3H�-.ַv��ڔ��F<03֥V�����&�M>��}&�'DݩЄgb�OO� +h�}�t +ymd�97 +��#�Gr���a���pZ���� +�I�~�\b����z����*qo��m�L�-8��r㛦�]��k����������9��V�˘����|�|�s�6�m�G��{ii��d0�W4�:Y�Y.�"��:Fn<fes�G?촹���u�z����>�F��� +��(8ڈ��\.��r�ZV�٩��XX��[Z��+���?'�K���N6���G��T��� +��)�Y�B%z�}N�;�ʒV���B�'�E�J��Һ$�#���7�� eQ |�O? +;M΅�����C>�|!�4�\r.���Z��ߘ�W�@:Z� m��Sqt÷�/��Pҏ��ے��YF�/y=!�TU9���fk�#�w��9�p�1�F��&�&DI�q�F��IÏ��q +~sFmʒ��G���N��(���ݝ��U�%eE^��&��������>���%﮲�J���4����E��G +8�tkXq��LQ�0���N�v{��vlN@�G��2p��[����5y��k�ꡖk�1 +7jv�廤�ϴT�Bt��lٚ;���V���LDZId��u�����z�{�RV���~���;��+�r��5[�S�TH�o�mJ,;?;�t>S�����t��9#�uv� s�{�]�K�J'�N�w�����2�l3��L�Y6�;���`�%y/�J���h�0kŖS�u���S1�^�Lx�;��y��/x���a5��|�b砦b9ҽc�lӋ�Nٕ��ޱ\��`�r��oŃ��%�N8�o�)��*�[+\9Yh(��6ҽc=�}�J/{G�{��mط����GO�t���"�AO�e5�qa�m�j�m�Л7d�m.�N���T������y�{W%�1���[�#���.��2��h\�O��Rx0�V�H +���RF��[�2�ی�}<�LW�X}�+���4*�NLc����C��u�<d���͗S��\��:Y����y��z��}&�#����<t.�z�۔W�������w�yp���z�)��3��z��F,WS.4��X�.S.�o:V�˜�x�j>�x�j΅���z�����g�{�8es�F�Ʌ�#MvY-���X�w�C��jA�y�SU>�Dž�eQ���)��p�,F���z�"��@N�����:�ju,���/��_r��.Gz�c��"T���=�\(.��"i��o��>��R�Gi���Xhn5/����4�̀S�*N�A�U���*hi�Ħ�-�ׅ/��N��5����hi�D��%��B�N*�Vu�uy���(_�)!�Y��Z8I��%��DZ8I��$���nZƉu���4�Ӛ�h]�xhi�$'��l���6- +��i��"'��r�e�Y��6a�s�08�&��l���[�,�N'.j���rh���oGOxw�4Tp�@Cxw�h� �Pg�((7��^c��ۉ�BO'Z}'��R�i���#EM����g4Tp�OCxwyd4Tp�GFCxw�<4T|��5>�9�i���H�j��\�:2�dE���sY�?�n�Br�Z2��֏YHn3`�����$+m"���Jd!������&?�1�j�Z��p�B�����O2[�˱<|ZF��8��O�h������=o,4���`y��eYhn�������xf�������H����Q��)�Ʋ�W�t��l`0�\�9!}g��c̀�i�n�S}��Yk�Ф$`�V���@3�5un�*�tkl5C�H���N�L\ޅ��nē�n��in��"�؛wpLD��h��g��8SZ=��D����5'������6&`=p~ �C��Amݍ��r��F�C���-OhV�t���7y�n'P: +�Q��%h��p:��ӛ��jc&���5��x�Tn�P4�*�Y�A^H�zJ����wy#=��k�{<����BO~#����ݭk���=���C������/7t�� ���-�0 +�忴#��~u�y��ؾ���� +����y`���C<M(J8��3�QlB�Ӵtu�ȌyV��NWvcŶ����@�jd�����&�����ƷV6c#Y��#��H��d]SeK���DhS�����Hn|_�E�P�������'�^��/�����PKM 3G{)@uPK�~<(�:K/.pollen.argoPK�~<�-��qB:hpollen_Modèle.pgmlPK�~<FƱ��Spollen_Services.pgmlPK�~<�'�qoPAk pollen_Context.pgmlPK�~<P����K(pollen.todoPK�~<7Rp:B8)pollen_profile.profilePK�~<M 3G{)@u +�)pollen.xmiPK�iS \ No newline at end of file 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -10,6 +10,8 @@ import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.chorem.pollen.service.ServiceUser; +import org.chorem.pollen.service.ServiceUserImpl; import org.junit.Ignore; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; @@ -72,4 +74,10 @@ return getContext().beginTransaction(); } + public static ServiceUser newServiceUser() { + ServiceUserImpl instance = new ServiceUserImpl(); + instance.setContext(getContext()); + return instance; + } + } Added: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java =================================================================== --- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java (rev 0) +++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,184 @@ + +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; +import org.chorem.pollen.PollenBusinessException.PollenExceptionType; +import org.chorem.pollen.business.TestManager; +import org.chorem.pollen.entity.UserAccount; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author fdesbois + */ +public class ServiceUserImplTest { + + private static final Log log = LogFactory.getLog(ServiceUserImplTest.class); + + public ServiceUserImplTest() { + } + + @BeforeClass + public static void setUpClass() throws Exception { + } + + @AfterClass + public static void tearDownClass() throws Exception { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() throws IOException { + TestManager.stop(); + } + + /** + * Test of executeConnect method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteConnect() throws Exception { + TestManager.start("testExecuteConnect"); + } + + /** + * Test of executeGetNewUser method, of class ServiceUserImpl. + */ + @Test + public void testExecuteGetNewUser() throws Exception { + TestManager.start("testGetNewUser"); + ServiceUser serviceUser = TestManager.newServiceUser(); + + UserAccount user = serviceUser.getNewUser(Locale.FRENCH); + Assert.assertNotNull(user); + Assert.assertEquals(false, user.getAdmin()); + Assert.assertEquals("fr", user.getLanguage()); + Assert.assertEquals(Locale.FRENCH, new Locale(user.getLanguage())); + } + + /** + * Test of executeCreateUpdateUser method, of class ServiceUserImpl. + */ + @Test + public void testExecuteCreateUpdateUser() throws Exception { + TestManager.start("testCreateUpdateUser"); + ServiceUser serviceUser = TestManager.newServiceUser(); + + UserAccount user = serviceUser.getNewUser(Locale.FRENCH); + user.setLogin("hsimpson"); + user.setEmail("hsimpson@springfield.us"); + String encodedPassword = + TestManager.getContext().encodePassword("wouhou"); + user.setPassword(encodedPassword); + + serviceUser.createUpdateUser(user); + Assert.assertNotNull(user.getTopiaId()); + Assert.assertNotSame("wouhou", user.getPassword()); + + // User 2 with same login + UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH); + user2.setLogin("hsimpson"); + // Not the same email + user2.setEmail("hsimpson@springfield.com"); + user2.setPassword("troubidou"); + + try { + serviceUser.createUpdateUser(user2); + } catch (PollenBusinessException eee) { + log.error("Error : " + eee.getMessage(), eee); + Assert.assertEquals(PollenExceptionType.USER_LOGIN_EXIST, + eee.getType()); + } + + // User 3 with same email as user + UserAccount user3 = serviceUser.getNewUser(Locale.FRENCH); + user3.setLogin("homer"); + user3.setEmail("hsimpson@springfield.us"); + user3.setPassword("troubidou"); + + try { + serviceUser.createUpdateUser(user3); + } catch (PollenBusinessException eee) { + log.error("Error : " + eee.getMessage(), eee); + 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"); + } + + /** + * Test of executeGetUsers method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteGetUsers() throws Exception { + System.out.println("executeGetUsers"); + } + + /** + * Test of executeGetNewList method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteGetNewList() throws Exception { + System.out.println("executeGetNewList"); + } + + /** + * Test of executeCreateUpdateList method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteCreateUpdateList() throws Exception { + System.out.println("executeCreateUpdateList"); + } + + /** + * Test of executeDeleteList method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteDeleteList() throws Exception { + System.out.println("executeDeleteList"); + } + + /** + * Test of executeGetFavoriteLists method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteGetFavoriteLists() throws Exception { + System.out.println("executeGetFavoriteLists"); + } + + /** + * Test of executeGetNewPerson method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteGetNewPerson() throws Exception { + System.out.println("executeGetNewPerson"); + } + + /** + * Test of executeGetPerson method, of class ServiceUserImpl. + */ + //@Test + public void testExecuteGetPerson() throws Exception { + System.out.println("executeGetPerson"); + } + +} \ No newline at end of file Property changes on: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -13,7 +13,6 @@ * * 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.components; import java.io.File; @@ -25,8 +24,8 @@ 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.Log; import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.SessionState; @@ -39,37 +38,45 @@ import org.chorem.pollen.entity.UserAccount; import org.chorem.pollen.ui.base.ContextLink; import org.chorem.pollen.ui.data.AddressBarItem; -import org.chorem.pollen.MD5; import org.chorem.pollen.PollenBusinessException; 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.slf4j.Logger; /** * Classe du Layout Component Border. * * @author kmorin * @author rannou + * @author fdesbois * @version $Id$ */ -@IncludeStylesheet("context:css/main.css") public class Border { - /** Affichage des messages pour l'utilisateur */ - @Component(id = "borderFeedback") - private FeedBack feedback; + @Inject + private Logger logger; - @InjectComponent - private FeedBack errorJs; /** - * Objet de session (SSO) représentant l'adresse du site. + * Chaine définissant le style de la page */ - @SuppressWarnings("unused") - @SessionState - private String siteURL; + @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) + @Property + private String pageLogo; + @Parameter(defaultPrefix = BindingConstants.LITERAL, value = "body") + @Property + private String pageBodyId; + + /** Title of the page **/ + @Parameter(defaultPrefix = BindingConstants.LITERAL) + @Property + private String pageTitle; + /** * Adresse du fil de syndication */ - @SuppressWarnings("unused") @Parameter(required = false, defaultPrefix = BindingConstants.LITERAL) @Property private String feedFilename; @@ -77,42 +84,36 @@ /** * Hierarchie de l'adresse */ - @SuppressWarnings("unused") - @Parameter(required = false) + @Parameter(required = true) @Property - private AddressBarItem[] address; + private AddressBar addressBar; /** - * Chaine définissant le style de la page + * Lien pour l'itération */ - @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) @Property - private String pageLogo; + private AddressBarItem item; - @Parameter(defaultPrefix = BindingConstants.LITERAL, value = "body") - @Property - private String pageBodyId; + /** Affichage des messages pour l'utilisateur */ + @Component(id = "borderFeedback") + private FeedBack feedback; - /** Title of the page **/ - @Parameter(defaultPrefix = BindingConstants.LITERAL) - @Property - private String pageTitle; + @InjectComponent + private FeedBack errorJs; /** + * Objet de session (SSO) représentant l'adresse du site. + */ + @SessionState + private String siteURL; + + /** * Chaine definissant le logo de la page */ - @SuppressWarnings("unused") @Property private String logo; /** - * Lien pour l'itération - */ - @SuppressWarnings("unused") - @Property - private AddressBarItem lien; - - /** * Champ login du formulaire d'identification */ @Property @@ -138,11 +139,6 @@ @Property private boolean userExists; - /** Format des dates */ - @SuppressWarnings("unused") - @Property - private DateFormat dateFormat; - /** Locale courante */ @Inject private Locale currentLocale; @@ -153,59 +149,115 @@ @Inject private PersistentLocale localeService; + @Inject + private PollenContext pollen; + + /** Injection des services */ + @Inject + private ServiceUser serviceUser; + /** * Accès à la requête */ @Inject private Request request; - @Inject - private PollenContext pollen; - /** * Accès aux messages */ @Inject private Messages messages; - /** Injection des services */ - @Inject - private ServiceUser serviceUser; - @InjectComponent private ContextLink feedContext; + private boolean fatal; + + /** + * Initialisation de l'affichage + */ + void setupRender() { + + // URL du site + siteURL = "http://" + request.getHeader("host") + + request.getContextPath() + "/"; + + errorJs.addError(messages.get("errorJs")); + + // Logo + if (Locale.FRENCH.equals(currentLocale)) { + logo = "pollen" + pageLogo + "_fr.png"; + } else { + logo = "pollen" + pageLogo + "_en.png"; + } + } + + boolean afterRender() { + // Check if fatal errors has been added to the border + // Reload the page if feedBack hasn't been reloaded yet to display + // errors + if (fatal && feedback.hasErrors() && !feedback.hasBeeanReloaded()) { + if (logger.isInfoEnabled()) { + logger.info("[ FATAL ] Reload the page to display errors"); + } + feedback.reload(); + return false; + } + // Clear errors after page render + feedback.clearErrors(); + fatal = false; + return true; + } + + public void addInfo(String message) { + feedback.addInfo(message); + } + + public void addError(String message) { + feedback.addError(message); + } + + public void addFatal(String message) { + feedback.addError(message); + fatal = true; + } + + public boolean canDisplayBody() { + return !fatal; + } + + public DateFormat getDateFormat() { + return DateFormat.getDateTimeInstance(DateFormat.SHORT, + DateFormat.SHORT, currentLocale); + } + public ContextLink getFeedContext() { return feedContext; } - public FeedBack getFeedBack() { - return feedback; - } - /** - * Methode appelée lorsque l'utilisateur s'identifie. L'utilisateur est - * retrouvé grâce au service d'authentification. + * User connection. Call business to check user existence. * - * @return la zone à mettre à jour + * @return the page with errors or not */ - Object onSuccessFromLoginCompForm() { - // Récupération de l'utilisateur identifié - UserAccount current; - try { - current = serviceUser.connect(login, MD5.encode(password)); - if (current != null) { + @Log + Object onSuccessFromConnection() { + // No need to connect if user exists + if (!userExists) { + try { + String encodedPassword = pollen.encodePassword(password); + UserAccount current = + serviceUser.connect(login, encodedPassword); user = current; feedback.addInfo(messages.get("loginOk")); - } else { - feedback.addError(messages.get("loginFailed")); + } catch (PollenBusinessException eee) { + feedback.addError( + BusinessUtils.getErrorMessage(eee, messages, logger)); } - } catch (PollenBusinessException ex) { - // TODO - feedback.addError(messages.get("loginFailed")); } return this; } + /** * Methode appelée lorsque l'utilisateur se déconnecte. L'objet user est * désinstancié (=null). @@ -214,7 +266,7 @@ */ Object onActionFromLogout() { user = null; - return "Index"; + return Index.class; } /** @@ -243,8 +295,8 @@ * Version de l'application. * @return current application version */ - public String getVersion() { - return pollen.getProperty(PollenProperty.APP_VERSION); + public String getVersion() { + return PollenProperty.APP_VERSION.getValue(); } public int getCurrentYear() { @@ -252,49 +304,20 @@ return current.get(Calendar.YEAR); } - public String getContactEmail() { - return pollen.getProperty(PollenProperty.CONTACT_EMAIL); + public String getContactEmail() { + return PollenProperty.CONTACT_EMAIL.getValue(); } /** - * Retourne si l'utilisateur a renseigné un nom ou un prénom. - */ - public boolean isUserNamed() { - return (user.getFirstName() != null) || (user.getLastName() != null); - } - - /** * Vérifie que le fichier de flux de syndication existe. * * @return vrai si le fichier existe - * @ */ - public boolean isFeedFileExisting() { + public boolean isFeedFileExisting() { if (feedFilename == null) { return false; } File feedFile = feedContext.getFile(feedFilename); return feedFile.exists() ? true : false; } - - /** - * Initialisation de l'affichage - */ - void setupRender() { - dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, - DateFormat.SHORT, currentLocale); - - // URL du site - siteURL = "http://" + request.getHeader("host") - + request.getContextPath() + "/"; - - errorJs.addError(messages.get("errorJs")); - - // Logo - if (Locale.FRENCH.equals(currentLocale)) { - logo = "pollen" + pageLogo + "_fr.png"; - } else { - logo = "pollen" + pageLogo + "_en.png"; - } - } } Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedBack.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedBack.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedBack.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,26 +1,32 @@ -/* *##% Pollen - * Copyright (C) 2009 CodeLutin +/* *##% + * Pollen :: Pollen Web Interface + * Copyright (C) 2009 - 2010 Code Lutin * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * 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. + * 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/>. ##%*/ + * 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.components; import java.util.ArrayList; import java.util.List; +import org.apache.tapestry5.BindingConstants; import org.apache.tapestry5.ComponentResources; import org.apache.tapestry5.MarkupWriter; +import org.apache.tapestry5.annotations.Log; +import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.ioc.annotations.Inject; /** @@ -46,15 +52,22 @@ */ public class FeedBack { + @Parameter(defaultPrefix = BindingConstants.LITERAL, value= "true") + private boolean autoClear; + /** Messages d'erreur */ private List<String> errorMessages; /** Messages d'info */ private List<String> infoMessages; + private boolean errors; + @Inject - private ComponentResources _resources; + private ComponentResources resources; + private boolean reload; + public FeedBack() { errorMessages = new ArrayList<String>(); infoMessages = new ArrayList<String>(); @@ -64,6 +77,7 @@ // Rendu des messages d'erreur et vidage de la collection if (!errorMessages.isEmpty()) { + errors = true; writer.element("div", "class", "fb-error"); for (String message : errorMessages) { writer.write(message); @@ -72,7 +86,9 @@ } writer.end(); } - errorMessages.clear(); + if (autoClear) { + errorMessages.clear(); + } // Rendu des messages d'info et vidage de la collection if (!infoMessages.isEmpty()) { @@ -86,7 +102,7 @@ } infoMessages.clear(); - _resources.renderInformalParameters(writer); + resources.renderInformalParameters(writer); } void afterRender(MarkupWriter writer) { @@ -115,7 +131,21 @@ } } - public boolean getHasErrors() { - return !errorMessages.isEmpty(); + public boolean hasErrors() { + return errors; } -} \ No newline at end of file + + @Log + public void reload() { + reload = true; + } + + public boolean hasBeeanReloaded() { + return reload; + } + + public void clearErrors() { + errorMessages.clear(); + reload = false; + } +} Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AddressBar.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AddressBar.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/AddressBar.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -19,10 +19,29 @@ public List<AddressBarItem> items; - public AddressBar() { - appendHome(); + private AddressBar() { } + /** + * Create an empty bar with no items. + * + * @return a new AddressBar + */ + public static AddressBar newEmptyBar() { + return new AddressBar(); + } + + /** + * Create a bar with the home item. + * + * @return a new AddresBar with home item + */ + public static AddressBar newBar() { + AddressBar result = new AddressBar(); + result.appendHome(); + return result; + } + protected List<AddressBarItem> getListItems() { if (items == null) { items = new ArrayList<AddressBarItem>(); Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/EvenOdd.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/EvenOdd.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/EvenOdd.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -49,6 +49,7 @@ /** * Modifie la valeur de even. + * @param value */ public void setEven(boolean value) { even = value; 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/ErrorPage.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -23,11 +23,11 @@ private Border border; public void addError(String message) { - border.getFeedBack().addError(message); + border.addError(message); } public AddressBarItem[] getAddress() { - return new AddressBar().getItems(); + return AddressBar.newBar().getItems(); } } 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -17,6 +17,7 @@ package org.chorem.pollen.ui.pages; import org.apache.tapestry5.annotations.Property; +import org.chorem.pollen.ui.data.AddressBar; import org.chorem.pollen.ui.data.AddressBarItem; /** @@ -24,11 +25,12 @@ * * @author kmorin * @author rannou + * @author fdesbois <fdesbois@codelutin.com> * @version $Id$ */ public class Index { - @SuppressWarnings("unused") - @Property - private AddressBarItem[] address = new AddressBarItem[] { new AddressBarItem("Pollen", null) }; + public AddressBar getAddressBar() { + return AddressBar.newEmptyBar().appendCurrent("Pollen"); + } } 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -127,7 +127,7 @@ */ public Object onSuccessFromUsersForm() { for (UserAccount usr : accounts) { - serviceUser.createUpdateUser(usr); +// serviceUser.createUpdateUser(usr); // FIXME : test and refactor to manage errors 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/PollForm.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -159,9 +159,10 @@ * AddressBar for border component. * * @return the address bar. + * @throws PollenBusinessException */ public AddressBar getAddressBar() throws PollenBusinessException { - return new AddressBar().appendCurrent(getPageTitle()); + return AddressBar.newBar().appendCurrent(getPageTitle()); } public void setPollCopyFromPoll(Poll poll) { @@ -346,11 +347,12 @@ * Condition to enable or not the notification option. * * @return true if the mail is not defined + * @throws PollenBusinessException */ -// public boolean isNotificationDisabled() { -// // no email defined -// return StringUtils.isEmpty(getPoll().getCreatorEmail()); -// } + public boolean isNotificationDisabled() throws PollenBusinessException { + // no email defined + return StringUtils.isEmpty(getPoll().getCreator().getEmail()); + } //~~~~~~~~ OPTION REMINDER ~~~~~~~~~~~~~~~~// 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/Results.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -186,7 +186,7 @@ //countPoll(); for (Result result : results) { String name = result.getChoice().getName(); - String value = String.valueOf(result.getValue()); + String value = String.valueOf(result.getResultValue()); if (poll.getChoiceType() == ChoiceType.DATE) { // mise en forme de la date Date date = new Date(Long.parseLong(name)); @@ -209,8 +209,8 @@ Collections.sort(ranking, new Comparator<Result>() { @Override public int compare(Result o1, Result o2) { - double result1 = o1.getValue(); - double result2 = o2.getValue(); + double result1 = o1.getResultValue(); + double result2 = o2.getResultValue(); int comp = 0; // résultat de la comparaison if (result1 > result2) { @@ -236,13 +236,13 @@ double winValue = 0.; if (ranking.size() > 0) { - winValue = ranking.get(0).getValue(); + winValue = ranking.get(0).getResultValue(); } else { return winners; } for (Result r : ranking) { - if (winValue == r.getValue()) { + if (winValue == r.getResultValue()) { winners.add(r); } } @@ -337,7 +337,7 @@ // FIXME : carefull with Locale !! - return NumberFormat.getNumberInstance().format(result.getValue()); + return NumberFormat.getNumberInstance().format(result.getResultValue()); } /** Retourne la date correspondant au résultat courant */ 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -1036,7 +1036,7 @@ * @return the address bar of the page. */ public AddressBar getAddress() { - return new AddressBar().appendCurrent(title); + return AddressBar.newBar().appendCurrent(title); } /** Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Account.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Account.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Account.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,189 +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.user; - -import org.apache.tapestry5.BindingConstants; -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.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.MD5; -import org.chorem.pollen.entity.UserAccount; -import org.chorem.pollen.service.ServiceUser; -import org.chorem.pollen.ui.data.AddressBarItem; - -/** - * Classe de la page d'un utilisateur. - * - * @author kmorin - * @author rannou - * @version $Id$ - */ -@IncludeStylesheet("context:css/account.css") -public class Account { - - /** - * Objet de session représentant l'utilisateur identifié. - */ - @SessionState - @Property - private UserAccount user; - @Property - private boolean userExists; - - /** - * Utilisateur dont les données sont affichées et modifiées dans le - * formulaire - */ - @Property - @Persist - private UserAccount newUser; - - /** Ancien mot de passe */ - @Persist - private String oldEmail; - - @Component - private Zone myAccountZone; - - @Component - private Form myAccountForm; - - @Component(id = "password") - private PasswordField passwordField; - - @Component(id = "newPassword1") - private PasswordField newPasswordField; - - @Component(id = "email") - private TextField emailField; - - /** - * Champ password du formulaire d'enregsitrement d'un utilisateur - */ - @Property - private String password; - - /** - * Champ password1 du formulaire d'enregsitrement d'un utilisateur - */ - @Property - private String newPassword1; - /** - * Champ password2 du formulaire d'enregsitrement d'un utilisateur - */ - @Property - private String newPassword2; - - @Inject - private Messages messages; - - @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title") - @Property - private String title; - - @SuppressWarnings("unused") - @Property - private AddressBarItem[] address; - - /** - * Vrai lorsque l'utilisateur modifie son compte. - */ - @SuppressWarnings("unused") - @Property - private boolean modify = false; - - /** Injection des services */ - @Inject - private ServiceUser serviceUser; -// @Inject -// private ServiceAuth serviceAuth; - - /** - * Méthode appelée quand l'utilisateur modifie ses données - * - * @return la zone de compte mise à jour - */ - 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; -// } -// } - - return myAccountZone.getBody(); - } - - /** - * Méthode appelée quand l'utilisateur veut modifier son compte - * - * @return le formulaire de modification du compte - */ - Object onActionFromModifyButton() { - modify = true; - return myAccountZone.getBody(); - } - - /** - * Initialisation de l'affichage - */ - void setupRender() { - address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"), - new AddressBarItem(title, null) }; - if (userExists) { - newUser = user; - oldEmail = user.getEmail(); - } - } -} Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Register.java =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Register.java 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Register.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,180 +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.user; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.tapestry5.BindingConstants; -import org.apache.tapestry5.annotations.Component; -import org.apache.tapestry5.annotations.IncludeStylesheet; -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; -import org.apache.tapestry5.ioc.Messages; -import org.apache.tapestry5.ioc.annotations.Inject; -import org.chorem.pollen.MD5; -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.data.AddressBarItem; - -/** - * Classe de la page d'enregistrement d'un utilisateur. - * - * @author kmorin - * @author rannou - * @version $Id$ - */ -@IncludeStylesheet("context:css/register.css") -public class Register { - - /** - * Objet de session représentant l'url du site. - */ - @SessionState - private String siteURL; - - /** - * Objet de session représentant l'utilisateur identifié. - */ - @SuppressWarnings("unused") - @SessionState - private UserAccount user; - @SuppressWarnings("unused") - @Property - private boolean userExists; - - /** - * Utilisateur créé via le formulaire - */ - @Property - private UserAccount newUser; - - @Component - private Form registerForm; - - @Component(id = "login") - private TextField loginField; - - @Component(id = "email") - private TextField emailField; - - @Component(id = "password1") - private PasswordField passwordField; - - /** - * Champ password1 du formulaire d'enregsitrement d'un utilisateur - */ - @Property - private String password1; - /** - * Champ password2 du formulaire d'enregsitrement d'un utilisateur - */ - @Property - private String password2; - - @Inject - private Messages messages; - - @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title") - @Property - private String title; - - @SuppressWarnings("unused") - @Property - private AddressBarItem[] address; - - /** Injection des services */ - @Inject - private ServiceUser serviceUser; -// @Inject -// private ServiceAuth serviceAuth; - - /** - * Méthode appelée quand l'utilisateur s'enregistre - * - * @return la page d'accueil - */ - Object onSuccessFromRegisterForm() { - - // L'utilisateur s'est pas trompé en répétant son mot de passe - if (!password1.equals(password2)) { - password1 = null; - registerForm.recordError(passwordField, messages - .get("passwords-dont-match")); - } - - // Le login existe déjà -// if (serviceUser.isUserLoginExisting(newUser.getLogin())) { -// registerForm.recordError(loginField, messages -// .get("loginAlreadyExists")); -// } -// -// // L'email existe déjà -// if (serviceUser.isUserEmailExisting(newUser.getEmail())) { -// registerForm.recordError(emailField, messages -// .get("emailAlreadyExists")); -// } -// -// // Création de l'utilisateur, envoi d'un email de notification et connexion -// if (!registerForm.getHasErrors()) { -// if (serviceUser.createUser(newUser, MD5.encode(password1)) != null) { -// sendMailNotification(); -// user = serviceAuth.getUser(newUser.getLogin(), MD5 -// .encode(password1)); -// return "Index"; -// } -// } - - return this; - } - - @Inject - private PollenContext pollen; - - /** Envoi du mail de notification */ - private void sendMailNotification() { - 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("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(), - password1, siteURL)); - - // FIXME call directly MailUtil.sendMail() - // skip fill map, get from map... - PreventRuleManager.emailAction(data); - } - - /** - * Initialisation de l'affichage - */ - void setupRender() { - address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"), - new AddressBarItem(title, null) }; - } -} Copied: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java (from rev 2958, trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Account.java) =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java (rev 0) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,189 @@ +/* *##% 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.user; + +import org.apache.tapestry5.BindingConstants; +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.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.MD5; +import org.chorem.pollen.entity.UserAccount; +import org.chorem.pollen.service.ServiceUser; +import org.chorem.pollen.ui.data.AddressBarItem; + +/** + * Classe de la page d'un utilisateur. + * + * @author kmorin + * @author rannou + * @version $Id$ + */ +@IncludeStylesheet("context:css/account.css") +public class UserProfile { + + /** + * Objet de session représentant l'utilisateur identifié. + */ + @SessionState + @Property + private UserAccount user; + @Property + private boolean userExists; + + /** + * Utilisateur dont les données sont affichées et modifiées dans le + * formulaire + */ + @Property + @Persist + private UserAccount newUser; + + /** Ancien mot de passe */ + @Persist + private String oldEmail; + + @Component + private Zone myAccountZone; + + @Component + private Form myAccountForm; + + @Component(id = "password") + private PasswordField passwordField; + + @Component(id = "newPassword1") + private PasswordField newPasswordField; + + @Component(id = "email") + private TextField emailField; + + /** + * Champ password du formulaire d'enregsitrement d'un utilisateur + */ + @Property + private String password; + + /** + * Champ password1 du formulaire d'enregsitrement d'un utilisateur + */ + @Property + private String newPassword1; + /** + * Champ password2 du formulaire d'enregsitrement d'un utilisateur + */ + @Property + private String newPassword2; + + @Inject + private Messages messages; + + @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title") + @Property + private String title; + + @SuppressWarnings("unused") + @Property + private AddressBarItem[] address; + + /** + * Vrai lorsque l'utilisateur modifie son compte. + */ + @SuppressWarnings("unused") + @Property + private boolean modify = false; + + /** Injection des services */ + @Inject + private ServiceUser serviceUser; +// @Inject +// private ServiceAuth serviceAuth; + + /** + * Méthode appelée quand l'utilisateur modifie ses données + * + * @return la zone de compte mise à jour + */ + 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; +// } +// } + + return myAccountZone.getBody(); + } + + /** + * Méthode appelée quand l'utilisateur veut modifier son compte + * + * @return le formulaire de modification du compte + */ + Object onActionFromModifyButton() { + modify = true; + return myAccountZone.getBody(); + } + + /** + * Initialisation de l'affichage + */ + void setupRender() { + address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"), + new AddressBarItem(title, null) }; + if (userExists) { + newUser = user; + oldEmail = user.getEmail(); + } + } +} Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Rev Revision" Added: svn:mergeinfo + Copied: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java (from rev 2958, trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/Register.java) =================================================================== --- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java (rev 0) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,204 @@ +/* *##% 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.user; + + +import java.util.Locale; +import org.apache.tapestry5.BindingConstants; +import org.apache.tapestry5.Field; +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.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; +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.PollenEmailImpl; +import org.chorem.pollen.entity.UserAccount; +import org.chorem.pollen.service.ServiceEmail; +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.slf4j.Logger; + +/** + * Classe de la page d'enregistrement d'un utilisateur. + * + * @author kmorin + * @author rannou + * @author fdesbois + * @version $Id$ + */ +@IncludeStylesheet("context:css/register.css") +public class UserRegister { + + @Inject + private Logger logger; + + /** + * Objet de session représentant l'utilisateur identifié. + */ + @SessionState + private UserAccount user; + + @Property + private boolean userExists; + + /** Injection des services */ + @Inject + private ServiceUser serviceUser; + + /** Injection des services */ + @Inject + private ServiceEmail serviceEmail; + + @Inject + private PollenContext pollen; + + @Inject + private Messages messages; + + @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title") + @Property + private String title; + + /** + * Objet de session représentant l'url du site. + */ + @SessionState + private String siteURL; + + /** Locale courante */ + @Inject + private Locale currentLocale; + + /** + * Utilisateur créé via le formulaire + */ + private UserAccount newUser; + + @InjectComponent + private Form register; + + @Component(id = "login") + private TextField loginField; + + @Component(id = "email") + private TextField emailField; + + @Component(id = "password1") + private PasswordField passwordField; + + /** + * Champ password1 du formulaire d'enregsitrement d'un utilisateur + */ + @Property + private String password1; + /** + * Champ password2 du formulaire d'enregsitrement d'un utilisateur + */ + @Property + private String password2; + + /** + * Initialisation de l'affichage + */ + void setupRender() { + } + + public AddressBar getAddressBar() { + return AddressBar.newBar().appendCurrent(title); + } + + public UserAccount getNewUser() { + if (newUser == null) { + newUser = serviceUser.getNewUser(currentLocale); + } + return newUser; + } + + /** + * ON_VALIDATE_FORM :: Check if two passwords are equals. + */ + void onValidateFormFromRegister() { + // L'utilisateur s'est pas trompé en répétant son mot de passe + if (!password1.equals(password2)) { + password1 = null; + register.recordError(passwordField, + messages.get("passwords-dont-match")); + } + } + + /** + * ON_SUCCESS :: Executed if no errors are recorded from ON_VALIDATE_FORM. + * Encode password and create the user. If no problem appears during + * creation, an email will be sent to the user. + * + * @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()); + + // Send an email to the new user + PollenEmailImpl mail = new PollenEmailImpl(); + mail.setTo(getNewUser().getEmail()); + mail.setSubject( + messages.format("pollen.mail.userRegister.subject", + getNewUser().getLogin())); + mail.setContent( + messages.format("pollen.mail.userRegister.content", + getNewUser().getFirstName(), getNewUser().getLastName(), + getNewUser().getLogin(), password1, siteURL)); + + serviceEmail.sendEmail(mail); + + 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); + } + } + return register; + } + + /** + * ON_FAILURE :: Executed if errors are recorded from ON_VALIDATE_FORM. + * + * @return the form + */ + Object onFailureFromRegister() { + return register; + } +} Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java ___________________________________________________________________ Added: svn:keywords + Date Author Revision Rev Id Added: svn:mergeinfo + 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -25,10 +25,16 @@ import org.apache.tapestry5.ioc.services.Coercion; import org.apache.tapestry5.ioc.services.CoercionTuple; 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; +import org.chorem.pollen.service.ServiceEmailImpl; import org.chorem.pollen.service.ServicePoll; import org.chorem.pollen.service.ServicePollImpl; import org.chorem.pollen.service.ServiceUser; @@ -72,6 +78,13 @@ return service; } + public static ServiceEmail buildServiceEmail( + @InjectService("PollenContext") PollenContextImplementor context) { + ServiceEmailImpl service = new ServiceEmailImpl(); + service.setContext(context); + return service; + } + public static ServiceImage buildServiceImage( @InjectService("PollenContext") PollenContextImplementor context) { return new ServiceImageImpl(context); @@ -165,4 +178,23 @@ configPropertiesFileSymbolProvider, "after:SystemProperties", "before:ApplicationDefaults"); } + + + /** + * Used to instanciate SessionState WaoUser when session expires. + * + * @param configuration to add the ApplicationStateCreator. + */ + public void contributeApplicationStateManager(MappedConfiguration<Class<?>, ApplicationStateContribution> configuration) { + ApplicationStateCreator<UserAccount> creator = + new ApplicationStateCreator<UserAccount>() { + @Override + public UserAccount create() { + return new UserAccountImpl(); + } + }; + + configuration.add(UserAccount.class, + new ApplicationStateContribution("session", creator)); + } } Added: 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 (rev 0) +++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,37 @@ + +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; + } + +} Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-en_GB.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,6 +1,6 @@ # User registration emails -registerEmail_subject=[Pollen] Confirmation of account creation %s -registerEmail_msg=Welcome %s %s. You had just created an account on the web application Pollen.\n\nLogin: %s\nPassword: %s\n\nYou can now manage your polls by logging on the website : \n%s +pollen.mail.userRegister.subject=[Pollen] Confirmation of account creation %s +pollen.mail.userRegister.content=Welcome %s %s. You had just created an account on the web application Pollen.\n\nLogin: %s\nPassword: %s\n\nYou can now manage your polls by logging on the website : \n%s # Poll creation emails creatorEmail_subject=[Pollen] Poll creation (%s) 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,6 +1,6 @@ # User registration emails -registerEmail_subject=[Pollen] Confirmation de cr\u00E9ation du compte %s -registerEmail_msg=Bienvenue %s %s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %s\nMot de passe : %s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%s +pollen.mail.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s +pollen.mail.userRegister.content=Bienvenue %s %s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %s\nMot de passe : %s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%s # Poll creation emails creatorEmail_subject=[Pollen] Cr\u00E9ation d'un sondage (%s) 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border.tml 2010-03-30 17:57:40 UTC (rev 2960) @@ -4,6 +4,8 @@ <head> <title>Pollen<t:if t:test="pageTitle"> :: ${pageTitle}</t:if></title> <link rel="icon" type="image/png" href="${asset:context:favicon.png}" /> + <link rel="stylesheet" type="text/css" href="${asset:context:}/css/common.css" /> + <link rel="stylesheet" type="text/css" href="${asset:context:}/css/main.css" /> <t:FeedContextLink t:id="feedContext" /> <t:if test="${feedFileExisting}"> <link t:type="headlink" rel="alternate" type="application/atom+xml" href="${feedFilename}" t:context="feedContext" /> @@ -14,7 +16,7 @@ <body id="${pageLogo}Body"> <!-- Langue --> - <div id="localization" class="${pageLogo}Localization"> + <div id="po-header-localization" class="${pageLogo}Localization"> <a href="mailto:${contactEmail}" title="${message:header-contact-title}"> <img src="${asset:context:img/contact.png}" alt="Contact" /> </a> | @@ -28,7 +30,7 @@ </div> <!-- Entête de la page --> - <p id="top_logo"> + <p id="po-header-logo"> <a t:type="pagelink" t:page="index" href="index"> <img src="${asset:context:img}/${logo}" alt="Pollen" /> </a> @@ -36,21 +38,16 @@ <t:zone t:id="top" class="${pageLogo}" show="show" update="show"> <!-- Login --> - <div id="login_box" class="${pageLogo}"> + <div id="po-header-connection" class="${pageLogo}"> <t:if test="userExists"> <span class="menu_elt" onmouseover="$('compte_menu').show()" onmouseout="$('compte_menu').hide()"> - <t:if test="userNamed"> - ${user.firstName} ${user.lastName} - <p:else> - ${user.login} - </p:else> - </t:if> + ${user.displayName} <div class="dropdown_menu" id="compte_menu" style="display: none;"> <div class="top_right${pageLogo}"></div> <div class="top_left${pageLogo}"></div> <ul class="top_middle${pageLogo}"> <li> - <t:pagelink page="user/Account">${message:account}</t:pagelink> + <t:pagelink page="user/profile">${message:account}</t:pagelink> </li> <li> <t:actionlink t:id="logout" t:zone="top">${message:logout}</t:actionlink> @@ -63,7 +60,7 @@ <div class="dropdown_menu" id="login_menu" style="display: none;"> <div class="top_right${pageLogo}"></div> <div class="top_left${pageLogo}"></div> - <form t:type="form" t:id="loginForm" action="post"> + <form t:type="form" t:id="connection" action="post"> <ul class="top_middle${pageLogo}"> <li> <div t:type="errors" /> @@ -83,7 +80,7 @@ </form> </div> ${message:or} - <t:pagelink t:page="user/Register">${message:register}</t:pagelink> + <t:pagelink t:page="user/register">${message:register}</t:pagelink> </p:else> </t:if> </div> @@ -100,7 +97,7 @@ <div class="top_left${pageLogo}"></div> <ul class ="top_middle${pageLogo}"> <li> - <t:pagelink t:page="poll/PollCreation">${message:pollCreation}</t:pagelink> + <t:pagelink t:page="poll/form">${message:pollCreation}</t:pagelink> </li> <t:if test="userExists"> <li> @@ -117,7 +114,7 @@ </div> </li> <t:if test="userExists"> - <t:if test="user.administrator"> + <t:if test="user.admin"> <li class="menu_elt" onmouseout="$('menu2').hide()" onmouseover="$('menu2').show()"> <a>${message:menu2}</a> <div class="dropdown_menu" id="menu2" style="display:none"> @@ -142,14 +139,14 @@ <div id="corps"> <!-- Barre d'adresse --> - <div id="addressBar" class="${pageLogo}Address"> - <t:loop t:source="address" t:value="lien"> + <div id="po-header-addressBar" class="${pageLogo}Address"> + <t:loop t:source="addressBar.items" t:value="item"> > <strong> - <t:if test="lien.address"> - <a t:type="pagelink" t:page="${lien.address}" href="index">${lien.name}</a> + <t:if test="item.address"> + <a t:type="pagelink" t:page="prop:item.address" href="index">${item.name}</a> <p:else> - ${lien.name} + ${item.name} </p:else> </t:if> </strong> @@ -161,25 +158,22 @@ <noscript> <t:feedback t:id="errorJs" /> </noscript> - <t:feedback t:id="borderFeedback" /> - <t:unless t:test="feedBack.hasErrors"> + <t:feedback t:id="borderFeedback" t:autoClear="false"/> + <t:if t:test="canDisplayBody()"> <t:body /> - </t:unless> + </t:if> </div> </div> <!-- Pied de page --> - <div id="footer" class="${pageLogo}" xml:space="preserve"> + <div id="po-footer" class="${pageLogo}" xml:space="preserve"> <a href="${message:footer-documentation-url}">Pollen</a> <a href="http://www.chorem.org/projects/list_files/pollen">${version}</a> - <a href="http://www.gnu.org/licenses/gpl.html">${message:footer-license}</a> - - <!--<a href="${message:codeLutinUrl}">${message:copyright}</a>--> <span title="Copyright">©2009-${currentYear}</span> <a href="http://www.codelutin.com">Code Lutin</a> - - <!--<a href="mailto:${message:contactEmail}">${message:contact}</a> --> <a href="http://www.chorem.org/projects/pollen/issues">${message:footer-bugReport}</a> - <a href="http://list.chorem.org/cgi-bin/mailman/listinfo/pollen-users">${message:footer-userSupport}</a> </div> - <!--<a href="${message:gplUrl}"><img src="${asset:context:img/gplv3.png}" alt="GPLv3" /></a>--> </body> </html> 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-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/Border_fr.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -26,7 +26,7 @@ password-required-message=Vous devez entrer votre mot de passe. loginSubmit=M'identifier loginOk=Vous \u00EAtes connect\u00E9. -loginFailed=Mauvais identifiant ou mot de passe. +#loginFailed=Mauvais identifiant ou mot de passe. #foot #contact=Contact Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_en.properties =================================================================== --- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_en.properties 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_en.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,20 +0,0 @@ -title=Register -login-label=Login * -password1-label=Password * -password2-label=Reenter your password * -firstName-label=First name -lastName-label=Last name -email-label=Em@il * -submit-label=Register -connectionInfoLegend=Connection information -userInfoLegend=User information -email-regexp=^([a-zA-Z0-9_.+-])+@(([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. -loginAlreadyExists=A user already registered with this login. -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/Register_fr.properties =================================================================== --- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_fr.properties 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_fr.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,20 +0,0 @@ -title=S'enregistrer -login-label=Identifiant * -password1-label=Mot de passe * -password2-label=R\u00E9p\u00E9tez votre mot de passe * -firstName-label=Pr\u00E9nom -lastName-label=Nom -email-label=Em@il * -submit-label=S'enregistrer -connectionInfoLegend=Informations de connexion -userInfoLegend=Informations de l'utilisateur -email-regexp=^([a-zA-Z0-9_.+-])+@(([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. -loginAlreadyExists=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet identifiant. -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/UserRegister_en.properties (from rev 2956, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_en.properties) =================================================================== --- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_en.properties (rev 0) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_en.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,20 @@ +title=Register +login-label=Login * +password1-label=Password * +password2-label=Reenter your password * +firstName-label=First name +lastName-label=Last name +email-label=Em@il * +submit-label=Register +connectionInfoLegend=Connection information +userInfoLegend=User information +email-regexp=^([a-zA-Z0-9_.+-])+@(([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. +loginAlreadyExists=A user already registered with this login. +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/UserRegister_en.properties ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties (from rev 2956, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Register_fr.properties) =================================================================== --- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties (rev 0) +++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,18 @@ +title=S'enregistrer +login-label=Identifiant * +password1-label=Mot de passe * +password2-label=R\u00E9p\u00E9tez votre mot de passe * +firstName-label=Pr\u00E9nom +lastName-label=Nom +email-label=Em@il * +submit-label=S'enregistrer +connectionInfoLegend=Informations de connexion +userInfoLegend=Informations de l'utilisateur +email-regexp=^([a-zA-Z0-9_.+-])+@(([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. \ No newline at end of file Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties ___________________________________________________________________ Added: svn:mergeinfo + Modified: trunk/pollen-ui/src/main/webapp/Index.tml =================================================================== --- trunk/pollen-ui/src/main/webapp/Index.tml 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/webapp/Index.tml 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,20 +1,20 @@ - -<t:border t:address="address" t:pageLogo="literal:Index" +<!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" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <div class="center" style="margin-bottom:20px;"> - <img src="${asset:context:img/pollen.png}" /> + <img src="${asset:context:img/pollen.png}" alt="Pollen logo"/> </div> <div class="center"> - <t:pagelink t:page="poll/Creation"> - <img src="${asset:context:img/smallCreation.png}" /> + <t:pagelink t:page="poll/form"> + <img src="${asset:context:img/smallCreation.png}" alt="poll creation" /> </t:pagelink> <t:pagelink t:page="user/PollsParticipated"> - <img src="${asset:context:img/smallVote.png}" /> + <img src="${asset:context:img/smallVote.png}" alt="vote" /> </t:pagelink> <t:pagelink t:page="user/PollsParticipated"> - <img src="${asset:context:img/smallVoteCounting.png}" /> + <img src="${asset:context:img/smallVoteCounting.png}" alt="voteCounting" /> </t:pagelink> </div> Added: trunk/pollen-ui/src/main/webapp/css/common.css =================================================================== --- trunk/pollen-ui/src/main/webapp/css/common.css (rev 0) +++ trunk/pollen-ui/src/main/webapp/css/common.css 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,63 @@ +/* + Document : common + Created on : 30 mars 2010, 10:40:20 + Author : fdesbois + Description: + Common StyleSheet for Pollen application +*/ + +.fleft { + float: left; +} + +.fright { + float: right; +} + +.clearfix { + display:block; +} + +.clearfix:after { + content:"."; + display:block; + height:0; + clear:both; + visibility:hidden; +} + +.hidden { + display: none; +} + +.display { + display: block; +} + +.fb-error { + width: 400px; + margin: auto; + text-align: center; + color: #000; + font-weight: bold; + padding: 3px; + border: solid; + border-color: #f00; + border-width: 2px; +} + +.fb-info { + width: 400px; + margin: auto; + text-align: center; + color: #000; + padding: 3px; + border: solid; + border-color: #000; + border-width: 2px; +} + +.center { + text-align: center; +} + Modified: trunk/pollen-ui/src/main/webapp/css/main.css =================================================================== --- trunk/pollen-ui/src/main/webapp/css/main.css 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/webapp/css/main.css 2010-03-30 17:57:40 UTC (rev 2960) @@ -10,38 +10,6 @@ margin: auto; } -.fleft { - float: left; -} - -.fright { - float: right; -} - -.clearfix { - display:block; -} - -.clearfix:after { - content:"."; - display:block; - height:0; - clear:both; - visibility:hidden; -} - -.clr { - clear: both; -} - -.hidden { - display: none; -} - -.display { - display: block; -} - #CreationBody { background-image: url("../img/bigCreation.png"); } @@ -68,6 +36,7 @@ padding: 0px; } +/*Haut de page*/ .CreationLocalization, .VoteLocalization, .VoteCountingLocalization { margin-top: 82px; @@ -77,22 +46,51 @@ margin-top: 10px; } -#localization { - text-align: right; - margin-bottom: 1px; +#po-header-localization { + text-align: right; + margin-bottom: 1px; } -#localization a { - text-decoration: none; +#po-header-localization a { + text-decoration: none; } -/*Haut de page*/ -#top_logo { +#po-header-logo { float: left; margin-top: -102px; margin-right: 10px; } +#po-header-connection { + float: right; + vertical-align: top; + position: relative; + margin-right: 10px; + text-align: right; +} + +#po-header-connection form { + margin: 0px; + padding: 0px; + width: 200px; +} + +#po-header-connection a, +#po-header-connection span { + padding: 1px; + padding-left: 5px; + padding-right: 5px; + text-decoration: none; + cursor: pointer; +} + +#po-header-connection a:hover, +#po-header-connection span:hover { + -moz-border-radius: 10px; + background-color: #000; + color: #fff; +} + .Index { background-color: #ff0; color: #000; @@ -150,6 +148,7 @@ position: relative; } +/** DROPDOWN MENU **/ .dropdown_menu { padding-top: 9px; position: absolute; @@ -315,34 +314,6 @@ right: -25px; } -#login_box { - float: right; - vertical-align: top; - position: relative; - margin-right: 10px; - text-align: right; -} - -#login_box form { - margin: 0px; - padding: 0px; - width: 200px; -} - -#login_box a, #login_box span { - padding: 1px; - padding-left: 5px; - padding-right: 5px; - text-decoration: none; - cursor: pointer; -} - -#login_box a:hover, #login_box span:hover { - -moz-border-radius: 10px; - background-color: #000; - color: #fff; -} - HTML>BODY DIV.t-error LI { margin-left: 0px; } @@ -385,7 +356,7 @@ color: #727a7e; } -#addressBar { +#po-header-addressBar { padding: 5px; margin-left: 350px; } @@ -410,42 +381,15 @@ padding: 15px; } -.fb-error { - width: 400px; - margin: auto; - text-align: center; - color: #000; - font-weight: bold; - padding: 3px; - border: solid; - border-color: #f00; - border-width: 2px; -} - -.fb-info { - width: 400px; - margin: auto; - text-align: center; - color: #000; - padding: 3px; - border: solid; - border-color: #000; - border-width: 2px; -} - -.center { - text-align: center; -} - -/* Le pied de page (qui se trouve tout en bas, en général pour les copyrights) */ -#footer { +/* Pied de page */ +#po-footer { padding: 5px; font-size: small; text-align: center; margin-top: 20px; } -#footer a, -#footer span { +#po-footer a, +#po-footer span { color:#727a7e; } \ No newline at end of file Modified: trunk/pollen-ui/src/main/webapp/css/register.css =================================================================== --- trunk/pollen-ui/src/main/webapp/css/register.css 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/webapp/css/register.css 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,4 +1,4 @@ -#registerForm fieldset { +#po-user-register form fieldset { border: 1px solid #aab; padding: 15px; padding-bottom: 10px; @@ -9,28 +9,28 @@ text-align: left; } -#registerForm fieldset div { +#po-user-register form fieldset div { margin-bottom: 10px; } -#registerForm label { +#po-user-register form label { display: block; width: 180px; float: left; } -#registerError { +#po-user-register-form-error { width: 600px; margin: auto; margin-top: 10px; } -#registerError .t-error div, -#registerError .t-error ul { +#po-user-register-form-error .t-error div, +#po-user-register-form-error .t-error ul { padding: 3px; } -#registerError .t-error LI +#po-user-register-form-error .t-error LI { list-style:disc; margin-left: 20px; Modified: trunk/pollen-ui/src/main/webapp/poll/PollForm.tml =================================================================== --- trunk/pollen-ui/src/main/webapp/poll/PollForm.tml 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/webapp/poll/PollForm.tml 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<t:border t:address="addressBar.items" t:pageLogo="literal:Creation" t:pageBodyId="p-pollForm" t:pageTitle="prop:pageTitle" +<t:border t:addressBar="addressBar" t:pageLogo="literal:Creation" t:pageBodyId="p-pollForm" t:pageTitle="prop:pageTitle" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <t:feedback t:id="feedback"/> <h1 class="titlePoll"> @@ -23,9 +23,9 @@ </p> <p> <span><label t:type="label" for="creatorName"/>:</span> - <input type="text" t:type="textfield" t:id="creatorName" value="poll.creatorName" t:validate="required,minlength=2"/> + <input type="text" t:type="textfield" t:id="creatorName" value="poll.creator.name" t:validate="required,minlength=2"/> <label t:type="label" for="email"/>: - <input type="text" t:type="textfield" class="email" t:id="email" value="poll.creatorEmail" t:validate="regexp"/> + <input type="text" t:type="textfield" class="email" t:id="email" value="poll.creator.email" t:validate="regexp"/> </p> <p> <span><label t:type="label" for="description"/>: </span> @@ -40,8 +40,8 @@ <label t:type="label" for="endDate"/>: <input t:type="ck/dateTimeField" t:id="endDate" value="poll.endDate" t:validate="regexp" t:datePattern="message:date-pattern" t:timePicker="true" t:timePickerAdjacent="true"/> - <label t:type="label" for="voteCounting"/>: - <select t:type="select" t:id="voteCounting" t:value="poll.voteCounting" t:validate="required"> + <label t:type="label" for="voteCountingType"/>: + <select t:type="select" t:id="voteCountingType" t:value="poll.voteCountingType" t:validate="required"> <option></option> </select> <span t:type="ck/Tooltip" title="${message:help}" t:value="${message:voteCounting-help}" t:effect="appear"> Deleted: trunk/pollen-ui/src/main/webapp/user/Register.tml =================================================================== --- trunk/pollen-ui/src/main/webapp/user/Register.tml 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pollen-ui/src/main/webapp/user/Register.tml 2010-03-30 17:57:40 UTC (rev 2960) @@ -1,48 +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"> - <t:unless test="userExists"> - <h1 class="titleCreation">${message:title}</h1> - <t:form t:id="registerForm"> - <div id="registerError"> - <t:errors /> - </div> - - <FieldSet> - <legend>${message:connectionInfoLegend}</legend> - <div> - <t:label for="login"/> - <t:TextField t:id="login" t:value="newUser.login" t:validate="required"/> - </div> - <div> - <t:label for="password1"/> - <t:PasswordField t:id="password1" t:value="password1" t:validate="required, minlength=6"/> - </div> - <div> - <t:label for="password2"/> - <t:PasswordField t:id="password2" t:value="password2" t:validate="required, minlength=6"/> - </div> - </FieldSet> - - <FieldSet> - <legend>${message:userInfoLegend}</legend> - <div> - <t:label for="email"/> - <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp"/> - </div> - <div> - <t:label for="firstName"/> - <t:TextField t:id="firstName" t:value="newUser.firstName"/> - </div> - <div> - <t:label for="lastName"/> - <t:TextField t:id="lastName" t:value="newUser.lastName"/> - </div> - </FieldSet> - - <div class="buttons"> - <input type="submit" value="${message:submit-label}"/> - </div> - </t:form> - </t:unless> -</t:border> \ No newline at end of file Copied: trunk/pollen-ui/src/main/webapp/user/UserRegister.tml (from rev 2956, trunk/pollen-ui/src/main/webapp/user/Register.tml) =================================================================== --- trunk/pollen-ui/src/main/webapp/user/UserRegister.tml (rev 0) +++ trunk/pollen-ui/src/main/webapp/user/UserRegister.tml 2010-03-30 17:57:40 UTC (rev 2960) @@ -0,0 +1,51 @@ + +<t:border t:addressBar="addressBar" t:pageLogo="literal:Creation" t:pageTitle="prop:title" + t:pageBodyId="po-user-register" + xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + <t:unless t:test="userExists"> + <h1 class="titleCreation">${message:title}</h1> + <t:zone t:id="zone" t:update="show"> + <form action="post" t:type="form" t:id="register" t:zone="zone"> + <div id="po-user-register-form-error"> + <t:errors /> + </div> + + <fieldset> + <legend>${message:connectionInfoLegend}</legend> + <div> + <t:label for="login"/> + <t:TextField t:id="login" t:value="newUser.login" t:validate="required"/> + </div> + <div> + <t:label for="password1"/> + <t:PasswordField t:id="password1" t:value="password1" t:validate="required, minlength=6"/> + </div> + <div> + <t:label for="password2"/> + <t:PasswordField t:id="password2" t:value="password2" t:validate="required, minlength=6"/> + </div> + </fieldset> + + <fieldset> + <legend>${message:userInfoLegend}</legend> + <div> + <t:label for="email"/> + <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp"/> + </div> + <div> + <t:label for="firstName"/> + <t:TextField t:id="firstName" t:value="newUser.firstName"/> + </div> + <div> + <t:label for="lastName"/> + <t:TextField t:id="lastName" t:value="newUser.lastName"/> + </div> + </fieldset> + + <div class="buttons"> + <input type="submit" value="${message:submit-label}"/> + </div> + </form> + </t:zone> + </t:unless> +</t:border> \ No newline at end of file Property changes on: trunk/pollen-ui/src/main/webapp/user/UserRegister.tml ___________________________________________________________________ Added: svn:mergeinfo + Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-03-27 20:07:23 UTC (rev 2959) +++ trunk/pom.xml 2010-03-30 17:57:40 UTC (rev 2960) @@ -313,7 +313,7 @@ <eugene.version>2.0</eugene.version> <i18n.version>1.1.1-SNAPSHOT</i18n.version> <tapestry.version>5.1.0.5</tapestry.version> - <nuiton-utils.version>1.2</nuiton-utils.version> + <nuiton-utils.version>1.2.1-SNAPSHOT</nuiton-utils.version> <processor.version>1.0.2</processor.version> <!-- <chorem-commons.version>1.0.0-alpha-2-SNAPSHOT</chorem-commons.version>-->