/* * ODBConnection.java * * Created on 2009-03-31, 19:09:34 */ package app.database.odb.utils; import app.config.DataBaseConfig; import app.navigps.utils.NaviLogger; import app.navigps.utils.StringUtils; import java.io.File; import java.util.LinkedList; import java.util.logging.Level; import org.neodatis.odb.Configuration; import org.neodatis.odb.ODB; import org.neodatis.odb.ODBFactory; /** * * @author Grzegorz (wara) Warywoda */ public class ODBConnection { public static final String PREFIX = "ODB: "; public static final String CONNECTING_INFO = PREFIX+"connecting ..."; public static final String CONNECTED_INFO = PREFIX+"connected ! "; public static final String DISCONNECTING_INFO = PREFIX+"disconnecting ... "; public static final String DISCONNECTED_INFO = PREFIX+"disconnected ! "; public static final String ERROR_CONNECT = PREFIX+"can not connect "; public static final String ERROR_DISCONNECT = PREFIX+"not connected "; public static final String FILE_NOT_EXIST = PREFIX+"file doesn't exist "; public static final String READ_FILE_PROBLEM = PREFIX+"file doesn't exist "; public static final String ERROR_PATH = PREFIX+"problem with path to file"; private LinkedList<ConnectionListener> listenerConnetion = new LinkedList<ConnectionListener>(); private static ODBConnection instance = new ODBConnection(); /* * @return String containing message of connection */ public static String connect(String databasePath, String fileName) { String status = ""; if (!checkFile(databasePath, fileName)) { fileName = DataBaseConfig.getDatabaseFilename(); databasePath = DataBaseConfig.getDefaultDatabasePath(); } if(isConnected()) disconnect(); String msg = "[ DB name '"+fileName+"']"; try { System.out.println(CONNECTING_INFO); NaviLogger.logger.log(Level.FINE, CONNECTING_INFO); //for test set default chars encoding Configuration.setDatabaseCharacterEncoding( DataBaseConfig.getDefaultDatabaseCharsEncoding()); ODB odb = ODBFactory.open(databasePath+fileName); Constants.setDbConnection(odb); //notify all object getInstance().notifyAllObjOfConnection(); status = CONNECTED_INFO+msg; NaviLogger.logger.log(Level.FINE,status); } catch (Exception ex) { status = ERROR_CONNECT+msg; NaviLogger.logger.log(Level.WARNING,status,ex); } return status; } public static String disconnect(){ NaviLogger.logger.log(Level.FINE,DISCONNECTING_INFO); if(!isConnected()){ NaviLogger.logger.log(Level.FINE,ERROR_DISCONNECT); return ERROR_DISCONNECT; } Constants.getDbConnection().close(); //important ! dispose instance in bridge connetion Constants.setDbConnection(null); //notify all object getInstance().notifyAllObjOfDisconnection(); NaviLogger.logger.log(Level.FINE,DISCONNECTED_INFO); return DISCONNECTED_INFO; } public static boolean isConnected(){ try{ Constants.getDbConnection(); }catch(NullPointerException e){ return false; } return true; } protected static boolean checkFile(String databasePath, String fileName){ //if data base will be to operate file from user (map) space then //can uncomment verbose info if ((databasePath == null && databasePath.equalsIgnoreCase(""))&& (fileName == null && fileName.equalsIgnoreCase(""))) { //System.err.println(ERROR_PATH+fileName); //NaviLogger.log.log(Level.WARNING,ERROR_PATH+fileName); return false; } File file = new File(databasePath+fileName); if(!file.exists()){ //System.err.println(FILE_NOT_EXIST+fileName); //NaviLogger.log.log(Level.WARNING,FILE_NOT_EXIST+fileName); return false; } if(!file.canRead()){ //System.err.println(READ_FILE_PROBLEM+fileName); //NaviLogger.log.log(Level.WARNING,READ_FILE_PROBLEM+fileName); return false; } return true; } public static ODBConnection getInstance(){ return instance; } private void notifyAllObjOfConnection(){ for (ConnectionListener cl : listenerConnetion) { cl.connectionOpened(); } } private void notifyAllObjOfDisconnection(){ for (ConnectionListener cl : listenerConnetion) { cl.connectionClosed(); } } public void addConnectionListener(ConnectionListener cl){ listenerConnetion.add(cl); } public void removeConnectionListener(ConnectionListener cl){ listenerConnetion.remove(cl); } public void removeAlllisteners(){ listenerConnetion.clear(); } }