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

Jean-Noel Rouvignac
19.30.2014 377b2709c64b32fe93905b466482216c2cc0581c
opendj3-server-dev/src/server/org/opends/server/extensions/IsMemberOfVirtualAttributeProvider.java
@@ -26,7 +26,7 @@
 */
package org.opends.server.extensions;
import java.util.*;
import java.util.List;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteString;
@@ -71,34 +71,17 @@
  /** {@inheritDoc} */
  @Override()
  public Set<AttributeValue> getValues(Entry entry,
                                       VirtualAttributeRule rule)
  public Attribute getValues(Entry entry, VirtualAttributeRule rule)
  {
    // FIXME -- This probably isn't the most efficient implementation.
    Set<AttributeValue> values = null;
    AttributeBuilder builder = new AttributeBuilder(rule.getAttributeType());
    for (Group<?> g : DirectoryServer.getGroupManager().getGroupInstances())
    {
      try
      {
        if (g.isMember(entry))
        {
          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);
          }
          builder.add(g.getGroupDN().toString());
        }
      }
      catch (Exception e)
@@ -106,12 +89,7 @@
        logger.traceException(e);
      }
    }
    if (values != null)
    {
      return Collections.unmodifiableSet(values);
    }
    return Collections.emptySet();
    return builder.toAttribute();
  }
  /** {@inheritDoc} */
@@ -140,11 +118,11 @@
  /** {@inheritDoc} */
  @Override()
  public boolean hasValue(Entry entry, VirtualAttributeRule rule,
                          AttributeValue value)
                          ByteString value)
  {
    try
    {
      DN groupDN = DN.decode(value.getValue());
      DN groupDN = DN.decode(value);
      Group<?> g = DirectoryServer.getGroupManager().getGroupInstance(groupDN);
      return g != null && g.isMember(entry);
    }
@@ -158,22 +136,6 @@
  /** {@inheritDoc} */
  @Override()
  public boolean hasAnyValue(Entry entry, VirtualAttributeRule rule,
                             Collection<AttributeValue> values)
  {
    for (AttributeValue value : values)
    {
      if (hasValue(entry, rule, value))
      {
        return true;
      }
    }
    return false;
  }
  /** {@inheritDoc} */
  @Override()
  public ConditionResult matchesSubstring(Entry entry,
                                          VirtualAttributeRule rule,
                                          ByteString subInitial,
@@ -188,7 +150,7 @@
  @Override()
  public ConditionResult greaterThanOrEqualTo(Entry entry,
                              VirtualAttributeRule rule,
                              AttributeValue value)
                              ByteString value)
  {
    // DNs cannot be used in ordering matching.
    return ConditionResult.UNDEFINED;
@@ -198,7 +160,7 @@
  @Override()
  public ConditionResult lessThanOrEqualTo(Entry entry,
                              VirtualAttributeRule rule,
                              AttributeValue value)
                              ByteString value)
  {
    // DNs cannot be used in ordering matching.
    return ConditionResult.UNDEFINED;
@@ -208,7 +170,7 @@
  @Override()
  public ConditionResult approximatelyEqualTo(Entry entry,
                              VirtualAttributeRule rule,
                              AttributeValue value)
                              ByteString value)
  {
    // DNs cannot be used in approximate matching.
    return ConditionResult.UNDEFINED;
@@ -354,7 +316,7 @@
        {
          try
          {
            DN dn = DN.decode(filter.getAssertionValue().getValue());
            DN dn = DN.decode(filter.getAssertionValue());
            return DirectoryServer.getGroupManager().getGroupInstance(dn);
          }
          catch (Exception e)