From be2ed817814e6520d4959104a25347d0d62c8ce9 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 13 Sep 2011 10:42:27 +0000
Subject: [PATCH] Minor cleanup of some virtual attribute providers:
---
opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java | 44 ++++++++++++++++++++++++++++++++++----------
1 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java b/opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java
index b2c7985..23a522a 100644
--- a/opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java
+++ b/opends/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java
@@ -23,6 +23,7 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
+ * Portions copyright 2011 ForgeRock AS
*/
package org.opends.server.extensions;
@@ -106,15 +107,30 @@
VirtualAttributeRule rule)
{
// FIXME -- This probably isn't the most efficient implementation.
- HashSet<AttributeValue> values = new HashSet<AttributeValue>();
- for (Group g : DirectoryServer.getGroupManager().getGroupInstances())
+ Set<AttributeValue> values = null;
+ for (Group<?> g : DirectoryServer.getGroupManager().getGroupInstances())
{
try
{
if (g.isMember(entry))
{
- values.add(AttributeValues.create(rule.getAttributeType(),
- g.getGroupDN().toString()));
+ AttributeValue value = AttributeValues.create(
+ rule.getAttributeType(), g.getGroupDN().toString());
+ if (values == null)
+ {
+ values = Collections.singleton(value);
+ }
+ else if (values.size() == 1)
+ {
+ Set<AttributeValue> tmp = new HashSet<AttributeValue>(2);
+ tmp.addAll(values);
+ tmp.add(value);
+ values = tmp;
+ }
+ else
+ {
+ values.add(value);
+ }
}
}
catch (Exception e)
@@ -126,7 +142,14 @@
}
}
- return Collections.unmodifiableSet(values);
+ if (values == null)
+ {
+ return Collections.emptySet();
+ }
+ else
+ {
+ return Collections.unmodifiableSet(values);
+ }
}
@@ -138,7 +161,7 @@
public boolean hasValue(Entry entry, VirtualAttributeRule rule)
{
// FIXME -- This probably isn't the most efficient implementation.
- for (Group g : DirectoryServer.getGroupManager().getGroupInstances())
+ for (Group<?> g : DirectoryServer.getGroupManager().getGroupInstances())
{
try
{
@@ -171,7 +194,7 @@
try
{
DN groupDN = DN.decode(value.getValue());
- Group g = DirectoryServer.getGroupManager().getGroupInstance(groupDN);
+ Group<?> g = DirectoryServer.getGroupManager().getGroupInstance(groupDN);
if (g == null)
{
return false;
@@ -344,7 +367,7 @@
SearchOperation searchOperation)
{
SearchFilter filter = searchOperation.getFilter();
- Group group = extractGroup(rule.getAttributeType(), filter);
+ Group<?> group = extractGroup(rule.getAttributeType(), filter);
if (group == null)
{
return;
@@ -393,14 +416,15 @@
* @return The first group encountered in the provided filter, or
* {@code null} if there is no match.
*/
- private Group extractGroup(AttributeType attributeType, SearchFilter filter)
+ private Group<?> extractGroup(AttributeType attributeType,
+ SearchFilter filter)
{
switch (filter.getFilterType())
{
case AND:
for (SearchFilter f : filter.getFilterComponents())
{
- Group g = extractGroup(attributeType, f);
+ Group<?> g = extractGroup(attributeType, f);
if (g != null)
{
return g;
--
Gitblit v1.10.0