Pollen-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
April 2010
- 3 participants
- 19 discussions
Author: tchemit
Date: 2010-04-20 16:05:44 +0200 (Tue, 20 Apr 2010)
New Revision: 2972
Log:
Utilisation de mavenpom4redmine 2.1.2
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-11 22:04:47 UTC (rev 2971)
+++ trunk/pom.xml 2010-04-20 14:05:44 UTC (rev 2972)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>2.0.7</version>
+ <version>2.1.2</version>
</parent>
<groupId>org.chorem</groupId>
1
0
Author: fdesbois
Date: 2010-04-12 00:04:47 +0200 (Mon, 12 Apr 2010)
New Revision: 2971
Log:
Improve some rules for sonar + change db mode to create for tests
Added:
trunk/pollen-business/src/test/resources/PollenTest.properties
Removed:
trunk/pollen-business/src/test/resources/pollen.properties
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -21,14 +21,14 @@
protected Object[] args;
- public PollenBusinessException(PollenExceptionType type) {
+ public PollenBusinessException(PollenExceptionType type, Object... args) {
super(type.getMessage());
+ this.args = args;
this.type = type;
}
- public PollenBusinessException(PollenExceptionType type, Object... args) {
- super(type.getMessage());
- this.args = args;
+ public PollenBusinessException(Throwable exception, PollenExceptionType type, Object... args) {
+ super(type.getMessage(), exception);
this.type = type;
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -5,13 +5,8 @@
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-//import org.chorem.pollen.PollenDAOHelper;
-//import org.chorem.pollen.business.services.SendMail;
-//import org.chorem.pollen.business.services.ServiceUserImpl;
import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
@@ -50,16 +45,7 @@
/** Conversion service for services **/
// private PollenConverter converter;
-
- public PollenContextImpl() {
-
- }
-
- @Override
- public void finalize() {
- stop();
- }
-
+
/**
* Default configuration file will be loaded using
* {@link org.nuiton.util.ApplicationConfig }.
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenProperty.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -47,9 +47,9 @@
/** Charset of Pollen **/
CHARSET("pollen.charset");
- String key;
+ private String key;
- static PollenContext context;
+ private static PollenContext context;
PollenProperty(String key) {
this.key = key;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/MailUtil.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. ##%*/
-package org.chorem.pollen.business.utils;
+package org.chorem.pollen.mail;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/PreventRuleManager.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -22,7 +22,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.chorem.pollen.business.utils.MailUtil;
import org.chorem.pollen.entity.PreventRule;
/**
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -29,7 +29,6 @@
import java.util.Map;
import org.apache.commons.io.FileUtils;
-import org.chorem.pollen.business.utils.MailUtil;
import org.nuiton.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -82,7 +82,7 @@
if (log.isErrorEnabled()) {
log.error("Error on email send", eee);
}
- throw new PollenBusinessException(
+ throw new PollenBusinessException(eee,
PollenExceptionType.SMTP_NOT_AVAILABLE,
pollenEmail.getTo());
}
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -43,7 +43,7 @@
log.info("## START ## : " + dbname);
InputStream input = TestManager.class.
- getResourceAsStream("/pollen.properties");
+ getResourceAsStream("/PollenTest.properties");
Properties options = new Properties();
options.load(input);
Copied: trunk/pollen-business/src/test/resources/PollenTest.properties (from rev 2966, trunk/pollen-business/src/test/resources/pollen.properties)
===================================================================
--- trunk/pollen-business/src/test/resources/PollenTest.properties (rev 0)
+++ trunk/pollen-business/src/test/resources/PollenTest.properties 2010-04-11 22:04:47 UTC (rev 2971)
@@ -0,0 +1,12 @@
+hibernate.hbm2ddl.auto=create
+hibernate.show_sql=false
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.connection.username=sa
+hibernate.connection.password=
+hibernate.connection.driver_class=org.h2.Driver
+hibernate.connection.url=jdbc:h2:file:target/test-base/pollen
+
+adminLogin=admin
+adminPassword=admin
+
+pollen.emails.directory=target/test-emails
\ No newline at end of file
Property changes on: trunk/pollen-business/src/test/resources/PollenTest.properties
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mergeinfo
+
Deleted: trunk/pollen-business/src/test/resources/pollen.properties
===================================================================
--- trunk/pollen-business/src/test/resources/pollen.properties 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-business/src/test/resources/pollen.properties 2010-04-11 22:04:47 UTC (rev 2971)
@@ -1,17 +0,0 @@
-# Configuration de la base de donn\u00C3\u00A9es
-hibernate.hbm2ddl.auto=update
-hibernate.show_sql=false
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.connection.username=sa
-hibernate.connection.password=
-hibernate.connection.driver_class=org.h2.Driver
-hibernate.connection.url=jdbc:h2:file:target/test-base/pollen
-
-# Initialisation de la base de donn\u00C3\u00A9es
-choiceType=DATE,IMAGE,TEXT
-pollType=RESTRICTED,FREE,GROUP
-voteCounting=NORMAL,PERCENTAGE,CONDORCET
-adminLogin=admin
-adminPassword=admin
-
-pollen.emails.directory=target/test-emails
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/base/ContextLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -23,7 +23,7 @@
*
* @return a String contextPath
*/
- public String getContextPath() ;
+ String getContextPath() ;
/**
* Get a file from context with name defined by filename.
@@ -31,5 +31,5 @@
* @param filename name of the file to get
* @return a File with absolutePath corresponding to contextPath + filename
*/
- public File getFile(String filename) ;
+ File getFile(String filename) ;
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Chart.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -76,30 +76,30 @@
/** titre du diagramme */
@Parameter
- private String _title = "";
+ private String title = "";
/** type de représentation du diagramme */
@Parameter(required = true)
- private int _type;
+ private int type;
@Parameter(required = true)
- private int _width;
+ private int width;
@Parameter(required = true)
- private int _height;
+ private int height;
/**
* list(array) of paired values(label,value):
* [String,Number,String,Number,...]
*/
@Parameter(required = true)
- private List<Object> _values;
+ private List<Object> values;
@Parameter(required = false)
- private List<Object> _subtitles;
+ private List<Object> subtitles;
@Inject
- private ComponentResources _resources;
+ private ComponentResources resources;
@Inject
private TypeCoercer typeCoercer;
@@ -107,23 +107,23 @@
void beginRender(MarkupWriter writer) {
// event link params
- Object[] params = new Object[] { _title, _type, _width, _height };
+ Object[] params = new Object[] { title, type, width, height };
- if (_subtitles != null) {
- Object[] size = new Object[] { _subtitles.size() };
+ if (subtitles != null) {
+ Object[] size = new Object[] { subtitles.size() };
params = ArrayUtil.concat(params, size);
- params = ArrayUtil.concat(params, _subtitles.toArray());
+ params = ArrayUtil.concat(params, subtitles.toArray());
} else {
Object[] size = new Object[] { 0 };
params = ArrayUtil.concat(params, size);
}
- params = ArrayUtil.concat(params, _values.toArray());
+ params = ArrayUtil.concat(params, values.toArray());
// generate event link
- Link link = _resources.createEventLink("chart", params);
+ Link link = resources.createEventLink("chart", params);
Element img = writer.element("img", "src", link);
- _resources.renderInformalParameters(writer);
+ resources.renderInformalParameters(writer);
}
void afterRender(MarkupWriter writer) {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FileLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -55,27 +55,27 @@
/** Chemin du fichier */
@Parameter(required = true)
- private String _filename;
+ private String filename;
/** Type MIME du fichier */
@Parameter
- private String _type;
+ private String type;
@Inject
private Logger logger;
@Inject
- private ComponentResources _resources;
+ private ComponentResources resources;
/**
* Context to get the file
*/
@Parameter(required=true)
- private ContextLink _context;
+ private ContextLink context;
@Log
void beginRender(MarkupWriter writer) {
- Link link = _resources.createEventLink("createLink", _filename, _type);
+ Link link = resources.createEventLink("createLink", filename, type);
writeLink(writer, link);
}
@@ -92,7 +92,7 @@
}
//File file = new File(/*_context.getContextPath() + */filename/* + _context.getExtension()*/);
- File file = _context.getFile(filename);
+ File file = context.getFile(filename);
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
@@ -100,7 +100,7 @@
logger.error("Fichier inexistant : " + file.getAbsolutePath(), e);
}
- if (!_resources.isBound("type")) {
+ if (!resources.isBound("type")) {
MimetypesFileTypeMap mimes = new MimetypesFileTypeMap();
type = mimes.getContentType(file);
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/HeadLink.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -49,19 +49,19 @@
/** Chemin du fichier */
@Parameter(required = true)
- private ContextLink _context;
+ private ContextLink context;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _href;
+ private String href;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _rel;
+ private String rel;
@Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
- private String _type;
+ private String type;
@Parameter
- private String _title;
+ private String title;
@Inject
private Logger logger;
@@ -70,9 +70,9 @@
private ComponentResources _resources;
void beginRender(MarkupWriter writer) {
- Link link = _resources.createEventLink("fileLink", _href, _type);
- writer.element("link", "href", link, "rel", _rel, "type", _type,
- "title", _title);
+ Link link = _resources.createEventLink("fileLink", href, type);
+ writer.element("link", "href", link, "rel", rel, "type", type,
+ "title", title);
_resources.renderInformalParameters(writer);
}
@@ -95,7 +95,7 @@
return null;
}
- File file = _context.getFile(href);
+ File file = context.getFile(href);
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/ChoiceField.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -86,14 +86,6 @@
case IMAGE:
setImageFileName(choice.getName());
}
-// setDescription(dto.getDescription());
-// setHidden(dto.getHidden());
-// setTopiaId(dto.getTopiaId());
-// setValidate(dto.getValidate());
-//// setPollUId(dto.getPollUId());
-// setName(dto.getName());
-// //setValue(dto.getValue());
-// //setVoteId(dto.getVoteId());
}
/**
@@ -231,24 +223,6 @@
name = String.valueOf(getDate().getTime());
break;
case IMAGE:
-// // Get directory to save the image using the context from
-// // pollen properties.
-// File dir = new File(PollenProperty.IMG_DIR.getValue(), imageDir);
-// if (!dir.exists()) {
-// dir.mkdirs();
-// }
-// // Save the image file
-// File file = new File(dir, getImageFileName());
-// image.write(file);
-// if (log.isDebugEnabled()) {
-// log.debug("Image saved: " + getImageFileName() +
-// " (size=" + image.getSize() + ")");
-// }
-// // Create image thumbnail
-// ImageUtil.createThumbnail(dir, file, 100);
-// if (log.isDebugEnabled()) {
-// log.debug("save name for image : " + file.getName());
-// }
name = serviceImage.saveImage(getImage(), getImageDir());
break;
case TEXT:
@@ -261,22 +235,22 @@
choice.setName(name);
}
- public void setDescription(String description) {
- choice.setDescription(description);
- }
-
- public void setChoiceType(ChoiceType choiceType) {
- choice.setChoiceType(choiceType);
- }
-
public String getName() {
return choice.getName();
}
+ public void setDescription(String description) {
+ choice.setDescription(description);
+ }
+
public String getDescription() {
return choice.getDescription();
}
+ public void setChoiceType(ChoiceType choiceType) {
+ choice.setChoiceType(choiceType);
+ }
+
public ChoiceType getChoiceType() {
return choice.getChoiceType();
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/data/GenericSelectModel.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -42,6 +42,7 @@
* in your page to ge the {@link PropertyAccess} service.<br>
* !Notice: you must set the created instance both as model and encoder
* parameter for the {@link Select} component.
+ * @param <T>
*/
public class GenericSelectModel<T> extends AbstractSelectModel implements
ValueEncoder<T> {
@@ -53,18 +54,22 @@
public GenericSelectModel(List<T> list, Class<T> clazz, String labelField,
String idField, PropertyAccess access) {
this.list = list;
- if (idField != null)
- this.idFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(
- idField);
- if (labelField != null)
- this.labelFieldAdapter = access.getAdapter(clazz)
- .getPropertyAdapter(labelField);
+ if (idField != null) {
+ this.idFieldAdapter =
+ access.getAdapter(clazz).getPropertyAdapter(idField);
+ }
+ if (labelField != null) {
+ this.labelFieldAdapter =
+ access.getAdapter(clazz).getPropertyAdapter(labelField);
+ }
}
+ @Override
public List<OptionGroupModel> getOptionGroups() {
return null;
}
+ @Override
public List<OptionModel> getOptions() {
List<OptionModel> optionModelList = new ArrayList<OptionModel>();
if (labelFieldAdapter == null) {
@@ -86,6 +91,7 @@
// ValueEncoder methods
+ @Override
public String toClient(T obj) {
if (idFieldAdapter == null) {
return obj + "";
@@ -94,25 +100,30 @@
}
}
+ @Override
public T toValue(String string) {
if (idFieldAdapter == null) {
for (T obj : list) {
- if (nvl(obj).equals(string))
+ if (nvl(obj).equals(string)) {
return obj;
+ }
}
} else {
for (T obj : list) {
- if (nvl(idFieldAdapter.get(obj)).equals(string))
+ if (nvl(idFieldAdapter.get(obj)).equals(string)) {
return obj;
+ }
}
}
return null;
}
private String nvl(Object o) {
- if (o == null)
+ if (o == null) {
return "";
- else
+ }
+ else {
return o.toString();
+ }
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/ServiceImageImpl.java 2010-04-11 22:04:47 UTC (rev 2971)
@@ -39,7 +39,8 @@
private static final int THUMB_WIDTH = 100;
- private static final Logger logger = LoggerFactory.getLogger(ServiceImageImpl.class);
+ private static final Logger logger =
+ LoggerFactory.getLogger(ServiceImageImpl.class);
private PollenContext context;
@@ -76,7 +77,8 @@
}
@Override
- public StreamResponse createImageStream(String filename, String filedir, boolean thumb) {
+ public StreamResponse createImageStream(String filename, String filedir,
+ boolean thumb) {
// security : src containing .. are filtered, to not access to full system
if (StringUtils.isEmpty(filename) || filename.contains("..")) {
return null;
1
0
r2970 - in trunk/pollen-business/src/main/java/org/chorem/pollen: . service
by fdesbois@users.chorem.org 09 Apr '10
by fdesbois@users.chorem.org 09 Apr '10
09 Apr '10
Author: fdesbois
Date: 2010-04-10 01:38:58 +0200 (Sat, 10 Apr 2010)
New Revision: 2970
Log:
improve javadoc
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:28:55 UTC (rev 2969)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:38:58 UTC (rev 2970)
@@ -33,12 +33,17 @@
}
public enum PollenExceptionType {
- //LOAD_CONFIGURATION(n_("pollen.exception.load_configuration")),
+ /** Exception when poll is not found in data **/
POLL_NOT_EXIST(n_("pollen.exception.poll_not_exist")),
+ /** Exception when user login exists in data **/
USER_LOGIN_EXIST(n_("pollen.exception.user_login_exist")),
+ /** Exception when user email exists in data **/
USER_EMAIL_EXIST(n_("pollen.exception.user_email_exist")),
+ /** Exception when user is not found in data **/
USER_NOT_EXIST(n_("pollen.exception.user_not_exist")),
+ /** Exception when password is not valid for some user **/
USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password")),
+ /** Exception when stmp server is not available **/
SMTP_NOT_AVAILABLE(n_("pollen.exception.smtp_not_available"));
private String message;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:38:58 UTC (rev 2970)
@@ -86,7 +86,7 @@
* @param login to check
* @param password to check
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_WRONG_PASSWORD
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_WRONG_PASSWORD}
*/
protected void checkPassword(UserAccountDAO dao, String login,
String password) throws TopiaException, PollenBusinessException {
@@ -107,7 +107,7 @@
* @param dao used to execute the query
* @param login to check
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_LOGIN_EXIST
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_LOGIN_EXIST}
*/
protected void checkLoginNotExist(UserAccountDAO dao, String login)
throws PollenBusinessException, TopiaException {
@@ -129,7 +129,7 @@
* @param query existing query to execute. A new one will be created if this
* param is null.
* @throws TopiaException for ToPIA errors
- * @throws PollenBusinessException USER_EMAIL_EXIST
+ * @throws PollenBusinessException {@link PollenExceptionType#USER_EMAIL_EXIST}
*/
protected void checkEmailNotExist(UserAccountDAO dao, String email,
TopiaQuery query) throws PollenBusinessException, TopiaException {
1
0
Author: fdesbois
Date: 2010-04-10 01:28:55 +0200 (Sat, 10 Apr 2010)
New Revision: 2969
Log:
- Remove PropertiesFileSymbolProvider, PollenManager provide this service
- PollenContext is no longer a service to Inject, PollenManager contains the context and can be injected
- Change EmailException to PollenBusinessException to show correct message on smtp error
- Implements updateUser for UserProfile page + add method for validations
- Improve tests and password managment (no more encoding in UI, add newPassword getter/setter in UserAccount)
Added:
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties
trunk/pollen-ui/src/main/webapp/user/UserProfile.tml
Removed:
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties
trunk/pollen-ui/src/main/webapp/user/Account.tml
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
trunk/pollen-business/src/main/xmi/pollen.properties
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
trunk/pollen-business/src/test/resources/log4j.properties
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
trunk/pollen-ui/src/main/resources/log4j.properties
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml
trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties
trunk/pollen-ui/src/main/webapp/css/common.css
trunk/pollen-ui/src/main/webapp/user/UserRegister.tml
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenBusinessException.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -38,7 +38,8 @@
USER_LOGIN_EXIST(n_("pollen.exception.user_login_exist")),
USER_EMAIL_EXIST(n_("pollen.exception.user_email_exist")),
USER_NOT_EXIST(n_("pollen.exception.user_not_exist")),
- USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password"));
+ USER_WRONG_PASSWORD(n_("pollen.exception.user_wrong_password")),
+ SMTP_NOT_AVAILABLE(n_("pollen.exception.smtp_not_available"));
private String message;
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -120,7 +120,7 @@
try {
if (log.isInfoEnabled()) {
log.info("Start Pollen");
- log.info("Initialize i18n bundle");
+// log.info("Initialize i18n bundle");
}
I18n.setInitializer(new DefaultI18nInitializer("pollen-business"));
I18n.init();
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/entity/UserAccountImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,7 +18,30 @@
private static final long serialVersionUID = 1L;
+ protected String newPassword;
+
+ /**
+ * Get the value of newPassword
+ *
+ * @return the value of newPassword
+ */
@Override
+ public String getNewPassword() {
+ return newPassword;
+ }
+
+ /**
+ * Set the value of newPassword
+ *
+ * @param newPassword new value of newPassword
+ */
+ @Override
+ public void setNewPassword(String newPassword) {
+ this.newPassword = newPassword;
+ }
+
+
+ @Override
public void addFavoriteList(PollAccount list) {
throw new UnsupportedOperationException("Not supported yet.");
}
@@ -26,11 +49,13 @@
@Override
public String getDisplayName() {
String name = "";
+ String separator = "";
if (StringUtils.isNotEmpty(getFirstName())) {
name += getFirstName();
+ separator = " ";
}
if (StringUtils.isNotEmpty(getLastName())) {
- name += getLastName();
+ name += separator + getLastName();
}
if (StringUtils.isEmpty(name)) {
name = getLogin();
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -6,6 +6,8 @@
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
+import org.chorem.pollen.PollenBusinessException;
+import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenException;
import org.chorem.pollen.bean.PollenEmail;
@@ -53,27 +55,36 @@
@Override
protected void executeSendEmail(List<Object> errorArgs,
- PollenEmail pollenEmail) throws EmailException {
+ PollenEmail pollenEmail) throws PollenBusinessException {
errorArgs.add(pollenEmail.getHost());
errorArgs.add(pollenEmail.getPort());
errorArgs.add(pollenEmail.getTo());
errorArgs.add(pollenEmail.getFrom());
+ try {
- // Create the SimpleEmail to send
- SimpleEmail email = pollenEmail.createSimpleEmail();
- email.send();
+ // Create the SimpleEmail to send
+ SimpleEmail email = pollenEmail.createSimpleEmail();
+ email.send();
- if (log.isInfoEnabled()) {
- log.info("Mail sent to : " + pollenEmail.getTo());
+ if (log.isInfoEnabled()) {
+ log.info("Mail sent to : " + pollenEmail.getTo());
- if (log.isDebugEnabled()) {
- log.debug("Email infos : " +
- "\ndate: " + email.getSentDate() +
- "\nhostname: " + email.getHostName() +
- "\nport: " + email.getSmtpPort() +
- "\nfrom: " + email.getFromAddress().toString());
+ if (log.isDebugEnabled()) {
+ log.debug("Email infos : " +
+ "\ndate: " + email.getSentDate() +
+ "\nhostname: " + email.getHostName() +
+ "\nport: " + email.getSmtpPort() +
+ "\nfrom: " + email.getFromAddress().toString());
+ }
}
+ } catch (EmailException eee) {
+ if (log.isErrorEnabled()) {
+ log.error("Error on email send", eee);
+ }
+ throw new PollenBusinessException(
+ PollenExceptionType.SMTP_NOT_AVAILABLE,
+ pollenEmail.getTo());
}
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -4,6 +4,8 @@
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
import org.chorem.pollen.PollenContext;
@@ -15,6 +17,8 @@
import org.chorem.pollen.entity.UserAccountImpl;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaQuery;
+import org.nuiton.topia.framework.TopiaQuery.Op;
/**
* ServiceUserImpl
@@ -29,6 +33,8 @@
*/
public class ServiceUserImpl extends ServiceUserAbstract {
+ private Log log = LogFactory.getLog(ServiceUserImpl.class);
+
private PollenContext context;
public void setContext(PollenContext context) {
@@ -51,12 +57,107 @@
context.closeTransaction(transaction);
}
+ /**
+ * Used to manage the new password of the user. This newPassword will be
+ * encoded then set into the real password.
+ *
+ * @param user to treate
+ * @return true if the newPassword is encoded and set, false otherwise
+ */
+ protected boolean manageNewPassword(UserAccount user) {
+ // Manage password encoding
+ String newPassword = user.getNewPassword();
+ if (StringUtils.isNotEmpty(newPassword)) {
+ user.setPassword(context.encodePassword(newPassword));
+ if (log.isDebugEnabled()) {
+ log.debug("Reset newPassword from UserAccount");
+ }
+ user.setNewPassword(null);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Check if the {@code login} and {@code password} correspond to an
+ * existing user.
+ *
+ * @param dao used to execute the query
+ * @param login to check
+ * @param password to check
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_WRONG_PASSWORD
+ */
+ protected void checkPassword(UserAccountDAO dao, String login,
+ String password) throws TopiaException, PollenBusinessException {
+ int count = dao.createQuery().
+ add(UserAccount.LOGIN, login).
+ add(UserAccount.PASSWORD, password).
+ executeCount();
+ // no user found
+ if (count == 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_WRONG_PASSWORD, login);
+ }
+ }
+
+ /**
+ * Check if the {@code login} doesn't already exist.
+ *
+ * @param dao used to execute the query
+ * @param login to check
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_LOGIN_EXIST
+ */
+ protected void checkLoginNotExist(UserAccountDAO dao, String login)
+ throws PollenBusinessException, TopiaException {
+ int count = dao.createQuery().
+ add(UserAccount.LOGIN, login).
+ executeCount();
+ // existing user found
+ if (count > 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_LOGIN_EXIST);
+ }
+ }
+
+ /**
+ * Check if the {@code email} doesn't already exist, only if not empty.
+ *
+ * @param dao used to execute the query
+ * @param email to check
+ * @param query existing query to execute. A new one will be created if this
+ * param is null.
+ * @throws TopiaException for ToPIA errors
+ * @throws PollenBusinessException USER_EMAIL_EXIST
+ */
+ protected void checkEmailNotExist(UserAccountDAO dao, String email,
+ TopiaQuery query) throws PollenBusinessException, TopiaException {
+ // Don't check if email is empty
+ if (StringUtils.isEmpty(email)) {
+ return;
+ }
+ if (query == null) {
+ query = dao.createQuery();
+ }
+ int count = query.add(UserAccount.EMAIL, email).
+ executeCount();
+ // existing user found
+ if (count > 0) {
+ throw new PollenBusinessException(
+ PollenExceptionType.USER_EMAIL_EXIST);
+ }
+ }
+
@Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
+
+ String encodedPassword = context.encodePassword(password);
+
errorArgs.add(login);
- errorArgs.add(password);
+ errorArgs.add(encodedPassword);
UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
@@ -65,10 +166,8 @@
if (user == null) {
throw new PollenBusinessException(
PollenExceptionType.USER_NOT_EXIST, login);
- } else if (!user.getPassword().equals(password)) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_WRONG_PASSWORD, login);
}
+ checkPassword(dao, login, encodedPassword);
return user;
}
@@ -81,7 +180,7 @@
}
@Override
- protected void executeCreateUpdateUser(TopiaContext transaction,
+ protected void executeCreateUser(TopiaContext transaction,
List<Object> errorArgs, UserAccount user)
throws TopiaException, PollenBusinessException {
@@ -90,27 +189,53 @@
errorArgs.add(user.getAdmin());
UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ // Check login not exist
+ checkLoginNotExist(dao, user.getLogin());
- // New User
- if (StringUtils.isEmpty(user.getTopiaId())) {
- // Check login exist
- UserAccount userFound = dao.findByLogin(user.getLogin());
- if (userFound != null) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_LOGIN_EXIST);
- }
- // Check email exist
- userFound = dao.findByEmail(user.getEmail());
- if (userFound != null) {
- throw new PollenBusinessException(
- PollenExceptionType.USER_EMAIL_EXIST);
- }
- dao.create(user);
- // Update existing user
- } else {
- dao.update(user);
+ // Check email not exist
+ checkEmailNotExist(dao, user.getEmail(), null);
+
+ // Execute create
+ manageNewPassword(user);
+ dao.create(user);
+
+ transaction.commitTransaction();
+ }
+
+
+
+ @Override
+ protected void executeUpdateUser(TopiaContext transaction,
+ List<Object> errorArgs, UserAccount user)
+ throws TopiaException, PollenBusinessException {
+
+ errorArgs.add(user.getLogin());
+ errorArgs.add(user.getEmail());
+ errorArgs.add(user.getAdmin());
+
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ // Check the password
+ String encodedPassword = context.encodePassword(user.getPassword());
+ checkPassword(dao, user.getLogin(), encodedPassword);
+
+ // Change password if needed
+ boolean passwordChanged = manageNewPassword(user);
+ // Otherwise set the encodedPassword to properly save the user
+ if (!passwordChanged) {
+ user.setPassword(encodedPassword);
}
+ // In case of email change, check if an other user has not already
+ // the new email
+ TopiaQuery query = dao.createQuery().
+ add(UserAccount.LOGIN, Op.NEQ, user.getLogin());
+ checkEmailNotExist(dao, user.getEmail(), query);
+
+ // Execute update
+ dao.update(user);
+
transaction.commitTransaction();
}
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -37,6 +37,7 @@
pollen.error.serviceUser.createDefaultAdmin=
pollen.error.serviceUser.createUpdateList=
pollen.error.serviceUser.createUpdateUser=
+pollen.error.serviceUser.createUser=
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
@@ -45,11 +46,13 @@
pollen.error.serviceUser.getNewUser=
pollen.error.serviceUser.getPerson=
pollen.error.serviceUser.getUsers=
+pollen.error.serviceUser.updateUser=
pollen.error.serviceVote.getVote=
pollen.error.serviceVote.getVotesByPoll=Unable to load votes from poll with uid \= %1$s
pollen.error.serviceVote.hasAlreadyVoted=Unable test vote existing for account with votingId \= %1$s and poll with uid \= %2$s
pollen.exception.load_configuration=
pollen.exception.poll_not_exist=No such poll exists. Please make sure that you are using the correct link and copy it completely into your browser's address field.
+pollen.exception.smtp_not_available=
pollen.exception.user_email_exist=
pollen.exception.user_login_exist=
pollen.exception.user_not_exist=
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -36,6 +36,7 @@
pollen.error.serviceUser.createDefaultAdmin=Impossible de cr\u00E9er l'administrateur par d\u00E9faut \: %1$s (%2$s)
pollen.error.serviceUser.createUpdateList=
pollen.error.serviceUser.createUpdateUser=Impossible de cr\u00E9er l'utilisateur '%1$s' <%2$s> (admin \= %$3b)
+pollen.error.serviceUser.createUser=
pollen.error.serviceUser.deleteList=
pollen.error.serviceUser.deleteUser=
pollen.error.serviceUser.getFavoriteLists=
@@ -44,11 +45,13 @@
pollen.error.serviceUser.getNewUser=Impossible d'instancier un nouvel utilisateur.
pollen.error.serviceUser.getPerson=
pollen.error.serviceUser.getUsers=
+pollen.error.serviceUser.updateUser=
pollen.error.serviceVote.getVote=
pollen.error.serviceVote.getVotesByPoll=
pollen.error.serviceVote.hasAlreadyVoted=
pollen.exception.load_configuration=La configuration n'a pas \u00E9t\u00E9 charg\u00E9e correctement \! Veuillez v\u00E9rifier le d\u00E9marrage de l'application.
pollen.exception.poll_not_exist=Il n'y a pas de sondage \u00E0 cette adresse. Veuillez verifier que vous utilisez le lien correcte et copiez-le compl\u00E8tement dans le champ d'adresse de votre navigateur.
+pollen.exception.smtp_not_available=Impossible d'envoyer un email \u00E0 %1$s. Serveur smtp indisponible pour l'envoi d'email, veuillez contacter un administrateur.
pollen.exception.user_email_exist=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
pollen.exception.user_login_exist=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet identifiant.
pollen.exception.user_not_exist=L'identifiant '%1$s' ne correspond \u00E0 aucun utilisateur connu.
Modified: trunk/pollen-business/src/main/xmi/pollen.properties
===================================================================
--- trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -3,5 +3,6 @@
#model.tagvalue.dbSchema=Pollen
model.tagvalue.java.lang.String=text
model.tagvalue.exceptionClass=org.chorem.pollen.PollenException
-#org.chorem.pollen.business.persistence.PollAccount.attribute.accountId.tagvalue.naturalId=true
-#org.chorem.pollen.business.persistence.Poll.attribute.pollId.tagvalue.naturalId=true
\ No newline at end of file
+
+org.chorem.pollen.entity.UserAccount.attribute.login.tagvalue.naturalId=true
+org.chorem.pollen.entity.UserAccount.attribute.email.tagvalue.unique=true
\ No newline at end of file
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -78,19 +78,19 @@
return getContext().beginTransaction();
}
- public static ServiceUser getServiceUser() {
+ public static ServiceUserImpl getServiceUser() {
ServiceUserImpl instance = new ServiceUserImpl();
instance.setContext(getContext());
return instance;
}
- public static ServiceEmail getServiceEmail() {
+ public static ServiceEmailImpl getServiceEmail() {
ServiceEmailImpl instance = new ServiceEmailImpl();
instance.setContext(getContext());
return instance;
}
- public static ServicePoll getServicePoll() {
+ public static ServicePollImpl getServicePoll() {
ServicePollImpl instance = new ServicePollImpl();
instance.setContext(getContext());
return instance;
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -7,14 +7,19 @@
import org.apache.commons.logging.LogFactory;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
+import org.chorem.pollen.PollenDAOHelper;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.business.TestManager;
import org.chorem.pollen.entity.UserAccount;
+import org.chorem.pollen.entity.UserAccountDAO;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
/**
*
@@ -44,12 +49,99 @@
TestManager.stop();
}
+ @Test
+ public void testManageNewPassword() throws Exception {
+ TestManager.start("testManageNewPassword");
+
+ ServiceUserImpl serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("homer");
+ user.setNewPassword("wouhou");
+
+ log.info("test 1 : Encode new password");
+ boolean result = serviceUser.manageNewPassword(user);
+ Assert.assertTrue(result);
+
+ String expected = TestManager.getContext().encodePassword("wouhou");
+ Assert.assertEquals(expected, user.getPassword());
+ Assert.assertNull(user.getNewPassword());
+
+ log.info("test 2 : Do not encode new password -> newPassword empty");
+ result = serviceUser.manageNewPassword(user);
+ Assert.assertFalse(result);
+ }
+
+ @Test
+ public void testCheckPassword() throws Exception {
+ TestManager.start("testCheckPassword");
+
+ ServiceUserImpl serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("homer");
+ user.setNewPassword("wouhou");
+ serviceUser.createUser(user);
+
+ String encodedPassword =
+ TestManager.getContext().encodePassword("wouhou");
+
+ TopiaContext transaction = TestManager.beginTransaction();
+ try {
+ UserAccountDAO dao = PollenDAOHelper.getUserAccountDAO(transaction);
+
+ log.info("test 1 : Good password");
+ serviceUser.checkPassword(dao, "homer", encodedPassword);
+
+ log.info("test 2 : Wrong password");
+ try {
+ serviceUser.checkPassword(dao, "homer", "bad");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
+ } finally {
+ transaction.closeContext();
+ }
+ }
+
/**
* Test of executeConnect method, of class ServiceUserImpl.
*/
- //@Test
+ @Test
public void testExecuteConnect() throws Exception {
TestManager.start("testExecuteConnect");
+
+ ServiceUser serviceUser = TestManager.getServiceUser();
+
+ UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
+ user.setLogin("hsimpson");
+ user.setEmail("hsimpson(a)springfield.us");
+ user.setNewPassword("wouhou");
+ serviceUser.createUser(user);
+
+ log.info("test 1 : Connection OK");
+ UserAccount connected = serviceUser.connect("hsimpson", "wouhou");
+ Assert.assertEquals(user, connected);
+
+ log.info("test 2 : Connection problem on login -> user not exist");
+ try {
+ serviceUser.connect("homer", "wouhou");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_NOT_EXIST,
+ eee.getType());
+ }
+
+ log.info("test 3 : Connection problem on password -> don't match with login");
+ try {
+ serviceUser.connect("hsimpson", "coucou");
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
}
/**
@@ -71,55 +163,114 @@
* Test of executeCreateUpdateUser method, of class ServiceUserImpl.
*/
@Test
- public void testExecuteCreateUpdateUser() throws Exception {
- TestManager.start("testCreateUpdateUser");
+ public void testExecuteCreateUser() throws Exception {
+ TestManager.start("testCreateUser");
ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
user.setLogin("hsimpson");
user.setEmail("hsimpson(a)springfield.us");
+ user.setNewPassword("wouhou");
+
String encodedPassword =
TestManager.getContext().encodePassword("wouhou");
- user.setPassword(encodedPassword);
- serviceUser.createUpdateUser(user);
+ log.info("test 1 : Creation OK");
+ serviceUser.createUser(user);
Assert.assertNotNull(user.getTopiaId());
- Assert.assertNotSame("wouhou", user.getPassword());
+ Assert.assertNotSame(encodedPassword, user.getPassword());
- // User 2 with same login
+ log.info("test 2 : Creation problem on login -> user exist");
UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
user2.setLogin("hsimpson");
// Not the same email
user2.setEmail("hsimpson(a)springfield.com");
- user2.setPassword("troubidou");
+ user2.setNewPassword("troubidou");
try {
- serviceUser.createUpdateUser(user2);
+ serviceUser.createUser(user2);
} catch (PollenBusinessException eee) {
- log.error("Error : " + eee.getMessage(), eee);
+ log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_LOGIN_EXIST,
eee.getType());
}
- // User 3 with same email as user
+ log.info("test 3 : Creation problem on email -> user exist");
UserAccount user3 = serviceUser.getNewUser(Locale.FRENCH);
user3.setLogin("homer");
user3.setEmail("hsimpson(a)springfield.us");
- user3.setPassword("troubidou");
+ user3.setNewPassword("troubidou");
try {
- serviceUser.createUpdateUser(user3);
+ serviceUser.createUser(user3);
} catch (PollenBusinessException eee) {
- log.error("Error : " + eee.getMessage(), eee);
+ log.error("Error : " + eee.getMessage());
Assert.assertEquals(PollenExceptionType.USER_EMAIL_EXIST,
eee.getType());
}
+ log.info("test 4 : Creation OK with no email");
+ UserAccount user4 = serviceUser.getNewUser(Locale.FRENCH);
+ user4.setLogin("marge");
+ user4.setNewPassword("troubidou");
+
+ serviceUser.createUser(user4);
+ Assert.assertNull(user4.getEmail());
}
/**
* Test of executeDeleteUser method, of class ServiceUserImpl.
*/
+ @Test
+ public void testExecuteUpdateUser() throws Exception {
+ TestManager.start("testUpdateUser");
+ ServiceUser serviceUser = TestManager.getServiceUser();
+
+ UserAccount user1 = serviceUser.getNewUser(Locale.FRENCH);
+ user1.setLogin("hsimpson");
+ user1.setEmail("hsimpson(a)springfield.us");
+ user1.setNewPassword("wouhou");
+ serviceUser.createUser(user1);
+
+ UserAccount user2 = serviceUser.getNewUser(Locale.FRENCH);
+ String user2Password = "wouhou";
+ user2.setLogin("homer");
+ user2.setEmail("hsimpson(a)springfield.fr");
+ user2.setNewPassword(user2Password);
+ serviceUser.createUser(user2);
+
+ log.info("test 1 : Can't change login -> don't match with password");
+ user2.setLogin("homersimpson");
+ user2.setPassword(user2Password);
+ try {
+ serviceUser.updateUser(user2);
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_WRONG_PASSWORD,
+ eee.getType());
+ }
+ user2.setLogin("homer");
+
+ log.info("test 2 : Change email OK");
+ user2.setEmail("homersimpson(a)springield.fr");
+ user2.setPassword(user2Password);
+ serviceUser.updateUser(user2);
+
+ log.info("test 3 : Change email problem -> user exist");
+ user2.setEmail(user1.getEmail());
+ user2.setPassword(user2Password);
+ try {
+ serviceUser.updateUser(user2);
+ } catch (PollenBusinessException eee) {
+ log.error("Error : " + eee.getMessage());
+ Assert.assertEquals(PollenExceptionType.USER_EMAIL_EXIST,
+ eee.getType());
+ }
+ }
+
+ /**
+ * Test of executeDeleteUser method, of class ServiceUserImpl.
+ */
//@Test
public void testExecuteDeleteUser() throws Exception {
System.out.println("executeDeleteUser");
Modified: trunk/pollen-business/src/test/resources/log4j.properties
===================================================================
--- trunk/pollen-business/src/test/resources/log4j.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-business/src/test/resources/log4j.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -8,7 +8,7 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n
-log4j.logger.org.chorem.pollen=debug
+log4j.logger.org.chorem.pollen=info
log4j.logger.org.chorem.pollen.business.PollenContextImpl=warn
log4j.logger.org.chorem.pollen.business.services.SendMail=warn
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/Border.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -33,7 +33,6 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.PersistentLocale;
import org.apache.tapestry5.services.Request;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.ui.base.ContextLink;
@@ -42,7 +41,7 @@
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
-import org.chorem.pollen.ui.utils.BusinessUtils;
+import org.chorem.pollen.ui.services.PollenManager;
import org.slf4j.Logger;
/**
@@ -150,7 +149,7 @@
private PersistentLocale localeService;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
/** Injection des services */
@Inject
@@ -245,14 +244,14 @@
// No need to connect if user exists
if (!userExists) {
try {
- String encodedPassword = pollen.encodePassword(password);
- UserAccount current =
- serviceUser.connect(login, encodedPassword);
+ UserAccount current = serviceUser.connect(login, password);
user = current;
+ // Change locale for user
+ localeService.set(new Locale(user.getLanguage()));
feedback.addInfo(messages.get("loginOk"));
} catch (PollenBusinessException eee) {
feedback.addError(
- BusinessUtils.getErrorMessage(eee, messages, logger));
+ manager.getErrorMessage(eee, messages, logger));
}
}
return this;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/FeedContextLink.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -3,9 +3,9 @@
import java.io.File;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.ui.base.ContextLink;
import org.chorem.pollen.PollenProperty;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* FeedLink
@@ -21,11 +21,11 @@
public class FeedContextLink implements ContextLink {
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Override
public String getContextPath() {
- return pollen.getProperty(PollenProperty.FEED_DIR);
+ return manager.getProperty(PollenProperty.FEED_DIR);
}
@Override
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -55,13 +55,13 @@
* Champ login du formulaire d'identification
*/
@Property
- private String loginComp;
+ private String connectionLogin;
/**
* Champ password du formulaire d'identification
*/
@Property
- private String passwordComp;
+ private String connectionPassword;
@Inject
private Messages messages;
@@ -82,14 +82,13 @@
// Récupération de l'utilisateur identifié
UserAccount current;
try {
- current = serviceUser.connect(loginComp,
- manager.encodePassword(passwordComp));
+ current = serviceUser.connect(connectionLogin, connectionPassword);
if (current != null) {
user = current;
} else {
feedback.addError(messages.get("loginFailed"));
}
- } catch (PollenBusinessException ex) {
+ } catch (PollenBusinessException eee) {
// TODO
feedback.addError(messages.get("loginFailed"));
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/Index.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -16,9 +16,9 @@
package org.chorem.pollen.ui.pages;
-import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
-import org.chorem.pollen.ui.data.AddressBarItem;
/**
* Page de départ de l'application.
@@ -30,7 +30,18 @@
*/
public class Index {
+ @InjectComponent
+ private Border border;
+
public AddressBar getAddressBar() {
return AddressBar.newEmptyBar().appendCurrent("Pollen");
}
+
+ public void addInfo(String message) {
+ border.addInfo(message);
+ }
+
+ public void addError(String message) {
+ border.addError(message);
+ }
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/admin/UsersAdmin.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -31,13 +31,13 @@
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.mail.PreventRuleManager;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.components.FeedBack;
import org.chorem.pollen.ui.data.AddressBarItem;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* Classe d'administration des comptes utilisateurs. Si l'utilisateur n'est pas
@@ -204,14 +204,14 @@
}
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
/** Envoi du mail de notification */
private void sendMailNotification(UserAccount newUser, String password) {
Map<String, String> data = new HashMap<String, String>();
- data.put("host", pollen.getProperty(PollenProperty.EMAIL_HOST));
- data.put("port", pollen.getProperty(PollenProperty.EMAIL_PORT));
- data.put("from", pollen.getProperty(PollenProperty.EMAIL_FROM));
+ data.put("host", manager.getProperty(PollenProperty.EMAIL_HOST));
+ data.put("port", manager.getProperty(PollenProperty.EMAIL_PORT));
+ data.put("from", manager.getProperty(PollenProperty.EMAIL_FROM));
data.put("to", newUser.getEmail());
data.put("title", messages.format("registerEmail_subject", newUser
.getLogin()));
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/poll/VoteForPoll.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -42,7 +42,6 @@
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Comment;
@@ -60,6 +59,7 @@
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.data.ChoiceField;
import org.chorem.pollen.ui.data.PollUri;
+import org.chorem.pollen.ui.services.PollenManager;
import org.chorem.pollen.ui.services.ServiceImage;
import org.slf4j.Logger;
@@ -932,7 +932,7 @@
private Messages messages;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Property
private PollUri uri;
@@ -1171,7 +1171,7 @@
public int getPagerRange() {
return Integer.parseInt(
- pollen.getProperty(PollenProperty.NB_VOTES_PER_PAGE));
+ manager.getProperty(PollenProperty.NB_VOTES_PER_PAGE));
}
public String getNoPagerText() throws PollenBusinessException {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -16,9 +16,14 @@
package org.chorem.pollen.ui.pages.user;
+import java.util.Locale;
+import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -26,12 +31,15 @@
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.PasswordField;
import org.apache.tapestry5.corelib.components.TextField;
-import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
+import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
-import org.chorem.pollen.ui.data.AddressBarItem;
+import org.chorem.pollen.ui.components.Border;
+import org.chorem.pollen.ui.data.AddressBar;
+import org.chorem.pollen.ui.services.PollenManager;
+import org.slf4j.Logger;
/**
* Classe de la page d'un utilisateur.
@@ -43,6 +51,15 @@
@IncludeStylesheet("context:css/account.css")
public class UserProfile {
+ @Inject
+ private Logger logger;
+
+ @Inject
+ private PollenManager manager;
+
+ @InjectComponent
+ private Border border;
+
/**
* Objet de session représentant l'utilisateur identifié.
*/
@@ -52,137 +69,121 @@
@Property
private boolean userExists;
- /**
- * Utilisateur dont les données sont affichées et modifiées dans le
- * formulaire
- */
+ @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
@Property
- @Persist
- private UserAccount newUser;
+ private String title;
- /** Ancien mot de passe */
- @Persist
- private String oldEmail;
+ @Inject
+ private ServiceUser serviceUser;
- @Component
- private Zone myAccountZone;
+ @Inject
+ private Messages messages;
- @Component
- private Form myAccountForm;
+ public AddressBar getAddressBar() {
+ return AddressBar.newBar().appendCurrent(title);
+ }
- @Component(id = "password")
- private PasswordField passwordField;
+ /***************************** DISPLAY MODE *******************************/
- @Component(id = "newPassword1")
- private PasswordField newPasswordField;
-
- @Component(id = "email")
- private TextField emailField;
-
/**
- * Champ password du formulaire d'enregsitrement d'un utilisateur
+ * State of the form. is currently edited or not.
*/
+ @Persist(PersistenceConstants.FLASH)
@Property
- private String password;
+ private boolean edited;
+
+ void onActionFromEditAccount() {
+ edited = true;
+ // Don't refresh the form zone to reset border messages
+ }
+ /***************************** EDIT MODE **********************************/
+
/**
- * Champ password1 du formulaire d'enregsitrement d'un utilisateur
+ * UserAccount for form edition
*/
- @Property
- private String newPassword1;
- /**
- * Champ password2 du formulaire d'enregsitrement d'un utilisateur
- */
- @Property
- private String newPassword2;
+ private UserAccount userEditable;
@Inject
- private Messages messages;
+ private Locale currentLocale;
- @Parameter(defaultPrefix = BindingConstants.MESSAGE, value = "title")
- @Property
- private String title;
+ @InjectComponent
+ private Form accountForm;
- @SuppressWarnings("unused")
- @Property
- private AddressBarItem[] address;
+ @Component(id = "password")
+ private PasswordField passwordField;
- /**
- * Vrai lorsque l'utilisateur modifie son compte.
- */
- @SuppressWarnings("unused")
- @Property
- private boolean modify = false;
+ @Component(id = "newPassword1")
+ private PasswordField newPasswordField;
- /** Injection des services */
- @Inject
- private ServiceUser serviceUser;
-// @Inject
-// private ServiceAuth serviceAuth;
+ @Component(id = "email")
+ private TextField emailField;
/**
- * Méthode appelée quand l'utilisateur modifie ses données
- *
- * @return la zone de compte mise à jour
+ * Property to check password (newPassword must be equals to passwordVerify)
*/
- Object onSuccessFromMyAccountForm() {
- modify = true;
-//
-// // L'utilisateur a renseigné le mauvais mot de passe
-// if (!serviceAuth.isLoginRight(newUser.getLogin(), MD5.encode(password))) {
-// myAccountForm.recordError(passwordField, messages
-// .get("badPassword"));
-// }
-//
-// // L'utilisateur ne s'est pas trompé en répétant son mot de passe
-// if (newPassword1 != null && !newPassword1.equals("")) {
-// if (!newPassword1.equals(newPassword2)) {
-// myAccountForm.recordError(newPasswordField, messages
-// .get("passwords-dont-match"));
-// }
-// }
-//
-// // L'email existe déjà
-// if (!oldEmail.equals(newUser.getEmail())) {
-// if (serviceUser.isUserEmailExisting(newUser.getEmail())) {
-// myAccountForm.recordError(emailField, messages
-// .get("emailAlreadyExists"));
-// }
-// }
-//
-// // Modification de l'utilisateur
-// if (!myAccountForm.getHasErrors()) {
-// if (serviceUser.updateUser(newUser)) {
-// if (newPassword1 != null && !newPassword1.equals("")) {
-// serviceUser.updatePasswordUser(newUser, MD5
-// .encode(newPassword1));
-// }
-// modify = false;
-// }
-// }
+ @Property
+ private String passwordVerify;
- return myAccountZone.getBody();
+ public UserAccount getUserEditable() {
+ if (userEditable == null) {
+ userEditable = user;
+ }
+ return userEditable;
}
/**
- * Méthode appelée quand l'utilisateur veut modifier son compte
- *
- * @return le formulaire de modification du compte
+ * ON_VALIDATE_FORM :: <br \>
+ * UI validation : check if the two passwords are equals. <br \>
+ * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#updateUser(org.chorem.pollen.entity.UserAccount) }
+ * which throws errors
+ * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_WRONG_PASSWORD}
+ * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
- Object onActionFromModifyButton() {
- modify = true;
- return myAccountZone.getBody();
+ @Log
+ void onValidateFormFromAccountForm() {
+ // Check newPassword that must be equals to passwordVerify
+ String newPassword = userEditable.getNewPassword();
+ if (StringUtils.isNotEmpty(newPassword) &&
+ !newPassword.equals(passwordVerify)) {
+ accountForm.recordError(newPasswordField,
+ messages.get("pollen.ui.user.passwordsDontMatch"));
+ }
+ // If no UI errors, call business to save the user
+ if (!accountForm.getHasErrors()) {
+ try {
+ // Update the user
+ if (logger.isDebugEnabled()) {
+ logger.debug("TopiaId : " + user.getTopiaId());
+ logger.debug("Login : " + user.getLogin());
+ logger.debug("Password : " + user.getPassword());
+ logger.debug("NewPassword : " + user.getNewPassword());
+ }
+ serviceUser.updateUser(userEditable);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ switch (eee.getType()) {
+ case USER_WRONG_PASSWORD:
+ accountForm.recordError(passwordField, message); break;
+ case USER_EMAIL_EXIST:
+ accountForm.recordError(emailField, message);
+ }
+ }
+ }
}
- /**
- * Initialisation de l'affichage
- */
- void setupRender() {
- address = new AddressBarItem[] { new AddressBarItem("Pollen", "Index"),
- new AddressBarItem(title, null) };
- if (userExists) {
- newUser = user;
- oldEmail = user.getEmail();
- }
+ @Log
+ Object onSuccessFromAccountForm() {
+ border.addInfo(messages.get("pollen.ui.user.updateSuccess"));
+ return this;
}
+
+ @Log
+ Object onFailureFromAccountForm() {
+ // Stay in edited mode to show errors
+ edited = true;
+ // Reset new password
+ userEditable.setNewPassword(null);
+ return accountForm;
+ }
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserRegister.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,10 +18,12 @@
import java.util.Locale;
+import org.apache.commons.lang.StringUtils;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
@@ -31,14 +33,14 @@
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.chorem.pollen.PollenBusinessException;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.bean.PollenEmail;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceEmail;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.components.Border;
import org.chorem.pollen.ui.data.AddressBar;
import org.chorem.pollen.ui.pages.Index;
-import org.chorem.pollen.ui.utils.BusinessUtils;
+import org.chorem.pollen.ui.services.PollenManager;
import org.slf4j.Logger;
/**
@@ -55,8 +57,11 @@
@Inject
private Logger logger;
+ @InjectComponent
+ private Border border;
+
/**
- * Objet de session représentant l'utilisateur identifié.
+ * Identified user
*/
@SessionState
private UserAccount user;
@@ -64,16 +69,14 @@
@Property
private boolean userExists;
- /** Injection des services */
@Inject
private ServiceUser serviceUser;
- /** Injection des services */
@Inject
private ServiceEmail serviceEmail;
@Inject
- private PollenContext pollen;
+ private PollenManager manager;
@Inject
private Messages messages;
@@ -83,17 +86,17 @@
private String title;
/**
- * Objet de session représentant l'url du site.
+ * Session property loaded from configuration to know what is the current
+ * server url
*/
@SessionState
private String siteURL;
- /** Locale courante */
@Inject
private Locale currentLocale;
/**
- * Utilisateur créé via le formulaire
+ * New user to create
*/
private UserAccount newUser;
@@ -110,22 +113,16 @@
private PasswordField passwordField;
/**
- * Champ password1 du formulaire d'enregsitrement d'un utilisateur
+ * password2 field to verify if equals to password1
*/
@Property
- private String password1;
- /**
- * Champ password2 du formulaire d'enregsitrement d'un utilisateur
- */
- @Property
- private String password2;
+ private String passwordVerify;
- /**
- * Initialisation de l'affichage
- */
- void setupRender() {
- }
+ private String passwordForEmail;
+ @InjectPage
+ private Index index;
+
public AddressBar getAddressBar() {
return AddressBar.newBar().appendCurrent(title);
}
@@ -138,15 +135,40 @@
}
/**
- * ON_VALIDATE_FORM :: Check if two passwords are equals.
+ * ON_VALIDATE_FORM :: <br \>
+ * UI validation : check if the two passwords are equals. <br \>
+ * BUSINESS validation : execute {@link org.chorem.pollen.service.ServiceUser#createUser(org.chorem.pollen.entity.UserAccount) }
+ * which throws errors
+ * {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_LOGIN_EXIST}
+ * and {@link org.chorem.pollen.PollenBusinessException.PollenExceptionType.USER_EMAIL_EXIST}.
*/
void onValidateFormFromRegister() {
- // L'utilisateur s'est pas trompé en répétant son mot de passe
- if (!password1.equals(password2)) {
- password1 = null;
+ // Check newPassword that must be equals to passwordVerify
+ String password = newUser.getNewPassword();
+ if (!password.equals(passwordVerify)) {
register.recordError(passwordField,
- messages.get("passwords-dont-match"));
+ messages.get("pollen.ui.user.passwordsDontMatch"));
}
+
+ // If no UI errors, call business to save the user
+ if (!register.getHasErrors()) {
+ try {
+ // Set passwordForEmail, newPassword will be reset after
+ // createUser
+ passwordForEmail = newUser.getNewPassword();
+
+ // Saving new user
+ serviceUser.createUser(newUser);
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ switch (eee.getType()) {
+ case USER_EMAIL_EXIST:
+ register.recordError(emailField, message); break;
+ case USER_LOGIN_EXIST:
+ register.recordError(loginField, message);
+ }
+ }
+ }
}
/**
@@ -157,38 +179,38 @@
* @return the form if errors are recorded, or Index page otherwise
*/
Object onSuccessFromRegister() {
- try {
- // Encode the password before saving user
- getNewUser().setPassword(pollen.encodePassword(password1));
-
- // Saving new user
- serviceUser.createUpdateUser(getNewUser());
+ // Set the newUser in session : connect the new registered user
+ user = newUser;
- // Send an email to the new user
- PollenEmail mail = serviceEmail.getNewEmail(getNewUser());
+ index.addInfo(
+ messages.format("pollen.ui.user.autoConnection",
+ user.getLogin()));
- mail.setSubject(
- messages.format("pollen.mail.userRegister.subject",
- getNewUser().getLogin()));
- mail.setContent(
- messages.format("pollen.mail.userRegister.content",
- getNewUser().getDisplayName(), getNewUser().getLogin(),
- password1, siteURL));
+ // Send an email to the new user if not empty
+ if (StringUtils.isNotEmpty(user.getEmail())) {
+ try {
+ PollenEmail mail = serviceEmail.getNewEmail(user);
- serviceEmail.sendEmail(mail);
+ mail.setSubject(
+ messages.format("pollen.email.userRegister.subject",
+ user.getLogin()));
+ mail.setContent(
+ messages.format("pollen.email.userRegister.content",
+ user.getDisplayName(), user.getLogin(),
+ passwordForEmail, siteURL));
- return Index.class;
- } catch (PollenBusinessException eee) {
- String message =
- BusinessUtils.getErrorMessage(eee, messages, logger);
- switch (eee.getType()) {
- case USER_EMAIL_EXIST:
- register.recordError(emailField, message); break;
- case USER_LOGIN_EXIST:
- register.recordError(loginField, message);
+ serviceEmail.sendEmail(mail);
+
+ index.addInfo(
+ messages.format("pollen.ui.user.sendRegisterEmail",
+ user.getEmail()));
+
+ } catch (PollenBusinessException eee) {
+ String message = manager.getErrorMessage(eee, messages, logger);
+ index.addError(message);
}
}
- return register;
+ return index;
}
/**
@@ -197,6 +219,8 @@
* @return the form
*/
Object onFailureFromRegister() {
+ // Reset password from session
+ newUser.setNewPassword(null);
return register;
}
}
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -29,7 +29,6 @@
import org.apache.tapestry5.services.ApplicationStateContribution;
import org.apache.tapestry5.services.ApplicationStateCreator;
import org.apache.tapestry5.upload.services.UploadSymbols;
-import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenContextImpl;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountImpl;
@@ -40,6 +39,8 @@
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.service.ServiceUserImpl;
import org.chorem.pollen.ui.data.PollUri;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This module is automatically included as part of the Tapestry IoC Registry,
@@ -50,18 +51,18 @@
*/
public class AppModule {
+ private static Logger logger = LoggerFactory.getLogger(AppModule.class);
+
public static void bind(ServiceBinder binder) {
}
/**
* Build the application manager.
*
- * @param hub to register the manager for tapestry registry shutdown
* @return PollenManager
*/
- public static PollenManager buildPollenManager(RegistryShutdownHub hub) {
+ public static PollenManager buildPollenManager() {
PollenManager manager = new PollenManager(new PollenContextImpl());
- hub.addRegistryShutdownListener(manager);
return manager;
}
@@ -87,8 +88,31 @@
return new ServiceImageImpl(manager.getContext());
}
+ /**
+ * Execute PollenManager when registry startup.
+ * The manager will be instantiated using
+ * {@link #buildPollenManager(org.apache.tapestry5.ioc.services.RegistryShutdownHub) }.
+ * The serviceUser is needed to start the application.
+ *
+ * @param configuration to add the manager to registry startup
+ * @param manager to launch at startup
+ * @param shutdownHub to register manager for registry shutdown
+ */
+ public static void contributeRegistryStartup(
+ OrderedConfiguration<Runnable> configuration,
+ PollenManager manager, RegistryShutdownHub shutdownHub) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeRegistryStartup");
+ }
+ shutdownHub.addRegistryShutdownListener(manager);
+ configuration.add("PollenStartup", manager);
+ }
+
public static void contributeApplicationDefaults(
MappedConfiguration<String, String> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeApplicationDefaults");
+ }
// Contributions to ApplicationDefaults will override any contributions to
// FactoryDefaults (with the same key). Here we're restricting the supported
// locales to just "en" (English). As you add localised message catalogs and other assets,
@@ -109,6 +133,24 @@
}
/**
+ * Contribution SymbolSource service to access our configuration
+ * symbols from our services, pages and components.
+ *
+ * @param configuration
+ * @param symbolProvider PollenManager
+ */
+ public static void contributeSymbolSource(
+ OrderedConfiguration<SymbolProvider> configuration,
+ @InjectService("PollenManager") SymbolProvider symbolProvider) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeSymbolSource");
+ }
+ configuration.add(
+ "PollenManager", symbolProvider,
+ "after:SystemProperties", "before:ApplicationDefaults");
+ }
+
+ /**
* TypeCoercion for PollUri. This will convert automatically between String
* and PollUri. So pollUri can be used in activation/passivation page
* context.
@@ -116,7 +158,10 @@
* @param configuration
*/
public static void contributeTypeCoercer(
- Configuration<CoercionTuple> configuration) {
+ Configuration<CoercionTuple<?, ?>> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeTypeCoercer");
+ }
Coercion<String, PollUri> coercion1 = new Coercion<String, PollUri>() {
@Override
@@ -154,35 +199,18 @@
// return new BackgroundWorkerImpl(messages, servicePoll, context);
// }
- /**
- * Make configuration from a Properties file available as symbols.
- * @param context
- * @return
- */
- public PropertiesFileSymbolProvider buildConfigPropertiesFileSymbolProvider(
- @InjectService("PollenContext") PollenContext context) {
- return new PropertiesFileSymbolProvider(context);
- }
/**
- * Contribution SymbolSource service so that we can access our configuration
- * symbols from our services, pages and components.
- */
- public static void contributeSymbolSource(
- OrderedConfiguration<SymbolProvider> configuration,
- @InjectService("ConfigPropertiesFileSymbolProvider") SymbolProvider configPropertiesFileSymbolProvider) {
- configuration.add("ConfigPropertiesFile",
- configPropertiesFileSymbolProvider, "after:SystemProperties",
- "before:ApplicationDefaults");
- }
-
-
- /**
- * Used to instanciate SessionState WaoUser when session expires.
+ * Used to instanciate SessionState UserAccount when session expires.
*
* @param configuration to add the ApplicationStateCreator.
*/
- public void contributeApplicationStateManager(MappedConfiguration<Class<?>, ApplicationStateContribution> configuration) {
+ public void contributeApplicationStateManager(MappedConfiguration<Class<?>,
+ ApplicationStateContribution> configuration) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Execute contributeApplicationStateManager");
+ }
+
ApplicationStateCreator<UserAccount> creator =
new ApplicationStateCreator<UserAccount>() {
@Override
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -21,13 +21,19 @@
package org.chorem.pollen.ui.services;
+import java.util.Arrays;
import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
+import org.apache.tapestry5.ioc.services.SymbolProvider;
+import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
+import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
import org.nuiton.util.ApplicationConfig;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* WaoManager
@@ -40,11 +46,16 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class PollenManager implements Runnable, RegistryShutdownListener {
+public class PollenManager implements Runnable,
+ RegistryShutdownListener,
+ SymbolProvider {
- private static final Logger log =
- LoggerFactory.getLogger(PollenManager.class);
+// private static final Logger logger =
+// LoggerFactory.getLogger(PollenManager.class);
+ private final Map<String, String> propertiesMap =
+ new CaseInsensitiveMap<String>();
+
private PollenContext context;
/**
@@ -62,8 +73,19 @@
@Override
public void run() {
context.start();
+ // Copy properties to propertiesMap (insentitive) for SymbolProvider
+ Properties properties = getConfiguration().getOptions();
+ for (Object key : properties.keySet()) {
+ propertiesMap.put((String)key,
+ properties.getProperty((String) key));
+ }
}
+ @Override
+ public String valueForSymbol(String key) {
+ return propertiesMap.get(key);
+ }
+
/**
* Called to stop the application
*/
@@ -93,8 +115,19 @@
return context.getCurrentDate();
}
- public String encodePassword(String password) {
- return context.encodePassword(password);
+ public String getErrorMessage(PollenBusinessException eee,
+ Messages messages, Logger logger) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("ERROR from business : " + eee.getMessage() +
+ " _ args = " + Arrays.toString(eee.getArgs()));
+ }
+ String message = null;
+ if (eee.getArgs() != null) {
+ message = messages.format(eee.getMessage(), eee.getArgs());
+ } else {
+ message = messages.get(eee.getMessage());
+ }
+ return message;
}
}
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PropertiesFileSymbolProvider.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,138 +0,0 @@
-package org.chorem.pollen.ui.services;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.tapestry5.ioc.services.SymbolProvider;
-import org.apache.tapestry5.ioc.util.CaseInsensitiveMap;
-import org.chorem.pollen.PollenContext;
-import org.slf4j.Logger;
-
-public class PropertiesFileSymbolProvider implements SymbolProvider {
-
- private final Map<String, String> propertiesMap = new CaseInsensitiveMap<String>();
-
- private PollenContext context;
-
- /**
- * Instantiate a new PropertiesFileSymbolProvider using a given resource
- * name
- *
- * @param logger the logger to log error messages to
- * @param resourceName the name of the resource to load
- * @param classPath whether to look on the classpath or filesystem
- */
- public PropertiesFileSymbolProvider(Logger logger, String resourceName,
- boolean classPath) {
- try {
- InputStream in;
-
- if (classPath) {
- in = ClassLoader.getSystemResourceAsStream(resourceName);
-
- // ClassLoader.getSystemResourceAsStream() returns null if
- // the resource cannot be found on the classpath
- if (in == null)
- throw new FileNotFoundException();
- } else
- in = new FileInputStream(resourceName);
-
- initialize(logger, in);
-
- } catch (FileNotFoundException e) {
- String msg = "Could not find '" + resourceName + "'";
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- /**
- * Instantiate a new PropertiesFileSymbolProvider using a given resource
- * name (looking in filesystem and classpath)
- *
- * @param context PollenContext
- */
- public PropertiesFileSymbolProvider(PollenContext context) {
- Properties conf = context.getConfiguration().getOptions();
- initializeProperties(conf);
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider using a given InputStream
- *
- * @param logger the logger
- * @param in an InputStream representing the resource
- */
- public PropertiesFileSymbolProvider(Logger logger, InputStream in) {
- initialize(logger, in);
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider from a given URL.
- *
- * @param logger the logger
- * @param url an URL to open
- */
- public PropertiesFileSymbolProvider(Logger logger, URL url) {
- try {
- initialize(logger, url.openStream());
- } catch (IOException e) {
- String msg = "IOException while opening URL '" + url + "': "
- + e.getMessage();
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- /**
- * Instantiate a PropertiesFileSymbolProvider from a given Properties.
- *
- * @param logger the logger
- * @param properties a Properties object
- */
- public PropertiesFileSymbolProvider(Logger logger, Properties properties) {
- initializeProperties(properties);
- }
-
- private void initialize(Logger logger, InputStream in) {
- Properties properties = new Properties();
-
- try {
- properties.load(in);
-
- for (Object key : properties.keySet()) {
- propertiesMap.put((String) key, properties
- .getProperty((String) key));
- }
- } catch (IOException e) {
- String msg = "IOEception while loading properties: "
- + e.getMessage();
-
- logger.error(msg);
-
- throw new IllegalArgumentException(msg, e);
- }
- }
-
- private void initializeProperties(Properties properties) {
- for (Object key : properties.keySet()) {
- propertiesMap.put((String) key, properties
- .getProperty((String) key));
- }
- }
-
- @Override
- public String valueForSymbol(String arg0) {
- return propertiesMap.get(arg0);
- }
-
-}
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/utils/BusinessUtils.java 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,37 +0,0 @@
-
-package org.chorem.pollen.ui.utils;
-
-import java.util.Arrays;
-import org.apache.tapestry5.ioc.Messages;
-import org.chorem.pollen.PollenBusinessException;
-import org.slf4j.Logger;
-
-/**
- * BusinessUtils
- *
- * Created: 30 mars 2010
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public class BusinessUtils {
-
- public static String getErrorMessage(
- PollenBusinessException eee, Messages messages, Logger logger) {
- if (logger.isDebugEnabled()) {
- logger.debug("ERROR from business : " + eee.getMessage() +
- " _ args = " + Arrays.toString(eee.getArgs()));
- }
- String message = null;
- if (eee.getArgs() != null) {
- message = messages.format(eee.getMessage(), eee.getArgs());
- } else {
- message = messages.get(eee.getMessage());
- }
- return message;
- }
-
-}
Modified: trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/i18n/pollen-ui-fr_FR.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,6 +1,6 @@
# User registration emails
-pollen.mail.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
-pollen.mail.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
+pollen.email.userRegister.subject=[Pollen] Confirmation de cr\u00E9ation du compte %s
+pollen.email.userRegister.content=Bienvenue %1$s. Vous venez de cr\u00E9er un compte sur l'application de sondage en ligne Pollen.\n\nIdentifiant : %2$s\nMot de passe : %3$s\n\nVous pouvez d\u00E8s maintenant g\u00E9rer vos sondages en vous identifiant sur le site : \n%4$s
# Poll creation emails
creatorEmail_subject=[Pollen] Cr\u00E9ation d'un sondage (%s)
@@ -41,6 +41,11 @@
return=Retour
help=Aide
+pollen.ui.user.autoConnection=Vous \u00EAtes maintenant connect\u00E9 avec l'identifiant %1$s.
+pollen.ui.user.sendRegisterEmail=Un email vous a \u00E9t\u00E9 envoy\u00E9 \u00E0 l'adresse %1$s.
+pollen.ui.user.passwordsDontMatch=Les deux mots de passe ne correspondent pas.
+pollen.ui.user.updateSuccess=Modification enregistr\u00E9e avec succ\u00E8s.
+
pollen.ui.choice.delete.confirm=Etes-vous s\u00FBr de vouloir d\u00E9finitivement supprimer ce choix ?
pollen.ui.choice.delete.title=Supprimer ce choix
pollen.ui.vote.noVote=Aucune personne n'a encore particip\u00E9 au sondage
Modified: trunk/pollen-ui/src/main/resources/log4j.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/log4j.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/log4j.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,5 +1,5 @@
# Default to info level output; this is very handy if you eventually use Hibernate as well.
-log4j.rootCategory=warn, A1
+log4j.rootCategory=warn, A1, globalfile
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
@@ -8,6 +8,17 @@
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%p] %c{2} %m%n
+log4j.appender.globalfile=org.apache.log4j.RollingFileAppender
+# pollen.log.home must be defined when starting server
+# ex : -Dpollen.log.home=/home/user/.local/pollen
+log4j.appender.globalfile.File=${pollen.log.home}/pollen.log
+log4j.appender.globalfile.MaxFileSize=500KB
+log4j.appender.globalfile.Append=true
+log4j.appender.globalfile.MaxBackupIndex=10
+log4j.appender.globalfile.Threshold=TRACE
+log4j.appender.globalfile.layout=org.apache.log4j.PatternLayout
+log4j.appender.globalfile.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
+
# Service category names are the name of the defining module class
# and then the service id.
log4j.category.org.chorem.test.services.AppModule.TimingFilter=info
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/components/LoginComponent.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -4,12 +4,12 @@
<legend>${message:connectionLegend}</legend>
<t:feedback t:id="loginCompFeedback" />
<div>
- <t:label for="loginComp" />
- <input t:type="TextField" t:id="loginComp" validate="required" />
+ <t:label for="connectionLogin" />
+ <input t:type="TextField" t:id="connectionLogin" validate="required" />
</div>
<div>
- <t:label for="passwordComp" />
- <input t:type="PasswordField" t:id="passwordComp" validate="required" />
+ <t:label for="connectionPassword" />
+ <input t:type="PasswordField" t:id="connectionPassword" validate="required" />
</div>
<div class="buttons">
<input t:id="submitLoginCompForm" t:type="Submit" t:value="${message:loginSubmit}" />
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,23 +0,0 @@
-title=My Account
-login-label=User name
-password-label=Password *
-newPassword1-label=New password
-newPassword2-label=Reenter new password
-firstName-label=First name
-lastName-label=Last name
-email-label=Em@il *
-submit-label=Submit
-modify=Modify
-connectionInfoLegend=Connection information
-userInfoLegend=User information
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Invalid email.
-login-required-message=You must provide a username.
-password1-required-message=You must provide a password.
-password1-minlength-message=Your password must be at least 6 characters long.
-password2-required-message=You must repeat your password for confirmation.
-password2-minlength-message=Your password must be at least 6 characters long.
-passwords-dont-match=Two versions of password do not match.
-noUser=You must be logged to access to your account.\n Please fill the form below.
-badPassword=Your password is invalid.
-emailAlreadyExists=A user already registered with this email.
\ No newline at end of file
Deleted: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,23 +0,0 @@
-title=Mon Compte
-login-label=Identifiant
-password-label=Mot de passe *
-newPassword1-label=Nouveau mot de passe
-newPassword2-label=R\u00E9p\u00E9tez votre nouveau mot de passe
-firstName-label=Pr\u00E9nom
-lastName-label=Nom
-email-label=Em@il *
-submit-label=Valider
-modify=Modifier
-connectionInfoLegend=Informations de connexion
-userInfoLegend=Informations de l'utilisateur
-email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
-email-regexp-message=Email invalide.
-login-required-message=Vous devez fournir un identifiant.
-password1-required-message=Vous devez fournir un mot de passe.
-password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-password2-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
-password2-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-passwords-dont-match=Les deux mots de passe ne correspondent pas.
-noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir acc\u00E9der \u00E0 votre compte.\n Veuillez remplir le formulaire ci-dessous.
-badPassword=Votre mot de passe est invalide.
-emailAlreadyExists=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
\ No newline at end of file
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties (from rev 2966, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_en.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,23 @@
+title=My Account
+login-label=User name
+password-label=Password *
+newPassword1-label=New password
+newPassword2-label=Reenter new password
+firstName-label=First name
+lastName-label=Last name
+email-label=Em@il *
+submit-label=Submit
+editAccount-action=Modify
+connectionInfoLegend=Connection information
+userInfoLegend=User information
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Invalid email.
+login-required-message=You must provide a username.
+password1-required-message=You must provide a password.
+password1-minlength-message=Your password must be at least 6 characters long.
+password2-required-message=You must repeat your password for confirmation.
+password2-minlength-message=Your password must be at least 6 characters long.
+passwords-dont-match=Two versions of password do not match.
+noUser=You must be logged to access to your account.\n Please fill the form below.
+badPassword=Your password is invalid.
+emailAlreadyExists=A user already registered with this email.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_en.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Copied: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties (from rev 2966, trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/Account_fr.properties)
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties (rev 0)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,23 @@
+title=Mon Compte
+login-label=Identifiant
+password-label=Mot de passe *
+newPassword1-label=Nouveau mot de passe
+passwordVerify-label=R\u00E9p\u00E9tez votre nouveau mot de passe
+firstName-label=Pr\u00E9nom
+lastName-label=Nom
+email-label=Em@il
+submit-label=Valider
+edit-action=Modifier
+cancel-action=Annuler
+connectionInfoLegend=Informations de connexion
+userInfoLegend=Informations de l'utilisateur
+email-regexp=^([a-zA-Z0-9_.+-])+(a)(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
+email-regexp-message=Email invalide.
+login-required-message=Vous devez fournir un identifiant.
+password1-required-message=Vous devez fournir un mot de passe.
+password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+passwordVerify-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
+passwordVerify-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+noUser=Vous devez \u00EAtre identifi\u00E9 pour pouvoir acc\u00E9der \u00E0 votre compte.\n Veuillez remplir le formulaire ci-dessous.
+badPassword=Votre mot de passe est invalide.
+emailAlreadyExists=Un utilisateur est d\u00E9j\u00E0 enregistr\u00E9 avec cet email.
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserProfile_fr.properties
___________________________________________________________________
Added: svn:mergeinfo
+
Modified: trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties
===================================================================
--- trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/resources/org/chorem/pollen/ui/pages/user/UserRegister_fr.properties 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,10 +1,10 @@
title=S'enregistrer
login-label=Identifiant *
password1-label=Mot de passe *
-password2-label=R\u00E9p\u00E9tez votre mot de passe *
+passwordVerify-label=R\u00E9p\u00E9tez votre mot de passe *
firstName-label=Pr\u00E9nom
lastName-label=Nom
-email-label=Em@il *
+email-label=Em@il
submit-label=S'enregistrer
connectionInfoLegend=Informations de connexion
userInfoLegend=Informations de l'utilisateur
@@ -13,6 +13,6 @@
login-required-message=Vous devez fournir un identifiant.
password1-required-message=Vous devez fournir un mot de passe.
password1-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
-password2-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
-password2-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
+passwordVerify-required-message=Vous devez r\u00E9p\u00E9ter votre mot de passe pour confirmation.
+passwordVerify-minlength-message=Votre mot de passe doit comporter au moins 6 caract\u00E8res.
passwords-dont-match=Les deux mots de passe ne correspondent pas.
\ No newline at end of file
Modified: trunk/pollen-ui/src/main/webapp/css/common.css
===================================================================
--- trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/css/common.css 2010-04-09 23:28:55 UTC (rev 2969)
@@ -44,6 +44,7 @@
border: solid;
border-color: #f00;
border-width: 2px;
+ margin-bottom: 10px;
}
.fb-info {
Deleted: trunk/pollen-ui/src/main/webapp/user/Account.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/Account.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/user/Account.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -1,95 +0,0 @@
-
-<t:border t:address="address" t:pageLogo="literal:Creation"
- xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
- <h1 class="titleCreation">${message:title}</h1>
- <t:if test="userExists">
-
- <t:zone t:id="myAccountZone" show="show" update="show">
- <div id="myAccountFormDiv">
- <t:form t:id="myAccountForm" zone="myAccountZone">
- <div id="myAccountError">
- <t:errors />
- </div>
-
- <FieldSet>
- <legend>${message:connectionInfoLegend}</legend>
- <div>
- <label>${message:login-label}</label>
- ${user.login}
- </div>
- <t:if test="modify">
- <div>
- <t:label for="password" />
- <t:PasswordField t:id="password" t:value="password" t:validate="required,minlength=6" />
- </div>
- <div>
- <t:label for="newPassword1" />
- <t:PasswordField t:id="newPassword1" t:value="newPassword1" t:validate="minlength=6" />
- </div>
- <div>
- <t:label for="newPassword2" />
- <t:PasswordField t:id="newPassword2" t:value="newPassword2" t:validate="minlength=6" />
- </div>
- </t:if>
- </FieldSet>
-
- <FieldSet>
- <legend>${message:userInfoLegend}</legend>
- <div>
- <t:label for="email" />
- <t:if test="modify">
- <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp" />
- <p:else>
- <t:if test="user.email">
- ${user.email}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- <div>
- <t:label for="firstName" />
- <t:if test="modify">
- <t:TextField t:id="firstName" t:value="newUser.firstName" />
- <p:else>
- <t:if test="user.firstName">
- ${user.firstName}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- <div>
- <t:label for="lastName" />
- <t:if test="modify">
- <t:TextField t:id="lastName" t:value="newUser.lastName" />
- <p:else>
- <t:if test="user.lastName">
- ${user.lastName}
- <p:else>-</p:else>
- </t:if>
- </p:else>
- </t:if>
- </div>
- </FieldSet>
-
- <div class="buttons">
- <t:if test="modify">
- <input type="submit" value="${message:submit-label}" />
- <p:else>
- <t:actionLink t:id="modifyButton" t:zone="myAccountZone" style="text-decoration: none;">
- <input type="button" value="${message:modify}" />
- </t:actionLink>
- </p:else>
- </t:if>
- </div>
- </t:form>
- </div>
- </t:zone>
-
- <p:else>
- <h4>${message:noUser}</h4>
- <t:LoginComponent />
- </p:else>
- </t:if>
-</t:border>
\ No newline at end of file
Copied: trunk/pollen-ui/src/main/webapp/user/UserProfile.tml (from rev 2966, trunk/pollen-ui/src/main/webapp/user/Account.tml)
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/UserProfile.tml (rev 0)
+++ trunk/pollen-ui/src/main/webapp/user/UserProfile.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -0,0 +1,98 @@
+
+<t:border t:addressBar="addressBar" t:pageLogo="literal:Creation"
+ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter">
+ <h1 class="titleCreation">${message:title}</h1>
+ <t:if test="userExists">
+
+ <t:zone t:id="accountZone" show="show" update="show">
+ <t:form t:id="accountForm" zone="accountZone">
+ <div id="myAccountFormDiv">
+ <div id="myAccountError">
+ <t:errors />
+ </div>
+
+ <FieldSet>
+ <legend>${message:connectionInfoLegend}</legend>
+ <div>
+ <label>${message:login-label}</label>
+ ${user.login}
+ </div>
+ <t:if test="edited">
+ <div>
+ <t:label for="password" />
+ <t:PasswordField t:id="password" t:value="userEditable.password" t:validate="required,minlength=6" />
+ </div>
+ <div>
+ <t:label for="newPassword1" />
+ <t:PasswordField t:id="newPassword1" t:value="userEditable.newPassword" t:validate="minlength=6" />
+ </div>
+ <div>
+ <t:label for="passwordVerify" />
+ <t:PasswordField t:id="passwordVerify" t:value="passwordVerify" t:validate="minlength=6" />
+ </div>
+ </t:if>
+ </FieldSet>
+
+ <FieldSet>
+ <legend>${message:userInfoLegend}</legend>
+ <div>
+ <t:label for="email" />
+ <t:if test="edited">
+ <t:TextField t:id="email" t:value="userEditable.email" t:validate="regexp" />
+ <p:else>
+ <t:if test="user.email">
+ ${user.email}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ <div>
+ <t:label for="firstName" />
+ <t:if test="edited">
+ <t:TextField t:id="firstName" t:value="userEditable.firstName" />
+ <p:else>
+ <t:if test="user.firstName">
+ ${user.firstName}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ <div>
+ <t:label for="lastName" />
+ <t:if test="edited">
+ <t:TextField t:id="lastName" t:value="userEditable.lastName" />
+ <p:else>
+ <t:if test="user.lastName">
+ ${user.lastName}
+ <p:else>-</p:else>
+ </t:if>
+ </p:else>
+ </t:if>
+ </div>
+ </FieldSet>
+
+ <div class="buttons">
+ <t:if test="edited">
+ <input type="submit" value="${message:submit-label}" />
+ <a t:type="pagelink" t:page="user/profile" style="text-decoration: none;">
+ <input type="button" value="${message:cancel-action}" />
+ </a>
+ <p:else>
+ <a t:type="actionlink" t:id="editAccount" style="text-decoration: none;">
+ <input type="button" value="${message:edit-action}" />
+ </a>
+ </p:else>
+ </t:if>
+ </div>
+ </div>
+ </t:form>
+ </t:zone>
+
+ <p:else>
+ <h4>${message:noUser}</h4>
+ <t:LoginComponent />
+ </p:else>
+ </t:if>
+</t:border>
\ No newline at end of file
Property changes on: trunk/pollen-ui/src/main/webapp/user/UserProfile.tml
___________________________________________________________________
Added: svn:mergeinfo
+
Modified: trunk/pollen-ui/src/main/webapp/user/UserRegister.tml
===================================================================
--- trunk/pollen-ui/src/main/webapp/user/UserRegister.tml 2010-04-08 10:23:22 UTC (rev 2968)
+++ trunk/pollen-ui/src/main/webapp/user/UserRegister.tml 2010-04-09 23:28:55 UTC (rev 2969)
@@ -18,11 +18,11 @@
</div>
<div>
<t:label for="password1"/>
- <t:PasswordField t:id="password1" t:value="password1" t:validate="required, minlength=6"/>
+ <t:PasswordField t:id="password1" t:value="newUser.newPassword" t:validate="required, minlength=6"/>
</div>
<div>
- <t:label for="password2"/>
- <t:PasswordField t:id="password2" t:value="password2" t:validate="required, minlength=6"/>
+ <t:label for="passwordVerify"/>
+ <t:PasswordField t:id="passwordVerify" t:value="passwordVerify" t:validate="required, minlength=6"/>
</div>
</fieldset>
@@ -30,7 +30,7 @@
<legend>${message:userInfoLegend}</legend>
<div>
<t:label for="email"/>
- <t:TextField t:id="email" t:value="newUser.email" t:validate="required,regexp"/>
+ <t:TextField t:id="email" t:value="newUser.email" t:validate="regexp"/>
</div>
<div>
<t:label for="firstName"/>
1
0
r2968 - in trunk/pollen-business/src/main/java/org/chorem/pollen: . service
by fdesbois@users.chorem.org 08 Apr '10
by fdesbois@users.chorem.org 08 Apr '10
08 Apr '10
Author: fdesbois
Date: 2010-04-08 12:23:22 +0200 (Thu, 08 Apr 2010)
New Revision: 2968
Log:
- Remove old folders
- Change service implementation cause of ServiceTransformer modification in ToPIA
Removed:
trunk/pollen-business/src/main/java/org/chorem/pollen/business/
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -36,28 +36,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected void executeSendEmail(List<Object> errorArgs,
PollenEmail pollenEmail) throws EmailException {
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -35,28 +35,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected Poll executeGetNewPoll() {
return new PollImpl();
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 10:23:22 UTC (rev 2968)
@@ -36,28 +36,22 @@
}
@Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void treateError(TopiaContext transaction, Exception eee,
String message, Object... args) throws PollenException {
context.treateError(transaction, eee, message, args);
}
@Override
- protected void treateError(Exception eee, String message,
- Object... args) throws PollenException {
- context.treateError(eee, message, args);
- }
-
- @Override
protected void closeTransaction(TopiaContext transaction) {
context.closeTransaction(transaction);
}
@Override
- protected TopiaContext beginTransaction() throws TopiaException {
- return context.beginTransaction();
- }
-
- @Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
1
0
Author: fdesbois
Date: 2010-04-08 11:42:50 +0200 (Thu, 08 Apr 2010)
New Revision: 2967
Log:
- Update ServiceTransformer usage for ToPIA 2.3.3
- Use nuiton-utils snapshot 1.2.2
- Create PollenManager to manipulate context in Tapestry
- Remove MD5 class, use StringUtil.encodeMD5 instead
Added:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
Removed:
trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
trunk/pollen-business/src/main/xmi/pollen.properties
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
trunk/pom.xml
Deleted: trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/MD5.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,59 +0,0 @@
-/* *##% Pollen
- * Copyright (C) 2009 CodeLutin
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>. ##%*/
-
-package org.chorem.pollen;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * Classe utilitaire permettant d'encoder des chaîne en MD5.
- *
- * @version $Id$
- */
-public class MD5 {
-
- /**
- * Encode la chaine passé en paramètre avec l’algorithme MD5
- *
- * @param key : la chaine à encoder
- * @return la valeur (string) hexadécimale sur 32 bits
- */
- public static String encode(String key) {
-
- byte[] uniqueKey = key.getBytes();
- byte[] hash = null;
-
- try {
- // on récupère un objet qui permettra de crypter la chaine
- hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
- } catch (NoSuchAlgorithmException e) {
- throw new Error("no MD5 support in this VM");
- }
-
- StringBuffer hashString = new StringBuffer();
- for (int i = 0; i < hash.length; ++i) {
- String hex = Integer.toHexString(hash[i]);
- if (hex.length() == 1) {
- hashString.append("0");
- hashString.append(hex.charAt(hex.length() - 1));
- } else {
- hashString.append(hex.substring(hex.length() - 2));
- }
- }
- return hashString.toString();
- }
-}
Added: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java (rev 0)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,123 @@
+package org.chorem.pollen;
+
+import java.util.Date;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.util.ApplicationConfig;
+
+
+public interface PollenContext {
+
+ /**
+ * loadConfiguration :
+ * Load the application configuration :
+ * <pre>
+ * - Add entities implementation classes for Topia-persistence
+ * - Add model version for Topia-migration-service
+ * </pre>
+ * @param config ApplicationConfig
+ */
+ public void loadConfiguration(ApplicationConfig config);
+
+ /**
+ * start :
+ * Start of the application. The application configuration will be loaded
+ * automatically if needed using {@link #loadDefaultConfiguration }. Also
+ * you can manually load the configuration using
+ * {@link #loadConfiguration(ApplicationConfig)}
+ * This start does :
+ * <pre>
+ * - Initialize i18n for error messages
+ * - Create default admin if needed (this will load the topiaRootContext).
+ * </pre>
+ */
+ public void start();
+
+ /**
+ * stop :
+ * Stop the application. Close the Topia rootContext.
+ */
+ public void stop();
+
+ /**
+ * getProperty :
+ * Get a property from the configuration.
+ * @param property PollenProperty
+ * @return String
+ */
+ public String getProperty(PollenProperty property);
+
+ /**
+ * hasProperty :
+ * Test if the property is defined in this context
+ * @param property PollenProperty
+ * @return boolean
+ */
+ public boolean hasProperty(PollenProperty property);
+
+ /**
+ * getConfiguration :
+ * Get the configuration of the application. Instantiate the default one
+ * if needed.
+ * @return ApplicationConfig
+ */
+ public ApplicationConfig getConfiguration();
+
+ /**
+ * getCurrentDate :
+ * Return the current date from context
+ * @return Date
+ */
+ public Date getCurrentDate();
+
+ /**
+ * encodePassword :
+ * @param password
+ * @return String
+ */
+ public String encodePassword(String password);
+
+ /**
+ * createPollenUrlId :
+ * Create a unique UId for entities which need it (PollAccount, Poll).
+ * This UId represent the entity in UI module.
+ * @return String
+ */
+ public String createPollenUrlId();
+
+ /**
+ * beginTransaction :
+ * @return TopiaContext
+ * @throws TopiaException
+ */
+ public TopiaContext beginTransaction() throws TopiaException;
+
+ /**
+ * doCatch :
+ * @param eee
+ * @param message
+ * @param args
+ * @throws PollenException
+ */
+ public void treateError(Exception eee, String message, Object... args)
+ throws PollenException;
+
+ /**
+ * doCatch :
+ * @param transaction
+ * @param eee
+ * @param message
+ * @param args
+ * @throws PollenException
+ */
+ public void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException;
+
+ /**
+ * doFinally :
+ * @param transaction
+ */
+ public void closeTransaction(TopiaContext transaction);
+
+
+} //PollenContext
Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContext.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,16 +1,17 @@
package org.chorem.pollen;
+import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//import org.chorem.pollen.PollenDAOHelper;
//import org.chorem.pollen.business.services.SendMail;
//import org.chorem.pollen.business.services.ServiceUserImpl;
-import org.chorem.pollen.service.ServiceEmail;
-import org.chorem.pollen.service.ServiceEmailImpl;
import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaContextFactory;
@@ -21,6 +22,7 @@
import static org.nuiton.i18n.I18n.n_;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.topia.TopiaNotFoundException;
+import org.nuiton.util.StringUtil;
/**
* PollenContext
@@ -33,7 +35,7 @@
* Mise a jour: $Date$
* par : $Author$
*/
-public class PollenContextImpl implements PollenContextImplementor {
+public class PollenContextImpl implements PollenContext {
/** log. */
private static final Log log = LogFactory.getLog(PollenContextImpl.class);
@@ -78,7 +80,7 @@
loadConfiguration(conf);
} catch (ArgumentsParserException eee) {
- doCatch(eee, n_("pollen.error.context.parse"),
+ treateError(eee, n_("pollen.error.context.parse"),
PollenContextImpl.DEFAULT_FILENAME);
}
}
@@ -142,7 +144,7 @@
}
} catch (Exception eee) {
- doCatch(eee, n_("pollen.error.context.start"));
+ treateError(eee, n_("pollen.error.context.start"));
}
}
@@ -158,7 +160,7 @@
getTopiaRootContext().closeContext();
// sendMail.stopExec();
} catch (Exception eee) {
- doCatch(eee, n_("pollen.error.context.stop"));
+ treateError(eee, n_("pollen.error.context.stop"));
}
}
@@ -172,7 +174,6 @@
*
* @param property PollenProperty
* @return value of this property
- * @throws PollenBusinessException
*/
@Override
public String getProperty(PollenProperty property) {
@@ -235,7 +236,7 @@
try {
return TopiaContextFactory.getContext(getProperties());
} catch (TopiaNotFoundException eee) {
- doCatch(eee, n_("pollen.error.context.getRootContext"));
+ treateError(eee, n_("pollen.error.context.getRootContext"));
}
return null;
}
@@ -264,9 +265,9 @@
* @throws PollenException which contains the exception as the cause
*/
@Override
- public void doCatch(Exception eee, String message, Object... args)
+ public void treateError(Exception eee, String message, Object... args)
throws PollenException {
- doCatch(null, eee, message, args);
+ treateError(null, eee, message, args);
}
/**
@@ -282,8 +283,8 @@
* @throws PollenException
*/
@Override
- public void doCatch(TopiaContext transaction, Exception eee, String message,
- Object... args) throws PollenException {
+ public void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
if (log.isErrorEnabled()) {
log.error(_(message, args), eee);
}
@@ -317,10 +318,11 @@
* @param transaction current TopiaContext
*/
@Override
- public void doFinally(TopiaContext transaction) {
+ public void closeTransaction(TopiaContext transaction) {
if (transaction != null) {
try {
transaction.closeContext();
+ //stop();
} catch (TopiaException eee) {
if (log.isErrorEnabled()) {
log.error(_("pollen.error.context.close"), eee);
@@ -360,19 +362,14 @@
this.currentDate = currentDate;
}
-// @Override
-// public ServiceEmail getServiceEmail() {
-// if (serviceEmail == null) {
-// ServiceEmailImpl instance = new ServiceEmailImpl();
-// instance.setContext(this);
-// serviceEmail = instance;
-// }
-// return serviceEmail;
-// }
-
@Override
public String encodePassword(String password) {
- return MD5.encode(password);
+ try {
+ return StringUtil.encodeMD5(password);
+ } catch (NoSuchAlgorithmException eee) {
+ treateError(eee, n_("pollen.error.encodePassword"));
+ }
+ return null;
}
}
Added: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java (rev 0)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,39 @@
+package org.chorem.pollen;
+
+
+
+public class PollenException extends RuntimeException {
+
+ protected Object[] args;
+ /**
+ * PollenException :
+ * @param eee
+ * @param message
+ * @param args
+ */
+
+ public PollenException(Throwable eee, String message, Object... args) {
+ super(message, eee);
+ this.args = args;
+ }
+
+ /**
+ * getArgs :
+ * @return Object[]
+ */
+
+ public Object[] getArgs() {
+ return args;
+ }
+
+ /**
+ * hasArgs :
+ * @return boolean
+ */
+
+ public boolean hasArgs() {
+ return args.length > 0;
+ }
+
+
+} //PollenException
Property changes on: trunk/pollen-business/src/main/java/org/chorem/pollen/PollenException.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/mail/SendMail.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -37,7 +37,7 @@
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
import org.apache.commons.io.IOUtils;
-import org.chorem.pollen.PollenContextImplementor;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenProperty;
/**
@@ -64,7 +64,7 @@
/** logger. */
private static final Logger log = LoggerFactory.getLogger(SendMail.class);
- protected PollenContextImplementor context;
+ protected PollenContext context;
public static final String EXTENSION_MAIL = ".mail";
public static final String EXTENSION_INDEX = ".index";
@@ -74,7 +74,7 @@
protected volatile boolean stop;
- public SendMail(PollenContextImplementor context) {
+ public SendMail(PollenContext context) {
this.context = context;
if (log.isInfoEnabled()) {
log.info("P:[ SendMail ] init");
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceEmailImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -6,9 +6,13 @@
import org.apache.commons.logging.LogFactory;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.bean.PollenEmail;
import org.chorem.pollen.bean.PollenEmailImpl;
import org.chorem.pollen.entity.UserAccount;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
/**
* ServiceMailImpl
@@ -25,7 +29,35 @@
private static final Log log = LogFactory.getLog(ServiceEmailImpl.class);
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected void executeSendEmail(List<Object> errorArgs,
PollenEmail pollenEmail) throws EmailException {
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServicePollImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -3,16 +3,15 @@
import java.util.List;
import org.chorem.pollen.PollenBusinessException;
-import org.chorem.pollen.PollenContextImplementor;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenDAOHelper;
-import org.chorem.pollen.entity.PollDAO;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.entity.Choice;
import org.chorem.pollen.entity.Comment;
import org.chorem.pollen.entity.Poll;
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.PollImpl;
import org.chorem.pollen.entity.UserAccount;
-import org.nuiton.i18n.I18n;
import org.nuiton.topia.TopiaContext;
import org.nuiton.topia.TopiaException;
@@ -29,7 +28,35 @@
*/
public class ServicePollImpl extends ServicePollAbstract {
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected Poll executeGetNewPoll() {
return new PollImpl();
}
@@ -53,91 +80,87 @@
@Override
protected void executeUpdatePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ Poll poll) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeSavePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ protected void executeSavePoll(TopiaContext transaction, Poll poll)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeletePoll(TopiaContext transaction,
- List<Object> errorArgs, Poll poll) throws TopiaException {
+ protected void executeDeletePoll(TopiaContext transaction, Poll poll)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeleteChoice(TopiaContext transaction,
- List<Object> errorArgs, Choice choice) throws TopiaException {
+ protected void executeDeleteChoice(TopiaContext transaction, Choice choice)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeCreateUpdateVote(TopiaContext transaction,
- List<Object> errorArgs, PollAccount person) throws TopiaException {
+ PollAccount person) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected void executeDeleteVote(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, PollAccount person)
- throws TopiaException {
+ protected void executeDeleteVote(TopiaContext transaction, Poll poll,
+ PollAccount person) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForUpdate(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForUpdate(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<Poll> executeGetAllPolls(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<Poll> executeGetAllPolls(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<Poll> executeGetRunningPolls(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<Poll> executeGetRunningPolls(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<Poll> executeGetPollsByUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ UserAccount user) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<Comment> executeGetComments(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, int startIndex, int endIndex)
+ Poll poll, int startIndex, int endIndex)
throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<PollAccount> executeGetVotes(TopiaContext transaction,
- List<Object> errorArgs, Poll poll, int startIndex, int endIndex)
+ Poll poll, int startIndex, int endIndex)
throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForResults(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForResults(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected Poll executeGetPollForVote(TopiaContext transaction,
- List<Object> errorArgs, String pollUId)
- throws PollenBusinessException, TopiaException {
+ protected Poll executeGetPollForVote(TopiaContext transaction,
+ String pollUId) throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
Modified: trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java
===================================================================
--- trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/service/ServiceUserImpl.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -6,7 +6,9 @@
import org.apache.commons.lang.StringUtils;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.PollenBusinessException.PollenExceptionType;
+import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenDAOHelper;
+import org.chorem.pollen.PollenException;
import org.chorem.pollen.entity.PollAccount;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountDAO;
@@ -27,7 +29,35 @@
*/
public class ServiceUserImpl extends ServiceUserAbstract {
+ private PollenContext context;
+
+ public void setContext(PollenContext context) {
+ this.context = context;
+ }
+
@Override
+ protected void treateError(TopiaContext transaction, Exception eee,
+ String message, Object... args) throws PollenException {
+ context.treateError(transaction, eee, message, args);
+ }
+
+ @Override
+ protected void treateError(Exception eee, String message,
+ Object... args) throws PollenException {
+ context.treateError(eee, message, args);
+ }
+
+ @Override
+ protected void closeTransaction(TopiaContext transaction) {
+ context.closeTransaction(transaction);
+ }
+
+ @Override
+ protected TopiaContext beginTransaction() throws TopiaException {
+ return context.beginTransaction();
+ }
+
+ @Override
protected UserAccount executeConnect(TopiaContext transaction,
List<Object> errorArgs, String login, String password)
throws PollenBusinessException, TopiaException {
@@ -91,51 +121,50 @@
}
@Override
- protected void executeDeleteUser(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ protected void executeDeleteUser(TopiaContext transaction, UserAccount user)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected List<UserAccount> executeGetUsers(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected List<UserAccount> executeGetUsers(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
- protected PollAccount executeGetNewList(TopiaContext transaction,
- List<Object> errorArgs) throws TopiaException {
+ protected PollAccount executeGetNewList(TopiaContext transaction)
+ throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeCreateUpdateList(TopiaContext transaction,
- List<Object> errorArgs, PollAccount list) throws TopiaException {
+ PollAccount list) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected void executeDeleteList(TopiaContext transaction,
- List<Object> errorArgs, PollAccount list) throws TopiaException {
+ PollAccount list) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected List<PollAccount> executeGetFavoriteLists(
- TopiaContext transaction, List<Object> errorArgs)
- throws TopiaException {
+ TopiaContext transaction) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected PollAccount executeGetNewPerson(TopiaContext transaction,
- List<Object> errorArgs, UserAccount user) throws TopiaException {
+ UserAccount user) throws TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
protected PollAccount executeGetPerson(TopiaContext transaction,
- List<Object> errorArgs, String accountUId)
+ String accountUId)
throws PollenBusinessException, TopiaException {
throw new UnsupportedOperationException("Not supported yet.");
}
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-en_GB.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -4,6 +4,7 @@
pollen.error.context.rollback=
pollen.error.context.start=
pollen.error.context.stop=
+pollen.error.encodePassword=
pollen.error.serviceEmail.getNewEmail=
pollen.error.serviceEmail.sendEmail=
pollen.error.serviceList.createAccountForPersonList=
Modified: trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties
===================================================================
--- trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/resources/i18n/pollen-business-fr_FR.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -4,6 +4,7 @@
pollen.error.context.rollback=Erreur lors de l'annulation de la transaction
pollen.error.context.start=Erreur lors du d\u00E9marrage de l'application
pollen.error.context.stop=Erreur lors de l'arr\u00EAt de l'application
+pollen.error.encodePassword=
pollen.error.serviceEmail.getNewEmail=
pollen.error.serviceEmail.sendEmail=
pollen.error.serviceList.createAccountForPersonList=
Modified: trunk/pollen-business/src/main/xmi/pollen.properties
===================================================================
--- trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/main/xmi/pollen.properties 2010-04-08 09:42:50 UTC (rev 2967)
@@ -2,5 +2,6 @@
model.tagvalue.copyright=/* *##%\n Copyright (C) 2009 Pollen\n *##%*/
#model.tagvalue.dbSchema=Pollen
model.tagvalue.java.lang.String=text
+model.tagvalue.exceptionClass=org.chorem.pollen.PollenException
#org.chorem.pollen.business.persistence.PollAccount.attribute.accountId.tagvalue.naturalId=true
#org.chorem.pollen.business.persistence.Poll.attribute.pollId.tagvalue.naturalId=true
\ No newline at end of file
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
(Binary files differ)
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/business/TestManager.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -1,8 +1,6 @@
package org.chorem.pollen.business;
-import org.chorem.pollen.PollenContextImplementor;
-import org.chorem.pollen.PollenContextImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
@@ -10,6 +8,12 @@
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenContextImpl;
+import org.chorem.pollen.service.ServiceEmail;
+import org.chorem.pollen.service.ServiceEmailImpl;
+import org.chorem.pollen.service.ServicePoll;
+import org.chorem.pollen.service.ServicePollImpl;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.service.ServiceUserImpl;
import org.junit.Ignore;
@@ -33,7 +37,7 @@
private static final Log log = LogFactory.getLog(TestManager.class);
- private static PollenContextImplementor context;
+ private static PollenContext context;
public static void start(String dbname) throws IOException {
log.info("## START ## : " + dbname);
@@ -63,7 +67,7 @@
getContext().stop();
}
- public static PollenContextImplementor getContext() {
+ public static PollenContext getContext() {
if (context == null) {
context = new PollenContextImpl();
}
@@ -74,10 +78,22 @@
return getContext().beginTransaction();
}
- public static ServiceUser newServiceUser() {
+ public static ServiceUser getServiceUser() {
ServiceUserImpl instance = new ServiceUserImpl();
instance.setContext(getContext());
return instance;
}
+ public static ServiceEmail getServiceEmail() {
+ ServiceEmailImpl instance = new ServiceEmailImpl();
+ instance.setContext(getContext());
+ return instance;
+ }
+
+ public static ServicePoll getServicePoll() {
+ ServicePollImpl instance = new ServicePollImpl();
+ instance.setContext(getContext());
+ return instance;
+ }
+
}
Modified: trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java
===================================================================
--- trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-business/src/test/java/org/chorem/pollen/service/ServiceUserImplTest.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -58,7 +58,7 @@
@Test
public void testExecuteGetNewUser() throws Exception {
TestManager.start("testGetNewUser");
- ServiceUser serviceUser = TestManager.newServiceUser();
+ ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
Assert.assertNotNull(user);
@@ -73,7 +73,7 @@
@Test
public void testExecuteCreateUpdateUser() throws Exception {
TestManager.start("testCreateUpdateUser");
- ServiceUser serviceUser = TestManager.newServiceUser();
+ ServiceUser serviceUser = TestManager.getServiceUser();
UserAccount user = serviceUser.getNewUser(Locale.FRENCH);
user.setLogin("hsimpson");
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/components/LoginComponent.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -16,18 +16,16 @@
package org.chorem.pollen.ui.components;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.IncludeStylesheet;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.MD5;
import org.chorem.pollen.PollenBusinessException;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
+import org.chorem.pollen.ui.services.PollenManager;
/**
* Formulaire d'identification. Formulaire que l'utilisateur doit remplir pour
@@ -72,6 +70,9 @@
@Inject
private ServiceUser serviceUser;
+ @Inject
+ private PollenManager manager;
+
/**
* Methode appelée lorsque l'utilisateur s'identifie
*
@@ -81,7 +82,8 @@
// Récupération de l'utilisateur identifié
UserAccount current;
try {
- current = serviceUser.connect(loginComp, MD5.encode(passwordComp));
+ current = serviceUser.connect(loginComp,
+ manager.encodePassword(passwordComp));
if (current != null) {
user = current;
} else {
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/pages/user/UserProfile.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -29,7 +29,6 @@
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
-import org.chorem.pollen.MD5;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.service.ServiceUser;
import org.chorem.pollen.ui.data.AddressBarItem;
Modified: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/AppModule.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -24,13 +24,13 @@
import org.apache.tapestry5.ioc.annotations.InjectService;
import org.apache.tapestry5.ioc.services.Coercion;
import org.apache.tapestry5.ioc.services.CoercionTuple;
+import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
import org.apache.tapestry5.ioc.services.SymbolProvider;
import org.apache.tapestry5.services.ApplicationStateContribution;
import org.apache.tapestry5.services.ApplicationStateCreator;
import org.apache.tapestry5.upload.services.UploadSymbols;
import org.chorem.pollen.PollenContext;
import org.chorem.pollen.PollenContextImpl;
-import org.chorem.pollen.PollenContextImplementor;
import org.chorem.pollen.entity.UserAccount;
import org.chorem.pollen.entity.UserAccountImpl;
import org.chorem.pollen.service.ServiceEmail;
@@ -54,40 +54,37 @@
}
/**
- * Build the main application context PollenContext.
+ * Build the application manager.
*
- * @return PollenContextImplementor type to use injection in services build
+ * @param hub to register the manager for tapestry registry shutdown
+ * @return PollenManager
*/
- public static PollenContextImplementor buildPollenContext() {
- PollenContextImplementor context = new PollenContextImpl();
- context.start();
- return context;
+ public static PollenManager buildPollenManager(RegistryShutdownHub hub) {
+ PollenManager manager = new PollenManager(new PollenContextImpl());
+ hub.addRegistryShutdownListener(manager);
+ return manager;
}
- public static ServiceUser buildServiceUser(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServiceUser buildServiceUser(PollenManager manager) {
ServiceUserImpl service = new ServiceUserImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServicePoll buildServicePoll(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServicePoll buildServicePoll(PollenManager manager) {
ServicePollImpl service = new ServicePollImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServiceEmail buildServiceEmail(
- @InjectService("PollenContext") PollenContextImplementor context) {
+ public static ServiceEmail buildServiceEmail(PollenManager manager) {
ServiceEmailImpl service = new ServiceEmailImpl();
- service.setContext(context);
+ service.setContext(manager.getContext());
return service;
}
- public static ServiceImage buildServiceImage(
- @InjectService("PollenContext") PollenContextImplementor context) {
- return new ServiceImageImpl(context);
+ public static ServiceImage buildServiceImage(PollenManager manager) {
+ return new ServiceImageImpl(manager.getContext());
}
public static void contributeApplicationDefaults(
Added: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
===================================================================
--- trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java (rev 0)
+++ trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java 2010-04-08 09:42:50 UTC (rev 2967)
@@ -0,0 +1,100 @@
+/*
+ * *##%
+ * Wao :: Web Interface
+ * Copyright (C) 2009 - 2010 Ifremer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * ##%*
+ */
+
+package org.chorem.pollen.ui.services;
+
+import java.util.Date;
+import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
+import org.chorem.pollen.PollenContext;
+import org.chorem.pollen.PollenProperty;
+import org.nuiton.util.ApplicationConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WaoManager
+ *
+ * Created: 24 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class PollenManager implements Runnable, RegistryShutdownListener {
+
+ private static final Logger log =
+ LoggerFactory.getLogger(PollenManager.class);
+
+ private PollenContext context;
+
+ /**
+ * Constructor of WaoManager. It needs the WaoContext to start and stop.
+ *
+ * @param context used to manage application lifecycle
+ */
+ public PollenManager(PollenContext context) {
+ this.context = context;
+ }
+
+ /**
+ * Called to start the application.
+ */
+ @Override
+ public void run() {
+ context.start();
+ }
+
+ /**
+ * Called to stop the application
+ */
+ @Override
+ public void registryDidShutdown() {
+ context.stop();
+ }
+
+ /**
+ * Context to inject in new service instances.
+ *
+ * @return the WaoContext of the application
+ */
+ PollenContext getContext() {
+ return context;
+ }
+
+ public String getProperty(PollenProperty property) {
+ return context.getProperty(property);
+ }
+
+ public ApplicationConfig getConfiguration() {
+ return context.getConfiguration();
+ }
+
+ public Date getCurrentDate() {
+ return context.getCurrentDate();
+ }
+
+ public String encodePassword(String password) {
+ return context.encodePassword(password);
+ }
+
+}
Property changes on: trunk/pollen-ui/src/main/java/org/chorem/pollen/ui/services/PollenManager.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-03 10:41:29 UTC (rev 2966)
+++ trunk/pom.xml 2010-04-08 09:42:50 UTC (rev 2967)
@@ -309,13 +309,12 @@
<!-- customized versions -->
<!--javadoc.version>2.4</javadoc.version-->
- <topia.version>2.3.1</topia.version>
+ <topia.version>2.3.3-SNAPSHOT</topia.version>
<eugene.version>2.0.1-SNAPSHOT</eugene.version>
<i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
- <nuiton-utils.version>1.2.1-SNAPSHOT</nuiton-utils.version>
+ <nuiton-utils.version>1.2.2-SNAPSHOT</nuiton-utils.version>
<processor.version>1.0.2</processor.version>
-<!-- <chorem-commons.version>1.0.0-alpha-2-SNAPSHOT</chorem-commons.version>-->
<!--Multilanguage maven-site -->
<siteLocales>en,fr</siteLocales>
1
0
Author: tchemit
Date: 2010-04-03 12:41:29 +0200 (Sat, 03 Apr 2010)
New Revision: 2966
Log:
Evolution #151: Utilisation i18n 1.2.1 + goal tapestry-bundle pour synchoniser tapestry et i18n
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-04-02 14:27:47 UTC (rev 2965)
+++ trunk/pom.xml 2010-04-03 10:41:29 UTC (rev 2966)
@@ -311,7 +311,7 @@
<!--javadoc.version>2.4</javadoc.version-->
<topia.version>2.3.1</topia.version>
<eugene.version>2.0.1-SNAPSHOT</eugene.version>
- <i18n.version>1.2</i18n.version>
+ <i18n.version>1.2.1</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
<nuiton-utils.version>1.2.1-SNAPSHOT</nuiton-utils.version>
<processor.version>1.0.2</processor.version>
1
0
Author: fdesbois
Date: 2010-04-02 16:27:47 +0200 (Fri, 02 Apr 2010)
New Revision: 2965
Log:
set mime-type for binary
Modified:
trunk/pollen-business/src/main/xmi/pollen.zargo
Property changes on: trunk/pollen-business/src/main/xmi/pollen.zargo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r2964 - in trunk: . pollen-business/src/main/java/org/chorem/pollen pollen-business/src/main/xmi
by fdesbois@users.chorem.org 02 Apr '10
by fdesbois@users.chorem.org 02 Apr '10
02 Apr '10
Author: fdesbois
Date: 2010-04-02 16:21:52 +0200 (Fri, 02 Apr 2010)
New Revision: 2964
Log:
Use topia final
Modified:
trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java
trunk/pollen-business/src/main/xmi/pollen.zargo
trunk/pom.xml
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-31 08:29:03 UTC (rev 2963)
+++ trunk/pollen-business/src/main/java/org/chorem/pollen/PollenContextImpl.java 2010-04-02 14:21:52 UTC (rev 2964)
@@ -266,7 +266,7 @@
@Override
public void doCatch(Exception eee, String message, Object... args)
throws PollenException {
- doCatch(null, eee, message);
+ doCatch(null, eee, message, args);
}
/**
@@ -298,6 +298,7 @@
}
}
}
+ throw new PollenException(eee, message, args);
// PollenBusinessException must be managed (catch and throw) when needed
// if (! (eee instanceof PollenBusinessException)) {
// throw new PollenException(eee, message, args);
Modified: trunk/pollen-business/src/main/xmi/pollen.zargo
===================================================================
--- trunk/pollen-business/src/main/xmi/pollen.zargo 2010-03-31 08:29:03 UTC (rev 2963)
+++ trunk/pollen-business/src/main/xmi/pollen.zargo 2010-04-02 14:21:52 UTC (rev 2964)
@@ -1,148 +1,146 @@
-PKx�~<pollen.argo�TKn�0��� �AQt!kcwѢA��]�4� E�9�z�^�C��(;�"��b�{�7$gX0��d�Qv��cZ�%IQ��
-�3�:�0fM+U��E1�!?�>�|p(ﳇO٪ȧس5�Ja?�%�'�����
-
-�`�萫���k,k����-Ye����t+�{�k�]�P�K����"� �9����i-+�|�l�{EͫԸG����TXn��X]��,�
-2>0n!�/�Y�+ك2�<�����/����H�F�b8�MZ�T�\d�!�����-���i˕�+��[�a�5*��e0J��!��b��<�Ό3���M�������Ճ��`Y���cy?W�$Q%���D�Ԁh��>�I<4"LUm�L��
-�������7�v�/Oi��bOC�|�8�uJ�~@iM��}%���]Pd�����,�v�̱/���_1������JN��4r�T�&sϝ<s`3힅j���+cd3z46n��k^L��o+}��w�}�[��hx6�T{p�Q���|��F:4~u>= �HurMV�21�@y�PK�,�N0/PKx�~<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�f�,��%��y����ş@okmt�����
-B�N�FF3~G5:*16IS�FϘ����x�0z�}��4<q���X��<`�|�Я�nw�`�2��}�G8F�;��!\���K�h4��2�D���-ڷ�r����F@�T�ۅ���� ��-�r�TFp����-�m����Xg��)b=�*�:���l9^*[^H�lH�:Eë:��1~�����!���w:���0�Zw��B�/�����{��B�9�,L\��(�2/Q�E^:z��Id4|W"x��wX ��r���+�#|���.��5����͛������[�Ղd��;�ٮ��a�q;.�<�d�k2nw�p�ʍ����,�(F���}ƸZ�N �D�
-'��uK�+Q;�\�T�����K��/(�҅�ӱұ�SH�F:vGoߎW�'?�N=`+��V���zӇ��]�L����m $Ŗ�x�2�'�zB6䍄�����f7|�66�%(^6�����۰�n'X'�p�����N���
-�9���n&ur�߽h�<����a��O��s���)A�����L��v2�D9
-(�3���=k��,��d3d�D |��j��a�Q:�� � �l��� ���
-�&��~O�*9�O��k3����~xh�~U�*F���*�G��짲��;��C�
-V2�d�I����yl��aΒl��-��$?h�WC��ˑ.�Q}��]J�Q{4�x�ijd���u�G`%�OA��i�e��`]�/"����5�:^Dm���ۣ�H߇�6B��v"�`�;�\��`������Ui{��&������l��l}EW�y����>�Vy�����&K̋���&��?����o�w�m麐
->�:��a}C?��x��g�0�73]��cr �|�2��2��כ�n�=�w���76Q���Y��92:����Q���a���Xz���6�'-��M�V���{�e�Q�n�)�BM��:��j�
-%��2a�6��X6� �ה�s۷�(�1n�1
-qB��n!^zUSf5e^��<WK�Dq�y R���2�XM��@�5e���5e�RS�Ř�+����Vj�<dK�P��!��e�5e�2[�)�Iቫ$C�)�N�Y�D]Y�m����7�![��<.�S��U���T���B�'ޞsZ�=��2�
-5*ru|;иE{V�m69n�Mh��ȩn797N�& ���ȳn����Um7F���M��65�VR�TnPuK�[;�L"��V
-����)9χ�A�t���ztm%ANA�\��S�}��]�ܯ��-��L�+�s}�n�j�V�4�0��K���6]/���t��*{����[��E���_�H�
-���o��m�-R��3�鞒mV ,x��c�|��Kk �H?�G����c&�?�~��g�_���8�9U\�u/͑V9�Nb��VY?S~���*f�IШP4�^���z�%T�%�ӑ�4% x���n����z����4%�s��1N��t/H�!�_7�lw�Sܟ���i��%��В�/Ȏ�ՙ��߲�+����1��hZ��٦���f�_�r��pya��(y_�dN$��l��kwݴ�>?��?��
-���hJ@�+e�*�I��f���%epbQ�_��'=�I�E6E֩�k�O�G5��,��"@LЏ�&Qb���`\��Sg�hr�k"�D�h
-�U����3?.�G��8�\�iFc�T����lu��[W��3E��Pa ؞3�I�̈́'1ZTN���h�2��X&�\o�͂�$��ǔ���ܴ۬��m6�(&��-Zn3��&Qb�2'���e��`s5M4�N%�)���{cω-���ɜ�����6���p;up�}�ƒ���A�a�o5J����CRِ���5�:�f�c�h�h��GZCᇏt��?%�m���v�x�3 ���.��^5f@!�p�fw���?��Q�����o�)������A�M}0?�sU�IL�>���R����w���ɼ��1w �RU9����'�a/��5bn#_sd��|�G��t��;�d�}[���a�9 ~d���>���{����8�� �A/��p(�~�j�F�{Kn^�s��pȋ���B�u��Y{�q�=Z���7U��hj�745�%���8KK�b���q��7��yCS��!��F��S����q��7��y}����S�r*�8@��m�w�N�+������$���l,���q��2�_Υ^%��Br�M�
-�z>5�B(<�]�������c,��L�'��J���
-rlEe�~���J��H��ڞ�Z���$W�xM��/$�Jb��:Q-F�����W����p岍 o+ۼ�Y�˶���|%�U�m��w�l�q�?�,W�
-5*���<����+��Un�:�I���ү�LWp��$X�8ɜ�2��^3~}e�B`��W������DQ�x�;U�Wƻ+���[Z��|�~��)Po=��7[Ѱ1]{�V�ug�Z%�4(&#�ܐ@��l�Ъ��*F��j�xK�Z%�5�ܠ:�q�&;.�z�
-�Rؠ��e�ci����4}��A�;P���p�� ��I�i�&���%&��hc��j��Zv�#����EBK~�n��F>��$�NT��sZ���G������NZK��~vr0̴���tfK0�̖=A�Jn���Ǩ�Ln9 ����R��X���Z�*���ϖ���x:�U��������o�?Lk�#k �݁dU��e*S������Ng��.�|�:ݑ�7��Q�����{c�ʭ0�:w$�
-�r��2���4a�b}u+�Ǟ�R�+h�\�*u/3��U)s��r�j�:]U���綣��]}��"~ʪ�W�ϵ@�+��6����>α�#��&��6�p�Ո4�s^�Gu��R�4�s������E�VXUMf�s�^�V�a��=n�A�o�O_�j�F�z���|��b��Vq�D�;5�u�u���m��[ݱs��A�.)�[-��o�0w�l״�{�:v���h�����Z��hƟ��û���{,]��^iDT�B��z�}H��-t:��Ɋ�?|⾜�ld;�����������P0w��XNċ=%߳�Q�d���%��~�`I���Ky:s��Oe�~4��@�:<i@E�7vؼy`�d�3�D1R������|I����6<_��6�lE�h�F��$�<�! $��a���"9��AU� d��Q5��j��xOm�70�:r
-|F�bA�4\|~���c��e�/���j:M��6��:ن�q�G�N�����{��3�� ��{�X��qr���rO��I�)s��Pu|��:1|��H�ݗp�fՔQ���Ƥ6T"[�r���]Ae�Zm�Y�����ݢJ~����7�>���-��z
-��{
--��]�"�_�XvKW!iǂ��J�gz~9A�E�B~/��%i�/g!���S�Z�=Y�Q�eQ���]y�1o��=�Lj��oo!Q���#N���Iإ{z�-$���qi��R�Ոn�r�뼅D�Jrė�������x��g��Bb�_ȅ�풭p3e7.�:����/���GO�=��L��/t�L�-9*�f�)���-e���IE�:�6�
-��f�z�
-~��N*e�!�In���`��q�
-U:�*7��Q�G�����<qE�7*GۮG�m��5�2�h3��5x$���b
-�۩�����O�����!.Xqֶ �E�>أ��n�X�h��J��}@��ז�Ú��7a��x
-P7r�%�͉�6�*_k1�
-z�q/7��햐&���(���m�Pz?v�xPC�vሦN_ly��ۖJ<��nD�.�;�t�#u�_e[�B/�'<��LX�8��wڣ�y����~�����o\�;�Y݈4�4�������oZ����nV�
-�g�B��/���:�r�vu�D�q̸!n�0v��£ء:g��͵��O�ۇ��q<e��2�z�]m^���̙�߸2�R�Ӈ\�h4����W�L⏈{���]�7��V����v�
-Wu�������:zjv?����PK���qB:PKx�~<pollen_Services.pgml�\io�8��_�5E��:��)�4YH4M�bQ,�v��%C�s,��/)ɺH1�-F�v"�2�rf8O>~}��[Fn�O`,$�ہ���������H�O^�������Ϥ圜p�����i@7�v�x��";t�8�Z��V8V� �r\kZ�q�-��G8\�x���_}�8��(z���HWG#�m42и��:�cb�f��Ȕe�H.�����)���.Qx��(�8!���0X-�]��\^��''Wy�c�,�աD_�%�K�|s#��Cә�E�UD�E~X�o.��ʯ�%
--z�h} �<�i�>�M�f�0h�����m��r�H�iK�!��Oav���y��m;��p:��qq~3���'*���_{����:�w/C���(�:,m&m!����=T�b��q?@u��Pܸs|3x�-7ȝ��退�n�t��W�N��j�$�0�H�v�9
-�'1����?�%�V�p�6hf�P�#�����2��)�u�
-��yP4����q}�9���nf�'��r'@�Z��2� �m� �I'$�~x��Y��OA�a/��.�<מ�),o�<�i��)�B�YE؝�����SD���~E_�z&}9'
-�u|H/'�@W���A�Ƀ��0��ҍ*�ٝ���9�� {w�u=�<��(s0�!,��$
-<>�WB��"�f^�S�����{�J3u%P7�ė�Lۮ|�"�%��̗�v?%�΄���^���8s�9�X�`�ӈ���[����<Ɏ9^�U�d��<�OOЋ3r��0l��A����%LK��7ȭ���4��s�?�;:u�!I�9��"{p@�����$o)ލqWE��,:�����*<�o�yxM<'i��O�_-�m�ׅ�+��@<>�n7��®�콇=��A���M!�:k�(=�9�7I���=�n�D���=4z�c�{����H~j�ol;X��1@� g��x��D$� � �����Dt@�J?.b:H�O?�dlĤ\�w��8t�y��S\yc����ʹ��Q��8ɽp#LWC�q!Z�)-�#��aLm�$MH��PeG����5)_V�O��N���PcG�
-M1ݝ���W
-V�PC�/���&���TuS�B�����F%ga+��}ݓ��C�;��F��nF�0M/�fk
-�~\SHc���+�y�8�����x
-b�/(Zy�`�,�.�b�l�3��Y���7�ƘيPI.n�
-ߠ�P#T*|�j�9���Q��9�Ty()�6+�(w;�S�(���3�e+���`����5z7Кޭl7- �η)<��
-0���u��� ��
-0�7���^N/z�U�sC�`$oU�5�G}g�7PҼ�g�|�
-f�n��躀H�����d�����w(ϥz���P8��C!��~V����_M�Vb��F��
-��l����
-0�7�X)�RL���ہ�v@n��Y�8\ZQt��̱����Ϯ�㪌�|����"%�*�`��Ѣ%`�r
-��4 �E,1
-I
-y[41��Gi������7,��i�TTEu1;2��[��&1�e$SK7u�u���~8Ĩ�B��G�6вFa��`r�җc��-!P清��2��[�A�&,<A3����%����9u0rJ���v5��S|���V�P�\BXLx��y���D��l�rƄ���-̒1g^`[�e_��2�GK��T�m���|���vj� �. =.�M���x�ڬ�@�ꈮ�ZH��rx+��������Rm�5|*��ufk�`���ڎ&Fٌ�\�%�i�U0%��V��؎�@� �{^��L��/[���B�
--�(�np$�rw⭔h!S�e`�<4�����a��j���[��Qg��H��la�¯&��Vic��B�zu_��sUi!S��z�E^E�ΫlU���Z���B����').H՞",�B�L�Z��XW��/Q~��N<� ��f�ȏ�-;B�*��4��'��vU+��Ii<,��-�_�J���/���PK"&�'GUPKx�~<pollen_Context.pgml�[o�8����NS'-�ɴk���v��n�4M'Ba#�]������ؐ�M{Q�L��1��y^?���7���r�IƳA�Ԏ�g^<g�����]��(o�ώ�8�t|���TI�������G��zc:�@���� ����� �C%��n@�i/�.
-�RJ��ܛ���?Gn��,���5�n����"U�Z�5�t�=D��帾ovmUU���/��<S��̝�A�8�Q��v�
-��( �<�ϼuY�������z�[�|������
-���K'_�4Ex�Q�_�P��&�_B|=P_� &.�o������y'���fu�.�]���oB�=��U��|�PцF��{q�A�z��fp�W�.J�ʣ��~�S���QB�+����w�(#أ�,�p��^AƯA�_�xS=��t2��˒ � �G���ZXMQ-�R��zL��*��;��5�g�.E��Y����^iv4�D�P-#��a^��\ =���xTR_#�F�,�)P� 7,��)�" &*|��⃰$A�� ��
-B]'Ea/?�\:��Q��!u��t2 +�Gq4
-Y�i��!Z!��<��zc������};�RI�PߣW����d=0?��_ܫ���Z=��f�eHKq��,ø��yEx������%g��O�puO��)�?S6��T6]�iS����6�]ڜJoo�6�R�P�Pj���QT�v��8CB�ԥ��g��{Ŵ�^�:G��
-ӸNOF�\���ݴV_��5�zOk�� �Z�L�렩O�->`�F�;���`�И/;R��I�-j��«8WENʆ��BH��2�l06`D���8�8kb�[�=���d}���0b:k�l��A�L� [mӛ�$��/�L�3��J�Y�� �� �bF��ʒ11q����q���J*�V*,I���=ʢS�#��`����[�Ȑ���&�
-��������Jĝ6�5U��}�,S3v�����n�^�d|��?
-��)!]Xn��T��m��|����2W6c���R�Ufq���Bs\?.��*sq��T��VkY�ʕ�2����#��hc�8�5r�+<o�;�w�pxQ�+���{ ������-�L�2$Q�������y)�h��2�ϦI��Y�6�m�+τ!'W:m[���r$��u�p֓:�~Rw/�=5��c��F�_nV�֍���H0̅l�$__�~��ŌG0����}&�������-_�?�|��K��-��{<����3P7��8��:��s����S�� ����Y\e��_ֱ��'�k�=2��uS`h
-�%�=I_~<��kQ��sh��=�г�A��zm��bx��l�WSk�5�� N�O�{��V�2����b�]�zX*k��Ƒ-������7��
-�n%�F�FU�oT���ѡ�����
-E���mä�`����=� ��Ҏ��ōzb�:�L�r�ņ���X�{v �V:gP�O�LG�8ZZ�H&�.0TE��ٷ2VH�gc.E-yZ��w!{�]
-]p)���'�,
-���vjQ�
-��R<�)g�K1��������������
-�6OB߬'�dM��\��-�G��Dz$t���ɚ.y�)���ӑП�#asǂ��
-|���%���.B.�[�5U��[Cuܞ�� �#.B�f"��#���qBP��x{�d~[���
-��V�p��s
-g���ɲZ�p�S���T8c'��qK��/Y�pF��i�8������
-S�8���d0�m0sT�0��mQ�IL�lSI��J��V��$��[�3�}O�O�~+̺��&���`�^d�d����7xg ��������Պ�)���|���O��H�|�X�?����U#L��i4|�PK�M\@k<APKx�~<pollen.todoeO�j�0<�_��.YnkW6�M��{��Xk#P�ERL?�5%Ѕeg��aV�/�,`�ƙ�H�3��Tz���ٝ�HɾI����Н?�ģBҞ���J�H��*%a%�u�|��
+PKT<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/.PKT<pollen_Modèle.pgml�]���8�����X,�@�G�D��$��t��ff��$�b�X�-�[�n�a˝�����^�HږD�$Q6�����%���X�XU�z��o���c�\%������&�b�F�b��������ϗ߽��w������'3z�o�����'g��E�Eg�
+�F����!㟖.g�r���E�O���ex���,��k�-��l��/��������ջ�5�s�:�����9���톯�om/oo�W�eY�����rϾ��c��o�~N����y|��%=�z�L��w>$3kw��?�~
+���@�����_N���_��χ0������y��6���VY�����!���_�X?��2d_��]H?=�!̲er��b�t�{��훳}Q�~��t���T���i:O�oξ�%Y��A���;._�9���fN���o�~X&�ao_}/�ܜ[��,\��qI �H��o���^>�9���^}M��^`�?�.Nfw=ػS�Ȫ��%���5�|���D"���ћ�r]X��}��B�?K�lN��k� ����%��ت@��B
+E�UR��:x�9e��c�\5�\/�`��[&��㰥q�8p��4Kg� ���;���
+j���8�d�<��9㶭8}��#�$��U�jI���^e�m2
+7�:^�I�{�������M��?��+�����v��������c��V��aږTc
+!
+��a\����t>��N��"@U,\Ik�X�������!\f��۷f�E���a�Wf�R����Mf�b�g�pi��2��c�FG��Z����*6�6%��{.�\m��Ac�2ݗ�5����8KU1H�(`��̓�����C��b�.e�9�M���8�S�������9��Z��ޜ���O:�D&�G�I'�S�tIp.p�F�d���h�q}�G�)��rQ~�1����Fm�bV� �v=�IJ��>e���@;
+@#U�}� ��}����&
+H۪JdD�!����B�k�<j��m�r Xֈ5�:����&M�q�h��k�����fP?�Y���Q�6��j�jPk=�����>]�Z�vЀw���`tzpϓU#-�e��W����V�e�3�'*��!ȋ�B�&�D��r�[/'�&,J��8JT��^E��%���2�u�KgU�\Q��$B�D�������! Fd��=O��VU�!"��,"ð�a���"$E�C�zQmH� ����"d:@�L��sp�l\W�j�$��h�Ҍ��W�� *�AG��ڶ}�{j}�H�W�(�(��a�eE��tIG�]ʼخgJQ�?ї�iծ"�dW�,(����S\F���]�z��O�PH_� ���FG���({� �852���;z��QI�)H��=cJ^t�������#����Q���F`u��y�B���~w�k���.ϳ<�1��9��j�5]jF�$��&�^�hoѾM����4"�2�.���7�{�E[��hα1X�E�M��R���1��c=�t�Zh�/�W^H�l(��^չ-��;$���t�+�9<|�YֺC�_��=�}(ޫ��w��qg�`�J�Dq�u��.����w�X�NR �Ồ�{��J���:���B?�wX ������P���`��y����w�!���t�!z��y���v�l�6�;�暌�nܺr�b%n'7���qs�1n���� ���j�R�C�J�NQW7U�W��p�%��TuV�B
+��ұ�SDੋt����O�!��z9�T�ǩ����2���4�>%H�(|��(��((��jedN���"l��1���l�D��<��xو�W�;o�#��W�������i� �zA@�8g��sA� ��N��������8�Ǹ>�|U��a����j�ꗉ>��NƘ(��{�.�f��d1��_>�,ك' �����Dž���(�dM�ڄ?l6�o���Q�]��~�'G���x��UBY��tT
+,ݯ�Q����Q%����TuP�2c%~�WB�J��3)?�v)�c}s�ds�l�$�)@c�� G�dF��w)GU�q!���&�%���Y�~V2�ā0��VYF�
+���"���Ps��E��z�!�=���}�mcD~��h'��]�zG�k6�U� ��y��#mO������{6W�(���ӯ�`���xL����Yb^�=��_R���c}+ �6xׯ-]�࣪s��7���W�y�
+��e��AV}L.�OS�^S%�����n�<��Ny��&�_mz���^��h2sT������d�r��M�I��զg�J
+��=��CycET���aaO��}@��)+H��{�<�Y�<fmX�'�w���۾=E��yp3�Q��
+n~p�ҫ=e����+���jcI�(β.��
+t���6��LV��=e� ��{�leO�W6c�"@�Џ=e����C�4���Z,k�S���Sf{�$CRx�
+����]��,M�n[�mv[7o�C�歹]X�歫d[�U&�7
+��y{�na��6� R��Q���ہ�-ڽ�l��q6��t#�:���8�M@�%h��g�nK���nL-��xKmj���ƩڠrKot5��c��Bd+�q�C����q� z��f�][I�S�ƪV����}_�:�K���S�ח wEw��Bc�P��*�&���C�D�=��D�M��i�1]f���$:Ƭ�V�x��>z�4������Dwq��+�̡B��b��!�2�����?����~�G:��ل��߬����}�*�}N��~]�Ks�U>��FL��ϔ_q{���au����?��Y�@MY�=x�)I�ۈ��w�������Et�X��h��K�qե{!�U����`㸓���L��,�`-�_4��V����0���_�-���/��y����W�6�^���ZV��5\^,tkH^����7��ǥ0k?�ڝE7�s���m�Ə,tõ/��(�P�JY���m!��S#�Ii�Xl�/j�I���$�"�����5�uϣ�D�j������#�I��f
+h����#�&"���(F��c��̏�����u-� Wm�ј&�i��n
+[]D�s��U��(�LѰ�.�1�=>cx�-� wb���27&oюe��L�\o;͂�$��ǔ���S�iV.Z��4X�fL-��xKm�(1LYT&�ۗ�q����U'�`��콱���xA��ɜ�\�������e#�N��>B����A�a�9�jl�"J���!U��ju8͒Ǹ�n�Тi5�>��"��ܷ�ګ��t�֧�qgw)\��1��;5��(&���:8�������o�)��t�q{�"'����@�U'1����SH]�.�U~#�n��F�܁�>(U�8Zփ;����0��|̑��Af< ���p��A�m
+���sp���p$�������@�[�����
+:x�V�CA�
+�8�u!���ܼ��|�("�Yׅ���Y{Ѹ�� �
+���-U�8��F�Zb����YZV������4��F��!������q�i���y�q�
+�8��<N=�,��ǡ�lm{��vį�������v^N���������Xx]8�z���ɭn �*R{�yB� ��o,�UVc �eq�<��W\�@,��3�TE�G��������
+��9��U�oLr��$��B��dF���fd�i��*}u���Wn��ͫ�߹m�*��Wr\e�F��~ڶr-������e�
+R��Q��T%�!�<_i�j��1v�����~}������&y`{ĝ�.v������+��8�ꏵ�7"����$���ݮ���]�t�k�p�W9�w���֭K}�;6KF��Ҫ��l�U�e�)7D���6�?�]
+U��I�%�oi�U�UT�?>Z�q�`����+�=`︵at�v����A�;P���p�Op��CcZ�/�%�pGw��\L>����҈#&��>GNiɗ-Z�{v��6�$��p�*G�ӢW�G?�'�e_�u�Z-�����a��O�3[��d�� �Vr�VV>F-`dr��D`8�%�}淐�|`5,]���R��l������DeT��,�U~#�aZ�Y!v�U9���L��t
+Ng��.�|���H��&t��0�} o,W�惤sG��0�CV��R���U�խ�{nK:W���*U/3N���>T�ݞ3�N��!�\4��vt����b���2�C����hyEQ������k-`D��$�Sfs7���s�k�H�Z�A-�N�C��s�byZa�n2���z��C��q�6b(}�~|�oT3@���u�������"�[�؉Awj,��)�h=E���[�عA��q��-��F�;̝#�5�bpo�c�J�,��N)
+���"�G3�L<�5��.�c�F�{҈H�B�Xz�}H�0�-8'r2���Oܗ��l�^�r�� 8P�zU}�B�
+����ɍx���{M�;�>�lsݵD݁�liz]{�a)w� b����Sՠ��8�4O�#��l�<����[�)|��fd����Ym�d��M�G��
+�ƴu�G��d�<� d��a���Mr|��%'�AGU����?�=���8��A!Ԗk�3�7M��燈N>f�^PZ�\t�2��N��"�؛]�;ن�q�G���ۃo���g���9d��qs0�i�=���=�&���=SB����S�{���} �k��2J�7R�Ԧ
+������nCeIZM�Y�����ݢJ~N����|��^~�VOj=�N�=���?�?\���w,�����S��j���3^�_N�mѿ��Kga���YHg�㔻VaO6ecٔ���WW�Bb�[(k��%���ﷷ�(�B���a`v�^x��-t�@ФkD���:o!����eo!`G��-�5^��Y�����r�f�dk�L��7n�����/���Gϸ=뺙�_�@�[qT�����Tn)/��TĬ�j3��N6����'��R&R�T�d{�
+v|�1�P���r�!}Q|T�>h��N����_�h�F�h��hc�,7��V�m��f�d1SK��p;�p;�rc��}��%'Ç�`�^�&��`��n�%�(��q�+�s�������0���{V9�Wep-�[�ޜ�l#��k-z5�A��6.��M�t�%��A��|�Aw�6���
+(�o�M<���m�pD��/����m�J<�nD�*�+�T�#u����q���� w�.V9�G�N�U7"o5��G�ت�
+����i��F���y�7��n��i���f�l�*��H��/��%�k�|��#Q��A3m�'�����(vH笽�\�
+x����>bU��9�dN��u�y2��̙��8��I��!�X4's��ɜI�q/��Q3K������;���T����\ŭw��S����w�PK��z�nB:PKT<pollen_Services.pgml�\io�8��_�5E��:��.�4YH4M�bQ,�v��%C�s,��/)ɺH1������nD]�{���'o�t���
+�q垄|;p\6�]=�=�������N�~�|&-f䄫�W_�>H=�1t��#G�;١���Ղp6��Y�$ѷ�Z�К#la��;�����
+������gE�����:��h�����ƍ���1h�#k:5��,��r��N�{R��9��Px��(�LH��,��t;�W����U.|�©e���ڗ�[���@�ca��on��xh<����ȱ(����E�c�u�@�E��$�G5����
+є��<��m�*��c�dZ���H��S�]c�z�Fi�� ��o]�ߌt8����&-��7�e���&��E��Y�[G�ͤ-D6����
+T32�=��6����o�=����[<��WM�n��j�)��P�$����0����$�r�Y@�'�d�j~.�
+�Y�T�Ȯ�f�R��!=���x�S_!�B?��&��1=��0��u��l���\�(wB+wB�tBf;��:!7�$�/��3
+|�-���Y��b�s�q/vay�M�9L#�v��K-��2��Ե�d��"�3W�'�<���ݕ'}5#
+�}rD/'�@W���A��Ƀ��(vz�F��NU��eA��a��_�#�Ù�2c�|'���s�y%D�(��E>e��`��B<'w�C�a���ƞ��i�U,Qı�0����]BL�4�܋�ݞag1g2W,���tƁbc ��(@N�cN���A��29������G�;���66(��P��c ��YM!�Al�DS�q8C�#������X��0.؊�;��ց]{A>R�㮊p2��u�����!"Q��]�:O� ��$-�ŧ�/�&��B���k�_������a7��k<{�`�aw��6�wS���;�rܶz�D�Ў�#�'ۍ� �7Y����[`�co�-��d!Q���ֶ������qƁ9��Z�P�;��ftpƅ�ttHɌ�"~��؈I��p�W8t�Y��?���Ƅ�!��Ή����(�Q��^����t����͇����]�8��6X�&�Sa��#C<G�NR�,}���#̕�Ǝv3�11#��#.����]�[dJ�\C�S4�X�b�4�ӕߨ�#l���w�iq}�G�S�l�_z�f
+����lEa�0�QH�j��0�kơ0�W�n��`��EK/��M���C�`�,�kY���7�Ƙ���\��A��F�T���Zs��mG���f_R徤�ڬ���|O�n�$w#H�(������O(;�O������ne�ْ��|c��K �#x+�_�[*��~(��x��Q��ӋN}��\S��[uM�Pߙ�
+�4oe��P��n�荮�Do`���8���4�c;����K���z����Pv��
+u�7���J,�٨ѽ���՝"�F��+EW��5m^��'�����<�����>˙ca��]U�U���A�7>�HI��,X|~�h �C�!
+�U��hbx���0C�"ް(V �ARQ�1�h��o����|D���L-�4,b�
+NXP���^1��XC��C��1�g���4$aaSFB�� ��(!�x�s�.݄�gh&��8���3s2;�!��G,���;='f��k�
+�44ޓ��"��J��U!N���*G}A+� c"�&���<�˾��d�O�fA�4������fsܶS��oI�q�mԗF���fU�7PGt��B����[af�@�Um�j� ��S��nV�H͟�[���(���k�pk�ي݈���0���Y�gA����l`?�����R�G�*7���P���,dʳ��:����R}��U�:�x�h��+�Y��
+mUTӨ��KTy�
+-d*�ը��¶(���E��*��W�ЖX��Q��$�Ũ�S�%ZȔhYkPk��{r��&�"��f�ȏ�-9B�"����<hrVQڛ�'��vE+��Y)<,��[Ƚv�>�{���PK�{"CUPKT<pollen_Context.pgml�[o�8��"��NZ2�]�i�vS��V�ݤi�N��FbN�N���5!��!�M{Q�L���<��Oܣ7�fa�
+�I@��.�+���d��a��廞���=;���������N��
+_/.O?v��?��.�H/Lp��AD��H����'��>���cg�O�C�����.b�_��?�N��,���3�^ϲzh��!E홪9v5�9D{�i;�g�,EQ���bt�u�c���{L����g#(>�c���+�_Yս��C+g���s\�m`�찏�ԗd��#�N�I0��s��N�.&�&�_|=T^��{n������}�1��/��)=�z�=�T�<�"k<(��%� ���
+/Ch�;wIH�a�z��a0���U�%Y�q�?٥Qz�(��+����w�,��K������_�� g�|rL�t�xW%S�S
+�f�E���Z��:�WY ���p�̟e�\���gMV��{��M�,�@���zhFY�r���:�QA}��
+��(�@Q&D\�$p�\�H���A >��H��+�M�{y��r��_�� w�M%�(�p"����7C�DҏEB/p�e9�L3W�G�C��}���>��>G�Xs+%I{`vR�?VU=Lm�z�&�Xː��,AY�q£s�x�
+����ig��O�puLf��<?U6{�R6M�iS����6�Y��Roo�6�T�P�Ph���Q��v��8�@B�ԥ����B�{��J�Gy���TI��(0��`�ݠ��; 1���A뫍� r�mJ2A��'���GsC�L@���_,5��M�:���Qf7-k���+L�"'eCkb!$�a{6���Ak��F�U1����%�$j�f]Lg�l5�|�8����l�Mo�����2��0.h���L�LH3��W������cbLH���Z*�F*LI�P��"�:?⾐
+�k � �ľ�)ծ��c�1��Z#��}Y��݄��HR~ oU�{���7>w��ē�(���|�M �0�m��TʧM��j|���W��"6c���c)��/����v���U�8��q�.g��T�+�U��G2����q>k6䎗x�rw �n�n�.���8�q���qK���K����w����R0Q/ ;e��͢3���M^9ڬW�
+Bv�t�(�c��H0˫Jഓ:�~Rw/�=5��c��F�_n��ֵ�4�H0̅lP%�~1�#7��떪�9�&w\� n�r����-_
+�n���9t�0�������F� P�,b�)�euM���^��}P�7,n�e��|!�g�#3�Y7�f��_�ۗ���Ჭ\˪
+x�C�g��9�����
+۵����.�-_u��k`y�
+G�{Rs�<� ���C��!%���PYUT�ly6��W@߿y���kv�(�4Z�˂_�E�ZS���v�>^cQ��YL�t�b1ø�?�PP��b��VOtMUƪ�Y�9Xw4ÙHs�*`�*�B���-���g+� ���P��BۘCQI��y�]��r�B��� K��p(4����J��CE{�by1w(�ؙ�֜�8s�#G�^<vÜ8�9A��Gh��#��i���Z���Xv�&�Y�$?_Je��t#���FX¼1'�n��ь�3B�q{��H��q0W5��Q�����$��|>^U8�23���S8}��M��2���jV?���;�p��[*��ӛN��I|��瞾�MIB��d0kM0sTf0[�?�A�#3�ن�kq�qF�t�o�Oq�b2k�F�51����f��� � K�{�)��b�f>�6�6�t�!���|�wb.Gz�����_،}�P?3�$ʟ��g�PK�f/�X8APKT<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����KPKx�~<pollen_profile.profile�����Q(K-*���S�UP2�3PRH�K�O��K ����Z()��qq��e��q��ÙPK7Rp:BPKx�~<
-pollen.xmi�}뗣8����+8�s:�v'��6��9��6ϩ���G�|�#@v0�/����3��J8p���<�-wwu�-�r���}��_����Ny�a����6R�(�w�����_�w�7ʿ���/���{���7�
-�ߠ�v~�����o�p;
-��#<�O0��Џo��C��i��}9@�w*cU�շ��ְ��������y�E��=B��𝢼���� �1�x���}�1;�&�C����m�H�����CCN/����_�sW�n��q�;u��F�O���>{tt�Z��Ed��;ռ�tE��M���}��������?�a?+��䟚> y��'&4=A����;%��?�����ٙ��_�����w�;��0��1���-ѥo?��s���M�����N3��4U���S�O�%�O-������TU}�f?����0]�V���o/�������}�O�� ��SĹ/~�`�����hnGq����d��b���i�l����0�2���/�W�,�ֆ�ۖ�q�j�6��4�Jxa}��ߜ��_�]f�9#��H�>R���\v���>7�u�n<�K�9�n7�o�X����()�'���i���LZ�N0|��2�l^?�O��Ω�#�D����FWmw���ƴ-��@Hx9M5�ә�a�h�c§�>Y�#�t/����s�$��KWvm�.v �+�A�����U5;ekl��c�Dy�X��������s�=��!F�o�{�9�,����{ϐ̩r�*B����F>
-ȋ����l�D����:s�1Q<4�T��AY�t�^����
-�!�Q>��г1y��MT03+Y��rU0%�m�Χ#;���������{x>��}�0���<����/v�61�0.ާȑ�l����Gލ����#r��I���&3�R~ZD�����ei� |��/%pN�����!% ���r���/����,/UM��{�ɤ����.Ȣ&q��3� �)A�nZ@3�I ��ق�(�Q��>'�m��C���0rBo��[�[���R�@����
-/�1p� �|���T�]�$)}�6��`Sx�����q���H�!�?{��_(v��83Cn�X�u�D`}�w'���fd���`���X��E�Y�mhX��`NˤI�����2x��:��G�Z'�CB�I����9`��{��(��s�}����2S�!bI�UH��c:��)!�e�i !"�����给���t��DPN�W��)��
-����I�v_����t d���%'1k[Ku�H�abXp��OK�b�؞��u$�M�Ո�k����ͅ��;��� QM�h&��s]تsB�af:�[�ÇJK�fį�0���u,~"7��L���y|��� ���U!�̨ւ�k��6�A���08� ��81�����w�$����㢌�Z`~�68/ʇN�v��B�y�ۯHH�>���l��<���._2�~�tI��m���:��>�����^ꧧn�y����Wu�}�6_<�L�f�y�.���E%�8����Z/�dz�G��#�XWȅ���3���~�_!PLD
-���?D���Y�`O{�'
-c�JHa$����w[6�{�8�����Re�Y�G>cE7t�c��2�����9�_������.�@yi�����.� �b�S��s�O�gm����#�����m���v���<�Ҡ䥑�K? �.uQ����#�x-8��љ�^%l�\3�$c�����V��!�"Z�D��)5;m�r�G��x���J�F��گ�w���Po9)C=�>y7����S�AoIM�����^��Oa���i�2�b�+�H`ᩮ���>���
-���0@/=����" LL��.���.�i5@/u��Hz>��)z>�.}���%�m�w�g�<����2sF�̙�5>v]�S=��f��%SM��v�`+}Fl���O^���v��@�j fO�ҿG���7�8�����Z$�*虥������L�cej�&##��d�]p� P�:�x#1�����P6e�|��Ā1���$���\�uf�fcV=��#���3(Cǹ��7�%��v
-L�Zp�c��m@̟^�J��'����~�>}R�s\��_5�Vm��3<��uB}�d�������5�jxU��5xp���x�G�� �eu ��*�u�nu�� �p�,�X1���!����9&ZuP#��2S�`�$�Dc���>I�`h���SU,!�?���K/���.���C�)�js�C�,�eP�R�:�T��>#��t��&��f�� �aӆ�������RM�OS���0�ޮ���.�Ar)�B�.�A�`-�T������DVΚ�W�1�;A��xpX�����5�-�`�]C�ðg�N;�Y!�#z�
-g�r�uݟ~P�H�h%d.hR?�V
-o��ҐHL4 �L�2��K��}�.�P@ne�BA��/�-��r�?��6�K��.�Z,��Z.�� �Uh�X�؞f�R0x��c �v�vٿ��ȱD��Cs"
-ULa]�ŔmC"cO�ƞx��J�N7�|�����d$PF�rm�hZ��VD*�����4h���b��pk@4Rpa��˷�&���{/K À��@#06c�ʼnH�1�;u��ß
-l���c�t�j܄[�r�ņn�vY���HY�7w�U��MG*�����mW���k��yi�5sH40J�.BߕX���.K/��(�/�.�",�(�9-�W��-���bW�o[�F�l[�����Ks�уTZy���-���p���k� ���r\a��U�楙N���]w��� ��_��۞��(�r\
-��0:�U��v;����J9�\�Hp���GÛGnw�[�M��/�]p5���MȲ��eL����'� �����0�N�qB�f�kA�\��X�N��Y�#��N�v �$J0�]p5`�s ML@/��ԝ����Ұ�����B�Wc"p1���#��>8 ���=\���;�A���>�Qtq�*_����o;p��^��_B�_��Z��t4�l �ذ��|f������+�F�bl�u���E�r\e�ĝ15� �x�dc���'��@N�M��9��7,����&���� �8����2(Cij5�PJ??�ia�@�̧�]p��_�J�)<Z���O{eu�Ab@3ݫ4��
-|�.Ѧ�_ԥ�P�����t��4jmM����5K��d���'����((���&C���r�!(�K�#(��F�|��$�L����Ê�L�����z�!<�Z�!n��i"2�ɯ��_�9���HH����P�j ���CxH,���UDǁQ$u��d�&:=+;=K@�L��&��-�64,r����[��/-G���R�z�ĕxʯ�*2�)�ߞ<���pR�w#�bؽN����4��L$̈́av*}�NFb:PO$0���0�:��~�m5 �
-���F�pB)<�����mI!�\o�k2Xݤ�mr���i&SNLK�� ���.p�!6�����Ʃ.���=h")�� ce���T(#��j�A�aj,���m�t��Ƴ������� Ԁ�z��p�,]#�� 7&�]]E�����M�M����&�¥�ԉ�Br+�U��~��k9Y���.�s)��.���nH�����Ԍ107�I<s��奚�;�mW��l���yi���s\e���rmsl%�O7�ƙ��Mi�p���va����T�O�,:��`h�@v�<��;���[��%����5v�>#'�}蔸)3�W����E�݀���-F��"HC�����$�]ҳ�v���~���g)�R+϶�J9��kM6���妚�&�㜦�ݷ�a"P]SC��sBV5��w�@+�T���]�~̇�<.��:�䑮�+��.ĊT�ʀ���������g����x_���fmt�(L��6��H+-q���Ț5h:
-c�*IadmU��
-Cy��q�:1�M�n��i�}��$f�� ��6�⁸<�9�,JLւ�=/�9�� ���u���`QPK��1�:Q��������V�^P�>}Ԥ5�!���b�U�bl0�$�EWŮ%��U�V�(c� ��c����SB�Ա���c�6Ա����|^u��E`�dQ����6�b%�.̶E?��k౧:H������ڄߊ6VQ�9-���C���n}���δ����.��Y8�sH��B��Ԫ��#���EkZ���r�uf���
-_�2y���Q���T���܆]�i�
-�Lj�V��:�v�Vp�x�Xz��FMѳn�zY�(���V�ғ��)���-x�:����:X����[p1u!8���Dz��^/�����K�Z8���w��Q��TԺ3�T=r����UAdw�z��o��s�^��Y����ЬIT,�I��U�e�<XB��ԇ�TR������v����4J���Q�>��qv&��k�e=�����~��}��<x��7�qtb�5�q�ǯap�K�&K�9�@ щ�~�Q0��Ф���B���hm�z{H`�k?V&��t��#Q�(�y�F���f�(~2���V�c�䶭�G��ر���vsS(x$���D�Z��3W5YV��^����7����<Jb:!q��(7{�>�Db��#����
-���? l����#lM�/���qi"��'�N/������Е�N2�\��e�Z�Ᵹ��<*��~���MU�V�?���|�㿀�n<�;ӭ���
-[�-}�-
-�A�4�������0��� TE�Jd�}��a��&��J�奉X{�.����rl=�ZgZ#���{G�o;e����gЩ�WA_oNMD��o���p�����~��|(u
->���!ʹ�'�� �{�!�g)G>�!W�d�!VlJ�����b���y��p�l��8RO�|YP;OLm��E4���!H&&��䍫�����`_�r�7/������ۑ���i�v;菎��#�k�88���m�w
-�h֓M|Dw|��f.��m3� ���5��\������8���m�����!>�x�4ƺj�����L�M�N �>ۀ�v�ϱ�Ca�����r�`r�;
-5�:"�b�4}�ä��jH�8�Q����t��~��:���a��}Z�-�S�iA��"ݝߺf)'���_ʩ3YB��!�
-�"jV��lK���B����;���~�o�u����x���@z������]�/� .��y���s��/�:<�w�����4�B^P�=~>�=�t�s��2o�#��%��j��)ܤ.�ǥ�)F����o��Z�)7[1�
-����(Q����"+��eo��4�
-�4Չ�����6r�_$��2AP��5���}�fMm��Wx��C_:�\j�9� �'�����{I7uA=�,@I�.R�_'N�*b���䆼rw�iw�:%%�w��M��+w�:XMuf�ݹzd�C��N5W��t`W���jǥ [��AN_�Pu�~���$6V�`1$.��Ͳ�#�p�XHTfO��I-~��݉�����L�ԏ��+�BM-���g���5�P�ՙ%V��`r*� ����h�wPj�]j��3��)�XHف���>Sb�5`����A��'Ѱ�R�$RFv09�<���8/��/6�Ƿ��
-��6�1vrAO½)y"�#����~��V�e��,;xK�.5D�ϸ;��l�+ѐ2�}����|r��ܡ�T���4�I�Js��0�n�uuv��w���O5�Vx��{�o\䨾*a1��G��,�w;�����;��1�ģ����c){GFw���}:���o��Oj$\sR��+�4r��W���bD?p]ի?%:�[T�9x`����:dg�H��\&����U��K�dit#o���&�0��1M4;3ҙ��lTf � ����w2'���}B*݈�w�tXS(m�4��jBG�F��z-j��3H��&E����$RM�6%�2�]� "� M�K{�&a|��a��W��ک��0-�g���d�b��Zɂ2c��X3?M�&�P�dz��X�(���.q��sUS��SÍ�s�]xj��Wt�
-�d3���q�ˏa�.I�c'�(�"��d�@��S��[��3.��
-�Fe����[J�E0����&fk\e��������7~*V]˔�kFDM�QO�� �;�t�zz�b!������zz[c �IS%��\K���jJ3��17$x�*��~�͋�۰�u+Q6Y�%U;K�e�"\b(�"\�"���k��N�]")C�$"��o���_D�$݉��G(n+OQH,0�k��e̳5xB��2G���L�Љe��|�Lt\U����}|)�*Ց.<$�r>��=�Y�d,#5���V��hءq�,Tskh�W�V�q���s�A�1�U[�$'o4Z�.q��UF�o+�'wJ"�-t��m �K����p6�����+C��18�Hr�q��Խe
-�E×p��^f�L;$��F�LH�MS�X�VY�Bl�W���R����&�kv8��Q�ޚ�T
-�w#�����<T*L����ZE�R%�
-�'us~�6'�u�ί�����\`m�k��--�A��`�GsL5F�Z���CT��R����&��|:<B�`ԬYW!�;ꡪ��M����^�G-�檜\鏪�"gWlcnxf*=�q���T�=�tYs�E���?��D"0�P8�C ��z_%�(�#T�؈+_��K8��h�=����%�u݈OZ@O������4ª��2s���ws����$���^�P�B�s���0i�$����]^���s�:�U�p;r�>�p�KX�u^�^��3������v2�������!�|E����7o� ~Ox�r�}�-h��w]�9�9���o�{^�C�
-�5l\ģ��=v;�Z��kO�щ����D���.����m����]��.��>���O��S殫���=)���Ȭ���u�����%�{���ȋb4�0�'�i���.|����ɸ����,1�/���-������� b� �����(@�ɩ�AD0�>�vj��_����J˶l���-�*=��ڴ
-��Ċʹ�a2�ԅʩS�M����~���9R����N�����z 8�������mB���
-ح���u��*�
-_�vqΔQ�k��wQ���GpP�+O�?$7ܥ�q�����Eه���S�����/�^�$k[q�#�k��14�����i������ Y�`�ױ����_W��g�S���0��r1ֵ��~��I5�j�ըٕԛU����tj������P�
-��p�hY$�aMaׅ�E�R�I��Iό^�.�
-!i��t'�[���Y]:����.�`�u�DU�WtI%�*�8Y���@�\*%[J#D`�?$�w�����Mb��)���ef�M<Uw��W���kW�m����4m�?''F:2/S ��c���-�!��i*+��OZ�@���s���4
-��>J�1�o�_����&�Ϭ�XZGF�v�~��*:�*�����*��(�vlI�l�����x�Q+r��#i^\�y�q���j��V,��[%bgv�T?����~4��|誛\�xAݚ����ְ�izܮ�K�#ˍ�L��^v[�H���niMG5� H�����!����v�$��CA�L!�N;��k!ĂL�q; �<�2(eD�DiV
-!nyY5$Qbd�A��t��P���TB>%{�Q9�&s,���5
-�{����4�Q�D��
-Q6^@�;���{?��A�SN�q}��G��oA�ގ�o�����b�K��d���S��O�"��
-�t�e��/?#1_��cuԉ9g��je��C�V�>���7�+�`C�.��}����Z���e���kn�偕%�� ��ԑ����\������qE|
-w�oH����I���C�@9�b����{<-��Y���9�I�C�b�'���f����?^�7$����!܇0��z.���x��=.�v�A1�N�F�{�oP���o���a�'$l?K�G��krxHݾ�}�BH^�}iӷF:B�'�7�����܅�}|9��c_��מw �:-a��F#D0Y\�N���3~��9cYY���g�����/��!.m_�c��,t��z)�V��#e�K'��ak�G�/�7K�Zr�p��\�_U�l�t�����b�=��o1�4!�<aK�y�?�q�Ct�oHFwT�(�������=�����"�3��gˍ����k�������0r��[c3��� Im$Z��C��յĞ�A�И* ht�B�a����3&���Pa���f�[R�on�!,��`K�x`f�K�T
-7]Ws,��|�=2�,2O��S� �� ����0������V}n��)G�2��q�>�Zͽ�4�5��������b���y��v����Ke�^��㴞��*�t㛥�e�����r��f7y��g#��&7��㺠(��Jp�Ij2�[�jb�e>��9i��7��
-���6��q�L�xE�����b��8��C|��c�6�{�V��8�XQ�7O�ء�� �¸x��|�Ã����e�E���Ҳ���qE���E��niէ�Z
-N�Vnq�(�ey�G��}*)+�Dx;�v�^���焻e�/-i���,t}�_t�P�ԋ�S������R�'��E%��>)�,�~� ���c;?1�|
-�R�Y��\�KO�Jѿ1�/o�t��:R�g��Zl�����)��%�sb��L_��R��8�.��fk�#�_t�g9�p�1�D��"�%DI�q�F��I�O��r
-~}F�i�M�#|���Fǘ������v�U�%eE^}w�"��������>���%ﶲ�J���4����E���1p��ƴ�lé���i�>�v��̒�X���+����e6��
-���6�5u��k��k�1
-7j�w�廤tϴT�Bt�l՞�������[���VW�&/
-���v&��t��]���wX��T�n<;� �j@�D�zҤ��Sa��CLfS�8�=��İ�D��-�]}�\^b�f��4���E��z�;�֪*�&{��n�Om�G��Z`�!y/�J7o
-�X��*�VP�����Sѳ^�Mx�?��y��/D���a9��xhc�`�b1нc�hҋ�Oٕ"�ޱX,�`�b��o)����%�O��o�(�V��[iB9YX(7���x�{�j*�fC�^!��{Y|��5ط�n���N�d��k#��N�e5� a���j���Л�d�m.�V���T�����TE�{��x��'�-Ձz]���O����B�O���D0ܖ�@
-��&�����[��[�}"�L��P}�K���4*�NL�\��C��u�"d,���WP�B��Y��0D-�j��}��#��ķ<!�F��TT���0��w1Dp�.�j����3��źF,�!4��P�.!�o2T��L�x�r6�x�r&��Άz����gU{�e�k�F�%��ZMvY΅��P�w.B��rN�y�Su1�'��e^��+(��p�����|"��@N����:�ju,���/��_��.z�c�"T���;�B(.��"i��o%�z>��S�Gk����xhn4/����4�ɀW�*A�A�U�ڰ*XiĦ`-�׆/��A��5����XiD�c%[�B�kA*�Vu�uku���(唐�k�+
-��Z���F�+
-��Y0��Jr7+
-�ĺFM N�iM��m�xXi$'��l���6+
-��Y�n#'��r�e�Y'�6as�0�&&�l����,�O� .f�rX��o�Nx{�,T��Bx{�X� o_g�(7��^s��ۊ��N� Z{'��R�Y��#�L����g,T��Bx{yd,T�G�Bx{�<,T�|��5>?v]����f3c��5Umr��y~ϻ-�Mj�<��Y?�!�ɀ��{Vp��5�h<��9+���v��?_����$�Mjm<���%�=K�><�l�/����i���x�?<-�Q��������ܤ׃��}� 䡹�s<ϯ�3���d��{�~� yҳnF �fES�e=���WY�`6���dL��ii�=�y��L��KJ/��q�&#}��͜�e�p�V�'s36
-�tPOS�d�E@��]�hnG<ƩQ��F�.r ��y7�������T�]�$cJ�'"�Z´��c?1�ҡ���z�䢹o�"����1@����b��o���)͚ڒ�Q���&���ZK!;��j=n'��@�0���47���a�v�i6{�?5S�0�=�Zg�_;E����|��]�(�^���O�{�ѓ�(^�yo�9 �����_>A����
-��76�qs;�C���/��{��_�g^q�N���{�!�"�~��>�����O�9��3L��B�˲
-
-�ȌYV��>>�vc�qf�܄�@����3>�o�4�7�k�Z[�dum�dkh$#�F������$?$z`<A�!�ߒ�����NPt��@������~����������/�PK[�n�)�PKx�~<�,�N0/pollen.argoPKx�~<���qB:ipollen_Modèle.pgmlPKx�~<"&�'GUpollen_Services.pgmlPKx�~<�M\@k<A� pollen_Context.pgmlPKx�~<P����K0(pollen.todoPKx�~<7Rp:BM)pollen_profile.profilePKx�~<[�n�)�
-�)pollen.xmiPK��S
\ No newline at end of file
+l�:�L�A;��Nx�{�i7�����D�7��=�l5�^8�0�@h�@���h^PZ���ˢ����CYV�j*8�5���ӓ��LB�l�)�?�~�$?PKP����KPKT<pollen_profile.profile�����Q(K-*���S�UP2�3PRH�K�O��K ����Z()��qq��e��q��ÙPK7Rp:BPKT<
+pollen.xmi�}뗣8����+8�s:�v'�m��s��Gm�S������6G��`�^����g���p�#�y[���
+[��J���ҽ���������|��e"������o�_���fo�y��_������'o���A����������v<m'x��`����H��������7�J��P�I��j�[E���_$UV�7��"I�y�G\�������9<A?1��:���0Fc��6���t��;|��
+�I��=4����m��>w5����'�l��d�,��ً��{����-"[���Ɲ�J��m�_���[�� �g }�;���Y�')����Ï?^4�� ".�I)���W�����?��L��;�酅)G����}_n�.}���v��������f�;Ÿ�Sd�n�NmG3�[E�mj��f��n&��[9�y��7/��t�[}v;近���:��s���?m�.���OA��
+���/w����!p2cO�uz��b�Mb��B��;�t�˰/��^ٲ�[�j[��}���̴h����R�ޜ�.���̠s"&.���Pu"�r_�s�M��܀�!K��|/����!ܰ��b�zs���@p����9�o2i�[|8�H�͇���y��?�6;����G��U��Z�ötg!��Y�Ng��1�9�A�&�d9O�ӽ�ͪέ����\ٍyp�("�l���N��++v"ʖf��c�Dy�X��������s�=��!F�o�{�9�,i���{ϐ̩r�*B����F>
+ȋ����l�@�� S�9�FE6�x���r�^����
+�!,�|ǡgb�3e0�u+Y��n�2��ɶf�ӑ�q�����i�� ��=<���S�v�q�������;t��[�S��i6Ã�xv�#�&O�]��������E�v)?-"}�GMB��e� |��/%pN�����!% ���t���/����4/UM��{��,Yd�?]�EM�yg8�A�)R�Tհ�bL-����Qe/TL�9��Z���߅�z{,��غ���\(x9h��L��"�������AR�e�V����埒�Z��OI�.�?{��_J��Y�qf�܄�@�jD`}��'���fd���`���X��E�Y���[��`L��I�����1x��>��G�Z'�CB�I����9`�{�����s�}����2S�!bI�UH��c:��)!�e�i !"�����给���t��BPN�W��)��
+�B�%�<��)mg#�%�jZ���Ĭk1���#!��a�v>-�ak{�b֓�=;�FL^sm䞿l.$���$�D55���/�ua�� ���0nj-���J� �׳��lܼ6bZu���"-=�#ӟ�B��Q���Fam��ѯap�sZ�'pbE���*�I�=��EC����mp^����43x����_���~�? Q�b/yvg
+]�d���/���nO7u��}yq�ǽ�O_�e�7�/^V9����8|�3I�}�1�`�3�rU�h3k��OC銞cI\!F��9Z���@a���7����f��>��G�(�)UB
+#)�Tj�|(�۲��s� ~̍�*@�2?�+��:�x�p��:`f�P�������V����J�H�]pu`T��"����a�?�G�@�!�#~F�F�-R�O���.��O���Fb�/�$10��Ee�������Gg|{���r�p��Ir�
+g��.X}߇0�ʲ'�GNK��v�!|d9�wف��teR�j�C'�?���f��ɻ��o��rz��T�=�
+(�%l�X�e]%��Aq��4<Ue�@QGu����'`��?��C$@�����U�1��7���.Н �?yϧQ��3w������n�̙��?�Pd�p�9��5l`:�jm6���L59pr�-�����s?ys���M.et���=�J���[�p�K8��Z�#`�@WAϨ�7^�D�-S�7) &c�[���y���<彄�!2�s\'hp�;��,[quי�$��Ye�X$�P3��?tLI��.�߸����
+0�Zp��k�6 �O/+�?��@���0�ߜ>!���r�o�*�����~�:�9}�sBJu���y5�*��<���o,�#�[� �eu �a*�u�nu��I��VQ&�fd�Cԗ��sL��Fb�e��іIl���ʶj&U0��K̩*����L���w��_T�!Ӕ�\���!y�2�Q�R��T��>#��t؉&��f�� �nÆ����*�9�d���T��#���5c����1Hf"�Q��#5h[��W�p�S�@�Y���0:q'H?.���T�PWx�B��@͂6��:t{��e:+!�{D/��lWf���������m��Ja-Z���&����}ƽXi���
+ȭLR(|�Ż��WV��4�q)Ԃ�W�wS˅��D�m��SbbT
+O0~��@��>�1� 4�^06'"W�օZL�6$"��a�)76�-tK
+�&ÿ�� �b�:д��
+Rۚf�S�&o�*䜢�bp�>
+|l��!MnX#�h�n���m�-�ި�i�)��V6-H�NcU�}=Y�q
+VGŌ�Ud��լ2,yӽi���]VJE02w���şhd��{1K*�M��;�p��D�2FN���|�b��;з:008�C}��.�S�gntsJ�
+��^�I���[�_<��V��p��r�မ�}�jf&R�k�]pEE�Y��*�p&�p��X��g9NVEI��
+�ʲ��w�p��ʜ�4�ꜹ�j�N+�Y?��GK�}�X�����Z��'�Z�.h�.ל�� U�rvAt�'X8:T]����\���._�"����'���;��uA�W�/d��@i� i�� �l�2��;���@Y.9�^�Hpj��GÛGf��[�L��/�]p5���MȢ��eL�����������MM]K�V�v-X�y^,x�?�V^���b�
+#k��F�.�0�9�LC�������n��H��V�
+���=��V8�����G( ����IH&� %�+=��r���>�Qtq��R���1���Hv�&+�
+7�����������(:�YG��nO76�He�7��W^�&���>˾1(j��.���;}j(&�����U{
+5���i�)<1\�~���8@�ׁp�9�r\Y�b�L��
+��g�)�L�|���-���Ԙ£5 0���}�R3(�s��in�(��P��t�.���&>��N��������^堉O�^��I�M�:����v�CU���d��fYn��j��s�s�睭<��C� )-8)�fd�SzL_�a���+�C����a4)����������H����������X�
+����H����M4+ �6��% ���8LO[���[���a�0>��_:�$^?"RLI��
+�+��_y����ߴ�ߞ<���Ьl� 1�_��S��ak��bƓfB1;��E'#1=�'s�h
++�XH?������gV�Bh�aN�v[BX�6���.�7�5�nR�69���4�)'���j�f�G�8��Ĕ���[Ʃ*���=h"!�� cm���TJF�1;�-|H ǩ��$�?w��W��f��MMbf*@�X��,5K��"xIE����^��5��;M����RUw�T�Rf��ː��gUy�8����ZN1�����D�3ƹ���Rk�/59]��2�g���T�q���#����P3+��Vs�=2�Y�mhVr�tcm���+�T��1oX:LՁ���Ʀ�aGΣ(p�s_�5Y�QR��1�\c��3q߇N��23x廭�?Q��
+����b�K,����4ta��[�M���%=l�!ܞ��~zVbn�`���^)
+���1��/7UT�5H�E���4T�?'d�3�z7�RN%i�� ��{��l��Ⲫ�SIA����x.�B�H��X��p�,�}y1ߘq�+O]���2�wk���E�@a�õ�hN�HZi�'D�%Q�n��0�T%)�l��1�a( �(�4�W'� ��\բ�6��/��l��#�vD`�Z<��0��E s�9J����0�r0A�=^��S#�s,
+jɈ52�W'
+װو`�q2��e��W���?D��Y��
+U�&�D�H�ؕ�D���je�9���X�G(cݔP�-uly��زu�vp�1�W}�1�,YT��p��X ���m1L�C�x��%��)�1R��[��j�=�e�]�c�0<b�m�w�s�Lфvvv���r��a�C��
�;\�V=����-:��Ώ���3�p�8�U����䍏�����ȝ���
+P�kW�b�o����i��'�Ǎ�ǰmm��=��h�u+��>�n��<y:�2�}Qւ7L�C,l�����n��S�#��,Id�����~]/m������{ �{k@UZw暪G��;XiU���|[1�ܣ�ih�(�'o&4kKq�4sU{Y0/�a$��x0ho��BI;F��j%���hN�H�8��L�5�m�]�Bx?U�>�M���ZÛ�8:1ޚθ���08�C������ ���J?�(��sh����B���hm�z{���0V&��t��#P�J:�r����0Q�Dl�����6�m[ӏ�c���f*�P�H����Չ���g�j���0�(I3��oӃ�|yT�tB�,�Qn�$fs�?��2��GG'9\;��?~@��'ؚr_�ɯ��D�O��^�������+E+�d��H��ܵN�;{��
+"xTl���5��F7�4�mr��1g���K��|�L����mն�
+�(�m;� �_]�W$�?�0�'P骐�*�e{��\l��xk��&b홦X�c����k�i!�<[t/P�;�y�)����<�^����x��D��n�v ��p\�ϙ��N�� �A�T1��v���0ao�#D�,���8d
+���!ĊM)C��!���C,�q��!��n!�m�G����#j物-Bri�C��n���'ycj�́�18�ו��͋����v�<!|�������2����;m�m���kDV���&>�?>�r3��������P,������8���m���5�!>�x��5U�U3q���D�$1�ܤ������-ho��[<�۞� (7&wp��P�� rw! ��Oۧ9��T�I�8
+�~�Np4���Gy�#<�ѝ�Ok�t�9�y!_���[�,��ҙ�Kyi�L���uy���ڕ�fۊ`-)��u�($��N=�݅_�y�9�u<?�<�^�}qt��6E�*��,�ˬhF0|���˽���8�}��
+����?�{��9�H��xБ�Q֒�d�Ã��n�����#����6�c�ڔ��i��MNxT�E_^G�`˲7�f�̆m�iA��lu�2�M\���I.<�L4�e��B�d��YӘ?��ħ�^���З�'��~��܄?F��K@�Y����(=��AI�>R�_'��*b���䆼bwhw.uJ
+��\z6IL�؝�`u�3S���#{��R��Ts5�IGVqU�J�v\����d�U�UW�X)U�8����,f�����Yvr����)5<��/��?q+-)%��fd�SZ�G`�`�"WV���@��_ȥՙ�arj� G����h�wPh�}j��3��)XX2�oai�L��׀����G,\<Iv�@�>��Z�hX2���!�!d'�y��a�>����h�������:x�]���!"�O�6�,lenQ^��ʢ��1����QC����ږ�
+KFv�{��O���{��p�؛F�7)Je���؍�£�.��^@P�9�I���4
+o}}����W,&5��3����n��1:{/���x�Y^Q�wdq���ާ��{��M��F�4'�i�B�H#G)�)�/&A���U�:�s�y�H�3�G&�-���Cvf���eb
+|L�W��O^
+%۠yӯ_7����i�ٙ��g�6�M��]���9�<�R�F��+�cĚBe{/�)ਿPz���ίע&��=��Aqn��٨=L"Ԅ~Sbj�م����@є��'�k�'v~ޝ��*�R{V�/��Jv*� j�,(�0��
+���i��N��q����r \��?�5e8�:5�8�1�ۅ���q0E��O4��Ǻ���p<�r�b����Qf�<?�a�]��?���^��l�f�����P^83�Oqe�a�F�U�r�K�Ox�b�H)�fDT����2���L����-��Xx�X�U�����H��)��Zz-�V�4�OsC�'��Bm�H�
+���W�e�XR���NX�/�$��/�4)�Z���\��%�26[@ ���V�8�E�Jҟ��|��汰����c��&
+_�<[�� �(r�{
+��
+_Fχ�x�U�)���Ǘr�B��Cr+�3z���H4��f@T��H�@��3ud��[CC�v���X���uM�m�LN���L]�$��4�#�V"O�D�[��v��%�/��:���(�?�&^�&.���E����<��-�,����2K�`�!�7�f�@�m�i���5bی���^&�4IKLn2�F��K8U#�)L���|7�,���C�´��U$�+�.�zR?�Ws�X����� x����N�6���"��]� z4�d���U�w=z��V}A
+�8P2��ɩ=��P;5k��D��z�+@�~�ho���E/������檘\�j�<gW�lcnyfj=�q���T�=�tY{�UZG�߉D`�p҇�;�=��R���G(%:&�V�����p*�ђ{$��WK�"��4����O��=�i�Ui�e�^ǥ��� ���I&+����*������?���I���ٻ����Uҫ�v�<!|�����r���r3�d�O?{[�.d@�?�c�����a��;p�k'�=�E�}�́��i��u��|g8ԙ�%�ys7�װp�6��p|�����o<)z/�ohr�
+����Nv���ǻ�w�o�����m�=��N�����#�`$yO�#�^��1�z�җ`�;�^#/��d��-�0��g�3����'o{$�.:��ܿP3J�J��f�9��&���J��'�6
+p�l���۫�;��N+,۪�Z�,l��prkӶ�~+*�ڇ��S*�Z�lS���'4��e�Ή��R���v�
+%l�@7��!���v?$o#���%l�n���?w������5��a�L�&�|��~����Cr�]��iI�^�}H��?p���J/���ER��%7@:r���C3�y�J�2;*�0�?����0z�H*�H��u%�>y~�1?��� 3O/c]/�[��P���^��][A�]5{h�N-���Oۚ];`�����-�d� �-���S*4�.4����+ӕ��#$-B���}[�jW��ŭe�"�|�8Q��'B��J%N���%�'�Jɖ�X�����`}i��6��W�bi�2��&��������w���UC�zix �6ҟ�#���� ˱j�Ж��Ѵ� ���'-`�A��s���6
+��>
+�o0~h�_����&��,MVő�]�A$��^���F�mZ_`c;�$N�҂\�FЕ<��9G��0/�Ҽ�����Ei��V,��['bgv�P?���~���|諛\�xQ�5]��QZ���q��/L�,7�2=*{�ma, �o�vKk;�QL@"%L�O�1>>ƶ�$��?
+:e
+�0�u�)=wW\!dJ?��)H��I�Q)#�$J�jq�˪!�"#�
+%�%�4[�M%�S����K�o�1�Bx>�Y�(�a�T�(=�?mk #�BT��P�`N���ޏ�{E�S}\�A����[���G۾���;_��#�����������fgc)]W�2g�����/���>�D�3�s�2�`����O+-���
+/XÐ��~�h�g<����ֲ=}Y����ty`eY�ń��_�H�i`[���s|NrN��"����7�E��C��!h |1V���=��Nˬ}{���$�!y��^�c3������C����Ca�FR=��N<���^;절�\��烁��7J���o���a�'$l?�G��krxݾ�}�BH^�}iӷF:B�'�������܅�}l9��c_��מw �z-a��FD0Y\�N���3~��9cYU���������/��!�l_5`��,t��zK��F��N�=����_�o������T����H��鰋=<'�����{���b^҄4�I�m�͛� ����3p|C�0���F:���'�O��5�GY�� �<[nD��_#.MV����������Ij�� ъT2�G��4 ��Ҡ�ƐI@��ӏz�f�/�1�5��
+3m.6��ؒb}�p�a���-5⁙�.�J5�p]ű`b�!�����<!�N�&<'xzbn@C�k�S�k#[Q�O�Y<Ȑ��͆k���fedk��7-l'����p�����=/���Ľy/�i3i�!�T�ˍo����^.���m4�"���4럍���肏�f�_+�e\NR�a��T�-�a��I�$��mw�d�Yi��d0�W��:Y�Y.�<�C�>�n<Ves�� 괹��u�z���M�-���)��qxpw_�\nQ�.�����S� 7��J/(����WZ
+N�Rmq�(ldy��.��,Y��S���J���pw,��%��A����O��n��'
+"��uI�G��o���ʢ�l�~vZ�� ��c;?1�|
+�B�i���\�+O�
+ѿ1ѯn�t��:B���o�����!��%�sb��L_��B��8�r.�����G�?��Os�,c��wM&>M��㦍hw��������Z�%4���%�'�c�<f|��>�]�VԖ�I0x�݁������bZ�v�
+�p�z�D���vh+i���L���͒5�Z�ư�lé���a/?�v��L����+����e6��
+�l�m�k�r1,���C-�xcn�6�R�wI�i�^��Vٲ=se�����Y��ȖW�6+
+��&�&��t�8�]���wX�Wd�N�i�45�B��(_�mJ,;?;�9����Y��h
+��nM�Dk�]s�\�^b����ԉ�Sy��z=8�ֲ��&{��n�Nm�G��Z`�!y/�J7��h��jŖS�u���S1�^�Lx�;��y��/x���a9��x�b砦b1ҽc�hӋ�Nٕ��ޱX,�`�b��oɃ��%�N8�o�)�V*�[)\9Yh(��6ҽc5�}��J/{G�{���ط����GO�9V�uݠ��������c���\��k��6�U'�zz*�v��[�<�˒x����-�z]�
+�O��S4.���s�]*<nKe���R�AyY*#u�-U�����>|�Ku�>ӥ�]b
+C'��S�������?�
+�j���)�t.tg����}�<���z=�q�>���CF�[:~��m�+�qaz�c���<�M�z�۔O�\l��H#�K��������̱�]f<�˗���˗3.�w6�#N?��k�)��xXc5z-.��i��r΅���*�s�L�s�Λ=����>.\.��,]N�Dž�e>�L���r�=�������0V�c���~1Vo����w1��%��%'��� �BqY�I�}+.�7�|��=J���D����Bs�yL�p��mԘJUq��ՅUAK'6mI�.|y�4p↧��Յ>GK'�-��\sR!�����[�#eE�JN �κNθ���I�-�]$Z���I�%ٝ$w��0N�kՔ`�a���Z�"�CK'9��d]��ii�$�MKv9)�4��-s�:� c�ۄ��6ar�MP��o��<;��� �����=����P�U.
+��U좡�,�C������Bz��Jo':=�h-��h�KA����5���P�U<
+����P�U
+��e��P1�����準
+L���f���qeɊ,���<�ݖ��6�d������f����+HV�D4�����Br7 b͟�M~Xc��6�6��]ᒅ�%S�d��cy����V}q,���Ѫ����C{�Xhn������������������h3���g?0�l���Q��)�Ʋ�W�9�U60���y>����3,ŵ�@�4���g.)�@���
+MJ�n�9 4�K7�止�c��M:��ȭv�d"`��.L4w#�p��hNs�]���Ӏk!bmD�t6UT�5Ș��7&�ȴ�0�9��ODwt(�1����hZ>�j�n�h��0�(hZ<�ny�@�"w�s4'���3w;��QȎ��,��Dk݄�)�&�ޜ�VC0�Mܮ9�����bp���y��S����b��Bb�SҜ� ���ً<���@�6z�ɋ>��m<�^��6`A�˧ �_�x����&7nnGq�8��{������+��� �~��#^��������+�鑢#'B�9c�ẊcA��aY��n�1�2��}|\ٍǙ�
+p&��������47���6�F2ڿx!Y�T�V�da�E4=��0�T$7��%w�0,^��|a�y!�2�g�u��[@9�r��$���$����PK�JDJW*�PKT<(�:K/.pollen.argoPKT<��z�nB:hpollen_Modèle.pgmlPKT<�{"CUpollen_Services.pgmlPKT<�f/�X8A{ pollen_Context.pgmlPKT<P����K(pollen.todoPKT<7Rp:B1)pollen_profile.profilePKT<�JDJW*�
+�)pollen.xmiPK�>T
\ No newline at end of file
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-03-31 08:29:03 UTC (rev 2963)
+++ trunk/pom.xml 2010-04-02 14:21:52 UTC (rev 2964)
@@ -309,7 +309,7 @@
<!-- customized versions -->
<!--javadoc.version>2.4</javadoc.version-->
- <topia.version>2.3.1-SNAPSHOT</topia.version>
+ <topia.version>2.3.1</topia.version>
<eugene.version>2.0.1-SNAPSHOT</eugene.version>
<i18n.version>1.2</i18n.version>
<tapestry.version>5.1.0.5</tapestry.version>
@@ -368,26 +368,6 @@
<artifactId>maven-i18n-plugin</artifactId>
<version>${i18n.version}</version>
</plugin>
- <plugin>
- <groupId>org.nuiton.processor</groupId>
- <artifactId>maven-processor-plugin</artifactId>
- <version>${processor.version}</version>
- <executions>
- <execution>
- <phase>generate-sources</phase>
- <goals>
- <goal>process</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <includes>**/*.java</includes>
- <filters>
- org.nuiton.processor.filters.GeneratorTemplatesFilter,
- org.nuiton.processor.filters.ActiveLogsCodeFilter
- </filters>
- </configuration>
- </plugin>
</plugins>
</pluginManagement>
1
0