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