forked from actframework/actframework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathViewManager.java
More file actions
115 lines (98 loc) · 3.48 KB
/
ViewManager.java
File metadata and controls
115 lines (98 loc) · 3.48 KB
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
package act.view;
import act.app.App;
import act.conf.AppConfig;
import act.util.ActContext;
import act.util.DestroyableBase;
import org.osgl.$;
import org.osgl.exception.UnexpectedException;
import org.osgl.util.C;
import org.osgl.util.E;
import java.util.List;
import static act.Destroyable.Util.tryDestroyAll;
/**
* Manage different view solutions
*/
public class ViewManager extends DestroyableBase {
private C.List<View> viewList = C.newList();
private C.List<ActionViewVarDef> implicitActionViewVariables = C.newList();
private C.List<MailerViewVarDef> implicitMailerViewVariables = C.newList();
void register(View view) {
E.NPE(view);
if (registered(view)) {
throw new UnexpectedException("View[%s] already registered", view.name());
}
viewList.add(view);
}
void register(ImplicitVariableProvider implicitVariableProvider) {
E.NPE(implicitVariableProvider);
List<ActionViewVarDef> l0 = implicitVariableProvider.implicitActionViewVariables();
for (ActionViewVarDef var : l0) {
if (implicitActionViewVariables.contains(var)) {
throw new UnexpectedException("Implicit variable[%s] has already been registered", var.name());
}
implicitActionViewVariables.add(var);
}
List<MailerViewVarDef> l1 = implicitVariableProvider.implicitMailerViewVariables();
for (MailerViewVarDef var : l1) {
if (implicitMailerViewVariables.contains(var)) {
throw new UnexpectedException("Implicit variable[%s] has already been registered", var.name());
}
implicitMailerViewVariables.add(var);
}
}
public void reload(App app) {
for (View view : viewList) {
view.reload(app);
}
}
public View view(String name) {
$.Option<View> viewBag = findViewByName(name);
return viewBag.isDefined() ? viewBag.get() : null;
}
public Template load(ActContext context) {
AppConfig config = context.config();
View defView = config.defaultView();
Template template;
if (null != defView) {
template = defView.load(context);
if (null != template) {
return template;
}
}
for (View view : viewList) {
if (view == defView) continue;
template = view.load(context);
if (null != template) {
return template;
}
}
return null;
}
public List<ActionViewVarDef> implicitActionViewVariables() {
return C.list(implicitActionViewVariables);
}
public List<MailerViewVarDef> implicitMailerViewVariables() {
return C.list(implicitMailerViewVariables);
}
@Override
protected void releaseResources() {
tryDestroyAll(viewList);
viewList = null;
implicitActionViewVariables.clear();
implicitActionViewVariables = null;
implicitMailerViewVariables.clear();
implicitMailerViewVariables = null;
}
private boolean registered(View view) {
final String name = view.name().toUpperCase();
return findViewByName(name).isDefined();
}
private $.Option<View> findViewByName(final String name) {
return viewList.findFirst(new $.Predicate<View>() {
@Override
public boolean test(View view) {
return view.name().toUpperCase().equals(name);
}
});
}
}