home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / kav / xsl / SelectExpr.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-05-16  |  4.7 KB  |  189 lines

  1. package com.kav.xsl;
  2.  
  3. import java.io.PrintWriter;
  4. import java.util.Hashtable;
  5. import org.w3c.dom.Node;
  6.  
  7. class SelectExpr {
  8.    private UnionExpr unionExpr;
  9.    private Hashtable attrParents = new Hashtable();
  10.  
  11.    public SelectExpr() {
  12.    }
  13.  
  14.    public String toString() {
  15.       return this.unionExpr != null ? this.unionExpr.toString() : "";
  16.    }
  17.  
  18.    protected void getUnionExpr(UnionExpr var1) {
  19.       this.unionExpr = var1;
  20.    }
  21.  
  22.    protected void print(PrintWriter var1) {
  23.       if (this.unionExpr != null) {
  24.          this.unionExpr.print(var1);
  25.       }
  26.  
  27.    }
  28.  
  29.    protected NodeSet selectNodes(Node var1, Hashtable var2) {
  30.       if (this.unionExpr == null) {
  31.          return new NodeSet(0);
  32.       } else {
  33.          NodeSet var3 = new NodeSet();
  34.          this.attrParents.clear();
  35.          Object var4 = null;
  36.          Object var5 = null;
  37.  
  38.          for(int var6 = 0; var6 < this.unionExpr.getLength(); ++var6) {
  39.             PathExpr var10 = (PathExpr)this.unionExpr.item(var6);
  40.             NodeSet var9 = this.selectNodes(var10, var1, var2);
  41.  
  42.             for(int var7 = 0; var7 < var9.size(); ++var7) {
  43.                var3.add(var9.get(var7));
  44.             }
  45.  
  46.             var9.clear();
  47.          }
  48.  
  49.          var3 = this.reorder(var3);
  50.          this.attrParents.clear();
  51.          return var3;
  52.       }
  53.    }
  54.  
  55.    protected void setUnionExpr(UnionExpr var1) {
  56.       this.unionExpr = var1;
  57.    }
  58.  
  59.    private int childNumber(Node var1) {
  60.       int var2 = 0;
  61.  
  62.       for(Node var3 = var1; (var3 = var3.getPreviousSibling()) != null; ++var2) {
  63.       }
  64.  
  65.       return var2;
  66.    }
  67.  
  68.    private int compareOrders(int[] var1, int[] var2) {
  69.       for(int var3 = 0; var3 < var1.length && var3 < var2.length; ++var3) {
  70.          if (var1[var3] < var2[var3]) {
  71.             return -1;
  72.          }
  73.  
  74.          if (var2[var3] < var1[var3]) {
  75.             return 1;
  76.          }
  77.       }
  78.  
  79.       if (var1.length < var2.length) {
  80.          return -1;
  81.       } else {
  82.          return var2.length < var1.length ? 1 : 0;
  83.       }
  84.    }
  85.  
  86.    private int[] getDocumentOrder(Node var1, Hashtable var2) {
  87.       if (var1 == null) {
  88.          return new int[0];
  89.       } else {
  90.          Node var3 = var1;
  91.          if (var1.getNodeType() == 2) {
  92.             var3 = (Node)this.attrParents.get(var1);
  93.             if (var3 == null) {
  94.                int[] var4 = new int[]{0};
  95.                var2.put(var1, var4);
  96.             } else {
  97.                int[] var6 = (int[])var2.get(var3);
  98.                if (var6 != null) {
  99.                   var2.put(var1, var6);
  100.                }
  101.             }
  102.          }
  103.  
  104.          int[] var7 = (int[])var2.get(var3);
  105.          if (var7 != null) {
  106.             return var7;
  107.          } else {
  108.             int[] var5 = this.getDocumentOrder(var3.getParentNode(), var2);
  109.             var7 = new int[var5.length + 1];
  110.             System.arraycopy(var5, 0, var7, 1, var5.length);
  111.             var7[0] = this.childNumber(var3);
  112.             var2.put(var1, var7);
  113.             return var7;
  114.          }
  115.       }
  116.    }
  117.  
  118.    private NodeSet reorder(NodeSet var1) {
  119.       if (var1.size() < 2) {
  120.          return var1;
  121.       } else {
  122.          Hashtable var2 = new Hashtable(var1.size());
  123.  
  124.          for(int var3 = 0; var3 < var1.size(); ++var3) {
  125.             this.getDocumentOrder(var1.get(var3), var2);
  126.          }
  127.  
  128.          NodeSet var4 = new NodeSet(var1.size());
  129.          var4.add(var1.get(0));
  130.  
  131.          for(int var5 = 1; var5 < var1.size(); ++var5) {
  132.             Node var6 = var1.get(var5);
  133.             int[] var7 = (int[])var2.get(var6);
  134.  
  135.             for(int var8 = 0; var8 < var4.size(); ++var8) {
  136.                int[] var9 = (int[])var2.get(var4.get(var8));
  137.                if (this.compareOrders(var7, var9) < 0) {
  138.                   var4.add(var8, var6);
  139.                   break;
  140.                }
  141.  
  142.                if (var8 == var4.size() - 1) {
  143.                   var4.add(var6);
  144.                   break;
  145.                }
  146.             }
  147.          }
  148.  
  149.          return var4;
  150.       }
  151.    }
  152.  
  153.    private NodeSet selectNodes(PathExpr var1, Node var2, Hashtable var3) {
  154.       if (var1 != null && var2 != null && ((PatternExpr)var1).getLength() != 0) {
  155.          NodeSet var4 = new NodeSet();
  156.          if (var1.isAbsolute() && var2.getNodeType() != 9) {
  157.             var4.add(var2.getOwnerDocument());
  158.          } else {
  159.             var4.add(var2);
  160.          }
  161.  
  162.          for(int var5 = 0; var5 < ((PatternExpr)var1).getLength(); ++var5) {
  163.             FilterExpr var6 = (FilterExpr)((PatternExpr)var1).item(var5);
  164.             NodeSet var7 = new NodeSet();
  165.  
  166.             for(int var8 = 0; var8 < var4.size(); ++var8) {
  167.                Node var9 = var4.get(var8);
  168.                short var10 = var9.getNodeType();
  169.                if (var10 != 1 && var10 != 9) {
  170.                   var7.add(var9);
  171.                } else {
  172.                   this.selectNodes(var6, var9, var3, var7);
  173.                }
  174.             }
  175.  
  176.             var4 = var7;
  177.          }
  178.  
  179.          return var4;
  180.       } else {
  181.          return new NodeSet(0);
  182.       }
  183.    }
  184.  
  185.    private void selectNodes(FilterExpr param1, Node param2, Hashtable param3, NodeSet param4) {
  186.       // $FF: Couldn't be decompiled
  187.    }
  188. }
  189.