| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions Copyright 2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.backends.jeb; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.opends.server.types.Attribute; |
| | | import org.opends.server.types.AttributeType; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.Modification; |
| | | import org.opends.server.types.AttributeType; |
| | | |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * An implementation of an Indexer for attribute presence. |
| | |
| | | public class PresenceIndexer extends Indexer |
| | | { |
| | | |
| | | |
| | | /** |
| | | * The comparator for index keys generated by this class. |
| | | */ |
| | | private static final Comparator<byte[]> comparator = |
| | | new AttributeIndex.KeyComparator(); |
| | | |
| | | /** |
| | | * The attribute type for which this instance will |
| | | * generate index keys. |
| | |
| | | * Get a string representation of this object. |
| | | * @return A string representation of this object. |
| | | */ |
| | | @Override |
| | | public String toString() |
| | | { |
| | | return attributeType.getNameOrOID() + ".presence"; |
| | | } |
| | | |
| | | /** |
| | | * Get the comparator that must be used to compare index keys |
| | | * generated by this class. |
| | | * |
| | | * @return A byte array comparator. |
| | | */ |
| | | public Comparator<byte[]> getComparator() |
| | | { |
| | | return comparator; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Generate the set of index keys for an entry. |
| | | * |
| | | * @param entry The entry. |
| | | * @param keys The set into which the generated keys will be inserted. |
| | | */ |
| | | public void indexEntry(Entry entry, Set<byte[]> keys) |
| | | @Override |
| | | public void indexEntry(Entry entry, Set<ByteString> keys) |
| | | { |
| | | List<Attribute> attrList = |
| | | entry.getAttribute(attributeType); |
| | |
| | | { |
| | | if (!attrList.isEmpty()) |
| | | { |
| | | keys.add(AttributeIndex.presenceKey.getData()); |
| | | keys.add(getPresenceKeyData()); |
| | | } |
| | | } |
| | | } |
| | |
| | | * @param newEntry The new entry contents. |
| | | * @param modifiedKeys The map into which the modified keys will be inserted. |
| | | */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | Map<byte[], Boolean> modifiedKeys) |
| | | Map<ByteString, Boolean> modifiedKeys) |
| | | { |
| | | List<Attribute> newAttributes = newEntry.getAttribute(attributeType, true); |
| | | List<Attribute> oldAttributes = oldEntry.getAttribute(attributeType, true); |
| | |
| | | { |
| | | if(newAttributes != null) |
| | | { |
| | | modifiedKeys.put(AttributeIndex.presenceKey.getData(), true); |
| | | modifiedKeys.put(getPresenceKeyData(), true); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if(newAttributes == null) |
| | | { |
| | | modifiedKeys.put(AttributeIndex.presenceKey.getData(), false); |
| | | modifiedKeys.put(getPresenceKeyData(), false); |
| | | } |
| | | } |
| | | } |
| | |
| | | * @param mods The set of modifications that were applied to the entry. |
| | | * @param modifiedKeys The map into which the modified keys will be inserted. |
| | | */ |
| | | @Override |
| | | public void modifyEntry(Entry oldEntry, Entry newEntry, |
| | | List<Modification> mods, |
| | | Map<byte[], Boolean> modifiedKeys) |
| | | Map<ByteString, Boolean> modifiedKeys) |
| | | { |
| | | List<Attribute> newAttributes = newEntry.getAttribute(attributeType, true); |
| | | List<Attribute> oldAttributes = oldEntry.getAttribute(attributeType, true); |
| | |
| | | { |
| | | if(newAttributes != null) |
| | | { |
| | | modifiedKeys.put(AttributeIndex.presenceKey.getData(), true); |
| | | modifiedKeys.put(getPresenceKeyData(), true); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if(newAttributes == null) |
| | | { |
| | | modifiedKeys.put(AttributeIndex.presenceKey.getData(), false); |
| | | modifiedKeys.put(getPresenceKeyData(), false); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private ByteString getPresenceKeyData() |
| | | { |
| | | return ByteString.wrap(AttributeIndex.presenceKey.getData()); |
| | | } |
| | | } |