You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by vl...@apache.org on 2002/11/17 09:56:06 UTC

cvs commit: xml-xindice/java/src/org/apache/xindice/client/xmldb/embed DatabaseImpl.java

vladimir    2002/11/17 00:56:06

  Modified:    java/src/org/apache/xindice/client/xmldb/embed
                        DatabaseImpl.java
  Log:
  use env. variable to define the configuration file
  
  Revision  Changes    Path
  1.5       +59 -37    xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/DatabaseImpl.java
  
  Index: DatabaseImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xindice/java/src/org/apache/xindice/client/xmldb/embed/DatabaseImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DatabaseImpl.java	31 Oct 2002 06:58:48 -0000	1.4
  +++ DatabaseImpl.java	17 Nov 2002 08:56:06 -0000	1.5
  @@ -1,4 +1,3 @@
  -package org.apache.xindice.client.xmldb.embed;
   /*
    * The Apache Software License, Version 1.1
    *
  @@ -58,26 +57,39 @@
    * $Id$
    */
   
  +package org.apache.xindice.client.xmldb.embed;
  +
   import org.apache.xindice.client.xmldb.CommonConfigurable;
   import org.apache.xindice.core.Database;
  +import org.apache.xindice.server.Xindice;
   import org.apache.xindice.util.Configuration;
  +import org.apache.xindice.util.XindiceException;
   import org.apache.xindice.xml.dom.DOMParser;
   
  -import org.w3c.dom.*;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +
   import org.xmldb.api.base.Collection;
   import org.xmldb.api.base.ErrorCodes;
   import org.xmldb.api.base.XMLDBException;
   
  +import java.io.File;
  +import java.io.FileInputStream;
  +import java.io.FileNotFoundException;
  +
   /**
    * implements XML:DB's <code>Database</code> interface providing
    * embedded access to a Xindice database.
    *
    * @author Kimbro Staken <ks...@xmldatabases.org>
    * @author James Bates <ja...@amplexor.com>
  + * @author <a href="mailto:vladimir@apache.org">Vladimir R. Bossicard</a>
    * @version 1
    */
   public class DatabaseImpl extends CommonConfigurable implements org.xmldb.api.base.Database {
  -    
  +
  +   private static Log log = LogFactory.getLog("org.apache.xindice.client.embed");
  +
       /* prefix used to denote XML:DB URI's that should use this driver */
       static String DRIVER_NAME = "xindice-embed";
       
  @@ -85,37 +97,49 @@
       private String CONFORMANCE_LEVEL = "0";
   
       protected Database db;
  -    
  -    /**
  -     * Creates new <code>DatabaseImpl</code> instance
  -     */
  -    public DatabaseImpl() {
  -       // try to find an existing Database by name
  -       // I assume that the name arg should not be hardcoded, but do
  -       // not know what else to do here (the configXML was hardcoded when I made this change)
  -       // if the configXML is supplied from somewhere else, the name should be taken from there instead
  -       db = Database.getDatabase("db");
  -       if(db == null)
  -       {
  -       db = new Database();
  -       }
  -       String configXML = "<root-collection dbroot=\"./db/\" name=\"db\">" +
  -          "<queryengine>" +
  -          "<resolver autoindex=\"false\" class=\"org.apache.xindice.core.query.XPathQueryResolver\" />" +
  -          "<resolver class=\"org.apache.xindice.core.xupdate.XUpdateQueryResolver\" />" +
  -          "</queryengine>" +
  -          "</root-collection>";
  -
  -       try {
  -          Document doc = DOMParser.toDocument(configXML);
  -
  -          db.setConfig(new Configuration(doc.getDocumentElement(), false));   
  -       }
  -       catch (Exception e) {
  -          e.printStackTrace();
  -       }
  -       
  -    }
  +
  +   /**
  +    * Creates new <code>DatabaseImpl</code> instance. The configuration is
  +    * loaded from the file defined in the PROP_XINDICE_CONFIGURATION system
  +    * variable.
  +    *
  +    * This is only a temporarly solution since the question of a new init
  +    * method is raised in the xmldb:api group. Another solution could be to
  +    * use the Configurable interface and only create the database when the
  +    * getCollection method is called.
  +    */
  +   public DatabaseImpl()
  +         throws FileNotFoundException,
  +         XindiceException {
  +      Configuration config;
  +
  +      String configFile = System.getProperty(Xindice.PROP_XINDICE_CONFIGURATION);
  +      if (configFile != null && !configFile.equals("")) {
  +         FileInputStream configXMLFile = new FileInputStream(new File(configFile));
  +
  +         config = new Configuration(DOMParser.toDocument(configXMLFile), false);
  +      }
  +      else {
  +         config = new Configuration(DOMParser.toDocument(Xindice.DEFAULT_CONFIGURATION), false);
  +      }
  +
  +      config = config.getChild("root-collection", false);
  +
  +      /* First try to find an existing Database by name.  If it doesn't exist,
  +       * we create one and in both cases we configure them with the current
  +       * configuration */
  +      String dbname = config.getAttribute(Database.NAME);
  +
  +      this.db = Database.getDatabase(dbname);
  +      if (this.db == null) {
  +         this.db = new Database();
  +      }
  +
  +      if (log.isInfoEnabled()) {
  +         log.info("Database name: " + dbname + "'");
  +      }
  +      db.setConfig(config);
  +   }
   
       /**
        * Checks whether this driver can handle the <code>xmldbURI</code> collection
  @@ -196,8 +220,6 @@
              throw new XMLDBException(ErrorCodes.INVALID_URI,
                                       "Collection name must begin with a '/'" );
           }
  -        
  -        
       }
       
       /**