statistics/src/main/java/cz/xelfi/quoridor/statistics/OpeningNodeView.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 07 Jan 2010 22:34:17 +0100
branchstatistics-and-elo
changeset 178 4b78d4f028b3
child 264 d60370059c3c
permissions -rw-r--r--
Initial version of statistics and ELO rating. Donated by Martin Rexa
     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * The contents of this file are subject to the terms of either the GNU
     5  * General Public License Version 2 only ("GPL") or the Common
     6  * Development and Distribution License("CDDL") (collectively, the
     7  * "License"). You may not use this file except in compliance with the
     8  * License. You can obtain a copy of the License at
     9  * http://www.netbeans.org/cddl-gplv2.html
    10  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    11  * specific language governing permissions and limitations under the
    12  * License.  When distributing the software, include this License Header
    13  * Notice in each file and include the License file at
    14  * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
    15  * particular file as subject to the "Classpath" exception as provided
    16  * by Sun in the GPL Version 2 section of the License file that
    17  * accompanied this code. If applicable, add the following below the
    18  * License Header, with the fields enclosed by brackets [] replaced by
    19  * your own identifying information:
    20  * "Portions Copyrighted [year] [name of copyright owner]"
    21  *
    22  * Contributor(s):
    23  *
    24  * Portions Copyrighted 2010 Martin Rexa
    25  */
    26 
    27 package cz.xelfi.quoridor.statistics;
    28 
    29 import cz.xelfi.quoridor.webidor.GameId;
    30 import cz.xelfi.quoridor.webidor.GameStatus;
    31 import cz.xelfi.quoridor.Move;
    32 import java.util.Set;
    33 import java.util.HashSet;
    34 import java.util.Map;
    35 import java.util.HashMap;
    36 import java.util.List;
    37 import java.util.ArrayList;
    38 import javax.xml.bind.annotation.XmlElement;
    39 import javax.xml.bind.annotation.XmlElementWrapper;
    40 import javax.xml.bind.annotation.XmlRootElement;
    41 //import javax.xml.bind.annotation.XmlAccessType;
    42 //import javax.xml.bind.annotation.XmlAccessorType;
    43 import javax.xml.bind.annotation.XmlAttribute;
    44 
    45 /**
    46  *
    47  * @author Martin Rexa
    48  */
    49 
    50 @XmlRootElement
    51 //@XmlAccessorType(XmlAccessType.FIELD)
    52 public class OpeningNodeView {
    53     @XmlAttribute
    54     String code;
    55     @XmlElementWrapper(name="whiteGames")
    56     @XmlElement(name="gameId")
    57     List<GameId> whiteGames;
    58     @XmlElementWrapper(name="blackGames")
    59     @XmlElement(name="gameId")
    60     List<GameId> blackGames;
    61     Map<Move, OpeningNodeViewEntry> entries;
    62     boolean empty;
    63 
    64     public OpeningNodeView(){
    65     }
    66 
    67     public OpeningNodeView(String code){
    68         this.code = code;
    69         entries = new HashMap<Move, OpeningNodeViewEntry>();
    70         whiteGames = new ArrayList<GameId>();
    71         blackGames = new ArrayList<GameId>();
    72         empty = true;
    73     }
    74 
    75     @XmlElement
    76     public String getNodeCode(){
    77         return code;
    78     }
    79 
    80     public void processGame(Move m, String code, GameId gId){
    81         OpeningNodeViewEntry e = entries.get(m);
    82         if(e == null){
    83             e = new OpeningNodeViewEntry(m,code);
    84             entries.put(m, e);
    85         }
    86         e.processGame(gId);
    87         empty = false;
    88     }
    89 
    90     @XmlElementWrapper(name="children")
    91     @XmlElement(name="item")
    92     public Set<OpeningNodeViewEntry> getChildren(){
    93         Set<OpeningNodeViewEntry> result = new HashSet<OpeningNodeViewEntry>();
    94         for(Map.Entry<Move, OpeningNodeViewEntry> e: entries.entrySet()){
    95             result.add(e.getValue());
    96         }
    97         return result;
    98     }
    99 
   100 
   101     public void addFinishedGame(GameId gId){
   102         if(gId.getStatus().equals(GameStatus.whiteWon))
   103             whiteGames.add(gId);
   104         if(gId.getStatus().equals(GameStatus.blackWon))
   105             blackGames.add(gId);
   106         empty = false;
   107     }
   108 
   109     @XmlAttribute
   110     public int getWhiteCount(){
   111         return whiteGames.size();
   112     }
   113 
   114     @XmlAttribute
   115     public int getBlackCount(){
   116         return blackGames.size();
   117     }
   118 
   119 
   120     @XmlAttribute
   121     public boolean getChildrenNotEmpty(){
   122         return !entries.isEmpty();
   123     }
   124 
   125     public boolean isEmpty(){
   126         return this.empty;
   127     }
   128 
   129 }