statistics/src/main/java/cz/xelfi/quoridor/statistics/resources/Openings.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
jaroslav@178
     1
/*
jaroslav@178
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jaroslav@178
     3
 *
jaroslav@178
     4
 * The contents of this file are subject to the terms of either the GNU
jaroslav@178
     5
 * General Public License Version 2 only ("GPL") or the Common
jaroslav@178
     6
 * Development and Distribution License("CDDL") (collectively, the
jaroslav@178
     7
 * "License"). You may not use this file except in compliance with the
jaroslav@178
     8
 * License. You can obtain a copy of the License at
jaroslav@178
     9
 * http://www.netbeans.org/cddl-gplv2.html
jaroslav@178
    10
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
jaroslav@178
    11
 * specific language governing permissions and limitations under the
jaroslav@178
    12
 * License.  When distributing the software, include this License Header
jaroslav@178
    13
 * Notice in each file and include the License file at
jaroslav@178
    14
 * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
jaroslav@178
    15
 * particular file as subject to the "Classpath" exception as provided
jaroslav@178
    16
 * by Sun in the GPL Version 2 section of the License file that
jaroslav@178
    17
 * accompanied this code. If applicable, add the following below the
jaroslav@178
    18
 * License Header, with the fields enclosed by brackets [] replaced by
jaroslav@178
    19
 * your own identifying information:
jaroslav@178
    20
 * "Portions Copyrighted [year] [name of copyright owner]"
jaroslav@178
    21
 *
jaroslav@178
    22
 * Contributor(s):
jaroslav@178
    23
 *
jaroslav@178
    24
 * Portions Copyrighted 2010 Martin Rexa
jaroslav@178
    25
 */
jaroslav@178
    26
jaroslav@178
    27
package cz.xelfi.quoridor.statistics.resources;
jaroslav@178
    28
jaroslav@178
    29
import cz.xelfi.quoridor.IllegalPositionException;
jaroslav@178
    30
import cz.xelfi.quoridor.webidor.Game;
jaroslav@178
    31
import cz.xelfi.quoridor.webidor.GameId;
jaroslav@178
    32
import cz.xelfi.quoridor.statistics.OpeningTree;
jaroslav@178
    33
import cz.xelfi.quoridor.statistics.OpeningTreeNode;
jaroslav@178
    34
import cz.xelfi.quoridor.statistics.OpeningNodeView;
jaroslav@178
    35
import cz.xelfi.quoridor.webidor.GameStatus;
jaroslav@178
    36
import java.util.List;
jaroslav@178
    37
import javax.ws.rs.GET;
jaroslav@178
    38
import javax.ws.rs.Path;
jaroslav@178
    39
import javax.ws.rs.PathParam;
jaroslav@178
    40
import javax.ws.rs.Produces;
jaroslav@178
    41
import javax.ws.rs.QueryParam;
jaroslav@178
    42
import javax.ws.rs.DefaultValue;
jaroslav@178
    43
import javax.ws.rs.core.MediaType;
jaroslav@178
    44
jaroslav@178
    45
/**
jaroslav@178
    46
 *
jaroslav@178
    47
 * @author Martin Rexa
jaroslav@178
    48
 */
jaroslav@178
    49
public class Openings {
jaroslav@178
    50
    OpeningTree tree;
jaroslav@178
    51
jaroslav@178
    52
    public Openings(){
jaroslav@178
    53
        tree = new OpeningTree();
jaroslav@178
    54
    }
jaroslav@178
    55
jaroslav@178
    56
    public void processGame(Game game) {
jaroslav@178
    57
        try{
jaroslav@178
    58
            tree.processGame(game);
jaroslav@178
    59
        }catch (IllegalPositionException e){
jaroslav@178
    60
            e.printStackTrace();
jaroslav@178
    61
        }
jaroslav@178
    62
    }
jaroslav@178
    63
jaroslav@178
    64
    @GET
jaroslav@178
    65
    @Path("{nodeId}")
jaroslav@178
    66
    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    67
    public OpeningNodeView getNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    68
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    69
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    70
        if(node == null)
jaroslav@178
    71
            node = tree.getRoot();
jaroslav@178
    72
        return node.getView(loginId);
jaroslav@178
    73
    }
jaroslav@178
    74
jaroslav@178
    75
    @GET
jaroslav@178
    76
    @Path("{nodeId}.check")
jaroslav@178
    77
    @Produces({ MediaType.TEXT_PLAIN })
jaroslav@178
    78
    public String checkNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    79
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    80
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    81
        if(node == null)
jaroslav@178
    82
            return "";
jaroslav@178
    83
        if(node.getView(loginId).isEmpty())
jaroslav@178
    84
            return "";
jaroslav@178
    85
        else
jaroslav@178
    86
            return nodeId;
jaroslav@178
    87
    }
jaroslav@178
    88
jaroslav@178
    89
    @GET
jaroslav@178
    90
    @Path("{nodeId}/{status}")
jaroslav@178
    91
    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    92
    public List<GameId> listGames(
jaroslav@178
    93
        @DefaultValue("") @QueryParam("loginID") String loginId,
jaroslav@178
    94
        @PathParam("nodeId") String nodeId,
jaroslav@178
    95
        @DefaultValue("") @PathParam("status") String status
jaroslav@178
    96
    ) {
jaroslav@178
    97
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    98
        if(node == null)
jaroslav@178
    99
            return null;
jaroslav@178
   100
        if("white".equals(status))
jaroslav@178
   101
            return node.filterGames(loginId, GameStatus.whiteWon);
jaroslav@178
   102
        else if("black".equals(status))
jaroslav@178
   103
            return node.filterGames(loginId, GameStatus.blackWon);
jaroslav@178
   104
        else
jaroslav@178
   105
            return null;
jaroslav@178
   106
    }
jaroslav@178
   107
}