//package server; import java.sql.*; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.SQLWarning; import java.sql.SQLException; import java.io.IOException; import java.util.Vector; // Class User Manager // Manage All user existants an all controler Mehtod are to Manage correctly // The possible Users public class CUserManager extends CDataBaseManager { // Singleton controler Property! private static CUserManager instance = null; private Vector Users; // Singleton Factory for UserManager Class public static CUserManager getInstance() { if (instance == null) { instance = new CUserManager(); } return instance; } // ------------------------------------------------------------------------------------------- // I don't wont any one to Extends this class !!! so nobody has the access to Constructor Method // ------------------------------------------------------------------------------------------- private CUserManager(){ Users = sp_RetrieveAllUsers(); } public synchronized Vector getAllUsers() { return Users; } public boolean refreshUserList () { Vector newList = sp_RetrieveAllUsers(); CUser aUser = null; CUser regUser = null; for (int i = 0 ; i < newList.size() ; i++) { aUser = (CUser) newList.elementAt(i); regUser = getUser(aUser.getId()); if (regUser == null ) { Users.addElement(aUser); } else { regUser.setName(aUser.getName()); regUser.setPassword(aUser.getPassword()); } } return true; }; public synchronized CUser createUser(CUser auser){ if (sp_insertUser(auser)) { refreshUserList(); return ((CUser)Users.elementAt((Users.size()-1))); } return null; } public boolean deleteUser (CUser auser) { if (sp_DeleteUser(auser.getId())) { for (int i = 0 ; i < Users.size();i++){ if ( ((CUser)Users.elementAt(i)).getId() == auser.getId()){ Users.removeElementAt(i); return true; } } } return false; } public synchronized boolean updateUser(CUser auser) { CUser user = getUser(auser.getId()); if (user == null) { return false; // this user does not exists } if (sp_UpdateUser(auser)) { user.setName(auser.getName()); user.setPassword(auser.getPassword()); } return false; } public CUser getUser(int id) { CUser user = null; int init, end, mid; init = 0; end = Users.size() -1 ; mid = (int) end/2; // THIS WILL ONLY WORK IF THE LIST IS ORGANIZED by ID!!! for (int counter =0 ; counter <= Users.size()/2 ; counter ++) { user = (CUser)Users.elementAt(counter); if (user.getId()== id) return user; else if (id < user.getId()) { end = mid; mid = (int) (end-(init-1))/2 + init;//(int) (end/2) ; } else { init = mid; mid = (int) (end-(init-1))/2 + init; } } return null; /* for (int counter = 0 ; counter < Users.size() ; counter++) { aUser = (CUser)Users.elementAt(counter); if ( aUser.getId() == id ) { return (CUser)Users.elementAt(counter); } } return null; */ } public CUser getUser(String aLogin) { for (int counter = 0 ; counter < Users.size() ; counter++) { if ( ((CUser)Users.elementAt(counter)).getName().equalsIgnoreCase(aLogin) ) return (CUser)Users.elementAt(counter); } return null; } public boolean checkUserAuthentication(int userID, String userPassword ) { CUser user = getUser(userID); return (user.getPassword().equalsIgnoreCase(userPassword)); } // if the user is ofline this method is invoked public boolean saveOfflineMessage(int from,int to, String message) { CUser auser = getUser(to); if (auser == null) { return false; } if (sp_SaveMessage(from,to, message)) { return true; } return false; } // needs no comments public synchronized boolean isUserOnline (CUser user) { return getUser(user.getId()).isUserOnline(); } // needs no comments public synchronized boolean isUserOnline (int userId) { return getUser(userId).isUserOnline(); } public synchronized boolean isUserExists(int id){ return ( getUser(id) != null ); } public synchronized Vector getUserFriends(int id) { return sp_RetrieveUserFriends(id); } }