Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java,v diff -u -r1.8 -r1.9 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java 3 Apr 2006 23:36:57 -0000 1.8 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java 9 Apr 2006 03:35:09 -0000 1.9 @@ -105,8 +105,9 @@ public void setAuthenticationMethodDAO(IAuthenticationMethodDAO authenticationMethodDao); /** - * Retrieves a user by userId. null will be returned - * if no user with the userId is found + * Retrieves a user by userId. Null will be returned + * if no user with the userId is found. This method is more + * efficient than getUserByLogin() as the value is cached. * * @param userId the user's userId * @return User @@ -115,8 +116,9 @@ /** - * Retrieves a user by login. null will be returned - * if no user with the login is found + * Retrieves a user by login. Null will be returned + * if no user with the login is found. This method is not as + * efficient than getUserById() as it is not cached. * * @param login the user's login * @return User @@ -154,12 +156,12 @@ * Retrieves a userOrganisationRole by ids and name. null will be returned * if no userOrganisationRole is found * - * @param login the user's login + * @param userId the id of the user * @param organisationId the organisation's id * @param roleName the role's name * @return UserOrganisationRole */ - public UserOrganisationRole getUserOrganisationRole(String login,Integer organisationId,String roleName); + public UserOrganisationRole getUserOrganisationRole(Integer userId,Integer organisationId,String roleName); /** * Retrieves a userOrganisation by login and id. null will be returned @@ -179,7 +181,7 @@ * @param roleName role's name * @return List of organisations */ - public List getOrganisationsForUserByRole(User user, String roleName); + public List getOrganisationsForUserByRole(User user, String roleName); /** * Retrieves child organisations of the parentOrg @@ -215,15 +217,15 @@ * @param orgId organisation's id * @return List of roles */ - public List getRolesForUserByOrganisation(User user, Integer orgId); + public List getRolesForUserByOrganisation(User user, Integer orgId); /** * Retrieves users from the specified organisation * * @param orgId organisation's id * @return List of users */ - public List getUsersFromOrganisation(Integer orgId); + public List getUsersFromOrganisation(Integer orgId); /** * Retrieves All the AuthenticationMethods @@ -234,14 +236,24 @@ /** * Retrieves AuthenticationMethod for the user - * specified by login + * specified by login. * * @param login the user's login * @return AuthenticationMethod for this user */ public AuthenticationMethod getAuthenticationMethodForUser(String login); /** + * Retrieves AuthenticationMethod for the user + * specified by login. This implementation is more efficient + * than getAuthenticationMethodForUser(String login). + * + * @param User user + * @return AuthenticationMethod for this user + */ + public AuthenticationMethod getAuthenticationMethodForUser(User user); + + /** * Retrieves AuthenticationMethod * specified by name * Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java,v diff -u -r1.12 -r1.13 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java 3 Apr 2006 23:36:57 -0000 1.12 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java 9 Apr 2006 03:35:09 -0000 1.13 @@ -51,6 +51,8 @@ import org.lamsfoundation.lams.usermanagement.dao.IUserOrganisationRoleDAO; import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO; +import org.lamsfoundation.lams.usermanagement.dto.OrganisationDTO; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.wddx.FlashMessage; /** @@ -61,7 +63,8 @@ * Manually caches the user objects (by user id) in the shared cache. * Whenever a user object is modified, the cached version must be * removed. - * TODO complete the caching - need to remove the user from the cache on modification. + * TODO complete the caching - need to remove the user from the cache on modification + * of user/organisation details. * * @author Fei Yang, Manpreet Minhas */ @@ -93,7 +96,8 @@ private FlashMessage flashMessage; - private String[] userClassParts = null; + private String[] userClassParts = null; + /** * @param workspaceFolderDAO * The workspaceFolderDAO to set. @@ -162,27 +166,48 @@ * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUserById(java.lang.Integer) */ public User getUserById(Integer userId) { - if ( this.userClassParts == null ) { - this.userClassParts = cacheManager.getPartsFromClass(User.class); + if ( userClassParts == null ) { + userClassParts = cacheManager.getPartsFromClass(User.class); } User user = (User) cacheManager.getItem(this.userClassParts, userId); if ( user == null ) { user = userDAO.getUserById(userId); if ( user != null ) { - cacheManager.addItem(this.userClassParts,userId,user); + cacheManager.addItem(userClassParts,user.getUserId(),user); + if ( log.isDebugEnabled() ){ + log.debug("getUserById retrieved user from database "+user.getUserId()); + } } - } + } else if ( log.isDebugEnabled() ){ + log.debug("getUserById retrieved user from cache "+userId); + } return user; } - + /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUserByLogin(java.lang.String) */ public User getUserByLogin(String login) { - return userDAO.getUserByLogin(login); + User user = userDAO.getUserByLogin(login); + if ( user != null ) { + if ( userClassParts == null ) { + userClassParts = cacheManager.getPartsFromClass(User.class); + } + cacheManager.addItem(userClassParts,user.getUserId(),user); + } + return user; } + /** + * Clear the user from the cache - presumably the user has been updated. + */ + private void clearUserFromCache(User user) { + cacheManager.removeItem(this.userClassParts,user.getUserId()); + cacheManager.removeItem(this.userClassParts,user.getLogin()); + + } + /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getOrganisationById(java.lang.Integer) */ @@ -222,9 +247,8 @@ /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUserOrganisationRole(java.lang.String,java.lang.Integer,java.lang.String) */ - public UserOrganisationRole getUserOrganisationRole(String login, - Integer organisationId, String roleName) { - User user = userDAO.getUserByLogin(login); + public UserOrganisationRole getUserOrganisationRole(Integer userID, Integer organisationId, String roleName) { + User user = this.getUserById(userID); if (user == null) return null; UserOrganisation userOrganisation = userOrganisationDAO @@ -257,11 +281,17 @@ * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getAuthenticationMethodForUser(java.lang.String) */ public AuthenticationMethod getAuthenticationMethodForUser(String login) { - return authenticationMethodDAO.getAuthenticationMethodByUser(userDAO - .getUserByLogin(login)); + return authenticationMethodDAO.getAuthenticationMethodByUser(this.getUserByLogin(login)); } /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getAuthenticationMethodForUser(org.lamsfoundation.lams.usermanagement.User) + */ + public AuthenticationMethod getAuthenticationMethodForUser(User user) { + return authenticationMethodDAO.getAuthenticationMethodByUser(user); + } + + /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getAuthenticationMethodByName(java.lang.String) */ public AuthenticationMethod getAuthenticationMethodByName(String name) { @@ -279,8 +309,8 @@ * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getOrganisationsForUserByRole(org.lamsfoundation.lams.usermanagement.User, * java.lang.String) */ - public List getOrganisationsForUserByRole(User user, String roleName) { - List list = new ArrayList(); + public List getOrganisationsForUserByRole(User user, String roleName) { + List list = new ArrayList(); Iterator i = userOrganisationDAO.getUserOrganisationsByUser(user) .iterator(); while (i.hasNext()) { @@ -310,8 +340,8 @@ * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getRolesForUserByOrganisation(org.lamsfoundation.lams.usermanagement.User, * java.lang.Integer) */ - public List getRolesForUserByOrganisation(User user, Integer orgId) { - List list = new ArrayList(); + public List getRolesForUserByOrganisation(User user, Integer orgId) { + List list = new ArrayList(); UserOrganisation userOrg = userOrganisationDAO.getUserOrganisation(user .getUserId(), orgId); if (userOrg == null) @@ -328,8 +358,8 @@ /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUsersFromOrganisation(int) */ - public List getUsersFromOrganisation(Integer orgId) { - List list = new ArrayList(); + public List getUsersFromOrganisation(Integer orgId) { + List list = new ArrayList(); Iterator i = userOrganisationDAO.getUserOrganisationsByOrganisationId( orgId).iterator(); while (i.hasNext()) { @@ -351,13 +381,15 @@ */ public void updateUser(User user) { userDAO.updateUser(user); + clearUserFromCache(user); } /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#saveOrUpdateUser(org.lamsfoundation.lams.usermanagement.User) */ public void saveOrUpdateUser(User user) { userDAO.saveOrUpdateUser(user); + clearUserFromCache(user); } /** @@ -468,8 +500,7 @@ Workspace workspace = createWorkspace(user.getLogin()); WorkspaceFolder workspaceFolder = createWorkspaceFolder(workspace, user .getUserId(), WorkspaceFolder.NORMAL); - WorkspaceFolder runSequencesFolder = createWorkspaceFolder(workspace, - user.getUserId(), WorkspaceFolder.RUN_SEQUENCES); + createWorkspaceFolder(workspace, user.getUserId(), WorkspaceFolder.RUN_SEQUENCES); workspace.setRootFolder(workspaceFolder); workspaceDAO.update(workspace); user.setWorkspace(workspace); @@ -530,7 +561,7 @@ public String getWDDXForOrganisationsForUserByRole(Integer userID, String roleName) throws IOException { User user = userDAO.getUserById(userID); - Vector organisations = new Vector(); + Vector organisations = new Vector(); if (user != null) { Iterator iterator = getOrganisationsForUserByRole(user, roleName) .iterator(); @@ -553,7 +584,7 @@ */ public String getUsersFromOrganisationByRole(Integer organisationID, String roleName) throws IOException { - Vector users = new Vector(); + Vector users = new Vector(); Organisation organisation = organisationDAO .getOrganisationById(organisationID); if (organisation != null) {