serverside/src/main/java/org/apidesign/bck2brwsr/demo/serverside/ChatClient.java
changeset 11 40fce839ac01
parent 9 045360776205
     1.1 --- a/serverside/src/main/java/org/apidesign/bck2brwsr/demo/serverside/ChatClient.java	Sun May 05 17:14:48 2013 +0200
     1.2 +++ b/serverside/src/main/java/org/apidesign/bck2brwsr/demo/serverside/ChatClient.java	Sun May 05 18:04:13 2013 +0200
     1.3 @@ -36,36 +36,47 @@
     1.4   */
     1.5  @Model(className = "ChatModel", properties = {
     1.6      @Property(name = "user", type = String.class),
     1.7 -    @Property(name = "text", type = String.class),
     1.8 +    @Property(name = "comment", type = String.class),
     1.9      @Property(name = "msgs", type = Message.class, array = true)
    1.10  })
    1.11  class ChatClient {
    1.12      @ComputedProperty
    1.13 -    static boolean sendEnabled(String user, String text) {
    1.14 -        boolean res = user != null && text != null && !user.isEmpty() && !text.isEmpty();
    1.15 -        try {
    1.16 -            if (true) throw new IllegalStateException("Query for msg '" + text + "' by user " + user + " res: " + res);
    1.17 -        } catch (Exception ex) {
    1.18 -            
    1.19 -        }
    1.20 +    static boolean sendEnabled(String user, String comment) {
    1.21 +        boolean res = user != null && comment != null && !user.isEmpty() && !comment.isEmpty();
    1.22          return res;
    1.23      }
    1.24      
    1.25      @Function
    1.26      static void submit(ChatModel m) {
    1.27 -        if (!sendEnabled(m.getUser(), m.getText())) {
    1.28 +        if (!sendEnabled(m.getUser(), m.getComment())) {
    1.29              return;
    1.30          }
    1.31 -        Message msg = new Message(CNTX);
    1.32 -        msg.setComment(m.getText());
    1.33 -        msg.setUser(m.getUser());
    1.34 -        m.getMsgs().add(msg);
    1.35 +        m.postComment(m.getUser(), m.getComment());
    1.36 +    }
    1.37 +    
    1.38 +    @OnReceive(url = "/chat/addComment?user={user}&comment={comment}")
    1.39 +    static void postComment(ChatModel m, Message addedMessage) {
    1.40 +        if (addedMessage.getComment().equals(m.getComment())) {
    1.41 +            m.setComment("");
    1.42 +        }
    1.43      }
    1.44      
    1.45      @OnReceive(url = "/chat?since=0")
    1.46      static void initialRead(ChatModel m, Query q) {
    1.47          m.getMsgs().clear();
    1.48          m.getMsgs().addAll(q.getMessages());
    1.49 +        moreMessages(m);
    1.50 +    }
    1.51 +    
    1.52 +    @OnReceive(url = "/chat?since={since}")
    1.53 +    static void updateMsgs(ChatModel m, Query q) {
    1.54 +        m.getMsgs().addAll(q.getMessages());
    1.55 +        moreMessages(m);
    1.56 +    }
    1.57 +    
    1.58 +    private static void moreMessages(ChatModel m) {
    1.59 +        long now = System.currentTimeMillis();
    1.60 +        m.updateMsgs("" + now);
    1.61      }
    1.62      
    1.63      static final Context CNTX = Context.findDefault(ChatClient.class);
    1.64 @@ -76,6 +87,11 @@
    1.65          m.setUser("system");
    1.66          chm.getMsgs().add(m);
    1.67          chm.applyBindings();
    1.68 -        chm.initialRead();
    1.69 +        try {
    1.70 +            // XXX: this should not be in static initializer -
    1.71 +            // XXX: prevents unit testing!
    1.72 +            chm.initialRead();
    1.73 +        } catch (Throwable ex) {
    1.74 +        }
    1.75      }
    1.76  }