| | |
| | | * (the "License"). You may not use this file except in compliance |
| | | * with the License. |
| | | * |
| | | * You can obtain a copy of the license at |
| | | * trunk/opendj3/legal-notices/CDDLv1_0.txt |
| | | * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt |
| | | * or http://forgerock.org/license/CDDLv1.0.html. |
| | | * See the License for the specific language governing permissions |
| | | * and limitations under the License. |
| | | * |
| | | * When distributing Covered Code, include this CDDL HEADER in each |
| | | * file and include the License file at |
| | | * trunk/opendj3/legal-notices/CDDLv1_0.txt. If applicable, |
| | | * add the following below this CDDL HEADER, with the fields enclosed |
| | | * by brackets "[]" replaced with your own identifying information: |
| | | * file and include the License file at legal-notices/CDDLv1_0.txt. |
| | | * If applicable, add the following below this CDDL HEADER, with the |
| | | * fields enclosed by brackets "[]" replaced with your own identifying |
| | | * information: |
| | | * Portions Copyright [yyyy] [name of copyright owner] |
| | | * |
| | | * CDDL HEADER END |
| | |
| | | */ |
| | | package org.forgerock.opendj.ldap.controls; |
| | | |
| | | |
| | | |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | |
| | | import com.forgerock.opendj.util.StaticUtils; |
| | | import com.forgerock.opendj.util.Validator; |
| | | |
| | | |
| | | |
| | | /** |
| | | * A generic control which can be used to represent arbitrary raw request and |
| | | * response controls. |
| | | */ |
| | | public final class GenericControl implements Control |
| | | { |
| | | public final class GenericControl implements Control { |
| | | |
| | | /** |
| | | * Creates a new control having the same OID, criticality, and value as the |
| | | * provided control. |
| | | * |
| | | * @param control |
| | | * The control to be copied. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code control} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final Control control) |
| | | { |
| | | Validator.ensureNotNull(control); |
| | | /** |
| | | * Creates a new control having the same OID, criticality, and value as the |
| | | * provided control. |
| | | * |
| | | * @param control |
| | | * The control to be copied. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code control} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final Control control) { |
| | | Validator.ensureNotNull(control); |
| | | |
| | | if (control instanceof GenericControl) |
| | | { |
| | | return (GenericControl) control; |
| | | if (control instanceof GenericControl) { |
| | | return (GenericControl) control; |
| | | } |
| | | |
| | | return new GenericControl(control.getOID(), control.isCritical(), control.getValue()); |
| | | } |
| | | |
| | | return new GenericControl(control.getOID(), control.isCritical(), control |
| | | .getValue()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new non-critical control having the provided OID and no value. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid) |
| | | { |
| | | return new GenericControl(oid, false, null); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new control having the provided OID and criticality, but no |
| | | * value. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @param isCritical |
| | | * {@code true} if it is unacceptable to perform the operation |
| | | * without applying the semantics of this control, or {@code false} |
| | | * if it can be ignored. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid, |
| | | final boolean isCritical) |
| | | { |
| | | return new GenericControl(oid, isCritical, null); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new control having the provided OID, criticality, and value. |
| | | * <p> |
| | | * If {@code value} is not an instance of {@code ByteString} then it will be |
| | | * converted using the {@link ByteString#valueOf(Object)} method. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @param isCritical |
| | | * {@code true} if it is unacceptable to perform the operation |
| | | * without applying the semantics of this control, or {@code false} |
| | | * if it can be ignored. |
| | | * @param value |
| | | * The value associated with this control, or {@code null} if there |
| | | * is no value. Its format is defined by the specification of this |
| | | * control. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid, |
| | | final boolean isCritical, final Object value) |
| | | { |
| | | return new GenericControl(oid, isCritical, (value == null) ? null |
| | | : ByteString.valueOf(value)); |
| | | } |
| | | |
| | | |
| | | |
| | | private final String oid; |
| | | |
| | | private final boolean isCritical; |
| | | |
| | | private final ByteString value; |
| | | |
| | | |
| | | |
| | | // Prevent direct instantiation. |
| | | private GenericControl(final String oid, final boolean isCritical, |
| | | final ByteString value) |
| | | { |
| | | Validator.ensureNotNull(oid); |
| | | this.oid = oid; |
| | | this.isCritical = isCritical; |
| | | this.value = value; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public String getOID() |
| | | { |
| | | return oid; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ByteString getValue() |
| | | { |
| | | return value; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean hasValue() |
| | | { |
| | | return value != null; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean isCritical() |
| | | { |
| | | return isCritical; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public String toString() |
| | | { |
| | | final StringBuilder builder = new StringBuilder(); |
| | | builder.append("Control(oid="); |
| | | builder.append(getOID()); |
| | | builder.append(", criticality="); |
| | | builder.append(isCritical()); |
| | | if (value != null) |
| | | { |
| | | builder.append(", value="); |
| | | StaticUtils.toHexPlusAscii(value, builder, 4); |
| | | /** |
| | | * Creates a new non-critical control having the provided OID and no value. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid) { |
| | | return new GenericControl(oid, false, null); |
| | | } |
| | | builder.append(")"); |
| | | return builder.toString(); |
| | | } |
| | | |
| | | /** |
| | | * Creates a new control having the provided OID and criticality, but no |
| | | * value. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @param isCritical |
| | | * {@code true} if it is unacceptable to perform the operation |
| | | * without applying the semantics of this control, or |
| | | * {@code false} if it can be ignored. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid, final boolean isCritical) { |
| | | return new GenericControl(oid, isCritical, null); |
| | | } |
| | | |
| | | /** |
| | | * Creates a new control having the provided OID, criticality, and value. |
| | | * <p> |
| | | * If {@code value} is not an instance of {@code ByteString} then it will be |
| | | * converted using the {@link ByteString#valueOf(Object)} method. |
| | | * |
| | | * @param oid |
| | | * The numeric OID associated with this control. |
| | | * @param isCritical |
| | | * {@code true} if it is unacceptable to perform the operation |
| | | * without applying the semantics of this control, or |
| | | * {@code false} if it can be ignored. |
| | | * @param value |
| | | * The value associated with this control, or {@code null} if |
| | | * there is no value. Its format is defined by the specification |
| | | * of this control. |
| | | * @return The new control. |
| | | * @throws NullPointerException |
| | | * If {@code oid} was {@code null}. |
| | | */ |
| | | public static GenericControl newControl(final String oid, final boolean isCritical, |
| | | final Object value) { |
| | | return new GenericControl(oid, isCritical, (value == null) ? null : ByteString |
| | | .valueOf(value)); |
| | | } |
| | | |
| | | private final String oid; |
| | | |
| | | private final boolean isCritical; |
| | | |
| | | private final ByteString value; |
| | | |
| | | // Prevent direct instantiation. |
| | | private GenericControl(final String oid, final boolean isCritical, final ByteString value) { |
| | | Validator.ensureNotNull(oid); |
| | | this.oid = oid; |
| | | this.isCritical = isCritical; |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public String getOID() { |
| | | return oid; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ByteString getValue() { |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean hasValue() { |
| | | return value != null; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean isCritical() { |
| | | return isCritical; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override |
| | | public String toString() { |
| | | final StringBuilder builder = new StringBuilder(); |
| | | builder.append("Control(oid="); |
| | | builder.append(getOID()); |
| | | builder.append(", criticality="); |
| | | builder.append(isCritical()); |
| | | if (value != null) { |
| | | builder.append(", value="); |
| | | StaticUtils.toHexPlusAscii(value, builder, 4); |
| | | } |
| | | builder.append(")"); |
| | | return builder.toString(); |
| | | } |
| | | |
| | | } |