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
     1 package ${package};
     2 
     3 import net.java.html.json.ComputedProperty;
     4 import net.java.html.json.Function;
     5 import net.java.html.json.Model;
     6 import net.java.html.json.Property;
     7 
     8 /** Model annotation generates class Data with 
     9  * one message property, boolean property and read only words property
    10  */
    11 @Model(className = "Data", properties = {
    12     @Property(name = "message", type = String.class),
    13     @Property(name = "on", type = boolean.class)
    14 })
    15 final class DataModel {
    16     @ComputedProperty static java.util.List<String> words(String message) {
    17         String[] arr = new String[6];
    18         String[] words = message == null ? new String[0] : message.split(" ", 6);
    19         for (int i = 0; i < 6; i++) {
    20             arr[i] = words.length > i ? words[i] : "!";
    21         }
    22         return java.util.Arrays.asList(arr);
    23     }
    24     
    25     @Function static void turnOn(Data model) {
    26         model.setOn(true);
    27     }
    28 
    29     @Function static void turnOff(final Data model) {
    30         confirmByUser("Really turn off?", new Runnable() {
    31             @Override
    32             public void run() {
    33                 model.setOn(false);
    34             }
    35         });
    36     }
    37     
    38     /** Shows direct interaction with JavaScript */
    39     @net.java.html.js.JavaScriptBody(
    40         args = { "msg", "callback" }, 
    41         javacall = true, 
    42         body = "alert(msg); callback.@java.lang.Runnable::run()();"
    43     )
    44     static native void confirmByUser(String msg, Runnable callback);
    45 }