From f2160f4bd1c8ac67e5a86a6710d431e8932877f9 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 28 May 2010 11:47:51 +0000
Subject: [PATCH] Synchronize SDK on java.net with internal repository.
---
sdk/src/org/opends/sdk/schema/AbstractSubstringMatchingRuleImpl.java | 329 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 300 insertions(+), 29 deletions(-)
diff --git a/sdk/src/org/opends/sdk/schema/AbstractSubstringMatchingRuleImpl.java b/sdk/src/org/opends/sdk/schema/AbstractSubstringMatchingRuleImpl.java
index 785b730..1885f48 100644
--- a/sdk/src/org/opends/sdk/schema/AbstractSubstringMatchingRuleImpl.java
+++ b/sdk/src/org/opends/sdk/schema/AbstractSubstringMatchingRuleImpl.java
@@ -35,7 +35,6 @@
import org.opends.sdk.*;
-import com.sun.opends.sdk.util.StaticUtils;
import com.sun.opends.sdk.util.SubstringReader;
@@ -55,8 +54,8 @@
- protected DefaultSubstringAssertion(ByteString normInitial,
- ByteString[] normAnys, ByteString normFinal)
+ protected DefaultSubstringAssertion(final ByteString normInitial,
+ final ByteString[] normAnys, final ByteString normFinal)
{
this.normInitial = normInitial;
this.normAnys = normAnys;
@@ -65,7 +64,7 @@
- public ConditionResult matches(ByteSequence attributeValue)
+ public ConditionResult matches(final ByteSequence attributeValue)
{
final int valueLength = attributeValue.length();
@@ -164,13 +163,12 @@
@Override
- public Assertion getAssertion(Schema schema, ByteSequence value)
+ public Assertion getAssertion(final Schema schema, final ByteSequence value)
throws DecodeException
{
if (value.length() == 0)
{
- throw DecodeException.error(
- WARN_ATTR_SYNTAX_SUBSTRING_EMPTY.get());
+ throw DecodeException.error(WARN_ATTR_SYNTAX_SUBSTRING_EMPTY.get());
}
ByteSequence initialString = null;
@@ -181,36 +179,33 @@
if (valueString.length() == 1 && valueString.charAt(0) == '*')
{
- return getAssertion(schema, initialString, anyStrings,
- finalString);
+ return getAssertion(schema, initialString, anyStrings, finalString);
}
final char[] escapeChars = new char[] { '*' };
final SubstringReader reader = new SubstringReader(valueString);
- ByteString bytes =
- StaticUtils.evaluateEscapes(reader, escapeChars, false);
+ ByteString bytes = evaluateEscapes(reader, escapeChars, false);
if (bytes.length() > 0)
{
initialString = normalizeSubString(schema, bytes);
}
if (reader.remaining() == 0)
{
- throw DecodeException.error(
- WARN_ATTR_SYNTAX_SUBSTRING_NO_WILDCARDS
- .get(value.toString()));
+ throw DecodeException.error(WARN_ATTR_SYNTAX_SUBSTRING_NO_WILDCARDS
+ .get(value.toString()));
}
while (true)
{
reader.read();
- bytes = StaticUtils.evaluateEscapes(reader, escapeChars, false);
+ bytes = evaluateEscapes(reader, escapeChars, false);
if (reader.remaining() > 0)
{
if (bytes.length() == 0)
{
- throw DecodeException.error(
- WARN_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS
- .get(value.toString(), reader.pos()));
+ throw DecodeException
+ .error(WARN_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS.get(value
+ .toString(), reader.pos()));
}
if (anyStrings == null)
{
@@ -234,13 +229,13 @@
@Override
- public Assertion getAssertion(Schema schema, ByteSequence subInitial,
- List<? extends ByteSequence> subAnyElements, ByteSequence subFinal)
- throws DecodeException
+ public Assertion getAssertion(final Schema schema,
+ final ByteSequence subInitial,
+ final List<? extends ByteSequence> subAnyElements,
+ final ByteSequence subFinal) throws DecodeException
{
- final ByteString normInitial =
- subInitial == null ? null : normalizeSubString(schema,
- subInitial);
+ final ByteString normInitial = subInitial == null ? null
+ : normalizeSubString(schema, subInitial);
ByteString[] normAnys = null;
if (subAnyElements != null && !subAnyElements.isEmpty())
@@ -251,18 +246,294 @@
normAnys[i] = normalizeSubString(schema, subAnyElements.get(i));
}
}
- final ByteString normFinal =
- subFinal == null ? null : normalizeSubString(schema, subFinal);
+ final ByteString normFinal = subFinal == null ? null : normalizeSubString(
+ schema, subFinal);
- return new DefaultSubstringAssertion(normInitial, normAnys,
- normFinal);
+ return new DefaultSubstringAssertion(normInitial, normAnys, normFinal);
}
- ByteString normalizeSubString(Schema schema, ByteSequence value)
+ ByteString normalizeSubString(final Schema schema, final ByteSequence value)
throws DecodeException
{
return normalizeAttributeValue(schema, value);
}
+
+
+
+ private char evaluateEscapedChar(final SubstringReader reader,
+ final char[] escapeChars) throws DecodeException
+ {
+ final char c1 = reader.read();
+ byte b;
+ switch (c1)
+ {
+ case '0':
+ b = 0x00;
+ break;
+ case '1':
+ b = 0x10;
+ break;
+ case '2':
+ b = 0x20;
+ break;
+ case '3':
+ b = 0x30;
+ break;
+ case '4':
+ b = 0x40;
+ break;
+ case '5':
+ b = 0x50;
+ break;
+ case '6':
+ b = 0x60;
+ break;
+ case '7':
+ b = 0x70;
+ break;
+ case '8':
+ b = (byte) 0x80;
+ break;
+ case '9':
+ b = (byte) 0x90;
+ break;
+ case 'A':
+ case 'a':
+ b = (byte) 0xA0;
+ break;
+ case 'B':
+ case 'b':
+ b = (byte) 0xB0;
+ break;
+ case 'C':
+ case 'c':
+ b = (byte) 0xC0;
+ break;
+ case 'D':
+ case 'd':
+ b = (byte) 0xD0;
+ break;
+ case 'E':
+ case 'e':
+ b = (byte) 0xE0;
+ break;
+ case 'F':
+ case 'f':
+ b = (byte) 0xF0;
+ break;
+ default:
+ if (c1 == 0x5C)
+ {
+ return c1;
+ }
+ if (escapeChars != null)
+ {
+ for (final char escapeChar : escapeChars)
+ {
+ if (c1 == escapeChar)
+ {
+ return c1;
+ }
+ }
+ }
+ final LocalizableMessage message = ERR_INVALID_ESCAPE_CHAR.get(reader
+ .getString(), c1);
+ throw DecodeException.error(message);
+ }
+
+ // The two positions must be the hex characters that
+ // comprise the escaped value.
+ if (reader.remaining() == 0)
+ {
+ final LocalizableMessage message = ERR_HEX_DECODE_INVALID_LENGTH
+ .get(reader.getString());
+
+ throw DecodeException.error(message);
+ }
+
+ final char c2 = reader.read();
+ switch (c2)
+ {
+ case '0':
+ // No action required.
+ break;
+ case '1':
+ b |= 0x01;
+ break;
+ case '2':
+ b |= 0x02;
+ break;
+ case '3':
+ b |= 0x03;
+ break;
+ case '4':
+ b |= 0x04;
+ break;
+ case '5':
+ b |= 0x05;
+ break;
+ case '6':
+ b |= 0x06;
+ break;
+ case '7':
+ b |= 0x07;
+ break;
+ case '8':
+ b |= 0x08;
+ break;
+ case '9':
+ b |= 0x09;
+ break;
+ case 'A':
+ case 'a':
+ b |= 0x0A;
+ break;
+ case 'B':
+ case 'b':
+ b |= 0x0B;
+ break;
+ case 'C':
+ case 'c':
+ b |= 0x0C;
+ break;
+ case 'D':
+ case 'd':
+ b |= 0x0D;
+ break;
+ case 'E':
+ case 'e':
+ b |= 0x0E;
+ break;
+ case 'F':
+ case 'f':
+ b |= 0x0F;
+ break;
+ default:
+ final LocalizableMessage message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
+ new String(new char[] { c1, c2 }), c1);
+ throw DecodeException.error(message);
+ }
+ return (char) b;
+ }
+
+
+
+ private ByteString evaluateEscapes(final SubstringReader reader,
+ final char[] escapeChars, final boolean trim) throws DecodeException
+ {
+ return evaluateEscapes(reader, escapeChars, escapeChars, trim);
+ }
+
+
+
+ private ByteString evaluateEscapes(final SubstringReader reader,
+ final char[] escapeChars, final char[] delimiterChars, final boolean trim)
+ throws DecodeException
+ {
+ int length = 0;
+ int lengthWithoutSpace = 0;
+ char c;
+ ByteStringBuilder valueBuffer = null;
+
+ if (trim)
+ {
+ reader.skipWhitespaces();
+ }
+
+ reader.mark();
+ while (reader.remaining() > 0)
+ {
+ c = reader.read();
+ if (c == 0x5C) // The backslash character
+ {
+ if (valueBuffer == null)
+ {
+ valueBuffer = new ByteStringBuilder();
+ }
+ valueBuffer.append(reader.read(length));
+ valueBuffer.append(evaluateEscapedChar(reader, escapeChars));
+ reader.mark();
+ length = lengthWithoutSpace = 0;
+ }
+ if (delimiterChars != null)
+ {
+ for (final char delimiterChar : delimiterChars)
+ {
+ if (c == delimiterChar)
+ {
+ reader.reset();
+ if (valueBuffer != null)
+ {
+ if (trim)
+ {
+ valueBuffer.append(reader.read(lengthWithoutSpace));
+ }
+ else
+ {
+ valueBuffer.append(reader.read(length));
+ }
+ return valueBuffer.toByteString();
+ }
+ else
+ {
+ if (trim)
+ {
+ if (lengthWithoutSpace > 0)
+ {
+ return ByteString.valueOf(reader.read(lengthWithoutSpace));
+ }
+ return ByteString.empty();
+ }
+ if (length > 0)
+ {
+ return ByteString.valueOf(reader.read(length));
+ }
+ return ByteString.empty();
+ }
+ }
+ }
+ }
+ length++;
+ if (c != ' ')
+ {
+ lengthWithoutSpace = length;
+ }
+ else
+ {
+ lengthWithoutSpace++;
+ }
+ }
+
+ reader.reset();
+ if (valueBuffer != null)
+ {
+ if (trim)
+ {
+ valueBuffer.append(reader.read(lengthWithoutSpace));
+ }
+ else
+ {
+ valueBuffer.append(reader.read(length));
+ }
+ return valueBuffer.toByteString();
+ }
+ else
+ {
+ if (trim)
+ {
+ if (lengthWithoutSpace > 0)
+ {
+ return ByteString.valueOf(reader.read(lengthWithoutSpace));
+ }
+ return ByteString.empty();
+ }
+ if (length > 0)
+ {
+ return ByteString.valueOf(reader.read(length));
+ }
+ return ByteString.empty();
+ }
+ }
}
--
Gitblit v1.10.0