001/*
002 * Copyright 2016-2017 UnboundID Corp.
003 * All Rights Reserved.
004 */
005/*
006 * Copyright (C) 2016-2017 UnboundID Corp.
007 *
008 * This program is free software; you can redistribute it and/or modify
009 * it under the terms of the GNU General Public License (GPLv2 only)
010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011 * as published by the Free Software Foundation.
012 *
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016 * GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with this program; if not, see <http://www.gnu.org/licenses>.
020 */
021package com.unboundid.ldap.sdk.experimental;
022
023
024
025import com.unboundid.ldap.sdk.Entry;
026import com.unboundid.ldap.sdk.LDAPException;
027import com.unboundid.ldap.sdk.OperationType;
028import com.unboundid.ldap.sdk.ResultCode;
029import com.unboundid.util.Debug;
030import com.unboundid.util.NotMutable;
031import com.unboundid.util.ThreadSafety;
032import com.unboundid.util.ThreadSafetyLevel;
033
034import static com.unboundid.ldap.sdk.experimental.ExperimentalMessages.*;
035
036
037
038/**
039 * This class represents an entry that holds information about an abandon
040 * operation processed by an LDAP server, as per the specification described in
041 * draft-chu-ldap-logschema-00.
042 */
043@NotMutable()
044@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
045public final class DraftChuLDAPLogSchema00AbandonEntry
046       extends DraftChuLDAPLogSchema00Entry
047{
048  /**
049   * The name of the attribute used to hold the message ID of the operation to
050   * abandon.
051   */
052  public static final String ATTR_ID_TO_ABANDON = "reqId";
053
054
055
056  /**
057   * The serial version UID for this serializable class.
058   */
059  private static final long serialVersionUID = -5205545654036097510L;
060
061
062
063  // The message ID of the operation to abandon.
064  private final int idToAbandon;
065
066
067
068  /**
069   * Creates a new instance of this abandon access log entry from the provided
070   * entry.
071   *
072   * @param  entry  The entry used to create this abandon access log entry.
073   *
074   * @throws  LDAPException  If the provided entry cannot be decoded as a valid
075   *                         abandon access log entry as per the specification
076   *                         contained in draft-chu-ldap-logschema-00.
077   */
078  public DraftChuLDAPLogSchema00AbandonEntry(final Entry entry)
079         throws LDAPException
080  {
081    super(entry, OperationType.ABANDON);
082
083    final String idString = entry.getAttributeValue(ATTR_ID_TO_ABANDON);
084    if (idString == null)
085    {
086      throw new LDAPException(ResultCode.DECODING_ERROR,
087           ERR_LOGSCHEMA_DECODE_MISSING_REQUIRED_ATTR.get(entry.getDN(),
088                ATTR_ID_TO_ABANDON));
089    }
090    else
091    {
092      try
093      {
094        idToAbandon = Integer.parseInt(idString);
095      }
096      catch (final Exception e)
097      {
098        Debug.debugException(e);
099        throw new LDAPException(ResultCode.DECODING_ERROR,
100             ERR_LOGSCHEMA_DECODE_ABANDON_ID_ERROR.get(entry.getDN(),
101                  ATTR_ID_TO_ABANDON, idString),
102             e);
103      }
104    }
105  }
106
107
108
109  /**
110   * Retrieves the target message ID (i.e., the message ID of the operation to
111   * abandon) for the abandon request described by this abandon access log
112   * entry.
113   *
114   * @return  The target message ID for the abandon request described by this
115   *          abandon access log entry.
116   */
117  public int getIDToAbandon()
118  {
119    return idToAbandon;
120  }
121}