statistics/src/main/java/cz/xelfi/quoridor/statistics/resources/Openings.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 08:56:13 +0200
changeset 264 d60370059c3c
parent 178 4b78d4f028b3
child 266 15fcdfc4cd4a
permissions -rw-r--r--
Changing headers to GPLv3
jaroslav@178
     1
/*
jaroslav@264
     2
 * Quoridor server and related libraries
jaroslav@264
     3
 * Copyright (C) 2009-2010 Martin Rexa
jaroslav@178
     4
 *
jaroslav@264
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@264
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@264
     7
 * the Free Software Foundation, either version 3 of the License.
jaroslav@178
     8
 *
jaroslav@264
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@264
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@264
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@264
    12
 * GNU General Public License for more details.
jaroslav@178
    13
 *
jaroslav@264
    14
 * You should have received a copy of the GNU General Public License
jaroslav@264
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@264
    16
 * If not, see http://www.gnu.org/licenses/.
jaroslav@178
    17
 */
jaroslav@178
    18
package cz.xelfi.quoridor.statistics.resources;
jaroslav@178
    19
jaroslav@178
    20
import cz.xelfi.quoridor.IllegalPositionException;
jaroslav@178
    21
import cz.xelfi.quoridor.webidor.Game;
jaroslav@178
    22
import cz.xelfi.quoridor.webidor.GameId;
jaroslav@178
    23
import cz.xelfi.quoridor.statistics.OpeningTree;
jaroslav@178
    24
import cz.xelfi.quoridor.statistics.OpeningTreeNode;
jaroslav@178
    25
import cz.xelfi.quoridor.statistics.OpeningNodeView;
jaroslav@178
    26
import cz.xelfi.quoridor.webidor.GameStatus;
jaroslav@178
    27
import java.util.List;
jaroslav@178
    28
import javax.ws.rs.GET;
jaroslav@178
    29
import javax.ws.rs.Path;
jaroslav@178
    30
import javax.ws.rs.PathParam;
jaroslav@178
    31
import javax.ws.rs.Produces;
jaroslav@178
    32
import javax.ws.rs.QueryParam;
jaroslav@178
    33
import javax.ws.rs.DefaultValue;
jaroslav@178
    34
import javax.ws.rs.core.MediaType;
jaroslav@178
    35
jaroslav@178
    36
/**
jaroslav@178
    37
 *
jaroslav@178
    38
 * @author Martin Rexa
jaroslav@178
    39
 */
jaroslav@178
    40
public class Openings {
jaroslav@178
    41
    OpeningTree tree;
jaroslav@178
    42
jaroslav@178
    43
    public Openings(){
jaroslav@178
    44
        tree = new OpeningTree();
jaroslav@178
    45
    }
jaroslav@178
    46
jaroslav@178
    47
    public void processGame(Game game) {
jaroslav@178
    48
        try{
jaroslav@178
    49
            tree.processGame(game);
jaroslav@178
    50
        }catch (IllegalPositionException e){
jaroslav@178
    51
            e.printStackTrace();
jaroslav@178
    52
        }
jaroslav@178
    53
    }
jaroslav@178
    54
jaroslav@178
    55
    @GET
jaroslav@178
    56
    @Path("{nodeId}")
jaroslav@178
    57
    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    58
    public OpeningNodeView getNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    59
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    60
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    61
        if(node == null)
jaroslav@178
    62
            node = tree.getRoot();
jaroslav@178
    63
        return node.getView(loginId);
jaroslav@178
    64
    }
jaroslav@178
    65
jaroslav@178
    66
    @GET
jaroslav@178
    67
    @Path("{nodeId}.check")
jaroslav@178
    68
    @Produces({ MediaType.TEXT_PLAIN })
jaroslav@178
    69
    public String checkNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    70
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    71
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    72
        if(node == null)
jaroslav@178
    73
            return "";
jaroslav@178
    74
        if(node.getView(loginId).isEmpty())
jaroslav@178
    75
            return "";
jaroslav@178
    76
        else
jaroslav@178
    77
            return nodeId;
jaroslav@178
    78
    }
jaroslav@178
    79
jaroslav@178
    80
    @GET
jaroslav@178
    81
    @Path("{nodeId}/{status}")
jaroslav@178
    82
    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    83
    public List<GameId> listGames(
jaroslav@178
    84
        @DefaultValue("") @QueryParam("loginID") String loginId,
jaroslav@178
    85
        @PathParam("nodeId") String nodeId,
jaroslav@178
    86
        @DefaultValue("") @PathParam("status") String status
jaroslav@178
    87
    ) {
jaroslav@178
    88
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    89
        if(node == null)
jaroslav@178
    90
            return null;
jaroslav@178
    91
        if("white".equals(status))
jaroslav@178
    92
            return node.filterGames(loginId, GameStatus.whiteWon);
jaroslav@178
    93
        else if("black".equals(status))
jaroslav@178
    94
            return node.filterGames(loginId, GameStatus.blackWon);
jaroslav@178
    95
        else
jaroslav@178
    96
            return null;
jaroslav@178
    97
    }
jaroslav@178
    98
}