1 package rero.ircfw; 2 3 11 12 import rero.ircfw.interfaces.ChannelDataWatch; 13 14 import java.util.*; 15 16 public class InternalDataList { 17 protected String myNickname = "<Unknown>"; 18 protected HashMap users = new HashMap(); 19 protected MyUser myInformation = new MyUser(); 20 protected HashMap channels = new HashMap(); 21 protected HashMap sync = new HashMap(); 22 23 protected HashMap wasOn = 24 new HashMap(); 25 26 protected UserMode umode = new UserMode("ohv", "@%+"); 27 28 protected HashMap iSupport = new HashMap(); 29 protected HashMap chanModes = new HashMap(); 31 public void reset() { 32 myNickname = "<Unknown>"; 33 users = new HashMap(); 34 myInformation = new MyUser(); 35 channels = new HashMap(); 36 umode = new UserMode("ohv", "@%+"); 37 iSupport = new HashMap(); 38 chanModes = new HashMap(); 39 } 40 41 public boolean isChanGroupMode(String group, char mode) { 47 if (!chanModes.containsKey(group)) return false; 48 String modes = ((String ) chanModes.get(group)); 49 return modes.indexOf(mode) > -1; 50 } 51 52 public void setChanGroupMode(String group, String modes) { 53 chanModes.put(group, modes); 54 } 55 56 public Set getChannelsFromPriorLife(String nick) { 57 Set temp = (Set) wasOn.get(nick); 58 wasOn.remove(temp); 59 return temp; 60 } 61 62 public HashMap getSupportInfo() { 63 return iSupport; 64 } 65 66 public void addSupportInfo(String key, String value) { 67 iSupport.put(key, value); 68 } 69 70 public String getMyNick() { 71 return myNickname; 72 } 73 74 public User getMyUser() { 75 return getUser(getMyNick()); 76 } 77 78 public UserMode getPrefixInfo() { 79 return umode; 80 } 81 82 public void setPrefixInfo(String modes, String chars) { 83 umode = new UserMode(modes, chars); 84 } 85 86 public void setMyNick(String n) { 87 myNickname = n; 88 } 89 90 public MyUser getMyUserInformation() { 91 return myInformation; 92 } 93 94 public void installChannelWatch(String channel, ChannelDataWatch ch) { 95 sync.put(channel.toUpperCase(), ch); 96 } 97 98 public ChannelDataWatch getChannelDataWatch(Channel ch) { 99 return (ChannelDataWatch) sync.get(ch.getName().toUpperCase()); 100 } 101 102 105 106 public LinkedList nickCompleteAll(String pnick, String channel) { 107 LinkedList rv = new LinkedList(); 108 109 if (getChannel(channel) != null) { 110 Set users = getChannel(channel).getAllUsers(); 111 112 Iterator i = users.iterator(); 113 while (i.hasNext()) { 114 User temp = (User) i.next(); 115 if (temp.getNick().length() >= pnick.length()) { 116 if (temp.getNick().toLowerCase().substring(0, pnick.length()).equals(pnick.toLowerCase())) { 117 rv.addFirst(temp.getNick()); 118 } else if (temp.getNick().toLowerCase().indexOf(pnick.toLowerCase()) > -1 && 119 (!temp.getNick().toLowerCase().equals(getMyNick().toLowerCase()))) { 120 rv.addLast(temp.getNick()); 121 } 122 } 123 } 124 } 125 126 rv.addLast(pnick); 127 128 return rv; 129 } 130 131 public String nickComplete(String pnick, String channel) { 132 if (getChannel(channel) == null) { 133 return pnick; 134 } 135 136 Set users = getChannel(channel).getAllUsers(); 137 138 if (isUser(pnick) && users.contains(getUser(pnick))) { 139 return pnick; 140 } 141 142 String possible = null; 143 144 Iterator i = users.iterator(); 145 while (i.hasNext()) { 146 User temp = (User) i.next(); 147 if (temp.getNick().length() >= pnick.length()) { 148 if (temp.getNick().toLowerCase().substring(0, pnick.length()).equals(pnick.toLowerCase())) { 149 return temp.getNick(); 150 } 151 152 if (temp.getNick().toLowerCase().indexOf(pnick.toLowerCase()) > -1 && 153 (!temp.getNick().toLowerCase().equals(getMyNick().toLowerCase()))) { 154 possible = temp.getNick(); 155 } 156 } 157 } 158 159 if (possible != null) { 160 return possible; 161 } 162 163 return pnick; 164 } 165 166 public Collection getAllUsers() { 167 return users.values(); 168 } 169 170 public String toString() { 171 return "[IDL for " + myNickname + " - users: " + users.size() + ", channels: " + channels.size() + "]"; 172 } 173 174 public InternalDataList() { 175 176 } 177 178 public boolean isUser(String nickname) { 179 return (users.get(nickname) != null); 180 } 181 182 public User getUser(String nickname) { 183 if (users.get(nickname) == null) { 184 users.put(nickname, new User(nickname)); 185 } 186 return (User) users.get(nickname); 187 } 188 189 public Set getUsersWithMode(String channel, char mode) { 190 return umode.getUsersWithMode(getChannel(channel), mode); 191 } 192 193 public void QuitNick(String nickname) { 194 Channel temp; 195 196 Set oldchannels = new HashSet(); 197 198 Iterator iter = (new LinkedList(getUser(nickname).getChannels())).iterator(); 199 while (iter.hasNext()) { 200 temp = (Channel) iter.next(); 201 RemoveUser(getUser(nickname), temp); 202 oldchannels.add(temp.getName()); 203 } 204 205 wasOn.put(nickname, oldchannels); 206 207 users.remove(nickname); 208 } 209 210 public void PartNick(String nickname, Channel channel) { 211 if (getMyNick().equals(nickname)) { 212 Iterator iter = channel.getAllUsers().iterator(); 213 while (iter.hasNext()) { 214 User temp = (User) iter.next(); 215 temp.getChannelData().remove(channel); 216 217 if (temp.getChannelData().size() == 0) { 218 users.remove(temp); } 220 } 221 222 channel.getAllUsers().clear(); 223 channels.remove(channel.getName().toUpperCase()); 224 } 225 226 RemoveUser(getUser(nickname), channel); 227 } 228 229 public void JoinNick(String nickname, String channel) { 230 if (getMyNick().equals(nickname)) { 231 createChannel(channel); 232 } 233 234 getUser(nickname).getChannelData().put(getChannel(channel), new Integer (0)); 235 getChannel(channel).getAllUsers().add(getUser(nickname)); 236 237 if (getChannelDataWatch(getChannel(channel)) != null) { 238 getChannelDataWatch(getChannel(channel)).userAdded(getUser(nickname)); 239 } 240 } 241 242 public void ChangeNick(String oldnick, String newnick) { 243 User temp = getUser(oldnick); 244 245 Channel channel; 247 248 Iterator iter = temp.getChannels().iterator(); 249 while (iter.hasNext()) { 250 channel = (Channel) iter.next(); 251 channel.getAllUsers().remove(temp); 252 } 253 254 users.remove(oldnick); 256 257 temp.setNick(newnick); 258 259 users.put(newnick, temp); 260 261 iter = temp.getChannels().iterator(); 263 while (iter.hasNext()) { 264 channel = (Channel) iter.next(); 265 channel.getAllUsers().add(temp); 266 267 if (getChannelDataWatch(channel) != null) { 268 getChannelDataWatch(channel).userChanged(); 269 } 270 } 271 272 if (oldnick.equals(getMyNick())) { 274 setMyNick(newnick); 275 } 276 } 277 278 public boolean isOn(User user, Channel channel) { 279 return user != null && user.getChannels().contains(channel); 280 } 281 282 public void AddUser(String nickname, Channel channel) { 283 int modes = 0; 284 285 while (umode.isPrefixChar(nickname.charAt(0))) { 286 modes = umode.setMode(modes, umode.getModeForDisplay(nickname.charAt(0))); 287 nickname = nickname.substring(1, nickname.length()); 288 } 289 290 User user = getUser(nickname); 291 292 if (user.getChannelData().containsKey(channel)) { 297 if (((Integer ) user.getChannelData().get(channel)).intValue() != modes) 299 user.getChannelData().put(channel, new Integer (modes)); 300 } else { 301 user.getChannelData().put(channel, new Integer (modes)); 302 channel.getAllUsers().add(user); 303 } 304 } 305 306 public Channel getChannel(String channel) { 307 return (Channel) channels.get(channel.toUpperCase()); 308 } 309 310 public void createChannel(String channel) { 311 channels.put(channel.toUpperCase(), new Channel(channel)); 312 313 if (getChannelDataWatch(getChannel(channel)) != null) { 314 getChannelDataWatch(getChannel(channel)).createChannel(getChannel(channel)); 315 } 316 } 317 318 public void synchronizeUserPreChange(User user, Channel channel) { 319 channel.getAllUsers().remove(user); 320 } 321 322 public void synchronizeUserPostChange(User user, Channel channel) { 323 channel.getAllUsers().add(user); 324 if (getChannelDataWatch(channel) != null) { 325 getChannelDataWatch(channel).userChanged(); 326 } 327 } 328 329 public void RemoveUser(User user, Channel channel) { 330 channel.getAllUsers().remove(user); 331 user.getChannelData().remove(channel); 332 333 if (user.getChannelData().size() == 0) { 334 users.remove(user); 335 } 336 337 if (getChannelDataWatch(channel) != null) { 338 getChannelDataWatch(channel).userRemoved(user); 339 } 340 } 341 } 342 | Popular Tags |