view software/mpdl-services/mpiwg-mpdl-lt/src/de/mpg/mpiwg/berlin/mpdl/lt/morph/db/DbEnvMorph.java @ 19:4a3641ae14d2

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 09 Nov 2011 15:32:05 +0100
parents
children e845310098ba
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.lt.morph.db;

import java.io.File;

import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;

import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException;

public class DbEnvMorph {
  private String dataDir;
  private File envPath;
  private Environment env;
  private EnvironmentConfig envConfig;
  private DatabaseConfig dbConfig;
  private Database lemmaDB;
  private Database formDB;

  public DbEnvMorph() {
  }

  public void setDataDir(String dataDir) {
    this.dataDir = dataDir;
  }
  
  public void init() throws ApplicationException {
    try {
      envConfig = new EnvironmentConfig();
      dbConfig = new DatabaseConfig();
      envConfig.setReadOnly(false);
      dbConfig.setReadOnly(false);
      envConfig.setAllowCreate(true);
      dbConfig.setAllowCreate(true);
      envConfig.setTransactional(true);
      dbConfig.setTransactional(true);
      // allow duplicates for keys
      dbConfig.setSortedDuplicates(true);
      envPath = new File(dataDir);
      env = new Environment(envPath, envConfig);
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }

  public void openDatabases() throws ApplicationException {
    try {
      // open databases (and create them if they do not exist)
      lemmaDB = env.openDatabase(null, "LemmaDB", dbConfig);
      formDB = env.openDatabase(null, "FormDB", dbConfig);
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }
  
  public void removeDatabases() throws ApplicationException {
    try {
      if (formDB != null)
        formDB.close();
      if (lemmaDB != null)
        lemmaDB.close();
      env.removeDatabase(null, "LemmaDB");    
      env.removeDatabase(null, "FormDB");
      formDB = null;
      lemmaDB = null;
      /*   
      boolean bla = true;
      env.truncateDatabase(null, "LemmaDB", bla);    
      env.truncateDatabase(null, "FormDB", bla);
      */
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }
  
  public Environment getEnv() {
    return env;
  }

  public Database getLemmaDB() {
    return lemmaDB;
  }

  public Database getFormDB() {
    return formDB;
  }

  public void close() throws ApplicationException {
    if (env != null) {
      try {
        if (formDB != null)
          formDB.close();
        if (lemmaDB != null)
          lemmaDB.close();
        if (env != null)
          env.close();
      } catch (DatabaseException e) {
        throw new ApplicationException(e);
      }
    }
  }
}