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

Jean-Noel Rouvignac
20.20.2014 2d7aad2c25507ea427980b54848c26594c607ae2
opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
@@ -26,8 +26,6 @@
 */
package org.opends.server.schema;
import java.util.Collection;
import java.util.Collections;
@@ -35,10 +33,9 @@
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DecodeException;
import org.opends.server.api.EqualityMatchingRule;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DirectoryException;
import org.forgerock.opendj.ldap.ResultCode;
import static org.opends.messages.SchemaMessages.*;
import static org.opends.server.schema.SchemaConstants.*;
@@ -124,28 +121,28 @@
   *
   * @return  The normalized version of the provided value.
   *
   * @throws  DirectoryException  If the provided value is invalid according to
   * @throws  DecodeException  If the provided value is invalid according to
   *                              the associated attribute syntax.
   */
  @Override
  public ByteString normalizeAttributeValue(ByteSequence value)
         throws DirectoryException
         throws DecodeException
  {
    String valueString = value.toString().toUpperCase();
    int length = valueString.length();
    if (length < 3)
    {
      return reportInvalidSyntax(valueString,
          WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(value));
      reportInvalidSyntax(WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(value));
      return ByteString.valueOf(valueString);
    }
    if ((valueString.charAt(0) != '\'') ||
        (valueString.charAt(length-2) != '\'') ||
        (valueString.charAt(length-1) != 'B'))
    {
      return reportInvalidSyntax(valueString,
          WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(value));
      reportInvalidSyntax(WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(value));
      return ByteString.valueOf(valueString);
    }
    for (int i=1; i < (length-2); i++)
@@ -157,27 +154,25 @@
          // These characters are fine.
          break;
        default:
        return reportInvalidSyntax(valueString,
            WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(value, valueString.charAt(i)));
          reportInvalidSyntax(WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(
              value, valueString.charAt(i)));
          return ByteString.valueOf(valueString);
      }
    }
    return ByteString.valueOf(valueString);
  }
  private ByteString reportInvalidSyntax(String valueString, LocalizableMessage message)
      throws DirectoryException
  private void reportInvalidSyntax(LocalizableMessage message)
      throws DecodeException
  {
    switch (DirectoryServer.getSyntaxEnforcementPolicy())
    {
      case REJECT:
        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
      case WARN:
        logger.error(message);
        return ByteString.valueOf(valueString);
      default:
        return ByteString.valueOf(valueString);
    case REJECT:
      throw DecodeException.error(message);
    case WARN:
      logger.error(message);
      break;
    }
  }
}