package com.hwlcn.ldap.ldap.sdk;
import java.util.Collections;
import java.util.List;
import com.hwlcn.ldap.asn1.ASN1StreamReader;
import com.hwlcn.ldap.asn1.ASN1StreamReaderSequence;
import com.hwlcn.core.annotation.NotMutable;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
@NotMutable()
@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
public final class SearchResult
extends LDAPResult
{
private static final long serialVersionUID = 1938208530894131198L;
private int numEntries;
private int numReferences;
private List<SearchResultEntry> searchEntries;
private List<SearchResultReference> searchReferences;
public SearchResult(final int messageID, final ResultCode resultCode,
final String diagnosticMessage, final String matchedDN,
final String[] referralURLs, final int numEntries,
final int numReferences, final Control[] responseControls)
{
super(messageID, resultCode, diagnosticMessage, matchedDN, referralURLs,
responseControls);
this.numEntries = numEntries;
this.numReferences = numReferences;
searchEntries = null;
searchReferences = null;
}
public SearchResult(final int messageID, final ResultCode resultCode,
final String diagnosticMessage, final String matchedDN,
final String[] referralURLs,
final List<SearchResultEntry> searchEntries,
final List<SearchResultReference> searchReferences,
final int numEntries, final int numReferences,
final Control[] responseControls)
{
super(messageID, resultCode, diagnosticMessage, matchedDN, referralURLs,
responseControls);
this.numEntries = numEntries;
this.numReferences = numReferences;
this.searchEntries = searchEntries;
this.searchReferences = searchReferences;
}
static SearchResult readSearchResultFrom(final int messageID,
final ASN1StreamReaderSequence messageSequence,
final ASN1StreamReader reader)
throws LDAPException
{
final LDAPResult r =
LDAPResult.readLDAPResultFrom(messageID, messageSequence, reader);
return new SearchResult(messageID, r.getResultCode(),
r.getDiagnosticMessage(), r.getMatchedDN(), r.getReferralURLs(),
-1, -1, r.getResponseControls());
}
public int getEntryCount()
{
return numEntries;
}
public int getReferenceCount()
{
return numReferences;
}
public List<SearchResultEntry> getSearchEntries()
{
if (searchEntries == null)
{
return null;
}
return Collections.unmodifiableList(searchEntries);
}
public SearchResultEntry getSearchEntry(final String dn)
throws LDAPException
{
if (searchEntries == null)
{
return null;
}
final DN parsedDN = new DN(dn);
for (final SearchResultEntry e : searchEntries)
{
if (parsedDN.equals(e.getParsedDN()))
{
return e;
}
}
return null;
}
public List<SearchResultReference> getSearchReferences()
{
if (searchReferences == null)
{
return null;
}
return Collections.unmodifiableList(searchReferences);
}
void setCounts(final int numEntries,
final List<SearchResultEntry> searchEntries,
final int numReferences,
final List<SearchResultReference> searchReferences)
{
this.numEntries = numEntries;
this.numReferences = numReferences;
if (searchEntries == null)
{
this.searchEntries = null;
}
else
{
this.searchEntries = Collections.unmodifiableList(searchEntries);
}
if (searchReferences == null)
{
this.searchReferences = null;
}
else
{
this.searchReferences = Collections.unmodifiableList(searchReferences);
}
}
@Override()
public void toString(final StringBuilder buffer)
{
buffer.append("SearchResult(resultCode=");
buffer.append(getResultCode());
final int messageID = getMessageID();
if (messageID >= 0)
{
buffer.append(", messageID=");
buffer.append(messageID);
}
final String diagnosticMessage = getDiagnosticMessage();
if (diagnosticMessage != null)
{
buffer.append(", diagnosticMessage='");
buffer.append(diagnosticMessage);
buffer.append('\'');
}
final String matchedDN = getMatchedDN();
if (matchedDN != null)
{
buffer.append(", matchedDN='");
buffer.append(matchedDN);
buffer.append('\'');
}
final String[] referralURLs = getReferralURLs();
if (referralURLs.length > 0)
{
buffer.append(", referralURLs={");
for (int i=0; i < referralURLs.length; i++)
{
if (i > 0)
{
buffer.append(", ");
}
buffer.append('\'');
buffer.append(referralURLs[i]);
buffer.append('\'');
}
buffer.append('}');
}
buffer.append(", entriesReturned=");
buffer.append(numEntries);
buffer.append(", referencesReturned=");
buffer.append(numReferences);
final Control[] responseControls = getResponseControls();
if (responseControls.length > 0)
{
buffer.append(", responseControls={");
for (int i=0; i < responseControls.length; i++)
{
if (i > 0)
{
buffer.append(", ");
}
buffer.append(responseControls[i]);
}
buffer.append('}');
}
buffer.append(')');
}
}