b1fc745ad1ed7858bc7852ac035e1e375645ed7c
[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.User;
8 import org.cacert.gigi.localisation.Language;
9
10 public class Menu implements IMenuItem {
11
12     public static final String USER_VALUE = "user";
13
14     private String menuName;
15
16     private String id;
17
18     private IMenuItem[] content;
19
20     private LinkedList<IMenuItem> prepare = new LinkedList<IMenuItem>();
21
22     public Menu(String menuName, String id) {
23         this.menuName = menuName;
24         this.id = id;
25     }
26
27     @Override
28     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
29         boolean visible = false;
30         User u = (User) vars.get(USER_VALUE);
31         for (IMenuItem mi : content) {
32             if (mi.isPermitted(u)) {
33                 if ( !visible) {
34                     visible = true;
35                     out.println("<div>");
36                     out.print("<h3>+ ");
37                     out.print(l.getTranslation(menuName));
38                     out.print("</h3>");
39                     out.print("<ul class=\"menu\" id=\"");
40                     out.print(id);
41                     out.print("\">");
42                 }
43                 mi.output(out, l, vars);
44             }
45         }
46         if (visible) {
47             out.println("</ul></div>");
48         }
49     }
50
51     public void addItem(IMenuItem item) {
52         prepare.add(item);
53     }
54
55     public void prepare() {
56         content = new IMenuItem[prepare.size()];
57         content = prepare.toArray(content);
58         prepare = null;
59     }
60
61     @Override
62     public boolean equals(Object obj) {
63         if (obj instanceof Menu) {
64             return menuName.equals(((Menu) obj).getMenuName());
65         }
66         return super.equals(obj);
67     }
68
69     public String getMenuName() {
70         return menuName;
71     }
72
73     @Override
74     public boolean isPermitted(User u) {
75         return true;
76     }
77 }