<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window
    id="sample_win"
    onload="init()"
    height="200 px"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script type="application/x-javascript"><![CDATA[
  var tree;
  var out;
  var datasource;

  var Observer = {
      onBeginLoad: function(aSink) { out.label = 'Begin refresh';},
      onInterrupt: function(aSink) { out.label = 'Refresh interrupted!';},
      onResume: function(aSink) { out.label = 'Refresh resume!';},
      onEndLoad: function(aSink) { tree.builder.rebuild(); out.label = 'Refresh done'; },
      onError: function(aSink, aStatus, aErrorMsg) { alert('Error! ' + aErrorMsg); }
  };

  function init()
  {
    loadTree('tree', 'http://xulfr.org/sources/exemple_php_rdf/create_rdf.php'); 
    out = document.getElementById("out");
  }

  function loadTree(treeId, dsUrl)
  {
    try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
      datasource = RDF.GetDataSource(dsUrl);
      var tree = document.getElementById(treeId);
      tree.database.AddDataSource(datasource);
    }
    catch(e) {
      alert(e);
    }
  }


function reloadTree(treeId)
  {
    try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      var sink = datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink);
      sink.addXMLSinkObserver(Observer);
      datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Refresh(false);
      tree = document.getElementById(treeId);
    }
    catch(e) {
      alert(e);
    }
  }
  ]]></script>
  <button label="Refresh" oncommand="reloadTree('tree')" />
   <tree id="tree" flex="1" flags="dont-build-content" ref="urn:data:row" datasources="rdf:null">
     <treecols>
       <treecol id="id" label="Id" primary="true" flex="1"
         class="sortDirectionIndicator" sortActive="true"
         sortDirection="ascending"
         sort="rdf:http://dummy/rdf#id"/>
      <splitter class="tree-splitter"/>
      <treecol id="name" label="Name" flex="1"
        class="sortDirectionIndicator" sortActive="false"
        sortDirection="ascending"
        sort="rdf:http://dummy/rdf#name"/>
     </treecols>
     <template>
       <treechildren>
         <treeitem uri="rdf:*">
           <treerow>
             <treecell label="rdf:http://dummy/rdf#id"/>
             <treecell label="rdf:http://dummy/rdf#name"/>
           </treerow>
         </treeitem>
       </treechildren>
     </template>
   </tree>
   <statusbar flex="1"><statusbarpanel flex="1" id="out" label=""/></statusbar>
</window>
