From do-not-reply at jboss.org Wed Feb 1 13:54:14 2012
Content-Type: multipart/mixed; boundary="===============1929040017050162998=="
MIME-Version: 1.0
From: do-not-reply at jboss.org
To: gatein-commits at lists.jboss.org
Subject: [gatein-commits] gatein SVN: r8347 - in portal/trunk/webui/core/src:
test/java/org/exoplatform/webui/test/validator and 1 other directory.
Date: Wed, 01 Feb 2012 13:54:14 -0500
Message-ID: <201202011854.q11IsEnc029355@svn01.web.mwc.hst.phx2.redhat.com>
--===============1929040017050162998==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Author: chris.laprun(a)jboss.com
Date: 2012-02-01 13:54:13 -0500 (Wed, 01 Feb 2012)
New Revision: 8347
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validat=
or/UserConfigurableUsernameValidator.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/validat=
or/UsernameValidator.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/test/validat=
or/TestWebuiValidator.java
Log:
- GTNPORTAL-1673: Made UserConfigurableUsernameValidator more generic so th=
at it can load any number of named configurations from gatein.conf.dir/conf=
iguration.properties. A validation is activated by creating a validator wit=
h the associated name. Documentation upcoming.
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/=
validator/UserConfigurableUsernameValidator.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/valida=
tor/UserConfigurableUsernameValidator.java 2012-02-01 15:28:25 UTC (rev 834=
6)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/valida=
tor/UserConfigurableUsernameValidator.java 2012-02-01 18:54:13 UTC (rev 834=
7)
@@ -33,31 +33,109 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import java.util.regex.Pattern;
=
/** @author Chris Laprun */
@Serialized
-public class UserConfigurableUsernameValidator extends UsernameValidator
+public class UserConfigurableUsernameValidator extends MultipleConditionsV=
alidator
{
- private static ValidatorConfiguration configuration =3D new ValidatorCo=
nfiguration();
+ protected static Log log =3D ExoLogger.getLogger(UserConfigurableUserna=
meValidator.class);
=
+ public static final String USERNAME =3D "username";
+ public static final String GROUPMEMBERSHIP =3D "groupmembership";
+ public static final String DEFAULT_LOCALIZATION_KEY =3D "ExpressionVali=
dator.msg.value-invalid";
+ public static final String GROUP_MEMBERSHIP_VALIDATION_REGEX =3D "^\\p{=
L}[\\p{L}\\d._\\-\\s*,\\s*]+$";
+ public static final String GROUP_MEMBERSHIP_LOCALIZATION_KEY =3D "UIGro=
upMembershipForm.msg.Invalid-char";
+
+ private static Map configurations =3D n=
ew HashMap(3);
+
+ public static final String KEY_PREFIX =3D "gatein.validators.";
+
+ static
+ {
+ String gateinConfDir =3D System.getProperty("gatein.conf.dir");
+ File conf =3D new File(gateinConfDir, "configuration.properties");
+ if (conf.exists())
+ {
+ try
+ {
+ Properties properties =3D new Properties();
+ properties.load(new FileInputStream(conf));
+ int length =3D KEY_PREFIX.length();
+ for (Object objectKey : properties.keySet())
+ {
+ String key =3D (String)objectKey;
+ if (key.startsWith(KEY_PREFIX))
+ {
+ // extract property key
+ String propertyKey =3D key.substring(length, key.indexOf=
('.', length));
+ if(!configurations.containsKey(propertyKey))
+ {
+ configurations.put(propertyKey, new ValidatorConfigur=
ation(propertyKey, properties));
+ }
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ log.info(e.getLocalizedMessage());
+ log.debug(e);
+ }
+ }
+ }
+
+ private final String validatorName;
+ private final String localizationKey;
+
// needed by @Serialized
public UserConfigurableUsernameValidator()
{
+ this(USERNAME, DEFAULT_LOCALIZATION_KEY);
+ }
+
+ public UserConfigurableUsernameValidator(String validatorName, String m=
essageLocalizationKey)
+ {
this.exceptionOnMissingMandatory =3D true;
this.trimValue =3D true;
+ localizationKey =3D messageLocalizationKey !=3D null ? messageLocali=
zationKey : DEFAULT_LOCALIZATION_KEY;
+ this.validatorName =3D validatorName !=3D null ? validatorName : USE=
RNAME;
}
=
+ public UserConfigurableUsernameValidator(String validatorName)
+ {
+ this(validatorName, DEFAULT_LOCALIZATION_KEY);
+ }
+
@Override
protected void validate(String value, String label, CompoundApplication=
Message messages, UIFormInput uiInput)
{
- if (configuration.defaultConfig)
+ ValidatorConfiguration configuration =3D configurations.get(validato=
rName);
+
+ if (configuration =3D=3D null)
{
- super.validate(value, label, messages, uiInput);
+ // we don't have a user-configured validator for this validator n=
ame
+
+ if (USERNAME.equals(validatorName))
+ {
+ // if the validator name is USERNAME constant, we have a usern=
ame to validate with the original, non-configured behavior
+ UsernameValidator.validate(value, label, messages, UsernameVal=
idator.DEFAULT_MIN_LENGTH, UsernameValidator.DEFAULT_MAX_LENGTH);
+ }
+ else
+ {
+ // else, we assume that we need to validate a group membership=
, replicating original behavior
+ if (!Pattern.matches(GROUP_MEMBERSHIP_VALIDATION_REGEX, value))
+ {
+ messages.addMessage(localizationKey, new Object[]{label});
+ }
+ }
}
else
{
+ // otherwise, use the user-provided configuration
+
if (value.length() < configuration.minLength || value.length() > =
configuration.maxLength)
{
messages.addMessage("StringLengthValidator.msg.length-invalid"=
, new Object[]{label, configuration.minLength.toString(), configuration.max=
Length.toString()});
@@ -65,48 +143,33 @@
=
if (!Pattern.matches(configuration.pattern, value))
{
- messages.addMessage("ExpressionValidator.msg.value-invalid", n=
ew Object[]{label, configuration.formatMessage});
+ messages.addMessage(localizationKey, new Object[]{label, confi=
guration.formatMessage});
}
}
}
=
private static class ValidatorConfiguration
{
- protected static Log log =3D ExoLogger.getLogger("username-validator=
");
private Integer minLength;
private Integer maxLength;
private String pattern;
private String formatMessage;
- private boolean defaultConfig =3D true;
=
- private ValidatorConfiguration()
+ private ValidatorConfiguration(String propertyKey, Properties proper=
ties)
{
- String gateinConfDir =3D System.getProperty("gatein.conf.dir");
- File conf =3D new File(gateinConfDir, "username-validator.propert=
ies");
+ // used to assign backward compatible default values
+ boolean isUser =3D USERNAME.equals(propertyKey);
+ String prefixedKey =3D KEY_PREFIX + propertyKey;
=
- minLength =3D DEFAULT_MIN_LENGTH;
- maxLength =3D DEFAULT_MAX_LENGTH;
- pattern =3D Utils.USER_NAME_VALIDATOR_REGEX;
- formatMessage =3D pattern;
+ String property =3D properties.getProperty(prefixedKey + ".min.le=
ngth");
+ minLength =3D property !=3D null ? Integer.valueOf(property) : (i=
sUser ? UsernameValidator.DEFAULT_MIN_LENGTH : 0);
=
- if (conf.exists())
- {
- try
- {
- Properties properties =3D new Properties();
- properties.load(new FileInputStream(conf));
- minLength =3D Integer.valueOf(properties.getProperty("minLe=
ngth", String.valueOf(DEFAULT_MIN_LENGTH)));
- maxLength =3D Integer.valueOf(properties.getProperty("maxLe=
ngth", String.valueOf(DEFAULT_MAX_LENGTH)));
- pattern =3D properties.getProperty("regexp", Utils.USER_NAM=
E_VALIDATOR_REGEX);
- formatMessage =3D properties.getProperty("formatMessage", f=
ormatMessage);
- defaultConfig =3D false;
- }
- catch (IOException e)
- {
- log.info(e.getLocalizedMessage());
- log.debug(e);
- }
- }
+ property =3D properties.getProperty(prefixedKey + ".max.length");
+ maxLength =3D property !=3D null ? Integer.valueOf(property) : (i=
sUser ? UsernameValidator.DEFAULT_MAX_LENGTH : Integer.MAX_VALUE);
+
+ pattern =3D properties.getProperty(prefixedKey + ".regexp", Utils=
.USER_NAME_VALIDATOR_REGEX);
+ formatMessage =3D properties.getProperty(prefixedKey + ".format.m=
essage", pattern);
}
+
}
}
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/=
validator/UsernameValidator.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/valida=
tor/UsernameValidator.java 2012-02-01 15:28:25 UTC (rev 8346)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/form/valida=
tor/UsernameValidator.java 2012-02-01 18:54:13 UTC (rev 8347)
@@ -49,6 +49,11 @@
=
protected void validate(String value, String label, CompoundApplication=
Message messages, UIFormInput uiInput)
{
+ validate(value, label, messages, min, max);
+ }
+
+ static void validate(String value, String label, CompoundApplicationMes=
sage messages, Integer min, Integer max)
+ {
char[] buff =3D value.toCharArray();
if (buff.length < min || buff.length > max)
{
@@ -93,7 +98,7 @@
}
}
=
- private boolean isSymbol(char c)
+ private static boolean isSymbol(char c)
{
return c =3D=3D '_' || c =3D=3D '.';
}
Modified: portal/trunk/webui/core/src/test/java/org/exoplatform/webui/test/=
validator/TestWebuiValidator.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- portal/trunk/webui/core/src/test/java/org/exoplatform/webui/test/valida=
tor/TestWebuiValidator.java 2012-02-01 15:28:25 UTC (rev 8346)
+++ portal/trunk/webui/core/src/test/java/org/exoplatform/webui/test/valida=
tor/TestWebuiValidator.java 2012-02-01 18:54:13 UTC (rev 8347)
@@ -31,6 +31,7 @@
import org.exoplatform.webui.form.validator.ResourceValidator;
import org.exoplatform.webui.form.validator.SpecialCharacterValidator;
import org.exoplatform.webui.form.validator.URLValidator;
+import org.exoplatform.webui.form.validator.UserConfigurableUsernameValida=
tor;
import org.exoplatform.webui.form.validator.UsernameValidator;
import org.exoplatform.webui.form.validator.Validator;
=
@@ -93,6 +94,14 @@
public void testUsernameValidator()
{
Validator validator =3D new UsernameValidator(3, 30);
+ validateUsernames(validator);
+
+ validator =3D new UserConfigurableUsernameValidator(UserConfigurable=
UsernameValidator.USERNAME);
+ validateUsernames(validator);
+ }
+
+ private void validateUsernames(Validator validator)
+ {
assertTrue(expected(validator, "root.gtn"));
assertTrue(expected(validator, "root_gtn"));
assertTrue(expected(validator, "root_gtn.01"));
--===============1929040017050162998==--