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.database.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
00042
00054 public final class SynchroFastObjectDBManager extends FastObjectDBManager {
00055 private static Hashtable cypherList;
00056
00063 public static FastObjectDB getCurrentFODB() throws DatabaseException {
00064 if (db == null) {
00065 String dbPath = PropertiesManager.getManager().getProperty("fastobjectdb.database.path");
00066 String dbname = PropertiesManager.getManager().getProperty("fastobjectdb.database.name");
00067 if ((dbPath == null) || (dbname == null)) {
00068 throw new DatabaseException("FPDB ERROR : FODB path or name property is not set. Can't create db");
00069 }
00070 synchronized(SynchroFastObjectDBManager.class) {
00071 if (db==null) {
00072 try {
00073 db = SynchroFastObjectDB.open(dbPath, dbname);
00074 ApplicationContextManager.getManager().addManager(db);
00075 if (cypherList != null) {
00076 Enumeration keys = cypherList.keys();
00077 while (keys.hasMoreElements()) {
00078 String colName = (String) keys.nextElement();
00079 FODBCollection col = db.getCollection(colName);
00080 col.setCollectionCypher((FODBCypher)cypherList.get(colName));
00081 }
00082 cypherList = null;
00083 }
00084
00085 SyncActionDBManager.registerSyncActionDBQueryManager(new FODBSyncActionDBQueryManager());
00086 SyncActionDBManager.getManager();
00087 } catch (Throwable ex) {
00088 throw new DatabaseException(ex);
00089 }
00090 }
00091 }
00092 }
00093 return db;
00094 }
00095
00099 public static void flushDB() throws DatabaseException{
00100 if (db != null) {
00101 FODBCollection[] colList = db.getDatabaseCollectionArray();
00102 cypherList = new Hashtable();
00103 for (int i=0; i<colList.length; i++) {
00104 FODBCypher cypher = colList[i].getCollectionCypher();
00105 if (cypher != null) {
00106 cypherList.put(colList[i].getName(), cypher);
00107 }
00108 }
00109 }
00110 db=null;
00111 SynchroFastObjectDBManager.getCurrentFODB();
00112 }
00113 }