From 59685c84348f8d71dc3bbd3513c5eb10cc738a8e Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 03 Nov 2006 16:39:22 +0000
Subject: [PATCH] Refactor DN and RDN classes and improve their test coverage.
---
opends/src/server/org/opends/server/util/StaticUtils.java | 103 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 75 insertions(+), 28 deletions(-)
diff --git a/opends/src/server/org/opends/server/util/StaticUtils.java b/opends/src/server/org/opends/server/util/StaticUtils.java
index b886c7e..d14109b 100644
--- a/opends/src/server/org/opends/server/util/StaticUtils.java
+++ b/opends/src/server/org/opends/server/util/StaticUtils.java
@@ -1273,15 +1273,59 @@
/**
- * Indicates whether the two array lists are equal. They will be considered
- * equal if they have the same number of elements, and the corresponding
- * elements between them are equal (in the same order).
+ * Compare two byte arrays for order. Returns a negative integer,
+ * zero, or a positive integer as the first argument is less than,
+ * equal to, or greater than the second.
*
- * @param list1 The first list for which to make the determination.
- * @param list2 The second list for which to make the determination.
+ * @param a
+ * The first byte array to be compared.
+ * @param a2
+ * The second byte array to be compared.
+ * @return Returns a negative integer, zero, or a positive integer
+ * if the first byte array is less than, equal to, or greater
+ * than the second.
+ */
+ public static int compare(byte[] a, byte[] a2) {
+ if (a == a2) {
+ return 0;
+ }
+
+ if (a == null) {
+ return -1;
+ }
+
+ if (a2 == null) {
+ return 1;
+ }
+
+ int minLength = Math.min(a.length, a2.length);
+ for (int i = 0; i < minLength; i++) {
+ if (a[i] != a2[i]) {
+ if (a[i] < a2[i]) {
+ return -1;
+ } else if (a[i] > a2[i]) {
+ return 1;
+ }
+ }
+ }
+
+ return (a.length - a2.length);
+ }
+
+
+
+ /**
+ * Indicates whether the two array lists are equal. They will be
+ * considered equal if they have the same number of elements, and
+ * the corresponding elements between them are equal (in the same
+ * order).
*
- * @return <CODE>true</CODE> if the two array lists are equal, or
- * <CODE>false</CODE> if they are not.
+ * @param list1
+ * The first list for which to make the determination.
+ * @param list2
+ * The second list for which to make the determination.
+ * @return <CODE>true</CODE> if the two array lists are equal, or
+ * <CODE>false</CODE> if they are not.
*/
public static boolean listsAreEqual(List list1, List list2)
{
@@ -3259,29 +3303,28 @@
// Get the information about the RDN attributes.
RDN rdn = dn.getRDN();
- AttributeType[] rdnTypes = rdn.getAttributeTypes();
- String[] rdnNames = rdn.getAttributeNames();
- AttributeValue[] rdnValues = rdn.getAttributeValues();
-
+ int numAVAs = rdn.getNumValues();
// If there is only one RDN attribute, then see which objectclass we should
// use.
ObjectClass structuralClass;
- if (rdnTypes.length == 1)
+ if (numAVAs == 1)
{
- if (rdnTypes[0].hasName(ATTR_C))
+ AttributeType attrType = rdn.getAttributeType(0);
+
+ if (attrType.hasName(ATTR_C))
{
structuralClass = DirectoryServer.getObjectClass(OC_COUNTRY, true);
}
- else if (rdnTypes[0].hasName(ATTR_DC))
+ else if (attrType.hasName(ATTR_DC))
{
structuralClass = DirectoryServer.getObjectClass(OC_DOMAIN, true);
}
- else if (rdnTypes[0].hasName(ATTR_O))
+ else if (attrType.hasName(ATTR_O))
{
structuralClass = DirectoryServer.getObjectClass(OC_ORGANIZATION, true);
}
- else if (rdnTypes[0].hasName(ATTR_OU))
+ else if (attrType.hasName(ATTR_OU))
{
structuralClass =
DirectoryServer.getObjectClass(OC_ORGANIZATIONAL_UNIT_LC, true);
@@ -3315,11 +3358,15 @@
new LinkedHashMap<AttributeType,List<Attribute>>();
boolean extensibleObjectAdded = false;
- for (int i=0; i < rdnTypes.length; i++)
+ for (int i=0; i < numAVAs; i++)
{
+ AttributeType attrType = rdn.getAttributeType(i);
+ AttributeValue attrValue = rdn.getAttributeValue(i);
+ String attrName = rdn.getAttributeName(i);
+
// First, see if this type is allowed by the untypedObject class. If not,
// then we'll need to include the extensibleObject class.
- if ((! structuralClass.isRequiredOrOptional(rdnTypes[i])) &&
+ if ((! structuralClass.isRequiredOrOptional(attrType)) &&
(! extensibleObjectAdded))
{
ObjectClass extensibleObjectOC =
@@ -3337,36 +3384,36 @@
// Create the attribute and add it to the appropriate map.
LinkedHashSet<AttributeValue> valueSet =
new LinkedHashSet<AttributeValue>(1);
- valueSet.add(rdnValues[i]);
+ valueSet.add(attrValue);
- if (rdnTypes[i].isOperational())
+ if (attrType.isOperational())
{
- List<Attribute> attrList = operationalAttributes.get(rdnTypes[i]);
+ List<Attribute> attrList = operationalAttributes.get(attrType);
if ((attrList == null) || attrList.isEmpty())
{
attrList = new ArrayList<Attribute>(1);
- attrList.add(new Attribute(rdnTypes[i], rdnNames[i], valueSet));
- operationalAttributes.put(rdnTypes[i], attrList);
+ attrList.add(new Attribute(attrType, attrName, valueSet));
+ operationalAttributes.put(attrType, attrList);
}
else
{
Attribute attr = attrList.get(0);
- attr.getValues().add(rdnValues[i]);
+ attr.getValues().add(attrValue);
}
}
else
{
- List<Attribute> attrList = userAttributes.get(rdnTypes[i]);
+ List<Attribute> attrList = userAttributes.get(attrType);
if ((attrList == null) || attrList.isEmpty())
{
attrList = new ArrayList<Attribute>(1);
- attrList.add(new Attribute(rdnTypes[i], rdnNames[i], valueSet));
- userAttributes.put(rdnTypes[i], attrList);
+ attrList.add(new Attribute(attrType, attrName, valueSet));
+ userAttributes.put(attrType, attrList);
}
else
{
Attribute attr = attrList.get(0);
- attr.getValues().add(rdnValues[i]);
+ attr.getValues().add(attrValue);
}
}
}
--
Gitblit v1.10.0