| | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigChangeResult; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.AVA; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.IndexType; |
| | | import org.opends.server.types.Modification; |
| | | import org.opends.server.types.RDN; |
| | | import org.opends.server.types.SearchFilter; |
| | | import org.opends.server.types.SearchResultEntry; |
| | | import org.opends.server.types.operation.PluginOperation; |
| | |
| | | { |
| | | Attribute a = m.getAttribute(); |
| | | AttributeType t = a.getAttributeDescription().getAttributeType(); |
| | | if (! config.getType().contains(t)) |
| | | if (!isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // This modification isn't for a unique attribute. |
| | | continue; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | List<ByteString> recordedValues = new LinkedList<>(); |
| | | RDN newRDN = modifyDNOperation.getNewRDN(); |
| | | for (int i=0; i < newRDN.getNumValues(); i++) |
| | | for (AVA ava : modifyDNOperation.getNewRDN()) |
| | | { |
| | | AttributeType t = newRDN.getAttributeType(i); |
| | | if (! config.getType().contains(t)) |
| | | AttributeType t = ava.getAttributeType(); |
| | | if (!isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // We aren't interested in this attribute type. |
| | | continue; |
| | | } |
| | | |
| | | ByteString v = newRDN.getAttributeValue(i); |
| | | ByteString v = ava.getAttributeValue(); |
| | | DN entryDN = modifyDNOperation.getEntryDN(); |
| | | PreOperation stop = |
| | | checkUniqueness(entryDN, t, v, baseDNs, recordedValues, config); |
| | |
| | | return PluginResult.PreOperation.continueOperationProcessing(); |
| | | } |
| | | |
| | | private boolean isModifyingUniqueAttribute(AttributeType t, UniqueAttributePluginCfg config) |
| | | { |
| | | return config.getType().contains(t); |
| | | } |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public final void doPostSynchronization( |
| | | PostSynchronizationAddOperation addOperation) |
| | |
| | | { |
| | | Attribute a = m.getAttribute(); |
| | | AttributeType t = a.getAttributeDescription().getAttributeType(); |
| | | if (! config.getType().contains(t)) |
| | | if (!isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // This modification isn't for a unique attribute. |
| | | continue; |
| | | } |
| | | |
| | |
| | | |
| | | DN entryDN = modifyDNOperation.getEntryDN(); |
| | | DN updatedEntryDN = modifyDNOperation.getUpdatedEntry().getName(); |
| | | RDN newRDN = modifyDNOperation.getNewRDN(); |
| | | for (int i=0; i < newRDN.getNumValues(); i++) |
| | | for (AVA ava : modifyDNOperation.getNewRDN()) |
| | | { |
| | | AttributeType t = newRDN.getAttributeType(i); |
| | | if (! config.getType().contains(t)) |
| | | AttributeType t = ava.getAttributeType(); |
| | | if (isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // We aren't interested in this attribute type. |
| | | continue; |
| | | ByteString v = ava.getAttributeValue(); |
| | | sendAlertForUnresolvedConflict(modifyDNOperation, entryDN, updatedEntryDN, t, v, baseDNs, config); |
| | | } |
| | | |
| | | ByteString v = newRDN.getAttributeValue(i); |
| | | sendAlertForUnresolvedConflict(modifyDNOperation, entryDN, |
| | | updatedEntryDN, t, v, baseDNs, config); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | Attribute a = m.getAttribute(); |
| | | AttributeType t = a.getAttributeDescription().getAttributeType(); |
| | | if (! config.getType().contains(t)) |
| | | if (!isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // This modification isn't for a unique attribute. |
| | | continue; |
| | | } |
| | | |
| | |
| | | return PostOperation.continueOperationProcessing(); |
| | | } |
| | | |
| | | RDN newRDN = modifyDNOperation.getNewRDN(); |
| | | for (int i=0; i < newRDN.getNumValues(); i++) |
| | | for (AVA ava : modifyDNOperation.getNewRDN()) |
| | | { |
| | | AttributeType t = newRDN.getAttributeType(i); |
| | | if (! config.getType().contains(t)) |
| | | AttributeType t = ava.getAttributeType(); |
| | | if (isModifyingUniqueAttribute(t, config)) |
| | | { |
| | | // We aren't interested in this attribute type. |
| | | continue; |
| | | uniqueAttrValue2Dn.remove(ava.getAttributeValue()); |
| | | } |
| | | uniqueAttrValue2Dn.remove(newRDN.getAttributeValue(i)); |
| | | } |
| | | return PostOperation.continueOperationProcessing(); |
| | | } |