package org.cacert.gigi.output;
import java.io.PrintWriter;
+import java.util.LinkedList;
import java.util.Map;
-import org.cacert.gigi.Language;
-
-public class Menu implements Outputable {
- String menuName;
- String id;
- private MenuItem[] content;
-
- public Menu(String menuName, String id, MenuItem... content) {
- this.menuName = menuName;
- this.id = id;
- this.content = content;
- }
-
- @Override
- public void output(PrintWriter out, Language l, Map<String, Object> vars) {
- out.println("<div>");
- out.print("<h3>+ ");
- out.print(l.getTranslation(menuName));
- out.print("</h3>");
- out.print("<ul class=\"menu\" id=\"");
- out.print(id);
- out.print("\">");
- for (MenuItem mi : content) {
- mi.output(out, l, vars);
- }
-
- out.println("</ul></div>");
- }
+import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.util.AuthorizationContext;
+
+public class Menu implements IMenuItem {
+
+ public static final String AUTH_VALUE = "ac";
+
+ private String menuName;
+
+ private IMenuItem[] content;
+
+ private LinkedList<IMenuItem> prepare = new LinkedList<IMenuItem>();
+
+ public Menu(String menuName) {
+ this.menuName = menuName;
+ }
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ boolean visible = false;
+ AuthorizationContext u = (AuthorizationContext) vars.get(AUTH_VALUE);
+ for (IMenuItem mi : getContent()) {
+ if (mi.isPermitted(u)) {
+ if ( !visible) {
+ visible = true;
+ out.print("<li class=\"dropdown\"><a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">");
+ out.print(l.getTranslation(menuName));
+ out.print("<span class=\"caret\"></span></a><ul class=\"dropdown-menu\">");
+ }
+ mi.output(out, l, vars);
+ }
+ }
+ if (visible) {
+ out.println("</ul></li>");
+ }
+ }
+
+ public void addItem(IMenuItem item) {
+ prepare.add(item);
+ }
+
+ public void prepare() {
+ content = new IMenuItem[prepare.size()];
+ content = prepare.toArray(content);
+ prepare = null;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof Menu) {
+ return menuName.equals(((Menu) obj).getMenuName());
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return menuName.hashCode();
+ }
+
+ public String getMenuName() {
+ return menuName;
+ }
+
+ @Override
+ public boolean isPermitted(AuthorizationContext ac) {
+ return true;
+ }
+
+ public IMenuItem[] getContent() {
+ return content;
+ }
+
}