using System;
namespace Unosquare.Swan.Networking.Ldap {
///
/// A single add, delete, or replace operation to an LdapAttribute.
/// An LdapModification contains information on the type of modification
/// being performed, the name of the attribute to be replaced, and the new
/// value. Multiple modifications are expressed as an array of modifications,
/// i.e., LdapModification[].
/// An LdapModification or an LdapModification array enable you to modify
/// an attribute of an Ldap entry. The entire array of modifications must
/// be performed by the server as a single atomic operation in the order they
/// are listed. No changes are made to the directory unless all the operations
/// succeed. If all succeed, a success result is returned to the application.
/// It should be noted that if the connection fails during a modification,
/// it is indeterminate whether the modification occurred or not.
/// There are three types of modification operations: Add, Delete,
/// and Replace.
/// Add: Creates the attribute if it doesn't exist, and adds
/// the specified values. This operation must contain at least one value, and
/// all values of the attribute must be unique.
/// Delete: Deletes specified values from the attribute. If no
/// values are specified, or if all existing values of the attribute are
/// specified, the attribute is removed. Mandatory attributes cannot be
/// removed.
/// Replace: Creates the attribute if necessary, and replaces
/// all existing values of the attribute with the specified values.
/// If you wish to keep any existing values of a multi-valued attribute,
/// you must include these values in the replace operation.
/// A replace operation with no value will remove the entire attribute if it
/// exists, and is ignored if the attribute does not exist.
/// Additional information on Ldap modifications is available in section 4.6
/// of. rfc2251.txt
///
///
///
public sealed class LdapModification : LdapMessage {
///
/// Initializes a new instance of the class.
/// Specifies a modification to be made to an attribute.
///
/// The op.
/// The attribute to modify.
public LdapModification(LdapModificationOp op, LdapAttribute attr) {
this.Op = op;
this.Attribute = attr;
}
///
/// Initializes a new instance of the class.
///
/// The op.
/// Name of the attribute.
/// The attribute value.
public LdapModification(LdapModificationOp op, String attrName, String attrValue)
: this(op, new LdapAttribute(attrName, attrValue)) {
// placeholder
}
///
/// Returns the attribute to modify, with any existing values.
///
///
/// The attribute.
///
public LdapAttribute Attribute {
get;
}
///
/// Returns the type of modification specified by this object.
///
///
/// The op.
///
public LdapModificationOp Op {
get;
}
}
}