Jiri Tulach requested support for JSONP. Changing all the @GET methods to also support application/x-javascript
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 11 Jan 2010 10:16:57 +0100
changeset 1896245e1b634aa
parent 188 1cd2f78f4a1d
child 190 ea95433264d4
Jiri Tulach requested support for JSONP. Changing all the @GET methods to also support application/x-javascript
webidor/pom.xml
webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Games.java
webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Quoridor.java
webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Users.java
     1.1 --- a/webidor/pom.xml	Fri Jan 08 00:55:00 2010 +0100
     1.2 +++ b/webidor/pom.xml	Mon Jan 11 10:16:57 2010 +0100
     1.3 @@ -11,7 +11,7 @@
     1.4    <groupId>cz.xelfi.quoridor</groupId>
     1.5    <artifactId>webidor</artifactId>
     1.6    <packaging>jar</packaging>
     1.7 -  <version>1.12</version>
     1.8 +  <version>1.13</version>
     1.9    <name>webidor server</name>
    1.10    <url>http://maven.apache.org</url>
    1.11    <repositories>
     2.1 --- a/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Games.java	Fri Jan 08 00:55:00 2010 +0100
     2.2 +++ b/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Games.java	Mon Jan 11 10:16:57 2010 +0100
     2.3 @@ -26,6 +26,7 @@
     2.4  
     2.5  package cz.xelfi.quoridor.webidor.resources;
     2.6  
     2.7 +import com.sun.jersey.api.json.JSONWithPadding;
     2.8  import cz.xelfi.quoridor.IllegalPositionException;
     2.9  import cz.xelfi.quoridor.webidor.*;
    2.10  import cz.xelfi.quoridor.Move;
    2.11 @@ -57,6 +58,7 @@
    2.12  import javax.ws.rs.Produces;
    2.13  import javax.ws.rs.QueryParam;
    2.14  import javax.ws.rs.WebApplicationException;
    2.15 +import javax.ws.rs.core.GenericEntity;
    2.16  import javax.ws.rs.core.MediaType;
    2.17  import javax.ws.rs.core.Response.Status;
    2.18  
    2.19 @@ -127,9 +129,6 @@
    2.20          return g.getBoard().toString();
    2.21      }
    2.22  
    2.23 -    @GET
    2.24 -    @Path("{id}")
    2.25 -    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    2.26      public Game getBoardInfo(
    2.27          @QueryParam("loginID") @DefaultValue("") String loginId,
    2.28          @PathParam("id") String id,
    2.29 @@ -142,6 +141,19 @@
    2.30          throw new WebApplicationException(Status.UNAUTHORIZED);
    2.31      }
    2.32  
    2.33 +    @GET
    2.34 +    @Path("{id}")
    2.35 +    @Produces({ "application/x-javascript", MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    2.36 +    public JSONWithPadding getBoardInfo(
    2.37 +        @QueryParam("callback") String callback,
    2.38 +        @QueryParam("loginID") @DefaultValue("") String loginId,
    2.39 +        @PathParam("id") String id,
    2.40 +        @QueryParam("move") @DefaultValue("-1") int move
    2.41 +    ) throws IOException {
    2.42 +        return new JSONWithPadding(getBoardInfo(loginId, id, move), callback);
    2.43 +    }
    2.44 +
    2.45 +
    2.46      private boolean canSee(GameId id, String loginId) throws IOException {
    2.47          if (!id.isFinished()) {
    2.48              return true;
    2.49 @@ -204,8 +216,9 @@
    2.50      }
    2.51  
    2.52      @GET
    2.53 -    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    2.54 -    public List<GameId> listGames(
    2.55 +    @Produces({ "application/x-javascript", MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    2.56 +    public JSONWithPadding listGames(
    2.57 +        @QueryParam("callback") String callback,
    2.58          @DefaultValue("") @QueryParam("loginID") String loginId,
    2.59          @DefaultValue("") @QueryParam("status") String status
    2.60      ) throws IOException {
    2.61 @@ -219,7 +232,7 @@
    2.62              }
    2.63          }
    2.64          Collections.sort(arr, GameId.NEWEST_FIRST);
    2.65 -        return arr;
    2.66 +        return new JSONWithPadding(new GenericEntity<List<GameId>>(arr) {}, callback);
    2.67      }
    2.68  
    2.69      public List<Game> getGames() {
     3.1 --- a/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Quoridor.java	Fri Jan 08 00:55:00 2010 +0100
     3.2 +++ b/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Quoridor.java	Mon Jan 11 10:16:57 2010 +0100
     3.3 @@ -29,6 +29,7 @@
     3.4  import com.sun.jersey.api.container.httpserver.HttpServerFactory;
     3.5  import com.sun.jersey.api.core.PackagesResourceConfig;
     3.6  import com.sun.jersey.api.core.ResourceConfig;
     3.7 +import com.sun.jersey.api.json.JSONWithPadding;
     3.8  import com.sun.jersey.spi.resource.Singleton;
     3.9  import com.sun.net.httpserver.HttpServer;
    3.10  import cz.xelfi.quoridor.webidor.User;
    3.11 @@ -45,7 +46,9 @@
    3.12  import javax.ws.rs.Path;
    3.13  import javax.ws.rs.Produces;
    3.14  import javax.ws.rs.QueryParam;
    3.15 +import javax.ws.rs.WebApplicationException;
    3.16  import javax.ws.rs.core.MediaType;
    3.17 +import javax.ws.rs.core.Response.Status;
    3.18  
    3.19  /**
    3.20   *
    3.21 @@ -67,21 +70,17 @@
    3.22          path = new File(prop);
    3.23          path.mkdirs();
    3.24          loggedIn = new HashMap<UUID, String>();
    3.25 +        games = new Games(new File(path, "games"), this); // NOI18N
    3.26 +        users = new Users(new File(path, "users"), this); // NOI18N
    3.27      }
    3.28  
    3.29      @Path("games")
    3.30      public Games getGames() {
    3.31 -        if (games == null) {
    3.32 -            games = new Games(new File(path, "games"), this); // NOI18N
    3.33 -        }
    3.34          return games;
    3.35      }
    3.36  
    3.37      @Path("users")
    3.38      public Users getUsers() {
    3.39 -        if (users == null) {
    3.40 -            users = new Users(new File(path, "users"), this); // NOI18N
    3.41 -        }
    3.42          return users;
    3.43      }
    3.44  
    3.45 @@ -128,8 +127,9 @@
    3.46  
    3.47      @Path("login")
    3.48      @GET
    3.49 -    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    3.50 -    public User loggedInInfo(
    3.51 +    @Produces({ "application/x-javascript", MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    3.52 +    public JSONWithPadding loggedInInfo(
    3.53 +        @QueryParam("callback") String callback,
    3.54          @QueryParam("id") String id
    3.55      ) throws IOException {
    3.56          String ret = null;
    3.57 @@ -140,7 +140,11 @@
    3.58          } catch (IllegalArgumentException ex) {
    3.59              // OK, happens for invalid ids
    3.60          }
    3.61 -        return ret == null ? null : getUsers().getUserInfo(id, ret);
    3.62 +        if (ret == null) {
    3.63 +            throw new WebApplicationException(Status.UNAUTHORIZED);
    3.64 +        } else {
    3.65 +            return getUsers().getUserInfo(callback, id, ret);
    3.66 +        }
    3.67      }
    3.68  
    3.69      //
     4.1 --- a/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Users.java	Fri Jan 08 00:55:00 2010 +0100
     4.2 +++ b/webidor/src/main/java/cz/xelfi/quoridor/webidor/resources/Users.java	Mon Jan 11 10:16:57 2010 +0100
     4.3 @@ -26,6 +26,7 @@
     4.4  
     4.5  package cz.xelfi.quoridor.webidor.resources;
     4.6  
     4.7 +import com.sun.jersey.api.json.JSONWithPadding;
     4.8  import cz.xelfi.quoridor.webidor.*;
     4.9  import java.io.File;
    4.10  import java.io.FileInputStream;
    4.11 @@ -59,16 +60,15 @@
    4.12      }
    4.13  
    4.14      @GET
    4.15 -    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
    4.16 -    public User getOwnInfo(
    4.17 -            @QueryParam("loginID") String loginId
    4.18 +    @Produces({ "application/x-javascript", MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    4.19 +    public JSONWithPadding getOwnInfo(
    4.20 +        @QueryParam("callback") String callback,
    4.21 +        @QueryParam("loginID") String loginId
    4.22      ) throws IOException {
    4.23 -        return getUserInfo(loginId, null);
    4.24 +        return getUserInfo(callback, loginId, null);
    4.25      }
    4.26 -    @GET
    4.27 -    @Path("{id}")
    4.28 -    @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    4.29 -    public User getUserInfo(
    4.30 +
    4.31 +    User getUserInfo(
    4.32          @QueryParam("loginID") String loginId,
    4.33          @PathParam("id") String id
    4.34      ) throws IOException {
    4.35 @@ -95,6 +95,17 @@
    4.36          return user;
    4.37      }
    4.38  
    4.39 +    @GET
    4.40 +    @Path("{id}")
    4.41 +    @Produces({ "application/x-javascript", MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    4.42 +    public JSONWithPadding getUserInfo(
    4.43 +        @QueryParam("callback") String callback,
    4.44 +        @QueryParam("loginID") String loginId,
    4.45 +        @PathParam("id") String id
    4.46 +    ) throws IOException {
    4.47 +        return new JSONWithPadding(getUserInfo(loginId, id), callback);
    4.48 +    }
    4.49 +
    4.50      @POST
    4.51      @Path("{id}")
    4.52      @Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    4.53 @@ -117,7 +128,7 @@
    4.54          p.store(os, "");
    4.55          os.close();
    4.56          
    4.57 -        return Response.ok().entity(getUserInfo(loginId, id)).build();
    4.58 +        return Response.ok().entity(getUserInfo(null, loginId, id).getJsonSource()).build();
    4.59      }
    4.60  
    4.61      private synchronized Properties getProp(String id) throws FileNotFoundException, IOException {