You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2006/12/15 02:21:17 UTC
svn commit: r487417 -
/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java
Author: elecharny
Date: Thu Dec 14 17:21:16 2006
New Revision: 487417
URL: http://svn.apache.org/viewvc?view=rev&rev=487417
Log:
Updated this SyntaxChecker using regexp. It still has to be tested
Modified:
directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java
Modified: directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java?view=diff&rev=487417&r1=487416&r2=487417
==============================================================================
--- directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java (original)
+++ directory/trunks/shared/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntax/TelephoneNumberSyntaxChecker.java Thu Dec 14 17:21:16 2006
@@ -20,6 +20,11 @@
package org.apache.directory.shared.ldap.schema.syntax;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
import javax.naming.NamingException;
@@ -29,36 +34,93 @@
/**
- * A SyntaxChecker which verifies that a value is an Integer according to RFC 4517.
+ * A SyntaxChecker which verifies that a value is a TelephoneNumber according to ITU
+ * recommendation E.123 (which is quite vague ...).
*
- * From RFC 4517 :
+ * A valid Telephone number respect more or less this syntax :
*
- * Integer = ( HYPHEN LDIGIT *DIGIT ) | number
+ * " *[+]? *((\([0-9- ]+\))|[0-9- ]+)+"
*
- * From RFC 4512 :
- * number = DIGIT | ( LDIGIT 1*DIGIT )
- * DIGIT = %x30 | LDIGIT ; "0"-"9"
- * LDIGIT = %x31-39 ; "1"-"9"
- * HYPHEN = %x2D ; hyphen ("-")
+ * If needed, and to allow more syntaxes, a list of regexps has been added
+ * which can be initialized to other values
*
- *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
public class TelephoneNumberSyntaxChecker implements SyntaxChecker
{
/** The Syntax OID, according to RFC 4517, par. 3.3.31 */
- public static final String OID = "1.3.6.1.4.1.1466.115.121.1.27";
+ public static final String OID = "1.3.6.1.4.1.1466.115.121.1.50";
+
+ /** Other regexp to extend the initial one */
+ private List<String> regexps;
+
+ /** Other regexp to extend the initial one, compiled */
+ private List<Pattern> compiledREs;
+
+ /** The default pattern used to check a TelephoneNumber */
+ private final String DEFAULT_REGEXP = "^ *[+]? *((\\([0-9- ]+\\))|[0-9- ]+)+$";
+
+ private Pattern defaultPattern = Pattern.compile( DEFAULT_REGEXP );
+
+ /** A flag set when only the default regexp should be tested */
+ private boolean defaultMandatory = false;
/**
- *
- * Creates a new instance of IntegerSyntaxChecker.
- *
+ * Creates a new instance of TelephoneNumberSyntaxChecker.
*/
public TelephoneNumberSyntaxChecker()
{
}
+
+ /**
+ * Add a new valid regexp for a Telephone number
+ * @param regexp The new regexp to check
+ */
+ public void addRegexp( String regexp )
+ {
+ if ( defaultMandatory )
+ {
+ return;
+ }
+
+ try
+ {
+ Pattern compiledRE = Pattern.compile( regexp );
+
+ if ( regexps == null )
+ {
+ regexps = new ArrayList<String>();
+ compiledREs = new ArrayList<Pattern>();
+ }
+
+ regexps.add( regexp );
+ compiledREs.add( compiledRE );
+ }
+ catch ( PatternSyntaxException pse )
+ {
+ return;
+ }
+ }
+ /**
+ *
+ */
+ public void setDefaultRegexp( String regexp )
+ {
+ try
+ {
+ defaultPattern = Pattern.compile( regexp );
+
+ defaultMandatory = true;
+ regexps = null;
+ compiledREs = null;
+ }
+ catch ( PatternSyntaxException pse )
+ {
+ return;
+ }
+ }
/* (non-Javadoc)
* @see org.apache.directory.shared.ldap.schema.SyntaxChecker#assertSyntax(java.lang.Object)
@@ -111,50 +173,32 @@
return false;
}
- // The first char must be either a '-' or in [0..9].
- // If it's a '0', then there should be any other char after
- int pos = 0;
- char c = strValue.charAt( pos );
-
- if ( c == '-' )
- {
- pos = 1;
- }
- else if ( !StringTools.isDigit( c ) )
+ // We will use a regexp to check the TelephoneNumber.
+ if ( defaultMandatory )
{
- return false;
+ // We have a unique regexp to check, the default one
+ return defaultPattern.matcher( strValue ).matches();
}
- else if ( c == '0' )
+ else
{
- if ( strValue.length() > 1 )
+ if ( defaultPattern.matcher( strValue ).matches() )
{
- return false;
+ return true;
}
else
{
- return true;
+ // The default is not enough, let's try
+ // the other regexps
+ for ( Pattern pattern:compiledREs )
+ {
+ if ( pattern.matcher( strValue ).matches() )
+ {
+ return true;
+ }
+ }
+
+ return false;
}
}
-
- // We must have at least a digit which is not '0'
- if ( !StringTools.isDigit( strValue, pos ) )
- {
- return false;
- }
- else if ( StringTools.isCharASCII( strValue, pos, '0' ) )
- {
- return false;
- }
- else
- {
- pos++;
- }
-
- while ( StringTools.isDigit( strValue, pos) )
- {
- pos++;
- }
-
- return ( pos == strValue.length() );
}
}