chess/src/main/java/com/oracle/chess/client/htmljava/GamesModel.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 24 Sep 2013 22:20:24 +0200
branchchess
changeset 49 945fbfff28f3
permissions -rw-r--r--
Advanced version of the chess game
     1 /**
     2  * The MIT License (MIT)
     3  *
     4  * Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     5  *
     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:
    12  *
    13  * The above copyright notice and this permission notice shall be included in
    14  * all copies or substantial portions of the Software.
    15  *
    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
    22  * THE SOFTWARE.
    23  */
    24 package com.oracle.chess.client.htmljava;
    25 
    26 import java.util.List;
    27 import net.java.html.json.ComputedProperty;
    28 import net.java.html.json.Model;
    29 import net.java.html.json.ModelOperation;
    30 import net.java.html.json.Property;
    31 
    32 /**
    33  *
    34  * @author Jaroslav Tulach <jtulach@netbeans.org>
    35  */
    36 @Model(className = "Games", properties = {
    37     @Property(name = "own", array = true, type = Game.class),
    38     @Property(name = "other", array = true, type = Game.class),
    39     @Property(name = "selectedColor", type = String.class),
    40 })
    41 class GamesModel {
    42     @Model(className = "Game", properties = {
    43         @Property(name = "gameId", type=String.class),
    44         @Property(name = "summary", type=String.class),
    45         @Property(name = "open", type=boolean.class),
    46         @Property(name = "whitePlayer", type=String.class),
    47         @Property(name = "blackPlayer", type=String.class)
    48     })
    49     static class GameImpl {
    50         @ComputedProperty static String description(String gameId, String summary) {
    51             return summary != null ? summary : gameId;
    52         }
    53         
    54         @ComputedProperty static boolean pendingPlayer(String whitePlayer, String blackPlayer) {
    55             return whitePlayer == null || blackPlayer == null;
    56         }
    57     }
    58     
    59     
    60     @ComputedProperty static boolean anyOwnGame(List<Game> own) {
    61         return !own.isEmpty();
    62     }
    63 
    64     @ComputedProperty static boolean anyOtherGame(List<Game> other) {
    65         return !other.isEmpty();
    66     }
    67     
    68     @ModelOperation static void listGames(Games g, List<Game> games, String username) {
    69         g.getOwn().clear();
    70         g.getOther().clear();
    71         int cnt = 0;
    72         final int maxGames = 30;
    73         for (Game game : games) {
    74             if (
    75                 username.equals(game.getWhitePlayer()) || 
    76                 username.equals(game.getBlackPlayer())
    77             ) {
    78                 g.getOwn().add(game);
    79             } else {
    80                 if (cnt++ < maxGames) {
    81                     g.getOther().add(game);
    82                 }
    83             }
    84         }
    85     }
    86 }