home *** CD-ROM | disk | FTP | other *** search
/ Online Today 2000 January / Onto0100.iso / pc / JAVA / MSJAVX86.EXE / xmldso.cab / com / ms / xml / dso / XMLRowsetProvider.class (.txt) < prev   
Encoding:
Java Class File  |  1998-11-05  |  5.5 KB  |  315 lines

  1. package com.ms.xml.dso;
  2.  
  3. import com.ms.com.ComLib;
  4. import com.ms.com.ComSuccessException;
  5. import com.ms.osp.OLEDBSimpleProvider;
  6. import com.ms.osp.OLEDBSimpleProviderListener;
  7. import com.ms.xml.om.Element;
  8. import com.ms.xml.om.ElementEnumeration;
  9. import com.ms.xml.om.ElementFactory;
  10. import com.ms.xml.util.Name;
  11. import java.util.Enumeration;
  12. import java.util.Vector;
  13.  
  14. class XMLRowsetProvider implements OLEDBSimpleProvider {
  15.    Element root;
  16.    Element schema;
  17.    Element row;
  18.    ElementEnumeration iter;
  19.    int rowindex;
  20.    Name rowset;
  21.    XMLRowsetProvider parent;
  22.    OLEDBSimpleProviderListener listener;
  23.    ElementFactory factory;
  24.    Vector childProviders;
  25.    static Name nameCOLUMN = Name.create("COLUMN");
  26.    static Name nameROWSET = Name.create("ROWSET");
  27.    static Name nameNAME = Name.create("NAME");
  28.    static Name nameATTRIBUTE = Name.create("ATTRIBUTE");
  29.    static Name nameVALUE = Name.create("VALUE");
  30.  
  31.    public Element findChild(Element var1, Name var2) {
  32.       ElementEnumeration var3 = new ElementEnumeration(var1, (Name)null, 0);
  33.  
  34.       while(var3.hasMoreElements()) {
  35.          Element var4 = (Element)var3.nextElement();
  36.          if (var4.getType() == 0 && var4.getTagName() == var2) {
  37.             return var4;
  38.          }
  39.  
  40.          if (var4.numElements() > 0) {
  41.             var4 = this.findChild(var4, var2);
  42.             if (var4 != null) {
  43.                return var4;
  44.             }
  45.          }
  46.       }
  47.  
  48.       return null;
  49.    }
  50.  
  51.    public void stopTransfer() {
  52.    }
  53.  
  54.    public XMLRowsetProvider findChildProvider(Element var1) {
  55.       if (this.childProviders != null) {
  56.          Enumeration var2 = this.childProviders.elements();
  57.  
  58.          while(var2.hasMoreElements()) {
  59.             XMLRowsetProvider var3 = (XMLRowsetProvider)var2.nextElement();
  60.             if (var3.root == var1) {
  61.                return var3;
  62.             }
  63.          }
  64.       }
  65.  
  66.       return null;
  67.    }
  68.  
  69.    public int getRowCount() {
  70.       int var1 = 0;
  71.       this.iter.reset();
  72.  
  73.       while(this.iter.nextElement() != null) {
  74.          ++var1;
  75.       }
  76.  
  77.       this.iter.reset();
  78.       this.row = (Element)this.iter.nextElement();
  79.       this.rowindex = 0;
  80.       return var1;
  81.    }
  82.  
  83.    public int getColumnCount() {
  84.       int var1 = this.schema.getChildren().getLength();
  85.       return var1;
  86.    }
  87.  
  88.    public XMLRowsetProvider(Element var1, Element var2, ElementFactory var3, XMLRowsetProvider var4) {
  89.       this.root = var1;
  90.       this.schema = var2;
  91.       this.parent = var4;
  92.       this.factory = var3;
  93.       this.rowset = Name.create((String)var2.getAttribute(nameNAME));
  94.       this.resetIterator();
  95.    }
  96.  
  97.    public String getLocale() {
  98.       return "";
  99.    }
  100.  
  101.    void removeChildProvider(Element var1) {
  102.       XMLRowsetProvider var2 = this.findChildProvider(var1);
  103.       if (var2 != null) {
  104.          this.childProviders.removeElement(var2);
  105.       }
  106.  
  107.    }
  108.  
  109.    public int isAsync() {
  110.       return 0;
  111.    }
  112.  
  113.    public Object getVariant(int var1, int var2, int var3) {
  114.       Object var4 = null;
  115.       if (var1 == 0) {
  116.          if (var2 <= this.getColumnCount()) {
  117.             Element var5 = this.schema.getChildren().getChild(var2 - 1);
  118.             String var6 = (String)var5.getAttribute(nameNAME);
  119.             if (var6 != null) {
  120.                if (var5.getTagName() != nameCOLUMN) {
  121.                   var4 = "^" + var6 + "^";
  122.                } else {
  123.                   var4 = var6;
  124.                }
  125.             }
  126.          }
  127.       } else {
  128.          this.getRow(var1);
  129.          var4 = this.getColumn(this.row, var2 - 1);
  130.       }
  131.  
  132.       return var4;
  133.    }
  134.  
  135.    public void setVariant(int var1, int var2, int var3, Object var4) {
  136.       this.getRow(var1);
  137.       if (this.row != null) {
  138.          Element var5 = this.schema.getChildren().getChild(var2 - 1);
  139.          if (var5.getTagName() == nameCOLUMN) {
  140.             String var6 = (String)var5.getAttribute(nameNAME);
  141.             if (var6 != null) {
  142.                Name var7 = Name.create(var6);
  143.                Element var8 = this.findChild(this.row, var7);
  144.                if (var8 == null) {
  145.                   var8 = this.factory.createElement(this.row, 0, var7, (String)null);
  146.                }
  147.  
  148.                if (var8 != null) {
  149.                   if (var8.numElements() == 0) {
  150.                      this.factory.createElement(var8, 1, (Name)null, (String)null);
  151.                   }
  152.  
  153.                   if (var8.numElements() == 1 && var8.getChild(0).getType() == 1) {
  154.                      if (this.listener != null) {
  155.                         this.listener.aboutToChangeCell(var1, var2);
  156.                      }
  157.  
  158.                      Element var9 = var8.getChild(0);
  159.                      String var10 = (String)var4;
  160.                      var9.setText(var10);
  161.                      if (this.listener != null) {
  162.                         this.listener.cellChanged(var1, var2);
  163.                      }
  164.                   }
  165.                }
  166.             }
  167.          }
  168.  
  169.       }
  170.    }
  171.  
  172.    public int getEstimatedRows() {
  173.       return this.getRowCount();
  174.    }
  175.  
  176.    public int deleteRows(int var1, int var2) {
  177.       try {
  178.          if (this.listener != null) {
  179.             this.listener.aboutToDeleteRows(var1, var2);
  180.          }
  181.       } catch (ComSuccessException var6) {
  182.       }
  183.  
  184.       int var3 = 0;
  185.  
  186.       for(int var4 = var1; var4 < var1 + var2; ++var4) {
  187.          Element var5 = this.getRow(var1);
  188.          if (var5 != null) {
  189.             ++var3;
  190.             this.root.removeChild(var5);
  191.             this.removeChildProvider(var5);
  192.          }
  193.       }
  194.  
  195.       this.resetIterator();
  196.       if (this.listener != null) {
  197.          this.listener.deletedRows(var1, var2);
  198.       }
  199.  
  200.       return var3;
  201.    }
  202.  
  203.    public int insertRows(int var1, int var2) {
  204.       try {
  205.          if (this.listener != null) {
  206.             this.listener.aboutToInsertRows(var1, var2);
  207.          }
  208.       } catch (ComSuccessException var7) {
  209.       }
  210.  
  211.       Name var3 = Name.create(this.schema.getAttribute("NAME").toString());
  212.  
  213.       for(int var4 = var1; var4 < var1 + var2; ++var4) {
  214.          Element var5 = this.factory.createElement((Element)null, 0, var3, (String)null);
  215.          Element var6 = this.root.getChildren().getChild(var4);
  216.          this.root.addChild(var5, var6);
  217.       }
  218.  
  219.       this.resetIterator();
  220.       if (this.listener != null) {
  221.          this.listener.insertedRows(var1, var2);
  222.       }
  223.  
  224.       return var2;
  225.    }
  226.  
  227.    public void removeOLEDBSimpleProviderListener(OLEDBSimpleProviderListener var1) {
  228.       if (this.listener != null) {
  229.          ComLib.release(this.listener);
  230.       }
  231.  
  232.       this.listener = null;
  233.    }
  234.  
  235.    void addChildProvider(XMLRowsetProvider var1) {
  236.       if (this.childProviders == null) {
  237.          this.childProviders = new Vector();
  238.       }
  239.  
  240.       this.childProviders.addElement(var1);
  241.    }
  242.  
  243.    public int getRWStatus(int var1, int var2) {
  244.       return 1;
  245.    }
  246.  
  247.    public OLEDBSimpleProviderListener getListener() {
  248.       return this.listener;
  249.    }
  250.  
  251.    public void addOLEDBSimpleProviderListener(OLEDBSimpleProviderListener var1) {
  252.       if (this.listener != null) {
  253.          ComLib.release(this.listener);
  254.       }
  255.  
  256.       this.listener = var1;
  257.    }
  258.  
  259.    Element getRow(int var1) {
  260.       if (this.rowindex != var1 - 1) {
  261.          if (this.rowindex == var1 - 2) {
  262.             ++this.rowindex;
  263.             this.row = (Element)this.iter.nextElement();
  264.          } else {
  265.             this.iter.reset();
  266.             this.row = (Element)this.iter.nextElement();
  267.             this.rowindex = 0;
  268.  
  269.             for(int var2 = 0; var2 < var1 - 1; ++var2) {
  270.                this.row = (Element)this.iter.nextElement();
  271.                ++this.rowindex;
  272.             }
  273.          }
  274.       }
  275.  
  276.       return this.row;
  277.    }
  278.  
  279.    public int find(int var1, int var2, Object var3, int var4, int var5) {
  280.       return 0;
  281.    }
  282.  
  283.    void resetIterator() {
  284.       this.iter = new ElementEnumeration(this.root, this.rowset, 0);
  285.       this.row = (Element)this.iter.nextElement();
  286.       this.rowindex = 0;
  287.    }
  288.  
  289.    public Element getSchema() {
  290.       return this.schema;
  291.    }
  292.  
  293.    public Object getColumn(Element var1, int var2) {
  294.       Element var3 = this.schema.getChildren().getChild(var2);
  295.       Name var4 = Name.create((String)var3.getAttribute(nameNAME));
  296.       if (var3.getTagName() == nameCOLUMN) {
  297.          Element var7 = this.findChild(var1, var4);
  298.          if (var7 != null) {
  299.             String var6 = var7.getText();
  300.             return var6;
  301.          } else {
  302.             return null;
  303.          }
  304.       } else {
  305.          XMLRowsetProvider var5 = this.findChildProvider(var1);
  306.          if (var5 == null) {
  307.             var5 = new XMLRowsetProvider(var1, var3, this.factory, this);
  308.             this.addChildProvider(var5);
  309.          }
  310.  
  311.          return var5;
  312.       }
  313.    }
  314. }
  315.