Jiri Tulach requested support for JSONP. Changing all the @GET methods to also support application/x-javascript
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 {