Coverage Report - com.buckosoft.fibs.domain.Player
 
Classes in this File Line Coverage Branch Coverage Complexity
Player
96%
80/83
80%
8/10
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  
 }