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.asn1.ASN1OctetString; 026import com.unboundid.ldap.protocol.ExtendedResponseProtocolOp; 027import com.unboundid.ldap.sdk.ExtendedRequest; 028import com.unboundid.ldap.sdk.Entry; 029import com.unboundid.ldap.sdk.LDAPException; 030import com.unboundid.ldap.sdk.OperationType; 031import com.unboundid.ldap.sdk.ResultCode; 032import com.unboundid.util.NotMutable; 033import com.unboundid.util.StaticUtils; 034import com.unboundid.util.ThreadSafety; 035import com.unboundid.util.ThreadSafetyLevel; 036 037import static com.unboundid.ldap.sdk.experimental.ExperimentalMessages.*; 038 039 040 041/** 042 * This class represents an entry that holds information about an extended 043 * operation processed by an LDAP server, as per the specification described in 044 * draft-chu-ldap-logschema-00. 045 */ 046@NotMutable() 047@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 048public final class DraftChuLDAPLogSchema00ExtendedEntry 049 extends DraftChuLDAPLogSchema00Entry 050{ 051 /** 052 * The name of the attribute used to hold the extended request value. 053 */ 054 public static final String ATTR_REQUEST_VALUE = "reqData"; 055 056 057 058 /** 059 * The serial version UID for this serializable class. 060 */ 061 private static final long serialVersionUID = 3767074068423424660L; 062 063 064 065 // The request value, if available. 066 private final ASN1OctetString requestValue; 067 068 // The request OID. 069 private final String requestOID; 070 071 072 073 /** 074 * Creates a new instance of this extended operation access log entry from the 075 * provided entry. 076 * 077 * @param entry The entry used to create this extended operation access log 078 * entry. 079 * 080 * @throws LDAPException If the provided entry cannot be decoded as a valid 081 * extended operation access log entry as per the 082 * specification contained in 083 * draft-chu-ldap-logschema-00. 084 */ 085 public DraftChuLDAPLogSchema00ExtendedEntry(final Entry entry) 086 throws LDAPException 087 { 088 super(entry, OperationType.EXTENDED); 089 090 091 // The request OID is encoded in the request type. 092 final String requestType = entry.getAttributeValue(ATTR_OPERATION_TYPE); 093 final String lowerRequestType = StaticUtils.toLowerCase(requestType); 094 if (lowerRequestType.startsWith("extended") && 095 (lowerRequestType.length() > 8)) 096 { 097 requestOID = requestType.substring(8); 098 } 099 else 100 { 101 throw new LDAPException(ResultCode.DECODING_ERROR, 102 ERR_LOGSCHEMA_DECODE_EXTENDED_MALFORMED_REQ_TYPE.get(entry.getDN(), 103 ATTR_OPERATION_TYPE, requestType)); 104 } 105 106 107 // Get the request value, if present. 108 final byte[] requestValueBytes = 109 entry.getAttributeValueBytes(ATTR_REQUEST_VALUE); 110 if (requestValueBytes == null) 111 { 112 requestValue = null; 113 } 114 else 115 { 116 requestValue = new ASN1OctetString( 117 ExtendedResponseProtocolOp.TYPE_RESPONSE_VALUE, requestValueBytes); 118 } 119 } 120 121 122 123 /** 124 * Retrieves the request OID for the extended request described by this 125 * extended operation access log entry. 126 * 127 * @return The request OID for the extended request described by this 128 * extended operation access log entry. 129 */ 130 public String getRequestOID() 131 { 132 return requestOID; 133 } 134 135 136 137 /** 138 * Retrieves the request value for the extended request described by this 139 * extended operation access log entry, if any. 140 * 141 * @return The request value for the extended request described by this 142 * extended operation access log entry, or {@code null} if no request 143 * value was included in the access log entry. 144 */ 145 public ASN1OctetString getRequestValue() 146 { 147 return requestValue; 148 } 149 150 151 152 /** 153 * Retrieves an {@code ExtendedRequest} created from this extended operation 154 * access log entry. 155 * 156 * @return The {@code ExtendedRequest} created from this extended operation 157 * access log entry. 158 */ 159 public ExtendedRequest toExtendedRequest() 160 { 161 return new ExtendedRequest(requestOID, requestValue, 162 getRequestControlArray()); 163 } 164}