package com.hwlcn.ldap.ldap.sdk.migrate.jndi;
import javax.naming.NamingException;
import javax.naming.ldap.ExtendedResponse;
import com.hwlcn.ldap.asn1.ASN1Exception;
import com.hwlcn.ldap.asn1.ASN1OctetString;
import com.hwlcn.ldap.ldap.sdk.ExtendedResult;
import com.hwlcn.ldap.ldap.sdk.ResultCode;
import com.hwlcn.core.annotation.NotMutable;
import com.hwlcn.ldap.util.StaticUtils;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
@NotMutable()
@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
public final class JNDIExtendedResponse
implements ExtendedResponse
{
private static final long serialVersionUID = -9210853181740736844L;
private final ExtendedResult r;
public JNDIExtendedResponse(final ExtendedResult r)
{
this.r = r;
}
public JNDIExtendedResponse(final ExtendedResponse r)
throws NamingException
{
this(toSDKExtendedResult(r));
}
JNDIExtendedResponse(final String id, final byte[] berValue, final int offset,
final int length)
throws NamingException
{
final ASN1OctetString value;
if (berValue == null)
{
value = null;
}
else
{
try
{
if ((offset == 0) && (length == berValue.length))
{
value = ASN1OctetString.decodeAsOctetString(berValue);
}
else
{
final byte[] valueBytes = new byte[length];
System.arraycopy(berValue, offset, valueBytes, 0, length);
value = ASN1OctetString.decodeAsOctetString(valueBytes);
}
}
catch (ASN1Exception ae)
{
throw new NamingException(StaticUtils.getExceptionMessage(ae));
}
}
r = new ExtendedResult(-1, ResultCode.SUCCESS, null, null, null, id, value,
null);
}
public String getID()
{
return r.getOID();
}
public byte[] getEncodedValue()
{
final ASN1OctetString value = r.getValue();
if (value == null)
{
return null;
}
else
{
return value.encode();
}
}
public ExtendedResult toSDKExtendedResult()
{
return r;
}
public static ExtendedResult toSDKExtendedResult(final ExtendedResponse r)
throws NamingException
{
if (r == null)
{
return null;
}
final JNDIExtendedResponse response;
final byte[] encodedValue = r.getEncodedValue();
if (encodedValue == null)
{
response = new JNDIExtendedResponse(r.getID(), null, 0, 0);
}
else
{
response = new JNDIExtendedResponse(r.getID(), encodedValue, 0,
encodedValue.length);
}
return response.toSDKExtendedResult();
}
@Override()
public String toString()
{
return r.toString();
}
}