ko/archetype/src/main/resources/archetype-resources/src/main/java/DataModel.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 04 Feb 2014 09:32:27 +0100
changeset 1433 3d696782eab9
parent 1273 37ad459579bc
permissions -rw-r--r--
Sample usage of @JavaScriptBody annotation. Preprocessing classes and adding a Js/Java interoperability test
jaroslav@1202
     1
package ${package};
jaroslav@1202
     2
jaroslav@1202
     3
import net.java.html.json.ComputedProperty;
jaroslav@1202
     4
import net.java.html.json.Function;
jaroslav@1202
     5
import net.java.html.json.Model;
jaroslav@1202
     6
import net.java.html.json.Property;
jaroslav@1202
     7
jaroslav@1273
     8
/** Model annotation generates class Data with 
jaroslav@1273
     9
 * one message property, boolean property and read only words property
jaroslav@1273
    10
 */
jaroslav@1273
    11
@Model(className = "Data", properties = {
jaroslav@1273
    12
    @Property(name = "message", type = String.class),
jaroslav@1273
    13
    @Property(name = "on", type = boolean.class)
jaroslav@1202
    14
})
jaroslav@1273
    15
final class DataModel {
jaroslav@1273
    16
    @ComputedProperty static java.util.List<String> words(String message) {
jaroslav@1273
    17
        String[] arr = new String[6];
jaroslav@1273
    18
        String[] words = message == null ? new String[0] : message.split(" ", 6);
jaroslav@1273
    19
        for (int i = 0; i < 6; i++) {
jaroslav@1273
    20
            arr[i] = words.length > i ? words[i] : "!";
jaroslav@1202
    21
        }
jaroslav@1273
    22
        return java.util.Arrays.asList(arr);
jaroslav@1202
    23
    }
jaroslav@1202
    24
    
jaroslav@1273
    25
    @Function static void turnOn(Data model) {
jaroslav@1273
    26
        model.setOn(true);
jaroslav@1202
    27
    }
jaroslav@1433
    28
jaroslav@1433
    29
    @Function static void turnOff(final Data model) {
jaroslav@1433
    30
        confirmByUser("Really turn off?", new Runnable() {
jaroslav@1433
    31
            @Override
jaroslav@1433
    32
            public void run() {
jaroslav@1433
    33
                model.setOn(false);
jaroslav@1433
    34
            }
jaroslav@1433
    35
        });
jaroslav@1202
    36
    }
jaroslav@1433
    37
    
jaroslav@1433
    38
    /** Shows direct interaction with JavaScript */
jaroslav@1433
    39
    @net.java.html.js.JavaScriptBody(
jaroslav@1433
    40
        args = { "msg", "callback" }, 
jaroslav@1433
    41
        javacall = true, 
jaroslav@1433
    42
        body = "alert(msg); callback.@java.lang.Runnable::run()();"
jaroslav@1433
    43
    )
jaroslav@1433
    44
    static native void confirmByUser(String msg, Runnable callback);
jaroslav@1202
    45
}