mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

sin
26.24.2009 81478c69903dbcd299e2748a3a37857647f8fa70
opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
@@ -31,6 +31,7 @@
import static org.opends.messages.SchemaMessages.*;
import static org.opends.server.schema.SchemaConstants.*;
import static org.opends.server.util.StaticUtils.*;
import static org.opends.server.schema.StringPrepProfile.*;
import java.util.Collection;
import java.util.Collections;
@@ -146,41 +147,46 @@
  public ByteString normalizeValue(ByteSequence value)
         throws DirectoryException
  {
    String        valueString = value.toString();
    int           valueLength = valueString.length();
    StringBuilder valueBuffer = new StringBuilder(valueLength);
    StringBuilder buffer = new StringBuilder();
    prepareUnicode(buffer, value, TRIM, NO_CASE_FOLD);
    int bufferLength = buffer.length();
    boolean logged = false;
    for (int i=0; i < valueLength; i++)
    for (int pos = bufferLength-1; pos > 0; pos--)
    {
      char c = valueString.charAt(i);
      if (isDigit(c))
      char c = buffer.charAt(pos);
      if (!isDigit(c))
      {
        valueBuffer.append(c);
      }
      else if (c != ' ')
      {
        // This is an illegal character.  Either log it or reject it.
        Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
                valueString, String.valueOf(c), i);
        switch (DirectoryServer.getSyntaxEnforcementPolicy())
        if (c == ' ')
        {
          case REJECT:
            throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                         message);
          case WARN:
            if (! logged)
            {
              ErrorLogger.logError(message);
              logged = true;
            }
          buffer.delete(pos, pos+1);
        }
        else
        {
          // This is an illegal character.  Either log it or reject it.
          Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
                  value.toString(), String.valueOf(c), pos);
          switch (DirectoryServer.getSyntaxEnforcementPolicy())
          {
            case REJECT:
              throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                           message);
            case WARN:
              if (! logged)
              {
                ErrorLogger.logError(message);
                logged = true;
              }
          }
        }
      }
    }
    return ByteString.valueOf(valueBuffer.toString());
    if(buffer.length() == 0)
    {
      return ByteString.empty();
    }
    return ByteString.valueOf(buffer.toString());
  }
}