Package org.huihoo.willow.store

Source Code of org.huihoo.willow.store.DatabaseLoader

//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010  ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge     : http://sourceforge.net/projects/huihoo
* Mailing list     : willow@lists.sourceforge.net
*/
//----------------------------END  LICENSE-----------------------------
package org.huihoo.willow.store;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Enumeration;

import org.apache.commons.digester.Digester;
import org.huihoo.willow.startup.DigesterFactory;
import org.huihoo.workflow.store.spi.SpiCaseDatabase;
import org.huihoo.workflow.store.spi.SpiUserDatabase;
import org.xml.sax.InputSource;

import org.huihoo.workflow.impl.store.DatabaseRegistry;

/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class DatabaseLoader
{
  public static void loadOnStartup(String databaseXml)
  {
    if(databaseXml==null || databaseXml.length()==0)
    {
      return;
    }
   
    File databaseFile = new File(databaseXml);
    if (!databaseFile.isAbsolute())
    {
      databaseFile = new File(System.getProperty("willow.home"), databaseXml);
    }

    if (!databaseFile.exists() || !databaseFile.isFile())
    {
      String sysPropDatabase=System.getProperty(Constants.PROPS_WILLOW_DATABASE);
      if(sysPropDatabase==null)
      {
        databaseFile=null;
      }
      else
      {
        databaseFile=new File(sysPropDatabase);
      }
    }

    if (databaseFile==null || !databaseFile.exists() || !databaseFile.isFile())
    {
      return;
    }   
   
    Digester dbDigester = DigesterFactory.newDigester(false, false, new DatabaseRuleSet());
    ClassLoader clazzLoader = DatabaseLoader.class.getClassLoader();
    dbDigester.setClassLoader(clazzLoader);
    dbDigester.setUseContextClassLoader(false);
    InputSource inputSource = null;
    InputStream inputStream = null;
    try
    {
      inputStream = new FileInputStream(databaseFile);
      inputSource = new InputSource("file://" + databaseFile.getAbsolutePath());
    }
    catch (Exception e)
    {
      ;
    }

    if (inputStream == null)
    {
      return;
    }

    DatabaseEntries entries = new DatabaseEntries();
    try
    {
      inputSource.setByteStream(inputStream);
      dbDigester.push(entries);
      dbDigester.parse(inputSource);
      inputStream.close();
    }
    catch (Exception e)
    {
      System.out.println("DatabaseLoader.loadOnStartup: " + e);
      e.printStackTrace(System.out);
      return;
    }

    Enumeration databases = entries.entries();
    while (databases.hasMoreElements())
    {
      DatabaseEntry database =
        (DatabaseEntry) entries.findDatabaseEntry((String) databases.nextElement());
      registerDatabase(database);
    }
  }

  private static void registerDatabase(DatabaseEntry databaseEntry)
  {
    String driver = databaseEntry.getDriver();
    if (driver == null)
    {
      return;
    }

    ClassLoader clazzLoader = DatabaseLoader.class.getClassLoader();

    String userdatabaseClass = databaseEntry.getUserDatabaseClass();
    String casedatabaseClass = databaseEntry.getCaseDatabaseClass();

    if (userdatabaseClass != null)
    {
      try
      {
        Class clazz = clazzLoader.loadClass(userdatabaseClass);
        SpiUserDatabase spiUserDatabase = (SpiUserDatabase) clazz.newInstance();
        DatabaseRegistry.registerUserDB(driver, spiUserDatabase);
      }
      catch (Throwable e)
      {
        ;
      }
    }

    if (casedatabaseClass != null)
    {
      try
      {
        Class clazz = clazzLoader.loadClass(casedatabaseClass);
        SpiCaseDatabase spiCaseDatabase = (SpiCaseDatabase) clazz.newInstance();
        DatabaseRegistry.registerCaseDB(driver, spiCaseDatabase);
      }
      catch (Throwable e)
      {
        ;
      }
    }
  }
}
TOP

Related Classes of org.huihoo.willow.store.DatabaseLoader

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.