-
Notifications
You must be signed in to change notification settings - Fork 5
/
TestEvent.java
116 lines (96 loc) · 3.62 KB
/
TestEvent.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package org.gs.events;
import org.genericsystem.common.Generic;
import org.genericsystem.common.Root;
import org.genericsystem.geography.app.InputSelectInstance;
import org.genericsystem.geography.model.AdministrativeTerritory;
import org.genericsystem.geography.model.City;
import org.genericsystem.geography.model.Country;
import org.genericsystem.reactor.annotations.Children;
import org.genericsystem.reactor.annotations.DependsOnModel;
import org.genericsystem.reactor.annotations.DirectSelect;
import org.genericsystem.reactor.annotations.RunScript;
import org.genericsystem.reactor.annotations.Select;
import org.genericsystem.reactor.annotations.SetText;
import org.genericsystem.reactor.annotations.Style;
import org.genericsystem.reactor.appserver.ApplicationServer;
import org.genericsystem.reactor.appserver.Script;
import org.genericsystem.reactor.context.ObservableValueSelector;
import org.genericsystem.reactor.context.StringExtractor;
import org.genericsystem.reactor.gscomponents.HtmlTag.HtmlDiv;
import org.genericsystem.reactor.gscomponents.HtmlTag.HtmlLabel;
import org.genericsystem.reactor.gscomponents.RootTagImpl;
import org.gs.events.TestEvent.CityInput;
import org.gs.events.TestEvent.CityLabel;
import org.gs.events.TestEvent.Div;
import org.gs.events.TestEvent.InitTest;
import org.gs.events.components.InputDate;
import org.gs.events.model.Date;
import org.gs.events.model.Date.Day;
import org.gs.events.model.Date.Month;
import org.gs.events.model.Date.Year;
@RunScript(InitTest.class)
@DependsOnModel({ AdministrativeTerritory.class, Country.class, City.class, Date.class })
@Children({ CityLabel.class, CityInput.class, Div.class })
public class TestEvent extends RootTagImpl {
@SetText(value = "City")
@Style(name = "display", value = "inline")
public static class CityLabel extends HtmlLabel {
}
@DirectSelect(City.class)
@Style(name = "display", value = "inline")
public static class CityInput extends InputSelectInstance {
@Override
public String displayInstance(Generic g) {
String str = StringExtractor.SIMPLE_CLASS_EXTRACTOR.apply(g);
while (g.getBaseComponent() != null) {
g = g.getBaseComponent();
str += ", " + g.getValue();
}
return str;
}
// preselected city
@Override
public void init() {
super.init();
addPrefixBinding(context -> {
getContextProperty("selected", context).setValue(context.getGeneric().getSubInstances().first());
});
}
}
@DirectSelect(Date.class)
@Children(InputDate1.class)
public static class Div extends HtmlDiv {
}
@Select(value = DATE_SELECTOR.class)
public static class InputDate1 extends InputDate {
}
public static class DATE_SELECTOR implements ObservableValueSelector {
@Override
public Generic apply(Generic[] generics) {
return generics[0].getSubInstances().toList().get(2);
}
}
public static class DEFAULT_SELECTOR implements ObservableValueSelector {
@Override
public Generic apply(Generic[] generics) {
System.out.println(generics[0].getSubInstances().first());
return generics[0].getSubInstances().first();
}
}
public static void main(String[] mainArgs) {
ApplicationServer.startSimpleGenericApp(mainArgs, TestEvent.class, "/GeoApp");
}
public static class InitTest implements Script {
@Override
public void run(Root engine) {
Generic year = engine.find(Year.class);
Generic month = engine.find(Month.class);
Generic day = engine.find(Day.class);
Generic date = engine.find(Date.class);
Generic year2004 = year.setInstance(2004);
Generic month200411 = month.setInstance(11, year2004);
Generic day20041112 = day.setInstance(12, month200411);
engine.getCurrentCache().flush();
}
}
}