jaroslav@1202: package ${package}; jaroslav@1202: jaroslav@1202: import net.java.html.json.ComputedProperty; jaroslav@1202: import net.java.html.json.Function; jaroslav@1202: import net.java.html.json.Model; jaroslav@1202: import net.java.html.json.Property; jaroslav@1202: jaroslav@1273: /** Model annotation generates class Data with jaroslav@1273: * one message property, boolean property and read only words property jaroslav@1273: */ jaroslav@1273: @Model(className = "Data", properties = { jaroslav@1273: @Property(name = "message", type = String.class), jaroslav@1273: @Property(name = "on", type = boolean.class) jaroslav@1202: }) jaroslav@1273: final class DataModel { jaroslav@1273: @ComputedProperty static java.util.List words(String message) { jaroslav@1273: String[] arr = new String[6]; jaroslav@1273: String[] words = message == null ? new String[0] : message.split(" ", 6); jaroslav@1273: for (int i = 0; i < 6; i++) { jaroslav@1273: arr[i] = words.length > i ? words[i] : "!"; jaroslav@1202: } jaroslav@1273: return java.util.Arrays.asList(arr); jaroslav@1202: } jaroslav@1202: jaroslav@1273: @Function static void turnOn(Data model) { jaroslav@1273: model.setOn(true); jaroslav@1202: } jaroslav@1433: jaroslav@1433: @Function static void turnOff(final Data model) { jaroslav@1433: confirmByUser("Really turn off?", new Runnable() { jaroslav@1433: @Override jaroslav@1433: public void run() { jaroslav@1433: model.setOn(false); jaroslav@1433: } jaroslav@1433: }); jaroslav@1202: } jaroslav@1433: jaroslav@1433: /** Shows direct interaction with JavaScript */ jaroslav@1433: @net.java.html.js.JavaScriptBody( jaroslav@1433: args = { "msg", "callback" }, jaroslav@1433: javacall = true, jaroslav@1433: body = "alert(msg); callback.@java.lang.Runnable::run()();" jaroslav@1433: ) jaroslav@1433: static native void confirmByUser(String msg, Runnable callback); jaroslav@1202: }