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/SchemaUtils.java | 341 +++++++++++++++++++++++++++++++++-----------------------
1 files changed, 198 insertions(+), 143 deletions(-)
diff --git a/sdk/src/org/opends/sdk/schema/SchemaUtils.java b/sdk/src/org/opends/sdk/schema/SchemaUtils.java
index 0f4b596..3730e62 100644
--- a/sdk/src/org/opends/sdk/schema/SchemaUtils.java
+++ b/sdk/src/org/opends/sdk/schema/SchemaUtils.java
@@ -29,7 +29,8 @@
import static com.sun.opends.sdk.messages.Messages.*;
-import static com.sun.opends.sdk.util.StaticUtils.*;
+import static com.sun.opends.sdk.util.StaticUtils.isAlpha;
+import static com.sun.opends.sdk.util.StaticUtils.isDigit;
import java.util.*;
@@ -46,11 +47,10 @@
final class SchemaUtils
{
/**
- * Reads the value for an "extra" parameter. It will handle a single
- * unquoted word (which is technically illegal, but we'll allow it), a
- * single quoted string, or an open parenthesis followed by a
- * space-delimited set of quoted strings or unquoted words followed by
- * a close parenthesis.
+ * Reads the value for an "extra" parameter. It will handle a single unquoted
+ * word (which is technically illegal, but we'll allow it), a single quoted
+ * string, or an open parenthesis followed by a space-delimited set of quoted
+ * strings or unquoted words followed by a close parenthesis.
*
* @param reader
* The string representation of the definition.
@@ -58,7 +58,7 @@
* @throws DecodeException
* If a problem occurs while attempting to read the value.
*/
- static List<String> readExtensions(SubstringReader reader)
+ static List<String> readExtensions(final SubstringReader reader)
throws DecodeException
{
int length = 0;
@@ -108,7 +108,9 @@
values.add(readQuotedString(reader));
reader.skipWhitespaces();
reader.mark();
- } while (reader.read() != ')');
+ }
+ while (reader.read() != ')');
+ values = Collections.unmodifiableList(values);
}
}
else
@@ -117,7 +119,8 @@
do
{
length++;
- } while (reader.read() != ' ');
+ }
+ while (reader.read() != ' ');
reader.reset();
values = Collections.singletonList(reader.read(length));
@@ -127,15 +130,14 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
- static List<String> readNameDescriptors(SubstringReader reader)
+ static List<String> readNameDescriptors(final SubstringReader reader)
throws DecodeException
{
int length = 0;
@@ -180,7 +182,9 @@
values.add(readQuotedDescriptor(reader));
reader.skipWhitespaces();
reader.mark();
- } while (reader.read() != ')');
+ }
+ while (reader.read() != ')');
+ values = Collections.unmodifiableList(values);
}
}
else
@@ -194,8 +198,7 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -203,18 +206,16 @@
/**
- * Reads the attribute description or numeric OID, skipping over any
- * leading or trailing spaces.
+ * Reads the attribute description or numeric OID, skipping over any leading
+ * or trailing spaces.
*
* @param reader
* The string representation of the definition.
- * @return The attribute description or numeric OID read from the
- * definition.
+ * @return The attribute description or numeric OID read from the definition.
* @throws DecodeException
- * If a problem is encountered while reading the name or
- * OID.
+ * If a problem is encountered while reading the name or OID.
*/
- static String readOID(SubstringReader reader) throws DecodeException
+ static String readOID(final SubstringReader reader) throws DecodeException
{
int length = 0;
boolean enclosingQuote = false;
@@ -249,8 +250,8 @@
// only digits and periods, but not consecutive periods.
boolean lastWasPeriod = false;
- while (reader.remaining() > 0 && (c = reader.read()) != ' '
- && c != ')' && !(c == '\'' && enclosingQuote))
+ while (reader.remaining() > 0 && (c = reader.read()) != ' ' && c != ')'
+ && !(c == '\'' && enclosingQuote))
{
if (c == '.')
{
@@ -293,8 +294,8 @@
// This must be an attribute description. In this case, we will
// only accept alphabetic characters, numeric digits, and the
// hyphen.
- while (reader.remaining() > 0 && (c = reader.read()) != ' '
- && c != ')' && !(c == '\'' && enclosingQuote))
+ while (reader.remaining() > 0 && (c = reader.read()) != ' ' && c != ')'
+ && !(c == '\'' && enclosingQuote))
{
if (length == 0 && !isAlpha(c))
{
@@ -304,8 +305,7 @@
throw DecodeException.error(message);
}
- if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '.'
- && c != '_')
+ if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '.' && c != '_')
{
// This is an illegal character.
final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
@@ -333,13 +333,12 @@
if (length == 0)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_OID_NO_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_OID_NO_VALUE.get();
throw DecodeException.error(message);
}
reader.reset();
- String oid = reader.read(length);
+ final String oid = reader.read(length);
if (enclosingQuote)
{
reader.read();
@@ -351,8 +350,8 @@
/**
- * Reads the next OID from the definition, skipping over any leading
- * spaces. The OID may be followed by a integer length in brackets.
+ * Reads the next OID from the definition, skipping over any leading spaces.
+ * The OID may be followed by a integer length in brackets.
*
* @param reader
* The string representation of the definition.
@@ -360,8 +359,7 @@
* @throws DecodeException
* If a problem is encountered while reading the token name.
*/
- static String readOIDLen(SubstringReader reader)
- throws DecodeException
+ static String readOIDLen(final SubstringReader reader) throws DecodeException
{
int length = 1;
boolean enclosingQuote = false;
@@ -426,8 +424,7 @@
if (length == 0)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_OID_NO_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_OID_NO_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -448,8 +445,7 @@
throw DecodeException.error(message);
}
- if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '.'
- && c != '_')
+ if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '.' && c != '_')
{
// This is an illegal character.
final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
@@ -502,15 +498,14 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
- static Set<String> readOIDs(SubstringReader reader)
+ static Set<String> readOIDs(final SubstringReader reader)
throws DecodeException
{
Set<String> values;
@@ -524,15 +519,16 @@
final char c = reader.read();
if (c == '(')
{
- values = new HashSet<String>();
-
+ values = new LinkedHashSet<String>();
do
{
values.add(readOID(reader));
// Skip over any trailing spaces;
reader.skipWhitespaces();
- } while (reader.read() != ')');
+ }
+ while (reader.read() != ')');
+ values = Collections.unmodifiableSet(values);
}
else
{
@@ -544,8 +540,7 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -553,87 +548,16 @@
/**
- * Reads the value of a string enclosed in single quotes, skipping
- * over the quotes and any leading spaces.
+ * Reads the value of a string enclosed in single quotes, skipping over the
+ * quotes and any leading spaces.
*
* @param reader
* The string representation of the definition.
* @return The string value read from the definition.
* @throws DecodeException
- * If a problem is encountered while reading the quoted
- * string.
+ * If a problem is encountered while reading the quoted string.
*/
- private static String readQuotedDescriptor(SubstringReader reader)
- throws DecodeException
- {
- int length = 0;
-
- // Skip over any spaces at the beginning of the value.
- reader.skipWhitespaces();
-
- try
- {
- // The next character must be a single quote.
- char c = reader.read();
- if (c != '\'')
- {
- final LocalizableMessage message = ERR_ATTR_SYNTAX_EXPECTED_QUOTE_AT_POS
- .get(reader.pos() - 1, String.valueOf(c));
- throw DecodeException.error(message);
- }
-
- // Read until we find the closing quote.
- reader.mark();
- while ((c = reader.read()) != '\'')
- {
- if (length == 0 && !isAlpha(c))
- {
- // This is an illegal character.
- final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
- .get(String.valueOf(c), reader.pos() - 1);
- throw DecodeException.error(message);
- }
-
- if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '_'
- && c != '.')
- {
- // This is an illegal character.
- final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
- .get(String.valueOf(c), reader.pos() - 1);
- throw DecodeException.error(message);
- }
-
- length++;
- }
-
- reader.reset();
-
- final String descr = reader.read(length);
- reader.read();
- return descr;
- }
- catch (final StringIndexOutOfBoundsException e)
- {
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
- throw DecodeException.error(message);
- }
- }
-
-
-
- /**
- * Reads the value of a string enclosed in single quotes, skipping
- * over the quotes and any leading spaces.
- *
- * @param reader
- * The string representation of the definition.
- * @return The string value read from the definition.
- * @throws DecodeException
- * If a problem is encountered while reading the quoted
- * string.
- */
- static String readQuotedString(SubstringReader reader)
+ static String readQuotedString(final SubstringReader reader)
throws DecodeException
{
int length = 0;
@@ -667,8 +591,7 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -676,8 +599,8 @@
/**
- * Reads the next ruleid from the definition, skipping over any
- * leading spaces.
+ * Reads the next ruleid from the definition, skipping over any leading
+ * spaces.
*
* @param reader
* The string representation of the definition.
@@ -685,7 +608,7 @@
* @throws DecodeException
* If a problem is encountered while reading the token name.
*/
- static Integer readRuleID(SubstringReader reader)
+ static Integer readRuleID(final SubstringReader reader)
throws DecodeException
{
// This must be a ruleid. In that case, we will accept
@@ -726,15 +649,14 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
- static Set<Integer> readRuleIDs(SubstringReader reader)
+ static Set<Integer> readRuleIDs(final SubstringReader reader)
throws DecodeException
{
Set<Integer> values;
@@ -748,15 +670,16 @@
final char c = reader.read();
if (c == '(')
{
- values = new HashSet<Integer>();
-
+ values = new LinkedHashSet<Integer>();
do
{
values.add(readRuleID(reader));
// Skip over any trailing spaces;
reader.skipWhitespaces();
- } while (reader.read() != ')');
+ }
+ while (reader.read() != ')');
+ values = Collections.unmodifiableSet(values);
}
else
{
@@ -768,8 +691,7 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -777,18 +699,16 @@
/**
- * Reads the next token name from the definition, skipping over any
- * leading or trailing spaces or <code>null</code> if there are no
- * more tokens to read.
+ * Reads the next token name from the definition, skipping over any leading or
+ * trailing spaces or <code>null</code> if there are no more tokens to read.
*
* @param reader
* The string representation of the definition.
- * @return The token name read from the definition or
- * <code>null</code> .
+ * @return The token name read from the definition or <code>null</code> .
* @throws DecodeException
* If a problem is encountered while reading the token name.
*/
- static String readTokenName(SubstringReader reader)
+ static String readTokenName(final SubstringReader reader)
throws DecodeException
{
String token = null;
@@ -827,8 +747,142 @@
}
catch (final StringIndexOutOfBoundsException e)
{
- final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE
- .get();
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
+ throw DecodeException.error(message);
+ }
+ }
+
+
+
+ /**
+ * Returns an unmodifiable copy of the provided schema element extra
+ * properties.
+ *
+ * @param extraProperties
+ * The schema element extra properties.
+ * @return An unmodifiable copy of the provided schema element extra
+ * properties.
+ */
+ static Map<String, List<String>> unmodifiableCopyOfExtraProperties(
+ final Map<String, List<String>> extraProperties)
+ {
+ if (extraProperties == null || extraProperties.isEmpty())
+ {
+ return Collections.emptyMap();
+ }
+ else
+ {
+ final Map<String, List<String>> tmp = new LinkedHashMap<String, List<String>>(
+ extraProperties.size());
+ for (final Map.Entry<String, List<String>> e : extraProperties.entrySet())
+ {
+ tmp.put(e.getKey(), unmodifiableCopyOfList(e.getValue()));
+ }
+ return Collections.unmodifiableMap(tmp);
+ }
+ }
+
+
+
+ static <E> List<E> unmodifiableCopyOfList(final List<E> l)
+ {
+ if (l == null || l.isEmpty())
+ {
+ return Collections.emptyList();
+ }
+ else if (l.size() == 1)
+ {
+ return Collections.singletonList(l.get(0));
+ }
+ else
+ {
+ final List<E> copy = new LinkedList<E>(l);
+ return Collections.unmodifiableList(copy);
+ }
+ }
+
+
+
+ static <E> Set<E> unmodifiableCopyOfSet(final Set<E> s)
+ {
+ if (s == null || s.isEmpty())
+ {
+ return Collections.emptySet();
+ }
+ else if (s.size() == 1)
+ {
+ return Collections.singleton(s.iterator().next());
+ }
+ else
+ {
+ final Set<E> copy = new LinkedHashSet<E>(s);
+ return Collections.unmodifiableSet(copy);
+ }
+ }
+
+
+
+ /**
+ * Reads the value of a string enclosed in single quotes, skipping over the
+ * quotes and any leading spaces.
+ *
+ * @param reader
+ * The string representation of the definition.
+ * @return The string value read from the definition.
+ * @throws DecodeException
+ * If a problem is encountered while reading the quoted string.
+ */
+ private static String readQuotedDescriptor(final SubstringReader reader)
+ throws DecodeException
+ {
+ int length = 0;
+
+ // Skip over any spaces at the beginning of the value.
+ reader.skipWhitespaces();
+
+ try
+ {
+ // The next character must be a single quote.
+ char c = reader.read();
+ if (c != '\'')
+ {
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_EXPECTED_QUOTE_AT_POS
+ .get(reader.pos() - 1, String.valueOf(c));
+ throw DecodeException.error(message);
+ }
+
+ // Read until we find the closing quote.
+ reader.mark();
+ while ((c = reader.read()) != '\'')
+ {
+ if (length == 0 && !isAlpha(c))
+ {
+ // This is an illegal character.
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
+ .get(String.valueOf(c), reader.pos() - 1);
+ throw DecodeException.error(message);
+ }
+
+ if (!isAlpha(c) && !isDigit(c) && c != '-' && c != '_' && c != '.')
+ {
+ // This is an illegal character.
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_CHAR_IN_STRING_OID
+ .get(String.valueOf(c), reader.pos() - 1);
+ throw DecodeException.error(message);
+ }
+
+ length++;
+ }
+
+ reader.reset();
+
+ final String descr = reader.read(length);
+ reader.read();
+ return descr;
+ }
+ catch (final StringIndexOutOfBoundsException e)
+ {
+ final LocalizableMessage message = ERR_ATTR_SYNTAX_TRUNCATED_VALUE.get();
throw DecodeException.error(message);
}
}
@@ -840,4 +894,5 @@
{
// Nothing to do.
}
+
}
--
Gitblit v1.10.0