001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 package org.apache.directory.shared.ldap.message; 021 022 023 import java.util.Arrays; 024 025 import org.apache.directory.shared.ldap.message.internal.InternalAbstractResultResponse; 026 import org.apache.directory.shared.ldap.message.internal.InternalExtendedResponse; 027 028 /** 029 * Lockable ExtendedResponse implementation 030 * 031 * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a> 032 * @version $Rev: 905344 $ 033 */ 034 public class ExtendedResponseImpl extends InternalAbstractResultResponse implements InternalExtendedResponse 035 { 036 static final long serialVersionUID = -6646752766410531060L; 037 038 /** Object identifier for the extended response */ 039 protected String oid; 040 041 /** Values encoded in the extended response payload */ 042 protected byte[] value; 043 044 045 // ------------------------------------------------------------------------ 046 // Constructors 047 // ------------------------------------------------------------------------ 048 049 /** 050 * Creates a Lockable ExtendedResponse as a reply to an ExtendedRequest. 051 * 052 * @param id 053 * the session unique message id 054 */ 055 public ExtendedResponseImpl( final int id, String oid ) 056 { 057 super( id, TYPE ); 058 this.oid = oid; 059 } 060 061 062 public ExtendedResponseImpl( int id ) 063 { 064 super( id, TYPE ); 065 } 066 067 068 // ------------------------------------------------------------------------ 069 // ExtendedResponse Interface Method Implementations 070 // ------------------------------------------------------------------------ 071 072 /** 073 * Gets the reponse OID specific encoded response values. 074 * 075 * @return the response specific encoded response values. 076 */ 077 public byte[] getResponse() 078 { 079 if ( value == null ) 080 { 081 return null; 082 } 083 084 final byte[] copy = new byte[ value.length ]; 085 System.arraycopy( value, 0, copy, 0, value.length ); 086 return copy; 087 } 088 089 090 /** 091 * Sets the response OID specific encoded response values. 092 * 093 * @param value 094 * the response specific encoded response values. 095 */ 096 public void setResponse( byte[] value ) 097 { 098 if ( value != null ) 099 { 100 this.value = new byte[ value.length ]; 101 System.arraycopy( value, 0, this.value, 0, value.length ); 102 } else { 103 this.value = null; 104 } 105 } 106 107 108 public void setOid( String oid ) 109 { 110 this.oid = oid; 111 } 112 113 114 /** 115 * Gets the OID uniquely identifying this extended response (a.k.a. its 116 * name). 117 * 118 * @return the OID of the extended response type. 119 */ 120 public String getResponseName() 121 { 122 return oid; 123 } 124 125 126 /** 127 * Sets the OID uniquely identifying this extended response (a.k.a. its 128 * name). 129 * 130 * @param oid 131 * the OID of the extended response type. 132 */ 133 public void setResponseName( String oid ) 134 { 135 this.oid = oid; 136 } 137 138 139 /** 140 * Checks to see if an object equals this ExtendedRequest. 141 * 142 * @param obj 143 * the object to be checked for equality 144 * @return true if the obj equals this ExtendedRequest, false otherwise 145 */ 146 public boolean equals( Object obj ) 147 { 148 if ( obj == this ) 149 { 150 return true; 151 } 152 153 if ( !super.equals( obj ) ) 154 { 155 return false; 156 } 157 158 if ( !( obj instanceof InternalExtendedResponse ) ) 159 { 160 return false; 161 } 162 163 InternalExtendedResponse resp = ( InternalExtendedResponse ) obj; 164 165 if ( oid != null && resp.getResponseName() == null ) 166 { 167 return false; 168 } 169 170 if ( oid == null && resp.getResponseName() != null ) 171 { 172 return false; 173 } 174 175 if ( oid != null && resp.getResponseName() != null ) 176 { 177 if ( !oid.equals( resp.getResponseName() ) ) 178 { 179 return false; 180 } 181 } 182 183 if ( value != null && resp.getResponse() == null ) 184 { 185 return false; 186 } 187 188 if ( value == null && resp.getResponse() != null ) 189 { 190 return false; 191 } 192 193 if ( value != null && resp.getResponse() != null ) 194 { 195 if ( !Arrays.equals( value, resp.getResponse() ) ) 196 { 197 return false; 198 } 199 } 200 201 return true; 202 } 203 204 205 public String getID() 206 { 207 return getResponseName(); 208 } 209 210 211 public byte[] getEncodedValue() 212 { 213 return getResponse(); 214 } 215 }