freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/Requests.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 14 Sep 2010 08:56:13 +0200
changeset 264 d60370059c3c
parent 233 ecddc9f373bb
permissions -rw-r--r--
Changing headers to GPLv3
jaroslav@233
     1
/*
jaroslav@264
     2
 * Quoridor server and related libraries
jaroslav@264
     3
 * Copyright (C) 2009-2010 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@233
     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@233
     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@233
    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@233
    17
 */
jaroslav@233
    18
package cz.xelfi.quoridor.freemarkerdor;
jaroslav@233
    19
jaroslav@233
    20
import com.sun.jersey.api.client.WebResource;
jaroslav@233
    21
import com.sun.jersey.api.client.WebResource.Builder;
jaroslav@233
    22
import java.net.URI;
jaroslav@233
    23
import java.util.HashMap;
jaroslav@233
    24
import java.util.Map;
jaroslav@233
    25
import java.util.UUID;
jaroslav@233
    26
import javax.ws.rs.GET;
jaroslav@233
    27
import javax.ws.rs.Path;
jaroslav@233
    28
import javax.ws.rs.PathParam;
jaroslav@233
    29
import javax.ws.rs.Produces;
jaroslav@233
    30
import javax.ws.rs.core.Cookie;
jaroslav@233
    31
import javax.ws.rs.core.MediaType;
jaroslav@233
    32
import javax.ws.rs.core.Response;
jaroslav@233
    33
jaroslav@233
    34
/** Keeps "requests". A request is UUID that maps to a URL which can
jaroslav@233
    35
 * be executed later.
jaroslav@233
    36
 *
jaroslav@233
    37
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@233
    38
 */
jaroslav@233
    39
public final class Requests extends Object {
jaroslav@233
    40
    private final Map<UUID,Builder> requests = new HashMap<UUID, Builder>();
jaroslav@233
    41
    private final WebResource root;
jaroslav@233
    42
jaroslav@233
    43
    Requests(WebResource path) {
jaroslav@233
    44
        root = path;
jaroslav@233
    45
    }
jaroslav@233
    46
jaroslav@233
    47
    @GET
jaroslav@233
    48
    @Path("{id}")
jaroslav@233
    49
    @Produces(MediaType.TEXT_HTML)
jaroslav@233
    50
    public Response redirect(@PathParam("id") String uuid) {
jaroslav@233
    51
        UUID r = UUID.fromString(uuid);
jaroslav@233
    52
        Builder web = requests.get(r);
jaroslav@233
    53
        if (web == null) {
jaroslav@233
    54
            return Response.status(Response.Status.NOT_FOUND).build();
jaroslav@233
    55
        }
jaroslav@233
    56
        return Response.ok(web.get(String.class)).build();
jaroslav@233
    57
    }
jaroslav@233
    58
jaroslav@233
    59
    boolean isVerified(String uuid) {
jaroslav@233
    60
        return uuid != null && requests.containsKey(UUID.fromString(uuid));
jaroslav@233
    61
    }
jaroslav@233
    62
jaroslav@233
    63
    URI register(String login, WebResource request) {
jaroslav@233
    64
        UUID uuid = UUID.randomUUID();
jaroslav@233
    65
        WebResource callback = root.path(uuid.toString());
jaroslav@233
    66
        Builder builder = request.queryParam("verified", uuid.toString()).
jaroslav@233
    67
            cookie(Cookie.valueOf("login=" + login));
jaroslav@233
    68
        requests.put(uuid, builder);
jaroslav@233
    69
        return callback.getURI();
jaroslav@233
    70
    }
jaroslav@233
    71
jaroslav@233
    72
}