view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/lt/lex/db/DbEnvLex.java @ 0:408254cf2f1d

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 24 Nov 2010 17:24:23 +0100
parents
children
line wrap: on
line source

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

import java.io.File;
import java.util.HashMap;

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 DbEnvLex {
  private String dataDir;
  private File envPath;
  private Environment env;
  private EnvironmentConfig envConfig;
  private DatabaseConfig dbConfig;
  private HashMap<String, Database> lexiconDBs = new HashMap<String, Database>();

  public DbEnvLex() {
  }

  public void setDataDir(String dataDir) {
    this.dataDir = dataDir;
  }
  
  public void initReadOnly() throws ApplicationException {
    try {
      envConfig = new EnvironmentConfig();
      dbConfig = new DatabaseConfig();
      envPath = new File(dataDir);
      env = new Environment(envPath, envConfig);
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }

  public void initReadWrite() 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);
      envPath = new File(dataDir);
      env = new Environment(envPath, envConfig);
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }

  public void openDatabase(String lexiconName) throws ApplicationException {
    try {
      Database lexDB = lexiconDBs.get(lexiconName);
      if (lexDB == null) {
        Database lexiconDB = env.openDatabase(null, lexiconName + ".db", dbConfig);
        lexiconDBs.put(lexiconName, lexiconDB);
      }
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }
  
  public void closeDatabase(String lexiconName) throws ApplicationException {
    try {
      if (lexiconDBs != null) {
        Database lexiconDB = lexiconDBs.get(lexiconName);
        if (lexiconDB != null)
          lexiconDB.close();
      }
    } catch (DatabaseException e) {
      throw new ApplicationException(e);
    }
  }
  
  public Environment getEnv() {
    return env;
  }

  public Database getLexiconDB(String lexiconName) {
    Database lexiconDB = lexiconDBs.get(lexiconName);
    return lexiconDB;
  }

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