]> WPIA git - gigi.git/blob - src/club/wpia/gigi/output/Menu.java
upd: make Menu names more flexible
[gigi.git] / src / club / wpia / gigi / output / Menu.java
1 package club.wpia.gigi.output;
2
3 import java.io.PrintWriter;
4 import java.util.LinkedList;
5 import java.util.Map;
6
7 import club.wpia.gigi.localisation.Language;
8 import club.wpia.gigi.output.template.Outputable;
9 import club.wpia.gigi.util.AuthorizationContext;
10
11 public class Menu implements IMenuItem {
12
13     public static final String AUTH_VALUE = "ac";
14
15     private Outputable menuName;
16
17     private IMenuItem[] content;
18
19     private LinkedList<IMenuItem> prepare = new LinkedList<IMenuItem>();
20
21     public Menu(Outputable menuName) {
22         this.menuName = menuName;
23     }
24
25     @Override
26     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
27         boolean visible = false;
28         AuthorizationContext u = (AuthorizationContext) vars.get(AUTH_VALUE);
29         for (IMenuItem mi : getContent()) {
30             if (mi.isPermitted(u)) {
31                 if ( !visible) {
32                     visible = true;
33                     out.print("<li class=\"dropdown\"><a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">");
34                     menuName.output(out, l, vars);
35                     out.print("<span class=\"caret\"></span></a><ul class=\"dropdown-menu\">");
36                 }
37                 mi.output(out, l, vars);
38             }
39         }
40         if (visible) {
41             out.println("</ul></li>");
42         }
43     }
44
45     public void addItem(IMenuItem item) {
46         prepare.add(item);
47     }
48
49     public void prepare() {
50         content = new IMenuItem[prepare.size()];
51         content = prepare.toArray(content);
52         prepare = null;
53     }
54
55     public Outputable getMenuName() {
56         return menuName;
57     }
58
59     @Override
60     public boolean isPermitted(AuthorizationContext ac) {
61         return true;
62     }
63
64     public IMenuItem[] getContent() {
65         return content;
66     }
67
68 }