desktop/desktop-sample/src/main/java/cz/xelfi/quoridor/desktop/sample/Quoridor.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 08:30:37 +0200
branchdesktop
changeset 263 ac802aa234fc
parent 260 8ebffb5aa10e
child 268 13fe01081e23
permissions -rw-r--r--
Login panel
jaroslav@260
     1
/*
jaroslav@260
     2
 * To change this template, choose Tools | Templates
jaroslav@260
     3
 * and open the template in the editor.
jaroslav@260
     4
 */
jaroslav@260
     5
jaroslav@260
     6
package cz.xelfi.quoridor.desktop.sample;
jaroslav@260
     7
jaroslav@260
     8
import com.sun.jersey.api.client.Client;
jaroslav@260
     9
import com.sun.jersey.api.client.GenericType;
jaroslav@263
    10
import com.sun.jersey.api.client.UniformInterfaceException;
jaroslav@260
    11
import com.sun.jersey.api.client.WebResource;
jaroslav@260
    12
import cz.xelfi.quoridor.webidor.Game;
jaroslav@260
    13
import cz.xelfi.quoridor.webidor.GameId;
jaroslav@260
    14
import java.util.List;
jaroslav@263
    15
import java.util.logging.Level;
jaroslav@263
    16
import java.util.logging.Logger;
jaroslav@260
    17
import javax.ws.rs.core.MediaType;
jaroslav@260
    18
import org.openide.util.Lookup;
jaroslav@260
    19
jaroslav@260
    20
/** Class that connects to the server and answers queries.
jaroslav@260
    21
 *
jaroslav@260
    22
 * @author Jaroslav Tulach
jaroslav@260
    23
 */
jaroslav@260
    24
abstract class Quoridor {
jaroslav@263
    25
    private static Quoridor q;
jaroslav@260
    26
jaroslav@260
    27
    public static Quoridor getDefault() {
jaroslav@263
    28
        if (q != null) {
jaroslav@263
    29
            return q;
jaroslav@263
    30
        }
jaroslav@263
    31
        q = Lookup.getDefault().lookup(Quoridor.class);
jaroslav@263
    32
        if (q == null) {
jaroslav@263
    33
            q = new Impl();
jaroslav@263
    34
        }
jaroslav@263
    35
        return q;
jaroslav@260
    36
    }
jaroslav@260
    37
jaroslav@260
    38
    public abstract List<GameId> listGames();
jaroslav@260
    39
    public abstract Game getGame(String id);
jaroslav@260
    40
jaroslav@263
    41
    public abstract boolean login(String login, String password);
jaroslav@263
    42
jaroslav@260
    43
    private static class Impl extends Quoridor {
jaroslav@260
    44
        private final WebResource wr;
jaroslav@263
    45
        private String id = "";
jaroslav@263
    46
        private static final Logger LOG = Logger.getLogger(Impl.class.getName());
jaroslav@260
    47
jaroslav@260
    48
        public Impl() {
jaroslav@260
    49
            Client c = new Client();
jaroslav@260
    50
            wr = c.resource("http://quoridor.xelfi.cz/api/");
jaroslav@260
    51
        }
jaroslav@260
    52
jaroslav@260
    53
        @Override
jaroslav@260
    54
        public List<GameId> listGames() {
jaroslav@260
    55
            GenericType<List<GameId>> gType = new GenericType<List<GameId>>() {};
jaroslav@263
    56
            List<GameId> ids = wr.path("games").queryParam("loginID", id).
jaroslav@263
    57
                accept(MediaType.TEXT_XML).get(gType);
jaroslav@260
    58
            return ids;
jaroslav@260
    59
        }
jaroslav@260
    60
jaroslav@260
    61
jaroslav@260
    62
        @Override
jaroslav@260
    63
        public Game getGame(String id) {
jaroslav@263
    64
            Game g = wr.path("games").path(id).queryParam("loginID", id).
jaroslav@263
    65
                accept(MediaType.TEXT_XML).get(Game.class);
jaroslav@260
    66
            return g;
jaroslav@260
    67
        }
jaroslav@260
    68
jaroslav@263
    69
        @Override
jaroslav@263
    70
        public boolean login(String login, String password) {
jaroslav@263
    71
            try {
jaroslav@263
    72
                id = wr.path("login").queryParam("name", login).
jaroslav@263
    73
                    queryParam("password", password).put(String.class);
jaroslav@263
    74
                return id != null;
jaroslav@263
    75
            } catch (UniformInterfaceException ex) {
jaroslav@263
    76
                LOG.log(Level.INFO, "Cannot login", ex);
jaroslav@263
    77
                return false;
jaroslav@263
    78
            }
jaroslav@263
    79
        }
jaroslav@263
    80
jaroslav@260
    81
    }
jaroslav@260
    82
}