Package org.exist.xquery

Source Code of org.exist.xquery.SAXStorageTest

/*
* Created on 23 juin 2004
$Id$
*/
package org.exist.xquery;

import java.io.File;

import junit.framework.TestCase;

import org.exist.xmldb.DatabaseInstanceManager;
import org.exist.xmldb.LocalCollection;
import org.exist.xmldb.XmldbURI;
import org.xml.sax.ContentHandler;
import org.xml.sax.XMLReader;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.base.XMLDBException;
import org.xmldb.api.modules.CollectionManagementService;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.modules.XPathQueryService;

/** This TestCase is for direct storage of SAX events in the database; one has to implement an XMLReader.
* It is also a stress test that creates large documents using SAX, use main() for this.              
* @author jmv
*/
public class SAXStorageTest extends TestCase {
  /** */
  public SAXStorageTest(String s) {
    super(s);
  }

  private XMLResource doc;
  private Collection root;
  private static String FILE_STORED;
 
  protected void setUp() {
    try {
      // initialize driver
      Class<?> cl = Class.forName("org.exist.xmldb.DatabaseImpl");
      Database database = (Database) cl.newInstance();
      database.setProperty("create-database", "true");
      DatabaseManager.registerDatabase(database);
      root = DatabaseManager.getCollection( XmldbURI.LOCAL_DB, "admin", "");
      CollectionManagementService service =
        (CollectionManagementService) root.getService(
          "CollectionManagementService",
          "1.0");
      root = service.createCollection("test");
      FILE_STORED = "big.xml";
      doc = (XMLResource) root.createResource(FILE_STORED, "XMLResource");
    } catch (ClassNotFoundException e) {
    } catch (InstantiationException e) {
    } catch (IllegalAccessException e) {
    } catch (XMLDBException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }


  /**
   * @param xquery
   * @param mess
   * @return TODO  
   */
  private ResourceSet querySingleLine(String xquery, String mess) throws XMLDBException {
    // query a single line:
    XPathQueryService service =
      (XPathQueryService) root.getService(
          "XPathQueryService",   "1.0");
    ResourceSet result = null;
    if ( xquery != "") {
      // xquery = "/*/*[2]";
      System.out.println("Querying \""+xquery+"\" ..." );
      long t0 = System.currentTimeMillis();
      result = service.queryResource( "big.xml", xquery );
      // assertEquals(1, result.getSize());
      long t1 = System.currentTimeMillis();
      System.out.println("Time for query \""+xquery+"\" on "+ mess + ": " + ( t1-t0) + " ms." );
    }
    return result;
  }
 
  /** Store in the "classical" eXist way: the XMLResource stores an XML string before
   * storeResource() stores it in the database.
   */
  public void testQueryStoreContentAsSAX() {
    try {
      ContentHandler databaseInserter = doc.setContentAsSAX();
      (new TabularXMLReader()).writeDocument(databaseInserter);
      root.storeResource(doc);
      querySingleLine("", "testQueryStoreContentAsSAX");
    } catch (Exception e) {
      fail(e.getMessage());
    }     
  }

  /** Store in the new way: the XMLResource stores just a File object before
   * storeResource() stores the SAX events in the database.
   * @throws XMLDBException
*/ 
  public void testQueryBigDocument() {
    try {
      XMLReader dataSource = new TabularXMLReader();
      storeSAXEvents(dataSource);
      ResourceSet result = querySingleLine("", "testQueryBigDocument");
      assertEquals(1, result.getSize());
    } catch (XMLDBException e) {
      fail(e.getMessage());
    }     
  }

  /**
   * @param dataSource
   * @throws XMLDBException
   */
  private void storeSAXEvents(XMLReader dataSource) {
    try {
      if ( root instanceof LocalCollection ) {
        long t0 = System.currentTimeMillis();
        LocalCollection coll = (LocalCollection)root;
        coll.setReader(dataSource);
                                String existHome = System.getProperty("exist.home");
                                File existDir = existHome==null ? new File(".") : new File(existHome);
        doc.setContent(new File(existDir,FILE_STORED));
        coll.storeResource(doc);
        long t1 = System.currentTimeMillis();
        System.out.println("Time for storing:  " + ( t1-t0) + " ms." );
      }
    } catch (XMLDBException e) {
      fail(e.getMessage());
    }     
  }

  /** arguments: lines , columns, XQuery string */
  public static void main(String[] args) {
    String xquery = "";
    int lines = 20; int columns = 20;
    if ( args.length >= 2 ) {
      lines = Integer.parseInt(args[0]);
      columns = Integer.parseInt(args[1]);
    }
    if ( args.length == 3 ) {
      xquery = args[2];
    }
    if ( args.length < 2 ) {
      System.out.println("Taking default values");
    }
   
    SAXStorageTest tester = new SAXStorageTest(null);
    tester.setUp();
    XMLReader dataSource = new TabularXMLReader( lines , columns);
    tester.storeSAXEvents(dataSource);
    System.out.println("Stored tabular data, " +lines+" lines, "+columns+" columns");
   
    try {
      if ( xquery != "" ) {
        ResourceSet result = tester.querySingleLine(xquery, "testQueryBigDocument" );
        System.out.println("result size: " + result.getSize() );
      }
      shutdown( tester.root );
    } catch (XMLDBException e) {
      fail(e.getMessage());
    }     
  }
 
  private static void shutdown(Collection collection) {
    try {
      //    shutdownDB the database gracefully
      DatabaseInstanceManager manager =
        (DatabaseInstanceManager) collection.getService("DatabaseInstanceManager", "1.0");
      manager.shutdown();
    } catch (XMLDBException e) {
      fail(e.getMessage());
    }     
  }
}
TOP

Related Classes of org.exist.xquery.SAXStorageTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.