/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2015 ForgeRock AS. */ package com.forgerock.opendj.ldap.controls; import static com.forgerock.opendj.ldap.CoreMessages.*; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.DecodeException; import org.forgerock.opendj.ldap.DecodeOptions; import org.forgerock.opendj.ldap.controls.Control; import org.forgerock.opendj.ldap.controls.ControlDecoder; import org.forgerock.util.Reject; /** * Control to provide a transaction ID. *

* The transaction ID is related to Common Audit : it is used for tracking the processing of a user-interaction as it * passes through the Forgerock stack *

* The control's value is the UTF-8 encoding of the transaction ID. */ public final class TransactionIdControl implements Control { /** OID for this control. */ public static final String OID = "1.3.6.1.4.1.36733.2.1.5.1"; /** A decoder which can be used for decoding the simple paged results control. */ public static final ControlDecoder DECODER = new ControlDecoder() { @Override public TransactionIdControl decodeControl(final Control control, final DecodeOptions options) throws DecodeException { Reject.ifNull(control); if (control instanceof TransactionIdControl) { return (TransactionIdControl) control; } if (!control.getOID().equals(OID)) { throw DecodeException.error(ERR_TRANSACTION_ID_CONTROL_BAD_OID.get(control.getOID(), OID)); } if (!control.hasValue()) { // The control must always have a value. throw DecodeException.error(ERR_TRANSACTION_ID_CONTROL_DECODE_NULL.get()); } return new TransactionIdControl(control.getValue().toString()); } @Override public String getOID() { return OID; } }; /** * Creates a new transactionId control. * * @param transactionId * The transaction id to provide through this control. * @return The new control. * @throws NullPointerException * If {@code transactionId} was {@code null}. */ public static TransactionIdControl newControl(final String transactionId) { Reject.ifNull(transactionId); return new TransactionIdControl(transactionId); } /** The control value transactionId element. */ private final String transactionId; private TransactionIdControl(final String transactionId) { this.transactionId = transactionId; } /** * Returns the transaction id. * * @return The transaction id. */ public String getTransactionId() { return transactionId; } @Override public String getOID() { return OID; } @Override public ByteString getValue() { return ByteString.valueOfUtf8(transactionId); } @Override public boolean hasValue() { return true; } @Override public boolean isCritical() { // This control is never critical. return false; } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("TransactionIdControl(oid="); builder.append(getOID()); builder.append(", transactionId="); builder.append(transactionId); builder.append(")"); return builder.toString(); } }