All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.unboundid.ldap.sdk.unboundidds.controls.UniquenessRequestControlProperties Maven / Gradle / Ivy

/*
 * Copyright 2017-2019 Ping Identity Corporation
 * All Rights Reserved.
 */
/*
 * Copyright (C) 2017-2019 Ping Identity Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License (GPLv2 only)
 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see .
 */
package com.unboundid.ldap.sdk.unboundidds.controls;



import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

import com.unboundid.ldap.sdk.Filter;
import com.unboundid.util.Mutable;
import com.unboundid.util.StaticUtils;
import com.unboundid.util.ThreadSafety;
import com.unboundid.util.ThreadSafetyLevel;
import com.unboundid.util.Validator;



/**
 * This class provides a data structure that holds a set of properties for use
 * in conjunction with the {@link UniquenessRequestControl}.
 * 
*
* NOTE: This class, and other classes within the * {@code com.unboundid.ldap.sdk.unboundidds} package structure, are only * supported for use against Ping Identity, UnboundID, and * Nokia/Alcatel-Lucent 8661 server products. These classes provide support * for proprietary functionality or for external specifications that are not * considered stable or mature enough to be guaranteed to work in an * interoperable way with other types of LDAP servers. *
*
* The control must be created with either a set of attribute types or a filter * (or both). See the {@link UniquenessRequestControl} class-level * documentation for details about how the server will behave if either or both * of these values are provided. *

* The following default values will be used for properties that are not * specified: *
    *
  • * An empty set of attribute types. *
  • *
  • * A multiple attribute behavior of * {@link UniquenessMultipleAttributeBehavior#UNIQUE_WITHIN_EACH_ATTRIBUTE}. *
  • *
  • * No base DN. *
  • *
  • * No filter. *
  • *
  • * The control will not prevent conflicts with soft-deleted entries. *
  • *
  • * A pre-commit validation level of * {@link UniquenessValidationLevel#ALL_SUBTREE_VIEWS}. *
  • *
  • * A post-commit validation level of * {@link UniquenessValidationLevel#ALL_SUBTREE_VIEWS}. *
  • *
*/ @Mutable() @ThreadSafety(level=ThreadSafetyLevel.NOT_THREADSAFE) public final class UniquenessRequestControlProperties implements Serializable { /** * The serial version UID for this serializable class. */ private static final long serialVersionUID = 4330352906527176309L; // Indicates whether to prevent conflicts with soft-deleted entries. private boolean preventConflictsWithSoftDeletedEntries = false; // An optional filter that should be used in the course of identifying // uniqueness conflicts. private Filter filter = null; // A potentially-empty set of attribute types that should be checked for // uniqueness conflicts. private Set attributeTypes = Collections.emptySet(); // An optional base DN to use when checking for conflicts. private String baseDN = null; // The behavior that the server should exhibit if multiple attribute types // are configured. private UniquenessMultipleAttributeBehavior multipleAttributeBehavior = UniquenessMultipleAttributeBehavior.UNIQUE_WITHIN_EACH_ATTRIBUTE; // The level of validation that the server should perform before processing // the associated change. private UniquenessValidationLevel postCommitValidationLevel = UniquenessValidationLevel.ALL_SUBTREE_VIEWS; // The level of validation that the server should perform after processing the // associated change. private UniquenessValidationLevel preCommitValidationLevel = UniquenessValidationLevel.ALL_SUBTREE_VIEWS; /** * Creates a new instance of this uniqueness request control properties object * with no attribute types and all default values. This is primarily intended * for supporting deserialization, since it will not include any . */ private UniquenessRequestControlProperties() { // No implementation is required. } /** * Creates a new instance of this uniqueness request control properties object * with the provided set of attribute types and default values for all other * properties as specified in the class-level javadoc documentation. * * @param attributeTypes The set of attribute types that the server will * check for uniqueness conflicts. It must not be * {@code null} or empty. The server should be * configured with equality indexes for each of these * attribute types. */ public UniquenessRequestControlProperties(final String... attributeTypes) { this(); Validator.ensureTrue( ((attributeTypes != null) && (attributeTypes.length > 0)), "The set of attribute types must not be null or empty."); this.attributeTypes = Collections.unmodifiableSet(new LinkedHashSet<>( StaticUtils.toList(attributeTypes))); } /** * Creates a new instance of this uniqueness request control properties object * with the provided set of attribute types and default values for all other * properties as specified in the class-level javadoc documentation. * * @param attributeTypes The set of attribute types that the server will * check for uniqueness conflicts. It must not be * {@code null} or empty. The server should be * configured with equality indexes for each of these * attribute types. */ public UniquenessRequestControlProperties( final Collection attributeTypes) { this(); Validator.ensureTrue( ((attributeTypes != null) && (! attributeTypes.isEmpty())), "The set of attribute types must not be null or empty."); this.attributeTypes = Collections.unmodifiableSet(new LinkedHashSet<>(attributeTypes)); } /** * Creates a new instance of this uniqueness request control properties object * with the provided filter and default values for all other properties as * specified in the class-level javadoc documentation. * * @param filter The filter that the server will use to check for uniqueness * conflicts. It must not be {@code null}. */ public UniquenessRequestControlProperties(final Filter filter) { this(); Validator.ensureNotNull(filter); this.filter = filter; } /** * Retrieves the set of attribute types that the server will check for * uniqueness conflicts. * * @return The set of attribute types that the server will check for * uniqueness conflicts, or an empty set if only a filter should be * used to identify conflicts. */ public Set getAttributeTypes() { return attributeTypes; } /** * Specifies the set of attribute types that the server will check for * uniqueness conflicts. * * @param attributeTypes The set of attribute types that the server will * check for uniqueness conflicts. It must not be * {@code null} or empty if no filter is configured. * It may optionally be {@code null} or empty if * a filter is provided. The server should be * configured with an equality index for each of the * provided attribute types. */ public void setAttributeTypes(final String... attributeTypes) { if (attributeTypes == null) { this.attributeTypes = Collections.emptySet(); } else { this.attributeTypes = Collections.unmodifiableSet(new LinkedHashSet<>( StaticUtils.toList(attributeTypes))); } } /** * Specifies the set of attribute types that the server will check for * uniqueness conflicts. * * @param attributeTypes The set of attribute types that the server will * check for uniqueness conflicts. It must not be * {@code null} or empty if no filter is configured. * It may optionally be {@code null} or empty if * a filter is provided. The server should be * configured with an equality index for each of the * provided attribute types. */ public void setAttributeTypes(final Collection attributeTypes) { if (attributeTypes == null) { this.attributeTypes = Collections.emptySet(); } else { this.attributeTypes = Collections.unmodifiableSet(new LinkedHashSet<>(attributeTypes)); } } /** * Retrieves the behavior that the server should exhibit if multiple attribute * types are configured. * * @return The behavior that the server should exhibit if multiple attribute * types are configured. */ public UniquenessMultipleAttributeBehavior getMultipleAttributeBehavior() { return multipleAttributeBehavior; } /** * Specifies the behavior that the server should exhibit if multiple attribute * types are configured. * * @param multipleAttributeBehavior The behavior that the server should * exhibit if multiple attribute types are * configured. This must not be * {@code null}. */ public void setMultipleAttributeBehavior( final UniquenessMultipleAttributeBehavior multipleAttributeBehavior) { Validator.ensureNotNull(multipleAttributeBehavior); this.multipleAttributeBehavior = multipleAttributeBehavior; } /** * Retrieves the base DN that will be used for searches used to identify * uniqueness conflicts, if defined. * * @return The base DN that will be used for searches used to identify * uniqueness conflicts, or {@code null} if the server should search * below all public naming contexts. */ public String getBaseDN() { return baseDN; } /** * Specifies the base DN that will be used for searches used to identify * uniqueness conflicts. * * @param baseDN The base DN that will be used for searches used to identify * uniqueness conflicts. It may be {@code null} to indicate * that the server should search below all public naming * contexts. */ public void setBaseDN(final String baseDN) { this.baseDN = baseDN; } /** * Retrieves a filter that will be used to identify uniqueness conflicts, if * defined. * * @return A filter that will be used to identify uniqueness conflicts, or * {@code null} if no filter has been defined. */ public Filter getFilter() { return filter; } /** * Specifies a filter that will be used to identify uniqueness conflicts. * * @param filter A filter that will be used to identify uniqueness * conflicts. It must not be {@code null} if no set of * attribute types has been configured. It may optionally be * {@code null} if a set of attribute types has been * configured. If no attribute types are provided, then this * filter should be indexed within the server. */ public void setFilter(final Filter filter) { this.filter = filter; } /** * Indicates whether the server should attempt to identify conflicts with * soft-deleted entries. * * @return {@code true} if the server should identify conflicts with both * regular entries and soft-deleted entries, or {@code false} if the * server should only identify conflicts with regular entries. */ public boolean preventConflictsWithSoftDeletedEntries() { return preventConflictsWithSoftDeletedEntries; } /** * Specifies whether the server should attempt to identify conflicts with * soft-deleted entries. * * @param preventConflictsWithSoftDeletedEntries Indicates whether the * server should attempt to * identify conflicts with * soft-deleted entries. */ public void setPreventConflictsWithSoftDeletedEntries( final boolean preventConflictsWithSoftDeletedEntries) { this.preventConflictsWithSoftDeletedEntries = preventConflictsWithSoftDeletedEntries; } /** * Retrieves the pre-commit validation level, which will be used to identify * any conflicts before the associated request is processed. * * @return The pre-commit validation level. */ public UniquenessValidationLevel getPreCommitValidationLevel() { return preCommitValidationLevel; } /** * Specifies the pre-commit validation level, which will be used to identify * any conflicts before the associated request is processed. * * @param preCommitValidationLevel The pre-commit validation level. It must * not be {@code null}. */ public void setPreCommitValidationLevel( final UniquenessValidationLevel preCommitValidationLevel) { Validator.ensureNotNull(preCommitValidationLevel); this.preCommitValidationLevel = preCommitValidationLevel; } /** * Retrieves the post-commit validation level, which will be used to identify * any conflicts that were introduced by the request with which the control is * associated, or by some other concurrent changed processed in the server. * * @return The post-commit validation level. */ public UniquenessValidationLevel getPostCommitValidationLevel() { return postCommitValidationLevel; } /** * Specifies the post-commit validation level, which will be used to identify * any conflicts that were introduced by the request with which the control is * associated, or by some other concurrent changed processed in the server. * * @param postCommitValidationLevel The post-commit validation level. It * must not be {@code null}. */ public void setPostCommitValidationLevel( final UniquenessValidationLevel postCommitValidationLevel) { Validator.ensureNotNull(postCommitValidationLevel); this.postCommitValidationLevel = postCommitValidationLevel; } /** * Retrieves a string representation of this uniqueness request control * properties object. * * @return A string representation of this uniqueness request control * properties object. */ @Override() public String toString() { final StringBuilder buffer = new StringBuilder(); toString(buffer); return buffer.toString(); } /** * Appends a string representation of this uniqueness request control * properties object to the provided buffer. * * @param buffer The buffer to which the information should be appended. */ public void toString(final StringBuilder buffer) { buffer.append("UniquenessRequestControlProperties(attributeTypes={"); final Iterator attributeTypesIterator = attributeTypes.iterator(); while (attributeTypesIterator.hasNext()) { buffer.append('\''); buffer.append(attributeTypesIterator.next()); buffer.append('\''); if (attributeTypesIterator.hasNext()) { buffer.append(", "); } } buffer.append("}, multipleAttributeBehavior="); buffer.append(multipleAttributeBehavior); if (baseDN != null) { buffer.append(", baseDN='"); buffer.append(baseDN); buffer.append('\''); } if (filter != null) { buffer.append(", filter='"); buffer.append(filter); buffer.append('\''); } buffer.append(", preventConflictsWithSoftDeletedEntries="); buffer.append(preventConflictsWithSoftDeletedEntries); buffer.append(", preCommitValidationLevel="); buffer.append(preCommitValidationLevel); buffer.append(", postCommitValidationLevel="); buffer.append(postCommitValidationLevel); buffer.append(')'); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy