| | |
| | | */ |
| | | package org.opends.server.extensions; |
| | | |
| | | import java.util.*; |
| | | import java.util.List; |
| | | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | |
| | | |
| | | /** {@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) |
| | |
| | | logger.traceException(e); |
| | | } |
| | | } |
| | | |
| | | if (values != null) |
| | | { |
| | | return Collections.unmodifiableSet(values); |
| | | } |
| | | return Collections.emptySet(); |
| | | return builder.toAttribute(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | /** {@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); |
| | | } |
| | |
| | | |
| | | /** {@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, |
| | |
| | | @Override() |
| | | public ConditionResult greaterThanOrEqualTo(Entry entry, |
| | | VirtualAttributeRule rule, |
| | | AttributeValue value) |
| | | ByteString value) |
| | | { |
| | | // DNs cannot be used in ordering matching. |
| | | return ConditionResult.UNDEFINED; |
| | |
| | | @Override() |
| | | public ConditionResult lessThanOrEqualTo(Entry entry, |
| | | VirtualAttributeRule rule, |
| | | AttributeValue value) |
| | | ByteString value) |
| | | { |
| | | // DNs cannot be used in ordering matching. |
| | | return ConditionResult.UNDEFINED; |
| | |
| | | @Override() |
| | | public ConditionResult approximatelyEqualTo(Entry entry, |
| | | VirtualAttributeRule rule, |
| | | AttributeValue value) |
| | | ByteString value) |
| | | { |
| | | // DNs cannot be used in approximate matching. |
| | | return ConditionResult.UNDEFINED; |
| | |
| | | { |
| | | try |
| | | { |
| | | DN dn = DN.decode(filter.getAssertionValue().getValue()); |
| | | DN dn = DN.decode(filter.getAssertionValue()); |
| | | return DirectoryServer.getGroupManager().getGroupInstance(dn); |
| | | } |
| | | catch (Exception e) |