home *** CD-ROM | disk | FTP | other *** search
- package netscape.ldap;
-
- import java.util.Enumeration;
- import java.util.Vector;
- import netscape.ldap.client.JDAPMessage;
- import netscape.ldap.client.opers.JDAPProtocolOp;
- import netscape.ldap.client.opers.JDAPSearchResponse;
- import netscape.ldap.client.opers.JDAPSearchResultReference;
-
- public class LDAPSearchResults implements Enumeration {
- private int current = 0;
- private Vector entries = new Vector();
- private LDAPSearchListener resultSource;
- private boolean searchComplete = false;
- private LDAPConnection connectionToClose = null;
- private boolean persistentSearch = false;
- private Vector cacheEntries;
- private boolean firstResult = false;
-
- public LDAPSearchResults() {
- this.searchComplete = true;
- this.cacheEntries = null;
- }
-
- LDAPSearchResults(Vector var1) {
- this.searchComplete = true;
- this.cacheEntries = (Vector)var1.clone();
- }
-
- void add(JDAPProtocolOp var1) {
- if (var1 instanceof JDAPSearchResponse) {
- this.add((JDAPSearchResponse)var1);
- } else {
- if (var1 instanceof JDAPSearchResultReference) {
- this.add((JDAPSearchResultReference)var1);
- }
-
- }
- }
-
- void add(JDAPSearchResponse var1) {
- LDAPAttribute[] var2 = var1.getAttributes();
- LDAPAttributeSet var3;
- if (var2 != null) {
- var3 = new LDAPAttributeSet(var2);
- } else {
- var3 = new LDAPAttributeSet();
- }
-
- String var4 = var1.getObjectName();
- LDAPEntry var5 = new LDAPEntry(var4, var3);
- this.entries.addElement(var5);
- }
-
- void add(JDAPSearchResultReference var1) {
- String[] var2 = var1.getUrls();
- if (var2 != null) {
- this.entries.addElement(new LDAPReferralException((String)null, 0, var2));
- }
- }
-
- void associate(LDAPSearchListener var1) {
- this.resultSource = var1;
- this.searchComplete = false;
- }
-
- void associatePersistentSearch(LDAPSearchListener var1) {
- this.resultSource = var1;
- this.persistentSearch = true;
- this.searchComplete = false;
- this.firstResult = true;
- }
-
- void closeOnCompletion(LDAPConnection var1) {
- if (this.searchComplete) {
- try {
- var1.disconnect();
- } catch (LDAPException var2) {
- }
- } else {
- this.connectionToClose = var1;
- }
- }
-
- void quicksort(LDAPEntry[] var1, LDAPEntryComparator var2, int var3, int var4) {
- if (var3 < var4) {
- LDAPEntry var5 = var1[var3];
- int var6 = var3 - 1;
- int var7 = var4 + 1;
-
- while(true) {
- --var7;
- if (!var2.isGreater(var1[var7], var5)) {
- do {
- ++var6;
- } while(var2.isGreater(var5, var1[var6]));
-
- if (var6 >= var7) {
- this.quicksort(var1, var2, var3, var7);
- this.quicksort(var1, var2, var7 + 1, var4);
- return;
- }
-
- LDAPEntry var8 = var1[var6];
- var1[var6] = var1[var7];
- var1[var7] = var8;
- }
- }
- }
- }
-
- public synchronized void sort(LDAPEntryComparator var1) {
- while(!this.searchComplete) {
- this.fetchResult();
- }
-
- int var2 = this.entries.size();
- if (var2 > 0) {
- LDAPEntry[] var3 = new LDAPEntry[var2];
- this.entries.copyInto(var3);
- this.quicksort(var3, var1, 0, var2 - 1);
- this.entries.removeAllElements();
-
- for(int var4 = 0; var4 < var2; ++var4) {
- this.entries.addElement(var3[var4]);
- }
-
- this.current = 0;
- }
- }
-
- public LDAPEntry next() throws LDAPReferralException {
- Object var1 = this.nextElement();
- if (var1 instanceof LDAPReferralException) {
- throw (LDAPReferralException)var1;
- } else {
- return var1 instanceof LDAPEntry ? (LDAPEntry)var1 : null;
- }
- }
-
- public Object nextElement() {
- if (this.cacheEntries == null && !this.persistentSearch && this.current >= this.entries.size() - 1) {
- this.fetchResult();
- }
-
- if (this.current < this.entries.size()) {
- ++this.current;
- Object var1 = this.entries.elementAt(this.current - 1);
- this.entries.setElementAt((Object)null, this.current - 1);
- return var1;
- } else {
- return null;
- }
- }
-
- public boolean hasMoreElements() {
- if (this.current >= this.entries.size() - 1) {
- this.fetchResult();
- }
-
- return this.current < this.entries.size();
- }
-
- int getCount() {
- return this.entries.size();
- }
-
- int getID() {
- return this.resultSource != null && !this.searchComplete ? this.resultSource.getID() : -1;
- }
-
- void abandon() {
- synchronized(this){}
-
- try {
- this.searchComplete = true;
- } catch (Throwable var3) {
- throw var3;
- }
-
- }
-
- private synchronized void fetchResult() {
- if (this.cacheEntries != null && this.current < this.cacheEntries.size() - 1) {
- LDAPEntry var1 = (LDAPEntry)this.cacheEntries.elementAt(this.current + 1);
- LDAPEntry var2 = new LDAPEntry(var1.getDN(), var1.getAttributeSet());
- this.entries.addElement(var2);
- } else if (this.resultSource != null) {
- synchronized(this){}
-
- try {
- if (!this.searchComplete && !this.firstResult) {
- JDAPMessage var3 = this.resultSource.nextResult();
- if (var3 != null) {
- JDAPProtocolOp var4 = var3.getProtocolOp();
- if (var4 instanceof JDAPSearchResponse) {
- this.add((JDAPSearchResponse)var4);
- } else {
- this.add(var4);
- }
-
- return;
- }
-
- this.searchComplete = true;
- if (this.connectionToClose == null) {
- return;
- }
-
- try {
- this.connectionToClose.disconnect();
- } catch (LDAPException var7) {
- }
-
- this.connectionToClose = null;
- return;
- }
-
- this.firstResult = false;
- } catch (Throwable var8) {
- throw var8;
- }
-
- }
- }
- }
-