00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 package org.openmobileis.database.fastobjectdb.synchro.client;
00030
00031 import java.util.Enumeration;
00032 import java.util.Hashtable;
00033
00034 import org.openmobileis.common.context.ApplicationContextManager;
00035 import org.openmobileis.common.util.PropertiesManager;
00036 import org.openmobileis.common.util.exception.DatabaseException;
00037 import org.openmobileis.database.fastobjectdb.FastObjectDB;
00038 import org.openmobileis.database.fastobjectdb.FastObjectDBManager;
00039 import org.openmobileis.database.fastobjectdb.db.FODBCollection;
00040 import org.openmobileis.database.fastobjectdb.db.crypto.FODBCypher;
00041 import org.openmobileis.synchro.openmsp.client.db.SyncActionDBManager;
00042
00043
00055 public final class SynchroFastObjectDBManager extends FastObjectDBManager {
00056 private static Hashtable cypherList;
00057
00064 public static FastObjectDB getCurrentFODB() throws DatabaseException {
00065 if (db == null) {
00066 String dbPath = PropertiesManager.getManager().getProperty("fastobjectdb.database.path");
00067 String dbname = PropertiesManager.getManager().getProperty("fastobjectdb.database.name");
00068 if ((dbPath == null) || (dbname == null)) {
00069 throw new DatabaseException("FPDB ERROR : FODB path or name property is not set. Can't create db");
00070 }
00071 synchronized(SynchroFastObjectDBManager.class) {
00072 if (db==null) {
00073 try {
00074 db = SynchroFastObjectDB.open(dbPath, dbname);
00075 ApplicationContextManager.getManager().addManager(db);
00076 if (cypherList != null) {
00077 Enumeration keys = cypherList.keys();
00078 while (keys.hasMoreElements()) {
00079 String colName = (String) keys.nextElement();
00080 FODBCollection col = db.getCollection(colName);
00081 if (col == null) {
00082 throw new DatabaseException("FPDB ERROR : FODB collection does not exist for declared collection cypher "+colName);
00083 }
00084 col.setCollectionCypher((FODBCypher)cypherList.get(colName));
00085 }
00086 cypherList = null;
00087 }
00088
00089 SyncActionDBManager.registerSyncActionDBQueryManager(new FODBSyncActionDBQueryManager());
00090 SyncActionDBManager.getManager();
00091 } catch (Throwable ex) {
00092 throw new DatabaseException(ex);
00093 }
00094 }
00095 }
00096 }
00097 return db;
00098 }
00099
00103 public static void flushDB() throws DatabaseException{
00104 if (db != null) {
00105 FODBCollection[] colList = db.getDatabaseCollectionArray();
00106 cypherList = new Hashtable();
00107 for (int i=0; i<colList.length; i++) {
00108 FODBCypher cypher = colList[i].getCollectionCypher();
00109 if (cypher != null) {
00110 cypherList.put(colList[i].getName(), cypher);
00111 }
00112 }
00113 }
00114 db=null;
00115 SynchroFastObjectDBManager.getCurrentFODB();
00116 }
00117 }