home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / INTERNET / NETSCAP4.06 / CP32E406.EXE / nav40.z / ldap10.jar / netscape / ldap / LDAPSearchResults.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-13  |  4.6 KB  |  227 lines

  1. package netscape.ldap;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Vector;
  5. import netscape.ldap.client.JDAPMessage;
  6. import netscape.ldap.client.opers.JDAPProtocolOp;
  7. import netscape.ldap.client.opers.JDAPSearchResponse;
  8. import netscape.ldap.client.opers.JDAPSearchResultReference;
  9.  
  10. public class LDAPSearchResults implements Enumeration {
  11.    private int current = 0;
  12.    private Vector entries = new Vector();
  13.    private LDAPSearchListener resultSource;
  14.    private boolean searchComplete = false;
  15.    private LDAPConnection connectionToClose = null;
  16.    private boolean persistentSearch = false;
  17.    private Vector cacheEntries;
  18.    private boolean firstResult = false;
  19.  
  20.    public LDAPSearchResults() {
  21.       this.searchComplete = true;
  22.       this.cacheEntries = null;
  23.    }
  24.  
  25.    LDAPSearchResults(Vector var1) {
  26.       this.searchComplete = true;
  27.       this.cacheEntries = (Vector)var1.clone();
  28.    }
  29.  
  30.    void add(JDAPProtocolOp var1) {
  31.       if (var1 instanceof JDAPSearchResponse) {
  32.          this.add((JDAPSearchResponse)var1);
  33.       } else {
  34.          if (var1 instanceof JDAPSearchResultReference) {
  35.             this.add((JDAPSearchResultReference)var1);
  36.          }
  37.  
  38.       }
  39.    }
  40.  
  41.    void add(JDAPSearchResponse var1) {
  42.       LDAPAttribute[] var2 = var1.getAttributes();
  43.       LDAPAttributeSet var3;
  44.       if (var2 != null) {
  45.          var3 = new LDAPAttributeSet(var2);
  46.       } else {
  47.          var3 = new LDAPAttributeSet();
  48.       }
  49.  
  50.       String var4 = var1.getObjectName();
  51.       LDAPEntry var5 = new LDAPEntry(var4, var3);
  52.       this.entries.addElement(var5);
  53.    }
  54.  
  55.    void add(JDAPSearchResultReference var1) {
  56.       String[] var2 = var1.getUrls();
  57.       if (var2 != null) {
  58.          this.entries.addElement(new LDAPReferralException((String)null, 0, var2));
  59.       }
  60.    }
  61.  
  62.    void associate(LDAPSearchListener var1) {
  63.       this.resultSource = var1;
  64.       this.searchComplete = false;
  65.    }
  66.  
  67.    void associatePersistentSearch(LDAPSearchListener var1) {
  68.       this.resultSource = var1;
  69.       this.persistentSearch = true;
  70.       this.searchComplete = false;
  71.       this.firstResult = true;
  72.    }
  73.  
  74.    void closeOnCompletion(LDAPConnection var1) {
  75.       if (this.searchComplete) {
  76.          try {
  77.             var1.disconnect();
  78.          } catch (LDAPException var2) {
  79.          }
  80.       } else {
  81.          this.connectionToClose = var1;
  82.       }
  83.    }
  84.  
  85.    void quicksort(LDAPEntry[] var1, LDAPEntryComparator var2, int var3, int var4) {
  86.       if (var3 < var4) {
  87.          LDAPEntry var5 = var1[var3];
  88.          int var6 = var3 - 1;
  89.          int var7 = var4 + 1;
  90.  
  91.          while(true) {
  92.             --var7;
  93.             if (!var2.isGreater(var1[var7], var5)) {
  94.                do {
  95.                   ++var6;
  96.                } while(var2.isGreater(var5, var1[var6]));
  97.  
  98.                if (var6 >= var7) {
  99.                   this.quicksort(var1, var2, var3, var7);
  100.                   this.quicksort(var1, var2, var7 + 1, var4);
  101.                   return;
  102.                }
  103.  
  104.                LDAPEntry var8 = var1[var6];
  105.                var1[var6] = var1[var7];
  106.                var1[var7] = var8;
  107.             }
  108.          }
  109.       }
  110.    }
  111.  
  112.    public synchronized void sort(LDAPEntryComparator var1) {
  113.       while(!this.searchComplete) {
  114.          this.fetchResult();
  115.       }
  116.  
  117.       int var2 = this.entries.size();
  118.       if (var2 > 0) {
  119.          LDAPEntry[] var3 = new LDAPEntry[var2];
  120.          this.entries.copyInto(var3);
  121.          this.quicksort(var3, var1, 0, var2 - 1);
  122.          this.entries.removeAllElements();
  123.  
  124.          for(int var4 = 0; var4 < var2; ++var4) {
  125.             this.entries.addElement(var3[var4]);
  126.          }
  127.  
  128.          this.current = 0;
  129.       }
  130.    }
  131.  
  132.    public LDAPEntry next() throws LDAPReferralException {
  133.       Object var1 = this.nextElement();
  134.       if (var1 instanceof LDAPReferralException) {
  135.          throw (LDAPReferralException)var1;
  136.       } else {
  137.          return var1 instanceof LDAPEntry ? (LDAPEntry)var1 : null;
  138.       }
  139.    }
  140.  
  141.    public Object nextElement() {
  142.       if (this.cacheEntries == null && !this.persistentSearch && this.current >= this.entries.size() - 1) {
  143.          this.fetchResult();
  144.       }
  145.  
  146.       if (this.current < this.entries.size()) {
  147.          ++this.current;
  148.          Object var1 = this.entries.elementAt(this.current - 1);
  149.          this.entries.setElementAt((Object)null, this.current - 1);
  150.          return var1;
  151.       } else {
  152.          return null;
  153.       }
  154.    }
  155.  
  156.    public boolean hasMoreElements() {
  157.       if (this.current >= this.entries.size() - 1) {
  158.          this.fetchResult();
  159.       }
  160.  
  161.       return this.current < this.entries.size();
  162.    }
  163.  
  164.    int getCount() {
  165.       return this.entries.size();
  166.    }
  167.  
  168.    int getID() {
  169.       return this.resultSource != null && !this.searchComplete ? this.resultSource.getID() : -1;
  170.    }
  171.  
  172.    void abandon() {
  173.       synchronized(this){}
  174.  
  175.       try {
  176.          this.searchComplete = true;
  177.       } catch (Throwable var3) {
  178.          throw var3;
  179.       }
  180.  
  181.    }
  182.  
  183.    private synchronized void fetchResult() {
  184.       if (this.cacheEntries != null && this.current < this.cacheEntries.size() - 1) {
  185.          LDAPEntry var1 = (LDAPEntry)this.cacheEntries.elementAt(this.current + 1);
  186.          LDAPEntry var2 = new LDAPEntry(var1.getDN(), var1.getAttributeSet());
  187.          this.entries.addElement(var2);
  188.       } else if (this.resultSource != null) {
  189.          synchronized(this){}
  190.  
  191.          try {
  192.             if (!this.searchComplete && !this.firstResult) {
  193.                JDAPMessage var3 = this.resultSource.nextResult();
  194.                if (var3 != null) {
  195.                   JDAPProtocolOp var4 = var3.getProtocolOp();
  196.                   if (var4 instanceof JDAPSearchResponse) {
  197.                      this.add((JDAPSearchResponse)var4);
  198.                   } else {
  199.                      this.add(var4);
  200.                   }
  201.  
  202.                   return;
  203.                }
  204.  
  205.                this.searchComplete = true;
  206.                if (this.connectionToClose == null) {
  207.                   return;
  208.                }
  209.  
  210.                try {
  211.                   this.connectionToClose.disconnect();
  212.                } catch (LDAPException var7) {
  213.                }
  214.  
  215.                this.connectionToClose = null;
  216.                return;
  217.             }
  218.  
  219.             this.firstResult = false;
  220.          } catch (Throwable var8) {
  221.             throw var8;
  222.          }
  223.  
  224.       }
  225.    }
  226. }
  227.