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