desktop/desktop-sample/src/main/java/cz/xelfi/quoridor/desktop/sample/Quoridor.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 17 Sep 2010 05:52:39 -0700
branchdesktop
changeset 269 430ab68846fa
parent 268 13fe01081e23
permissions -rw-r--r--
Make the boards editable and submit moves to the quoridor server
jaroslav@268
     1
/**
jaroslav@268
     2
 * Quoridor server and related libraries
jaroslav@268
     3
 * Copyright (C) 2009-2010 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@268
     4
 *
jaroslav@268
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@268
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@268
     7
 * the Free Software Foundation, either version 3 of the License.
jaroslav@268
     8
 *
jaroslav@268
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@268
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@268
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@268
    12
 * GNU General Public License for more details.
jaroslav@268
    13
 *
jaroslav@268
    14
 * You should have received a copy of the GNU General Public License
jaroslav@268
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@268
    16
 * If not, see http://www.gnu.org/licenses/.
jaroslav@260
    17
 */
jaroslav@260
    18
jaroslav@260
    19
package cz.xelfi.quoridor.desktop.sample;
jaroslav@260
    20
jaroslav@260
    21
import com.sun.jersey.api.client.Client;
jaroslav@260
    22
import com.sun.jersey.api.client.GenericType;
jaroslav@263
    23
import com.sun.jersey.api.client.UniformInterfaceException;
jaroslav@260
    24
import com.sun.jersey.api.client.WebResource;
jaroslav@269
    25
import cz.xelfi.quoridor.Move;
jaroslav@260
    26
import cz.xelfi.quoridor.webidor.Game;
jaroslav@260
    27
import cz.xelfi.quoridor.webidor.GameId;
jaroslav@260
    28
import java.util.List;
jaroslav@263
    29
import java.util.logging.Level;
jaroslav@263
    30
import java.util.logging.Logger;
jaroslav@260
    31
import javax.ws.rs.core.MediaType;
jaroslav@260
    32
import org.openide.util.Lookup;
jaroslav@260
    33
jaroslav@260
    34
/** Class that connects to the server and answers queries.
jaroslav@260
    35
 *
jaroslav@260
    36
 * @author Jaroslav Tulach
jaroslav@260
    37
 */
jaroslav@260
    38
abstract class Quoridor {
jaroslav@263
    39
    private static Quoridor q;
jaroslav@260
    40
jaroslav@260
    41
    public static Quoridor getDefault() {
jaroslav@263
    42
        if (q != null) {
jaroslav@263
    43
            return q;
jaroslav@263
    44
        }
jaroslav@263
    45
        q = Lookup.getDefault().lookup(Quoridor.class);
jaroslav@263
    46
        if (q == null) {
jaroslav@263
    47
            q = new Impl();
jaroslav@263
    48
        }
jaroslav@263
    49
        return q;
jaroslav@260
    50
    }
jaroslav@260
    51
jaroslav@260
    52
    public abstract List<GameId> listGames();
jaroslav@260
    53
    public abstract Game getGame(String id);
jaroslav@269
    54
    public abstract String user();
jaroslav@260
    55
jaroslav@263
    56
    public abstract boolean login(String login, String password);
jaroslav@263
    57
jaroslav@269
    58
    public abstract void move(String id, String player, Move move);
jaroslav@269
    59
jaroslav@260
    60
    private static class Impl extends Quoridor {
jaroslav@260
    61
        private final WebResource wr;
jaroslav@263
    62
        private String id = "";
jaroslav@269
    63
        private String login = "";
jaroslav@263
    64
        private static final Logger LOG = Logger.getLogger(Impl.class.getName());
jaroslav@260
    65
jaroslav@260
    66
        public Impl() {
jaroslav@260
    67
            Client c = new Client();
jaroslav@260
    68
            wr = c.resource("http://quoridor.xelfi.cz/api/");
jaroslav@260
    69
        }
jaroslav@260
    70
jaroslav@260
    71
        @Override
jaroslav@260
    72
        public List<GameId> listGames() {
jaroslav@260
    73
            GenericType<List<GameId>> gType = new GenericType<List<GameId>>() {};
jaroslav@263
    74
            List<GameId> ids = wr.path("games").queryParam("loginID", id).
jaroslav@263
    75
                accept(MediaType.TEXT_XML).get(gType);
jaroslav@260
    76
            return ids;
jaroslav@260
    77
        }
jaroslav@260
    78
jaroslav@260
    79
jaroslav@260
    80
        @Override
jaroslav@260
    81
        public Game getGame(String id) {
jaroslav@263
    82
            Game g = wr.path("games").path(id).queryParam("loginID", id).
jaroslav@263
    83
                accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@260
    84
            return g;
jaroslav@260
    85
        }
jaroslav@260
    86
jaroslav@263
    87
        @Override
jaroslav@263
    88
        public boolean login(String login, String password) {
jaroslav@263
    89
            try {
jaroslav@263
    90
                id = wr.path("login").queryParam("name", login).
jaroslav@263
    91
                    queryParam("password", password).put(String.class);
jaroslav@269
    92
                if (id != null) {
jaroslav@269
    93
                    this.login = login;
jaroslav@269
    94
                }
jaroslav@263
    95
                return id != null;
jaroslav@263
    96
            } catch (UniformInterfaceException ex) {
jaroslav@263
    97
                LOG.log(Level.INFO, "Cannot login", ex);
jaroslav@263
    98
                return false;
jaroslav@263
    99
            }
jaroslav@263
   100
        }
jaroslav@263
   101
jaroslav@269
   102
        @Override
jaroslav@269
   103
        public String user() {
jaroslav@269
   104
            return login;
jaroslav@269
   105
        }
jaroslav@269
   106
jaroslav@269
   107
        @Override
jaroslav@269
   108
        public void move(String game, String player, Move move) {
jaroslav@269
   109
            String s = wr.path("games").path(game).queryParam("loginID", id).
jaroslav@269
   110
                queryParam("player", player).
jaroslav@269
   111
                queryParam("move", move.toString()).
jaroslav@269
   112
                    accept(MediaType.TEXT_XML).put(String.class);
jaroslav@269
   113
            System.err.println("s: " + s);
jaroslav@269
   114
        }
jaroslav@269
   115
jaroslav@260
   116
    }
jaroslav@260
   117
}