ko/kosample/client/src/main/java/org/apidesign/bck2brwsr/kosample/DataModel.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 27 Apr 2016 04:01:39 +0200
changeset 1944 644d4f4bc6e0
parent 1941 621825e167d7
child 1947 12a252145892
permissions -rw-r--r--
Using lamdas to schedule tasks
jaroslav@1941
     1
/**
jaroslav@1941
     2
 * Back 2 Browser Bytecode Translator
jaroslav@1941
     3
 * Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@1941
     4
 *
jaroslav@1941
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@1941
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@1941
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@1941
     8
 *
jaroslav@1941
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@1941
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@1941
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@1941
    12
 * GNU General Public License for more details.
jaroslav@1941
    13
 *
jaroslav@1941
    14
 * You should have received a copy of the GNU General Public License
jaroslav@1941
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@1941
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@1941
    17
 */
jaroslav@1941
    18
package org.apidesign.bck2brwsr.kosample;
jaroslav@1941
    19
jaroslav@1944
    20
import java.util.TimerTask;
jaroslav@1941
    21
import net.java.html.json.ComputedProperty;
jaroslav@1941
    22
import net.java.html.json.Function;
jaroslav@1941
    23
import net.java.html.json.Model;
jaroslav@1941
    24
import net.java.html.json.Property;
jaroslav@1941
    25
import org.apidesign.bck2brwsr.kosample.js.Dialogs;
jaroslav@1941
    26
jaroslav@1941
    27
/** Model annotation generates class Data with
jaroslav@1941
    28
 * one message property, boolean property and read only words property
jaroslav@1941
    29
 */
jaroslav@1941
    30
@Model(className = "Data", targetId="", properties = {
jaroslav@1941
    31
    @Property(name = "message", type = String.class),
jaroslav@1941
    32
    @Property(name = "rotating", type = boolean.class)
jaroslav@1941
    33
})
jaroslav@1941
    34
final class DataModel {
jaroslav@1941
    35
    @ComputedProperty static java.util.List<String> words(String message) {
jaroslav@1941
    36
        String[] arr = new String[6];
jaroslav@1941
    37
        String[] words = message == null ? new String[0] : message.split(" ", 6);
jaroslav@1941
    38
        for (int i = 0; i < 6; i++) {
jaroslav@1941
    39
            arr[i] = words.length > i ? words[i] : "!";
jaroslav@1941
    40
        }
jaroslav@1941
    41
        return java.util.Arrays.asList(arr);
jaroslav@1941
    42
    }
jaroslav@1941
    43
jaroslav@1941
    44
    @Function static void turnAnimationOn(Data model) {
jaroslav@1941
    45
        model.setRotating(true);
jaroslav@1941
    46
    }
jaroslav@1941
    47
jaroslav@1941
    48
    @Function static void turnAnimationOff(final Data model) {
jaroslav@1941
    49
        Dialogs.confirmByUser("Really turn off?", new Runnable() {
jaroslav@1941
    50
            @Override
jaroslav@1941
    51
            public void run() {
jaroslav@1941
    52
                model.setRotating(false);
jaroslav@1941
    53
            }
jaroslav@1941
    54
        });
jaroslav@1941
    55
    }
jaroslav@1941
    56
jaroslav@1944
    57
    private static java.util.Timer TIMER = new java.util.Timer("Pending tasks");
jaroslav@1944
    58
    private static void schedule(Runnable run, long delay) {
jaroslav@1944
    59
        TIMER.schedule(new TimerTask() {
jaroslav@1944
    60
            @Override
jaroslav@1944
    61
            public void run() {
jaroslav@1944
    62
                run.run();
jaroslav@1944
    63
            }
jaroslav@1944
    64
        }, delay);
jaroslav@1944
    65
    }
jaroslav@1944
    66
jaroslav@1941
    67
    @Function static void rotate5s(final Data model) {
jaroslav@1941
    68
        model.setRotating(true);
jaroslav@1944
    69
        schedule(() -> model.setRotating(false), 5000);
jaroslav@1941
    70
    }
jaroslav@1941
    71
jaroslav@1941
    72
    @Function static void showScreenSize(Data model) {
jaroslav@1941
    73
        model.setMessage(Dialogs.screenSize());
jaroslav@1941
    74
    }
jaroslav@1941
    75
    private static Data ui;
jaroslav@1941
    76
    /**
jaroslav@1941
    77
     * Called when the page is ready.
jaroslav@1941
    78
     */
jaroslav@1941
    79
    static void onPageLoad() throws Exception {
jaroslav@1941
    80
        ui = new Data();
jaroslav@1941
    81
        ui.setMessage("Hello World from HTML and Java!");
jaroslav@1941
    82
        ui.applyBindings();
jaroslav@1941
    83
    }
jaroslav@1941
    84
}