2 * The MIT License (MIT)
4 * Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 package com.oracle.chess.client.htmljava;
26 import net.java.html.json.ComputedProperty;
27 import net.java.html.json.Model;
28 import net.java.html.json.Property;
31 /** Communication protocols to talk to the server.
33 * @author Jaroslav Tulach <jtulach@netbeans.org>
35 final class Communication {
36 @Model(className = "Request", properties = {
37 @Property(name = "msg", type = MsgType.class),
38 @Property(name = "username", type = String.class),
39 @Property(name = "password", type = String.class),
40 @Property(name = "gameId", type = String.class),
41 @Property(name = "color", type = Color.class),
42 @Property(name = "from", type = String.class),
43 @Property(name = "to", type = String.class),
44 @Property(name = "observer", type = boolean.class),
46 static class RequestModel {
49 @Model(className = "BoardRep", properties = {
50 @Property(name = "whites", type = String.class, array = true),
51 @Property(name = "blacks", type = String.class, array = true),
53 static class BoardRepModel {
56 @Model(className = "Response", properties = {
57 @Property(name = "msg", type = String.class),
58 @Property(name = "games", array = true, type = Game.class),
59 @Property(name = "board", type = BoardRep.class),
60 @Property(name = "turn", type = Color.class),
61 @Property(name = "color", type = Color.class),
62 @Property(name = "gameId", type = String.class),
63 @Property(name = "error", type = Err.class),
64 @Property(name = "alert", type = Alert.class),
65 @Property(name = "status", type = String.class),
66 @Property(name = "summary", type = String.class),
67 @Property(name = "moves", type = String.class, array = true),
68 @Property(name = "from", type = String.class),
69 @Property(name = "to", type = String.class),
70 @Property(name = "check", type = CheckResult.class),
71 @Property(name = "whitePlayer", type = String.class),
72 @Property(name = "blackPlayer", type = String.class),
74 static class ResponseModel {
75 @ComputedProperty static Color nextTurn(Color turn, Alert alert) {
76 if (alert == null || !alert.getType().isTerminal()) {
84 static enum CheckResult {
85 VALID, INVALID, NOT_REGISTERED
88 @Model(className = "Err", properties = {
89 @Property(name = "code", type = int.class),
90 @Property(name = "message", type = String.class),
92 static class ErrorModel {
95 @Model(className = "Alert", properties = {
96 @Property(name = "type", type = AlertType.class),
97 @Property(name = "message", type = String.class),
99 static class AlertModel {
102 static enum AlertType {
103 CHECKMATE, CHECK, DRAW;
105 public boolean isTerminal() {
106 return this == CHECKMATE || this == DRAW;