home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / ldapjdk.jar / netscape / ldap / LDAPSearchResults.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-13  |  5.6 KB  |  343 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 Vector entries;
  12.    private LDAPSearchListener resultSource;
  13.    private boolean searchComplete;
  14.    private LDAPConnection connectionToClose;
  15.    private LDAPConnection currConn;
  16.    private boolean persistentSearch;
  17.    private LDAPSearchConstraints currCons;
  18.    private String currBase;
  19.    private int currScope;
  20.    private String currFilter;
  21.    private String[] currAttrs;
  22.    private boolean currAttrsOnly;
  23.    private Vector referralResults;
  24.    private Vector exceptions;
  25.    private boolean firstResult;
  26.  
  27.    public LDAPSearchResults() {
  28.       this.searchComplete = false;
  29.       this.persistentSearch = false;
  30.       this.referralResults = new Vector();
  31.       this.firstResult = false;
  32.       this.entries = new Vector();
  33.       this.connectionToClose = null;
  34.       this.searchComplete = true;
  35.    }
  36.  
  37.    LDAPSearchResults(LDAPConnection var1, LDAPSearchConstraints var2, String var3, int var4, String var5, String[] var6, boolean var7) {
  38.       this();
  39.       this.currConn = var1;
  40.       this.currCons = var2;
  41.       this.currBase = var3;
  42.       this.currScope = var4;
  43.       this.currFilter = var5;
  44.       this.currAttrs = var6;
  45.       this.currAttrsOnly = var7;
  46.    }
  47.  
  48.    LDAPSearchResults(Vector var1) {
  49.       this();
  50.       this.entries = (Vector)var1.clone();
  51.       if (this.entries != null && this.entries.size() >= 1) {
  52.          this.entries.removeElementAt(0);
  53.       }
  54.  
  55.    }
  56.  
  57.    LDAPSearchResults(Vector var1, LDAPConnection var2, LDAPSearchConstraints var3, String var4, int var5, String var6, String[] var7, boolean var8) {
  58.       this(var1);
  59.       this.currConn = var2;
  60.       this.currCons = var3;
  61.       this.currBase = var4;
  62.       this.currScope = var5;
  63.       this.currFilter = var6;
  64.       this.currAttrs = var7;
  65.       this.currAttrsOnly = var8;
  66.    }
  67.  
  68.    void add(JDAPProtocolOp var1) {
  69.       if (var1 instanceof JDAPSearchResponse) {
  70.          this.add((JDAPSearchResponse)var1);
  71.       } else {
  72.          if (var1 instanceof JDAPSearchResultReference) {
  73.             this.add((JDAPSearchResultReference)var1);
  74.          }
  75.  
  76.       }
  77.    }
  78.  
  79.    void add(JDAPSearchResponse var1) {
  80.       LDAPAttribute[] var2 = var1.getAttributes();
  81.       LDAPAttributeSet var3;
  82.       if (var2 != null) {
  83.          var3 = new LDAPAttributeSet(var2);
  84.       } else {
  85.          var3 = new LDAPAttributeSet();
  86.       }
  87.  
  88.       String var4 = var1.getObjectName();
  89.       LDAPEntry var5 = new LDAPEntry(var4, var3);
  90.       this.entries.addElement(var5);
  91.    }
  92.  
  93.    void add(JDAPSearchResultReference var1) {
  94.       String[] var2 = var1.getUrls();
  95.       if (var2 != null) {
  96.          if (this.exceptions == null) {
  97.             this.exceptions = new Vector();
  98.          }
  99.  
  100.          this.exceptions.addElement(new LDAPReferralException((String)null, 0, var2));
  101.       }
  102.  
  103.    }
  104.  
  105.    void add(LDAPException var1) {
  106.       if (this.exceptions == null) {
  107.          this.exceptions = new Vector();
  108.       }
  109.  
  110.       this.exceptions.addElement(var1);
  111.    }
  112.  
  113.    void associate(LDAPSearchListener var1) {
  114.       this.resultSource = var1;
  115.       this.searchComplete = false;
  116.    }
  117.  
  118.    void associatePersistentSearch(LDAPSearchListener var1) {
  119.       this.resultSource = var1;
  120.       this.persistentSearch = true;
  121.       this.searchComplete = false;
  122.       this.firstResult = true;
  123.    }
  124.  
  125.    void addReferralEntries(LDAPSearchResults var1) {
  126.       this.referralResults.addElement(var1);
  127.    }
  128.  
  129.    void closeOnCompletion(LDAPConnection var1) {
  130.       if (this.searchComplete) {
  131.          try {
  132.             var1.disconnect();
  133.          } catch (LDAPException var2) {
  134.          }
  135.       } else {
  136.          this.connectionToClose = var1;
  137.       }
  138.    }
  139.  
  140.    void quicksort(LDAPEntry[] var1, LDAPEntryComparator var2, int var3, int var4) {
  141.       if (var3 < var4) {
  142.          LDAPEntry var5 = var1[var3];
  143.          int var6 = var3 - 1;
  144.          int var7 = var4 + 1;
  145.  
  146.          while(true) {
  147.             --var7;
  148.             if (!var2.isGreater(var1[var7], var5)) {
  149.                do {
  150.                   ++var6;
  151.                } while(var2.isGreater(var5, var1[var6]));
  152.  
  153.                if (var6 >= var7) {
  154.                   this.quicksort(var1, var2, var3, var7);
  155.                   this.quicksort(var1, var2, var7 + 1, var4);
  156.                   return;
  157.                }
  158.  
  159.                LDAPEntry var8 = var1[var6];
  160.                var1[var6] = var1[var7];
  161.                var1[var7] = var8;
  162.             }
  163.          }
  164.       }
  165.    }
  166.  
  167.    public synchronized void sort(LDAPEntryComparator var1) {
  168.       while(!this.searchComplete) {
  169.          this.fetchResult();
  170.       }
  171.  
  172.       if (this.currCons.getReferrals()) {
  173.          while(this.referralResults.size() > 0) {
  174.             Object var2 = null;
  175.             if ((var2 = this.nextReferralElement()) != null) {
  176.                this.entries.addElement(var2);
  177.             }
  178.          }
  179.       }
  180.  
  181.       int var6 = this.entries.size();
  182.       if (var6 > 0) {
  183.          LDAPEntry[] var3 = new LDAPEntry[var6];
  184.          this.entries.copyInto(var3);
  185.          if (var3.length > 1) {
  186.             this.quicksort(var3, var1, 0, var6 - 1);
  187.          }
  188.  
  189.          this.entries.removeAllElements();
  190.  
  191.          for(int var4 = 0; var4 < var6; ++var4) {
  192.             this.entries.addElement(var3[var4]);
  193.          }
  194.  
  195.       }
  196.    }
  197.  
  198.    public LDAPEntry next() throws LDAPException {
  199.       Object var1 = this.nextElement();
  200.       if (!(var1 instanceof LDAPReferralException) && !(var1 instanceof LDAPException)) {
  201.          return var1 instanceof LDAPEntry ? (LDAPEntry)var1 : null;
  202.       } else {
  203.          throw (LDAPException)var1;
  204.       }
  205.    }
  206.  
  207.    public Object nextElement() {
  208.       if (this.entries.size() > 0) {
  209.          Object var2 = this.entries.elementAt(0);
  210.          this.entries.removeElementAt(0);
  211.          return var2;
  212.       } else if (this.referralResults.size() > 0) {
  213.          return this.nextReferralElement();
  214.       } else if (this.exceptions != null && this.exceptions.size() > 0) {
  215.          Object var1 = this.exceptions.elementAt(0);
  216.          this.exceptions.removeElementAt(0);
  217.          return var1;
  218.       } else {
  219.          return null;
  220.       }
  221.    }
  222.  
  223.    Object nextReferralElement() {
  224.       LDAPSearchResults var1 = (LDAPSearchResults)this.referralResults.elementAt(0);
  225.       if ((var1.persistentSearch || !var1.hasMoreElements()) && !var1.persistentSearch) {
  226.          this.referralResults.removeElementAt(0);
  227.       } else {
  228.          Object var2 = var1.nextElement();
  229.          if (var2 != null) {
  230.             return var2;
  231.          }
  232.  
  233.          if (var2 == null || !var1.hasMoreElements()) {
  234.             this.referralResults.removeElementAt(0);
  235.          }
  236.       }
  237.  
  238.       return null;
  239.    }
  240.  
  241.    public boolean hasMoreElements() {
  242.       while(this.entries.size() == 0 && !this.searchComplete) {
  243.          this.fetchResult();
  244.       }
  245.  
  246.       if (this.entries.size() == 0 && (this.exceptions == null || this.exceptions.size() == 0)) {
  247.          while(this.referralResults.size() > 0) {
  248.             LDAPSearchResults var1 = (LDAPSearchResults)this.referralResults.elementAt(0);
  249.             if (var1.hasMoreElements()) {
  250.                return true;
  251.             }
  252.  
  253.             this.referralResults.removeElementAt(0);
  254.          }
  255.       }
  256.  
  257.       if (this.entries.size() > 0 || this.exceptions != null && this.exceptions.size() > 0) {
  258.          return true;
  259.       } else {
  260.          return false;
  261.       }
  262.    }
  263.  
  264.    public int getCount() {
  265.       int var1 = 0;
  266.       int var2 = 0;
  267.  
  268.       for(int var3 = 0; var3 < this.referralResults.size(); ++var3) {
  269.          LDAPSearchResults var4 = (LDAPSearchResults)this.referralResults.elementAt(var3);
  270.          var1 += var4.getCount();
  271.       }
  272.  
  273.       if (this.resultSource != null) {
  274.          var2 = this.resultSource.getCount();
  275.       }
  276.  
  277.       return this.exceptions != null ? var2 + this.exceptions.size() + var1 : var2 + var1;
  278.    }
  279.  
  280.    int getID() {
  281.       return this.resultSource == null ? -1 : this.resultSource.getID();
  282.    }
  283.  
  284.    void abandon() {
  285.       synchronized(this){}
  286.  
  287.       try {
  288.          this.searchComplete = true;
  289.       } catch (Throwable var3) {
  290.          throw var3;
  291.       }
  292.  
  293.    }
  294.  
  295.    private synchronized void fetchResult() {
  296.       if (this.resultSource != null) {
  297.          synchronized(this){}
  298.  
  299.          try {
  300.             if (!this.searchComplete && !this.firstResult) {
  301.                JDAPMessage var3 = this.resultSource.nextResult();
  302.                if (var3 == null) {
  303.                   try {
  304.                      JDAPMessage var6 = this.resultSource.getResponse();
  305.                      this.currConn.checkSearchMsg(this, var6, this.currCons, this.currBase, this.currScope, this.currFilter, this.currAttrs, this.currAttrsOnly);
  306.                   } catch (LDAPException var18) {
  307.                      System.err.println("Exception: " + var18);
  308.                   } finally {
  309.                      this.currConn.releaseSearchListener(this.resultSource);
  310.                   }
  311.  
  312.                   this.searchComplete = true;
  313.                   if (this.connectionToClose == null) {
  314.                      return;
  315.                   }
  316.  
  317.                   try {
  318.                      this.connectionToClose.disconnect();
  319.                   } catch (LDAPException var17) {
  320.                   }
  321.  
  322.                   this.connectionToClose = null;
  323.                   return;
  324.                }
  325.  
  326.                try {
  327.                   this.currConn.checkSearchMsg(this, var3, this.currCons, this.currBase, this.currScope, this.currFilter, this.currAttrs, this.currAttrsOnly);
  328.                } catch (LDAPException var20) {
  329.                   System.err.println("Exception: " + var20);
  330.                }
  331.  
  332.                return;
  333.             }
  334.  
  335.             this.firstResult = false;
  336.          } catch (Throwable var21) {
  337.             throw var21;
  338.          }
  339.  
  340.       }
  341.    }
  342. }
  343.