6c37617584a3f5012d413fdef2511a71c7354772
[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 : content) {
29             if (mi.isPermitted(u)) {
30                 if ( !visible) {
31                     visible = true;
32                     out.println("<div>");
33                     out.print("<h3 class='pointer'>+ ");
34                     out.print(l.getTranslation(menuName));
35                     out.println("</h3>");
36                     out.print("<ul class=\"menu\">");
37                 }
38                 mi.output(out, l, vars);
39             }
40         }
41         if (visible) {
42             out.println("</ul></div>");
43         }
44     }
45
46     public void addItem(IMenuItem item) {
47         prepare.add(item);
48     }
49
50     public void prepare() {
51         content = new IMenuItem[prepare.size()];
52         content = prepare.toArray(content);
53         prepare = null;
54     }
55
56     @Override
57     public boolean equals(Object obj) {
58         if (obj instanceof Menu) {
59             return menuName.equals(((Menu) obj).getMenuName());
60         }
61         return false;
62     }
63
64     @Override
65     public int hashCode() {
66         return menuName.hashCode();
67     }
68
69     public String getMenuName() {
70         return menuName;
71     }
72
73     @Override
74     public boolean isPermitted(AuthorizationContext ac) {
75         return true;
76     }
77 }