desktop/desktop-sample/src/main/java/cz/xelfi/quoridor/desktop/sample/Quoridor.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 09:58:04 +0200
branchdesktop
changeset 268 13fe01081e23
parent 263 ac802aa234fc
child 269 430ab68846fa
permissions -rw-r--r--
Updating licenses in desktop modules
     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.webidor.Game;
    26 import cz.xelfi.quoridor.webidor.GameId;
    27 import java.util.List;
    28 import java.util.logging.Level;
    29 import java.util.logging.Logger;
    30 import javax.ws.rs.core.MediaType;
    31 import org.openide.util.Lookup;
    32 
    33 /** Class that connects to the server and answers queries.
    34  *
    35  * @author Jaroslav Tulach
    36  */
    37 abstract class Quoridor {
    38     private static Quoridor q;
    39 
    40     public static Quoridor getDefault() {
    41         if (q != null) {
    42             return q;
    43         }
    44         q = Lookup.getDefault().lookup(Quoridor.class);
    45         if (q == null) {
    46             q = new Impl();
    47         }
    48         return q;
    49     }
    50 
    51     public abstract List<GameId> listGames();
    52     public abstract Game getGame(String id);
    53 
    54     public abstract boolean login(String login, String password);
    55 
    56     private static class Impl extends Quoridor {
    57         private final WebResource wr;
    58         private String id = "";
    59         private static final Logger LOG = Logger.getLogger(Impl.class.getName());
    60 
    61         public Impl() {
    62             Client c = new Client();
    63             wr = c.resource("http://quoridor.xelfi.cz/api/");
    64         }
    65 
    66         @Override
    67         public List<GameId> listGames() {
    68             GenericType<List<GameId>> gType = new GenericType<List<GameId>>() {};
    69             List<GameId> ids = wr.path("games").queryParam("loginID", id).
    70                 accept(MediaType.TEXT_XML).get(gType);
    71             return ids;
    72         }
    73 
    74 
    75         @Override
    76         public Game getGame(String id) {
    77             Game g = wr.path("games").path(id).queryParam("loginID", id).
    78                 accept(MediaType.TEXT_XML).get(Game.class);
    79             return g;
    80         }
    81 
    82         @Override
    83         public boolean login(String login, String password) {
    84             try {
    85                 id = wr.path("login").queryParam("name", login).
    86                     queryParam("password", password).put(String.class);
    87                 return id != null;
    88             } catch (UniformInterfaceException ex) {
    89                 LOG.log(Level.INFO, "Cannot login", ex);
    90                 return false;
    91             }
    92         }
    93 
    94     }
    95 }