freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/UI.java
changeset 233 ecddc9f373bb
parent 220 fca206f8e5ef
child 234 0a71b6bd786f
     1.1 --- a/freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/UI.java	Sun Jan 17 14:37:01 2010 +0100
     1.2 +++ b/freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/UI.java	Thu Mar 04 19:37:58 2010 +0100
     1.3 @@ -40,6 +40,7 @@
     1.4  import java.io.InputStream;
     1.5  import java.io.StringWriter;
     1.6  import java.net.URI;
     1.7 +import java.text.MessageFormat;
     1.8  import java.util.Date;
     1.9  import java.util.HashMap;
    1.10  import java.util.List;
    1.11 @@ -89,6 +90,8 @@
    1.12      }
    1.13      private static WebResource base;
    1.14      private static WebResource stat;
    1.15 +    private static WebResource web;
    1.16 +    private static Requests requests;
    1.17  
    1.18      @Context
    1.19      private HttpHeaders headers;
    1.20 @@ -98,10 +101,17 @@
    1.21      public UI() {
    1.22      }
    1.23  
    1.24 -    private Viewable checkLogin() {
    1.25 +    private String login() {
    1.26          Cookie cookie = headers.getCookies().get("login");
    1.27          if (cookie != null) {
    1.28 -            String id = cookie.getValue();
    1.29 +            return cookie.getValue();
    1.30 +        }
    1.31 +        return null;
    1.32 +    }
    1.33 +
    1.34 +    private Viewable checkLogin() {
    1.35 +        String id = login();
    1.36 +        if (id != null) {
    1.37              UserInfo us;
    1.38              try {
    1.39                  us = base.path("users").queryParam("loginID", id).
    1.40 @@ -342,23 +352,45 @@
    1.41          return viewable("index.fmt", got, args);
    1.42      }
    1.43  
    1.44 +    @Path("requests")
    1.45 +    public Requests getRequests() {
    1.46 +        if (requests == null) {
    1.47 +            requests = new Requests(web.path("requests"));
    1.48 +        }
    1.49 +        return requests;
    1.50 +    }
    1.51 +
    1.52  
    1.53      @GET
    1.54      @Path("options")
    1.55      public Response changeOptions(
    1.56          @QueryParam("email") String email,
    1.57 -        @QueryParam("language") String language
    1.58 -    ) {
    1.59 +        @QueryParam("language") String language,
    1.60 +        @QueryParam("verified") String verified
    1.61 +    ) throws IOException {
    1.62          Viewable v = checkLogin();
    1.63          if (v != null) {
    1.64              return Response.status(Response.Status.FORBIDDEN).entity(v).build();
    1.65          }
    1.66  
    1.67          if (email != null) {
    1.68 -            UserInfo ui = base.path("users/" + user.getId()).
    1.69 -                queryParam("loginID", uuid).
    1.70 -                queryParam("name", "email").
    1.71 -                queryParam("value", email).accept(MediaType.TEXT_XML).post(UserInfo.class);
    1.72 +            if (getRequests().isVerified(verified)) {
    1.73 +                UserInfo ui = base.path("users/" + user.getId()).
    1.74 +                    queryParam("loginID", uuid).
    1.75 +                    queryParam("name", "email").
    1.76 +                    queryParam("value", email).accept(MediaType.TEXT_XML).post(UserInfo.class);
    1.77 +            } else {
    1.78 +                WebResource request;
    1.79 +                request = web.path("options").queryParam("name", "email").queryParam("email", email);
    1.80 +                URI callback = getRequests().register(login(), request);
    1.81 +
    1.82 +                ResourceBundle rb = bundle(null);
    1.83 +                String subject = rb.getString("MSG_ChangeEmailSubject");
    1.84 +                String text = MessageFormat.format(rb.getString("MSG_ChangeEmailText"), user.getId(), callback);
    1.85 +                EmailService.getDefault().sendEmail(email, subject, text);
    1.86 +                return Response.ok(viewable("email.fmt", null)).build();
    1.87 +
    1.88 +            }
    1.89          }
    1.90  
    1.91          if (language != null) {
    1.92 @@ -490,6 +522,8 @@
    1.93  
    1.94          final String baseUri = "http://localhost:" + port + "/";
    1.95          final HttpServer server = HttpServerFactory.create(baseUri, rc);
    1.96 +        Client c3 = new Client();
    1.97 +        web = c3.resource(baseUri);
    1.98          server.start();
    1.99          System.out.println("Quoridor started at port " + port);
   1.100  
   1.101 @@ -504,24 +538,27 @@
   1.102          };
   1.103      }
   1.104  
   1.105 -    private Viewable viewable(String page, Document doc, Object... more) {
   1.106 +    private ResourceBundle bundle(Locale[] locale) {
   1.107          ResourceBundle rb = null;
   1.108          String lng = user == null ? null : user.getProperty("language"); // NOI18N
   1.109 -        Locale locale = null;
   1.110          if (lng != null) {
   1.111 -                try {
   1.112 -                    Locale l = new Locale(lng);
   1.113 -                    rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
   1.114 -                    locale = l;
   1.115 -                } catch (MissingResourceException e) {
   1.116 -                    // OK
   1.117 +            try {
   1.118 +                Locale l = new Locale(lng);
   1.119 +                rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
   1.120 +                if (locale != null) {
   1.121 +                    locale[0] = l;
   1.122                  }
   1.123 +            } catch (MissingResourceException e) {
   1.124 +                // OK
   1.125 +            }
   1.126          }
   1.127          if (rb == null) {
   1.128              for (Locale l : headers.getAcceptableLanguages()) {
   1.129                  try {
   1.130                      rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", l);
   1.131 -                    locale = l;
   1.132 +                    if (locale != null) {
   1.133 +                        locale[0] = l;
   1.134 +                    }
   1.135                      break;
   1.136                  } catch (MissingResourceException e) {
   1.137                      // OK
   1.138 @@ -530,8 +567,16 @@
   1.139          }
   1.140          if (rb == null) {
   1.141              rb = ResourceBundle.getBundle("cz.xelfi.quoridor.freemarkerdor.UI.Bundle", Locale.ENGLISH);
   1.142 -            locale = Locale.ENGLISH;
   1.143 +            if (locale != null) {
   1.144 +                locale[0] = Locale.ENGLISH;
   1.145 +            }
   1.146          }
   1.147 +        return rb;
   1.148 +    }
   1.149 +
   1.150 +    private Viewable viewable(String page, Document doc, Object... more) {
   1.151 +        Locale[] locale = new Locale[1];
   1.152 +        ResourceBundle rb = bundle(locale);
   1.153  
   1.154          Map<String,Object> map = new HashMap<String,Object>();
   1.155          class ConvertToDate extends HashMap<Object,Object> {
   1.156 @@ -542,7 +587,7 @@
   1.157              }
   1.158          }
   1.159  
   1.160 -        map.put("locale", locale.toString());
   1.161 +        map.put("locale", locale[0].toString());
   1.162          map.put("doc", doc);
   1.163          if (user != null) {
   1.164              map.put("user", user.getId());