Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
Player |
|
| 1.2424242424242424;1.242 |
1 | /****************************************************************************** | |
2 | * Player.java - Describe one FIBS player | |
3 | * $Id$ | |
4 | * | |
5 | * BuckoFIBS - Backgammon by BuckoSoft | |
6 | * Copyright� 2008 - Dick Balaska - BuckoSoft, Corp. | |
7 | * | |
8 | * $Log$ | |
9 | * Revision 1.6 2011/01/04 17:42:02 dick | |
10 | * Mixing ready and !isPlaying() is a bad idea. | |
11 | * | |
12 | * Revision 1.5 2011/01/01 00:17:39 dick | |
13 | * Convienence constructor to set the player's name. | |
14 | * | |
15 | * Revision 1.4 2010/12/30 04:09:43 dick | |
16 | * He's really only ready if he is not playing. | |
17 | * | |
18 | * Revision 1.3 2010/12/24 02:59:07 dick | |
19 | * WinLoss becomes a light object instead of a String. | |
20 | * | |
21 | * Revision 1.2 2010/02/04 09:17:13 inim | |
22 | * Made player parsing a little more robust | |
23 | * | |
24 | * Revision 1.1 2010/02/04 05:57:53 inim | |
25 | * Mavenized project folder layout | |
26 | * | |
27 | * Revision 1.13 2010/01/23 06:17:02 dick | |
28 | * Add the invited flag. | |
29 | * | |
30 | * Revision 1.12 2009/03/04 18:53:59 dick | |
31 | * Add the winLoss attribute. | |
32 | * | |
33 | * Revision 1.11 2009/02/24 06:58:06 dick | |
34 | * Add isPlaying(). | |
35 | * | |
36 | * Revision 1.10 2009/02/20 10:26:26 dick | |
37 | * Add id, which is a database key. | |
38 | * | |
39 | * Revision 1.9 2009/02/14 15:43:01 dick | |
40 | * BuckoFIBS is released under the GNU license. | |
41 | * Javadoc. | |
42 | * | |
43 | * Revision 1.8 2009/02/11 09:09:13 dick | |
44 | * setName(s) for when we get an invite from an unknown player. | |
45 | * | |
46 | * Revision 1.7 2009/02/01 21:14:23 dick | |
47 | * Add the MissManners attribute. | |
48 | * | |
49 | * Revision 1.6 2009/02/01 09:00:08 dick | |
50 | * Add a saved match status string. | |
51 | * | |
52 | * Revision 1.5 2009/01/28 22:10:57 dick | |
53 | * Wacky parsing error? How ss[1] be null? | |
54 | * | |
55 | * Revision 1.4 2009/01/28 02:52:31 dick | |
56 | * Javadoc. | |
57 | * | |
58 | * Revision 1.3 2009/01/27 19:15:24 dick | |
59 | * Add bfStatus stuff to handle player warnings. | |
60 | * | |
61 | * Revision 1.2 2008/12/11 10:01:28 dick | |
62 | * Parse opponent named "-" as empty (no opponent). | |
63 | * | |
64 | * Revision 1.1 2008/03/31 07:10:56 dick | |
65 | * Describe one FIBS player. | |
66 | */ | |
67 | ||
68 | /* | |
69 | * This program is free software: you can redistribute it and/or modify | |
70 | * it under the terms of the GNU General Public License as published by | |
71 | * the Free Software Foundation, either version 3 of the License, or | |
72 | * (at your option) any later version. | |
73 | * | |
74 | * This program is distributed in the hope that it will be useful, | |
75 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
76 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
77 | * GNU General Public License for more details. | |
78 | * | |
79 | * You should have received a copy of the GNU General Public License | |
80 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
81 | * | |
82 | * The Original Code is BuckoFIBS, <http://www.buckosoft.com/BuckoFIBS/>. | |
83 | * The Initial Developer of the Original Code is Dick Balaska and BuckoSoft, Corp. | |
84 | * | |
85 | */ | |
86 | package com.buckosoft.fibs.domain; | |
87 | ||
88 | import org.slf4j.Logger; | |
89 | import org.slf4j.LoggerFactory; | |
90 | ||
91 | ||
92 | /** Describe one FIBS player. <br> | |
93 | * Most of these fields don't have setters because this object is mostly filled out from FIBS. | |
94 | * See {@link #parsePlayer(String)}. | |
95 | * @author Dick Balaska | |
96 | * @since 2008/03/31 | |
97 | * @version $Revision$ <br> $Date$ | |
98 | * @see <a href="http://cvs.buckosoft.com/Projects/BuckoFIBS/BuckoFIBS/src/main/java/com/buckosoft/fibs/domain/Player.java">cvs Player.java</a> | |
99 | */ | |
100 | 0 | public class Player implements Comparable<Player> { |
101 | private final static boolean DEBUG = false; | |
102 | 61 | private Logger logger = LoggerFactory.getLogger(getClass()); |
103 | ||
104 | 61 | private int id = 0; |
105 | 61 | private String name = "???"; |
106 | 61 | private String opponent = ""; |
107 | 61 | private String watching = ""; |
108 | 61 | private boolean ready = false; |
109 | 61 | private boolean away = false; |
110 | 61 | private double rating = 0.0; |
111 | 61 | private int experience = 0; |
112 | 61 | private int idleTime = 0; |
113 | 61 | private long loginTime = 0; |
114 | 61 | private String hostName = ""; |
115 | 61 | private String client = ""; |
116 | 61 | private String email = ""; |
117 | 61 | private WinLoss winLoss = null; |
118 | ||
119 | 61 | private int bfFlag = 0; |
120 | private String bfStatus; | |
121 | ||
122 | 61 | private boolean invited = false; |
123 | ||
124 | // private boolean hasSavedGame = false; | |
125 | private String savedMatch; | |
126 | private String missManners; | |
127 | ||
128 | /** Create a default/empty Player | |
129 | */ | |
130 | 116 | public Player() {} |
131 | ||
132 | /** Convienence constructor to set the player's name. | |
133 | * @param playerName The name of this new player. | |
134 | */ | |
135 | 3 | public Player(String playerName) { |
136 | 3 | this.name = playerName; |
137 | 3 | } |
138 | ||
139 | /** Get the local player id. | |
140 | * This is a key to our local database, and is not a FIBS number at all. | |
141 | * @return the id | |
142 | */ | |
143 | public int getId() { | |
144 | 30 | return id; |
145 | } | |
146 | ||
147 | /** Set the local player id. | |
148 | * This is a key to our local database, and is not a FIBS number at all. | |
149 | * @param id the id to set | |
150 | */ | |
151 | public void setId(int id) { | |
152 | 14 | this.id = id; |
153 | 14 | } |
154 | ||
155 | /** Get the username of this player | |
156 | * @return The username | |
157 | */ | |
158 | public String getName() { | |
159 | 35 | return(name); |
160 | } | |
161 | ||
162 | /** Set the username of this player. | |
163 | * This is useful when we get an invite from an unknown player. | |
164 | * @param name The player's name | |
165 | */ | |
166 | public void setName(String name) { | |
167 | 9 | this.name = name; |
168 | 9 | } |
169 | ||
170 | /** Return true if this player is playing someone. | |
171 | * This field is derived from the opponent field. | |
172 | * @return true if playing. | |
173 | */ | |
174 | public boolean isPlaying() { | |
175 | 1 | if (opponent.length() > 0) |
176 | 0 | return(true); |
177 | 1 | return(false); |
178 | } | |
179 | ||
180 | /** If this player is playing someone, then return the opponent's name. | |
181 | * @return The opponent's name or the empty string if not playing anyone. | |
182 | */ | |
183 | public String getOpponent() { | |
184 | 4 | return(opponent); |
185 | } | |
186 | ||
187 | /** If this player is watching someone, then return the name of the player we are watching. | |
188 | * @return The player being watched or the empty string if not watching anyone. | |
189 | */ | |
190 | public String getWatching() { | |
191 | 4 | return(watching); |
192 | } | |
193 | ||
194 | /** Is this player ready to play? | |
195 | * @return true if ready to play. | |
196 | */ | |
197 | public boolean isReady() { | |
198 | 1 | return(ready); |
199 | } | |
200 | ||
201 | /** Has this player marked himself as away? | |
202 | * @return true = yes | |
203 | */ | |
204 | public boolean isAway() { | |
205 | 3 | return(away); |
206 | } | |
207 | ||
208 | /** Get the rating for this player | |
209 | * @return The rating | |
210 | */ | |
211 | public double getRating() { | |
212 | 1 | return(rating); |
213 | } | |
214 | ||
215 | /** Get the number of games this player has played | |
216 | * @return The Experience | |
217 | */ | |
218 | public int getExperience() { | |
219 | 1 | return(experience); |
220 | } | |
221 | ||
222 | /** How long has this player been idle? | |
223 | * @return The number of seconds he has not done anything. | |
224 | */ | |
225 | public int getIdleTime() { | |
226 | 2 | return(idleTime); |
227 | } | |
228 | ||
229 | /** When did this player log in? | |
230 | * @return The number of seconds since Jan. 1, 1970 | |
231 | */ | |
232 | public long getLoginTime() { | |
233 | 2 | return(loginTime); |
234 | } | |
235 | ||
236 | /** Get the hostname of the machine this player is playing on. | |
237 | * @return The hostname | |
238 | */ | |
239 | public String getHostName() { | |
240 | 2 | return(hostName); |
241 | } | |
242 | ||
243 | /** What client is this player using? | |
244 | * @return The name of the client. | |
245 | */ | |
246 | public String getClient() { | |
247 | 3 | return(client); |
248 | } | |
249 | ||
250 | /** Set the name of the client that this player is using. | |
251 | * @param client | |
252 | */ | |
253 | public void setClient(String client) { | |
254 | 1 | this.client = client; |
255 | 1 | } |
256 | ||
257 | /** What is this player's email address? | |
258 | * @return The email address that the player gave to FIBS (probably not a real email address). | |
259 | */ | |
260 | public String getEmail() { | |
261 | 0 | return(email); |
262 | } | |
263 | ||
264 | /** Return a string of your won/loss record against this player. | |
265 | * @return the winLoss | |
266 | */ | |
267 | public WinLoss getWinLoss() { | |
268 | 9 | return(winLoss); |
269 | // if (winLoss == null) | |
270 | // return(""); | |
271 | // return winLoss.toString(); | |
272 | } | |
273 | ||
274 | /** Set the string of your won/loss record against this player. | |
275 | * @param wins The number of times you have beaten this opponent. | |
276 | * @param losses The number of times you have lost to this opponent. | |
277 | */ | |
278 | public void setWinLoss(int wins, int losses) { | |
279 | 7 | this.winLoss = new WinLoss(wins, losses); |
280 | 7 | } |
281 | ||
282 | /** Get the BuckoFIBS flag (not used yet) | |
283 | * @return the bfFlag | |
284 | */ | |
285 | public int getBfFlag() { | |
286 | 2 | return bfFlag; |
287 | } | |
288 | ||
289 | /** Set the BuckoFIBS flag (not used yet) | |
290 | * @param bfFlag the bfFlag to set | |
291 | */ | |
292 | public void setBfFlag(int bfFlag) { | |
293 | 2 | this.bfFlag = bfFlag; |
294 | 2 | } |
295 | ||
296 | /** If this player has a special status string, like an invite warning, it goes here. | |
297 | * @return the bfStatus The status string. | |
298 | */ | |
299 | public String getBfStatus() { | |
300 | 2 | return bfStatus; |
301 | } | |
302 | ||
303 | /** If this player has a special status string, like an invite warning, it goes here. | |
304 | * @param bfStatus the bfStatus to set | |
305 | */ | |
306 | public void setBfStatus(String bfStatus) { | |
307 | 2 | this.bfStatus = bfStatus; |
308 | 2 | } |
309 | ||
310 | /** Have we invited this player? | |
311 | * @return the invited | |
312 | */ | |
313 | public boolean isInvited() { | |
314 | 3 | return invited; |
315 | } | |
316 | ||
317 | /** | |
318 | * @param invited the invited to set | |
319 | */ | |
320 | public void setInvited(boolean invited) { | |
321 | 2 | this.invited = invited; |
322 | 2 | } |
323 | ||
324 | /** If you have a saved match with this player, then this string describes it. | |
325 | * @return the savedMatch or null if none | |
326 | */ | |
327 | public String getSavedMatch() { | |
328 | 2 | return savedMatch; |
329 | } | |
330 | ||
331 | /** Set the savedMatch (tooltip) text | |
332 | * @param savedMatch the savedMatch to set | |
333 | */ | |
334 | public void setSavedMatch(String savedMatch) { | |
335 | 2 | this.savedMatch = savedMatch; |
336 | 2 | } |
337 | ||
338 | /** If this player has a MissManners warning, this is it. | |
339 | * @return the missManners warning, or null if this player has none. | |
340 | */ | |
341 | public String getMissManners() { | |
342 | 2 | return missManners; |
343 | } | |
344 | ||
345 | /** Set the MissManners warning issued about this player | |
346 | * @param missManners the missManners to set | |
347 | */ | |
348 | public void setMissManners(String missManners) { | |
349 | 2 | this.missManners = missManners; |
350 | 2 | } |
351 | ||
352 | /** Parse this player from a FIBS string. | |
353 | * Fills in most of this object's fields from the FIBS | |
354 | * <a href="http://www.fibs.com/fibs_interface.html#clip_who_info">who info</a> line. | |
355 | * @param s The who info line from FIBS | |
356 | * @return success | |
357 | */ | |
358 | public boolean parsePlayer(String s) { | |
359 | 30 | String[] ss = s.split(" "); |
360 | 30 | if (ss.length != 13) { |
361 | if (DEBUG) { | |
362 | logger.info("Error parsing player"); | |
363 | logger.info(s); | |
364 | } | |
365 | 1 | return(false); |
366 | } | |
367 | 29 | name = ss[1]; |
368 | 29 | opponent = ss[2]; |
369 | 29 | if ("-".equals(ss[2]) || opponent == null) |
370 | 24 | opponent = ""; |
371 | 29 | watching = ss[3]; |
372 | 29 | if ("-".equals(watching)) |
373 | 21 | watching = ""; |
374 | 29 | ready = "1".equals(ss[4]); |
375 | 29 | away = "1".equals(ss[5]); |
376 | 29 | rating = Double.parseDouble(ss[6]); |
377 | 29 | experience = Integer.parseInt(ss[7]); |
378 | 29 | idleTime = Integer.parseInt(ss[8]); |
379 | 29 | loginTime = Long.parseLong(ss[9]); |
380 | 29 | hostName = ss[10]; |
381 | 29 | client = ss[11]; |
382 | 29 | email = ss[12]; |
383 | 29 | return(true); |
384 | } | |
385 | ||
386 | /** String compare the name of this player with that one. | |
387 | * @param o The other player to compare | |
388 | */ | |
389 | @Override | |
390 | public int compareTo(Player o) { | |
391 | 3 | return(this.name.compareToIgnoreCase(o.getName())); |
392 | } | |
393 | ||
394 | } |