01: package simpleorm.simplewebapp.core;
02:
03: import simpleorm.simplewebapp.core.WMenuParentGlobal;
04:
05: /**
06: * Place to put global state, specialized by application dependent state. This
07: * is independent from WServlet so that it can be accessed from test cases etc.<p>
08: *
09: * Global state is generally a very bad idea, but works well for the menus for
10: * which all other alternatives are messy.<p>
11: *
12: * All global state should only be referenced via WPageStructure.get* so that the
13: * state could be localized or made ThreadLocal later. But for now we prefer to
14: * keep it simple and move on.
15: */
16: public abstract class WGlobalState {
17:
18: // Menus are messy because we need a global set for dispatching in Servelet plus
19: // a local version to display Menus on a page but we do not want two sets...
20: //
21: // Options for passing in menu to set ListClass
22: // + Just set .class in init, convert to menu later. NO -- it should be item/url etc.
23: // * Pass in via ThreadLocal or synced global. Bit hacky.
24: // And makes Page dependent on menu eg. for test cases.
25: // + Pass in via init param. But then need to declare initer for each page class.
26: // * Set menu via OnInit. But then not available for init params. And needs more code.
27: // * Set ListMenu in menu definition itself. Common case. Combines with prev.
28: // Not quite general -- we do not want an extra level of indirection for each link. \
29: // Could be multiple lists on a form, each having multiple destinations.
30: // + Wait until we can just go back where we came from.
31: // But it is other links that cause grief.
32: // * General problem -- menus static, shared. Cannot have eg. disabled set per form.
33: // ** Just Make the menu static/global. Then can simply reference it anywhere.
34: // Consistent with read only. But only one menu tree per web application. KISS
35: // Also makes it easy to have the menus available for test cases.
36: // - Could have a simple disabled list or MenuItem override, or per page override.
37:
38: static WGlobalState globalState;
39:
40: WMenuParentGlobal menus;
41:
42: ////////////////////////////////////////////////////////////////////////////
43:
44: static protected void setGlobalState(WGlobalState globalState) {
45: WGlobalState.globalState = globalState;
46: }
47:
48: /** Normally call WPageStructure.getMenu() etc. instead of this. State mechanism may chage. */
49: static protected WGlobalState dirtyGetGlobalState() {
50: return globalState;
51: }
52:
53: protected void setMenus(WMenuParentGlobal menus) {
54: this .menus = menus;
55: }
56:
57: static protected WMenuParentGlobal getMenus() {
58: return globalState.menus;
59: }
60: }
|