directory-api mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Seelmann <m...@stefan-seelmann.de>
Subject Re: Prepare String
Date Tue, 05 Apr 2016 20:05:24 GMT
On 04/05/2016 10:48 AM, Emmanuel L├ęcharny wrote:
> One more step !
> 
> Yesterday evening, I as able to work on the DeepTrimToLowerNormalizer
> class, which is used to deal with the caseIgnoreMatch MatchingRule (the
> most crequent Matching Rule), and I discovered that the java
> Normalizer.normalize() method was already handling the combining
> characters, which is otherwise a nightmare to handle (well, not that
> much, but still). That will simplify the insignificantSpaceHandling
> process a LOT.
> 
> Here is what will look like the DeepTrimToLowerNormalizer.normalize(
> Value ) method :
> 
>     public Value normalize( Value value, PrepareString.AssertionType
> assertionType ) throws LdapException
>     {
>         if ( value == null )
>         {
>             return null;
>         }
> 
>         try
>         {
>             // Transcoding
>             String transcoded = PrepareString.transcode( value.getBytes() );
> 
>             // Map
>             String mapped = PrepareString.map( value,
> PrepareString.IGNORE_CASE );
>            
>             // Normalize
>             String normalized = PrepareString.normalize( mapped );
>            
>             // Prohibit
>             PrepareString.checkProhibited( normalized );
>            
>             // Bidi is ignored
>            
>             // Insignificant Characters Handling
>             String normValue = PrepareString.insignificantSpaceHandling(
> normalized, assertionType );
> 
>             return new Value( value.getAttributeType(),
> value.getValue(), normalized );
>         }
>         catch ( IOException ioe )
>         {
>             throw new LdapInvalidAttributeValueException(
> ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, I18n.err(
>                 I18n.ERR_04224, value ), ioe );
>         }
>     }
> 
> Note that this method work only for Values or non-substrings assertions
> (ie, assertions used in a filter that is not a SubstringFilter). For
> substrings assertions (Initial, Any or Final, like the strings in a
> filter '(cn=test*abc*end)'), we have to add a new parameter to the
> normalize method. I'll deal with that later.
> 
> As you can see, this is all but simple... Making my way through the
> jungle though ;-)

Thanks Emmanuel for the update and the effort. It makes totally sense to
do it right, I'm sure we will benefit from it.

Kind Regards,
Stefan


Mime
View raw message