statistics/src/main/java/cz/xelfi/quoridor/statistics/resources/Openings.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 09:46:43 +0200
changeset 266 15fcdfc4cd4a
parent 264 d60370059c3c
permissions -rw-r--r--
Using maven-license-plugin and updating all missing headers
jaroslav@266
     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@266
    18
jaroslav@178
    19
package cz.xelfi.quoridor.statistics.resources;
jaroslav@178
    20
jaroslav@178
    21
import cz.xelfi.quoridor.IllegalPositionException;
jaroslav@178
    22
import cz.xelfi.quoridor.webidor.Game;
jaroslav@178
    23
import cz.xelfi.quoridor.webidor.GameId;
jaroslav@178
    24
import cz.xelfi.quoridor.statistics.OpeningTree;
jaroslav@178
    25
import cz.xelfi.quoridor.statistics.OpeningTreeNode;
jaroslav@178
    26
import cz.xelfi.quoridor.statistics.OpeningNodeView;
jaroslav@178
    27
import cz.xelfi.quoridor.webidor.GameStatus;
jaroslav@178
    28
import java.util.List;
jaroslav@178
    29
import javax.ws.rs.GET;
jaroslav@178
    30
import javax.ws.rs.Path;
jaroslav@178
    31
import javax.ws.rs.PathParam;
jaroslav@178
    32
import javax.ws.rs.Produces;
jaroslav@178
    33
import javax.ws.rs.QueryParam;
jaroslav@178
    34
import javax.ws.rs.DefaultValue;
jaroslav@178
    35
import javax.ws.rs.core.MediaType;
jaroslav@178
    36
jaroslav@178
    37
/**
jaroslav@178
    38
 *
jaroslav@178
    39
 * @author Martin Rexa
jaroslav@178
    40
 */
jaroslav@178
    41
public class Openings {
jaroslav@178
    42
    OpeningTree tree;
jaroslav@178
    43
jaroslav@178
    44
    public Openings(){
jaroslav@178
    45
        tree = new OpeningTree();
jaroslav@178
    46
    }
jaroslav@178
    47
jaroslav@178
    48
    public void processGame(Game game) {
jaroslav@178
    49
        try{
jaroslav@178
    50
            tree.processGame(game);
jaroslav@178
    51
        }catch (IllegalPositionException e){
jaroslav@178
    52
            e.printStackTrace();
jaroslav@178
    53
        }
jaroslav@178
    54
    }
jaroslav@178
    55
jaroslav@178
    56
    @GET
jaroslav@178
    57
    @Path("{nodeId}")
jaroslav@178
    58
    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    59
    public OpeningNodeView getNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    60
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    61
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    62
        if(node == null)
jaroslav@178
    63
            node = tree.getRoot();
jaroslav@178
    64
        return node.getView(loginId);
jaroslav@178
    65
    }
jaroslav@178
    66
jaroslav@178
    67
    @GET
jaroslav@178
    68
    @Path("{nodeId}.check")
jaroslav@178
    69
    @Produces({ MediaType.TEXT_PLAIN })
jaroslav@178
    70
    public String checkNode(@QueryParam("loginID") @DefaultValue("") String loginId,
jaroslav@178
    71
                         @PathParam("nodeId") String nodeId){
jaroslav@178
    72
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    73
        if(node == null)
jaroslav@178
    74
            return "";
jaroslav@178
    75
        if(node.getView(loginId).isEmpty())
jaroslav@178
    76
            return "";
jaroslav@178
    77
        else
jaroslav@178
    78
            return nodeId;
jaroslav@178
    79
    }
jaroslav@178
    80
jaroslav@178
    81
    @GET
jaroslav@178
    82
    @Path("{nodeId}/{status}")
jaroslav@178
    83
    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
jaroslav@178
    84
    public List<GameId> listGames(
jaroslav@178
    85
        @DefaultValue("") @QueryParam("loginID") String loginId,
jaroslav@178
    86
        @PathParam("nodeId") String nodeId,
jaroslav@178
    87
        @DefaultValue("") @PathParam("status") String status
jaroslav@178
    88
    ) {
jaroslav@178
    89
        OpeningTreeNode node = tree.getNode(nodeId);
jaroslav@178
    90
        if(node == null)
jaroslav@178
    91
            return null;
jaroslav@178
    92
        if("white".equals(status))
jaroslav@178
    93
            return node.filterGames(loginId, GameStatus.whiteWon);
jaroslav@178
    94
        else if("black".equals(status))
jaroslav@178
    95
            return node.filterGames(loginId, GameStatus.blackWon);
jaroslav@178
    96
        else
jaroslav@178
    97
            return null;
jaroslav@178
    98
    }
jaroslav@178
    99
}