001 package com.croftsoft.apps.chat.user.seri; 002 003 import java.io.*; 004 import java.util.*; 005 006 import com.croftsoft.core.lang.NullArgumentException; 007 import com.croftsoft.core.security.Authentication; 008 009 import com.croftsoft.apps.chat.user.User; 010 import com.croftsoft.apps.chat.user.UserId; 011 import com.croftsoft.apps.chat.user.UserStore; 012 013 /********************************************************************* 014 * Serializable UserStore implementation. 015 * 016 * @version 017 * 2003-06-11 018 * @since 019 * 2003-06-07 020 * @author 021 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 022 *********************************************************************/ 023 024 public final class SeriUserStore 025 implements Serializable, UserStore 026 ////////////////////////////////////////////////////////////////////// 027 ////////////////////////////////////////////////////////////////////// 028 { 029 030 private static final long serialVersionUID = 0L; 031 032 // 033 034 private final Map userIdToUserMap; 035 036 private final Map usernameToUserIdMap; 037 038 private final Random random; 039 040 // 041 042 private UserId [ ] userIds; 043 044 ////////////////////////////////////////////////////////////////////// 045 ////////////////////////////////////////////////////////////////////// 046 047 public SeriUserStore ( ) 048 ////////////////////////////////////////////////////////////////////// 049 { 050 userIdToUserMap = new HashMap ( ); 051 052 usernameToUserIdMap = new HashMap ( ); 053 054 random = new Random ( ); 055 056 userIds = new UserId [ 0 ]; 057 } 058 059 ////////////////////////////////////////////////////////////////////// 060 ////////////////////////////////////////////////////////////////////// 061 062 public User getUser ( Authentication authentication ) 063 ////////////////////////////////////////////////////////////////////// 064 { 065 NullArgumentException.check ( authentication ); 066 067 UserId userId = getUserId ( authentication.getUsername ( ) ); 068 069 if ( userId == null ) 070 { 071 return null; 072 } 073 074 User user = getUser ( userId ); 075 076 if ( user == null ) 077 { 078 return null; 079 } 080 081 if ( !user.getPassword ( ).equals ( 082 authentication.getPassword ( ) ) ) 083 { 084 return null; 085 } 086 087 return user; 088 } 089 090 public User getUser ( UserId userId ) 091 ////////////////////////////////////////////////////////////////////// 092 { 093 NullArgumentException.check ( userId ); 094 095 return ( User ) userIdToUserMap.get ( userId ); 096 } 097 098 public UserId getUserId ( String username ) 099 ////////////////////////////////////////////////////////////////////// 100 { 101 return ( UserId ) usernameToUserIdMap.get ( username ); 102 } 103 104 public UserId [ ] getUserIds ( ) 105 ////////////////////////////////////////////////////////////////////// 106 { 107 return userIds; 108 } 109 110 ////////////////////////////////////////////////////////////////////// 111 ////////////////////////////////////////////////////////////////////// 112 113 public synchronized UserId createUser ( 114 Authentication authentication ) 115 ////////////////////////////////////////////////////////////////////// 116 { 117 String username = authentication.getUsername ( ); 118 119 String password = authentication.getPassword ( ); 120 121 NullArgumentException.check ( username ); 122 123 if ( usernameToUserIdMap.containsKey ( username ) ) 124 { 125 throw new IllegalArgumentException ( ); 126 } 127 128 NullArgumentException.check ( password ); 129 130 UserId userId = new SeriUserId ( random.nextLong ( ) ); 131 132 User user = new SeriUser ( userId, username, password ); 133 134 userIdToUserMap.put ( userId, user ); 135 136 usernameToUserIdMap.put ( username, userId ); 137 138 userIds = ( UserId [ ] ) 139 userIdToUserMap.keySet ( ).toArray ( new UserId [ 0 ] ); 140 141 return userId; 142 } 143 144 public synchronized boolean removeUser ( UserId userId ) 145 ////////////////////////////////////////////////////////////////////// 146 { 147 User user = getUser ( userId ); 148 149 if ( user == null ) 150 { 151 return false; 152 } 153 154 usernameToUserIdMap.remove ( user.getUsername ( ) ); 155 156 userIdToUserMap.remove ( userId ); 157 158 userIds = ( UserId [ ] ) 159 userIdToUserMap.keySet ( ).toArray ( new UserId [ 0 ] ); 160 161 return true; 162 } 163 164 ////////////////////////////////////////////////////////////////////// 165 ////////////////////////////////////////////////////////////////////// 166 }