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
jaroslav@49
     1
/**
jaroslav@49
     2
 * The MIT License (MIT)
jaroslav@49
     3
 *
jaroslav@49
     4
 * Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@49
     5
 *
jaroslav@49
     6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
jaroslav@49
     7
 * of this software and associated documentation files (the "Software"), to deal
jaroslav@49
     8
 * in the Software without restriction, including without limitation the rights
jaroslav@49
     9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
jaroslav@49
    10
 * copies of the Software, and to permit persons to whom the Software is
jaroslav@49
    11
 * furnished to do so, subject to the following conditions:
jaroslav@49
    12
 *
jaroslav@49
    13
 * The above copyright notice and this permission notice shall be included in
jaroslav@49
    14
 * all copies or substantial portions of the Software.
jaroslav@49
    15
 *
jaroslav@49
    16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jaroslav@49
    17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jaroslav@49
    18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
jaroslav@49
    19
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jaroslav@49
    20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
jaroslav@49
    21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
jaroslav@49
    22
 * THE SOFTWARE.
jaroslav@49
    23
 */
jaroslav@49
    24
package com.oracle.chess.client.htmljava;
jaroslav@49
    25
jaroslav@49
    26
import java.util.List;
jaroslav@49
    27
import net.java.html.json.ComputedProperty;
jaroslav@49
    28
import net.java.html.json.Model;
jaroslav@49
    29
import net.java.html.json.ModelOperation;
jaroslav@49
    30
import net.java.html.json.Property;
jaroslav@49
    31
jaroslav@49
    32
/**
jaroslav@49
    33
 *
jaroslav@49
    34
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@49
    35
 */
jaroslav@49
    36
@Model(className = "Games", properties = {
jaroslav@49
    37
    @Property(name = "own", array = true, type = Game.class),
jaroslav@49
    38
    @Property(name = "other", array = true, type = Game.class),
jaroslav@49
    39
    @Property(name = "selectedColor", type = String.class),
jaroslav@49
    40
})
jaroslav@49
    41
class GamesModel {
jaroslav@49
    42
    @Model(className = "Game", properties = {
jaroslav@49
    43
        @Property(name = "gameId", type=String.class),
jaroslav@49
    44
        @Property(name = "summary", type=String.class),
jaroslav@49
    45
        @Property(name = "open", type=boolean.class),
jaroslav@49
    46
        @Property(name = "whitePlayer", type=String.class),
jaroslav@49
    47
        @Property(name = "blackPlayer", type=String.class)
jaroslav@49
    48
    })
jaroslav@49
    49
    static class GameImpl {
jaroslav@49
    50
        @ComputedProperty static String description(String gameId, String summary) {
jaroslav@49
    51
            return summary != null ? summary : gameId;
jaroslav@49
    52
        }
jaroslav@49
    53
        
jaroslav@49
    54
        @ComputedProperty static boolean pendingPlayer(String whitePlayer, String blackPlayer) {
jaroslav@49
    55
            return whitePlayer == null || blackPlayer == null;
jaroslav@49
    56
        }
jaroslav@49
    57
    }
jaroslav@49
    58
    
jaroslav@49
    59
    
jaroslav@49
    60
    @ComputedProperty static boolean anyOwnGame(List<Game> own) {
jaroslav@49
    61
        return !own.isEmpty();
jaroslav@49
    62
    }
jaroslav@49
    63
jaroslav@49
    64
    @ComputedProperty static boolean anyOtherGame(List<Game> other) {
jaroslav@49
    65
        return !other.isEmpty();
jaroslav@49
    66
    }
jaroslav@49
    67
    
jaroslav@49
    68
    @ModelOperation static void listGames(Games g, List<Game> games, String username) {
jaroslav@49
    69
        g.getOwn().clear();
jaroslav@49
    70
        g.getOther().clear();
jaroslav@49
    71
        int cnt = 0;
jaroslav@49
    72
        final int maxGames = 30;
jaroslav@49
    73
        for (Game game : games) {
jaroslav@49
    74
            if (
jaroslav@49
    75
                username.equals(game.getWhitePlayer()) || 
jaroslav@49
    76
                username.equals(game.getBlackPlayer())
jaroslav@49
    77
            ) {
jaroslav@49
    78
                g.getOwn().add(game);
jaroslav@49
    79
            } else {
jaroslav@49
    80
                if (cnt++ < maxGames) {
jaroslav@49
    81
                    g.getOther().add(game);
jaroslav@49
    82
                }
jaroslav@49
    83
            }
jaroslav@49
    84
        }
jaroslav@49
    85
    }
jaroslav@49
    86
}