]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/output/Menu.java
ADD: First attempt for a redesign
[gigi.git] / src / org / cacert / gigi / output / Menu.java
index b30badb7f79fea5dfe6b65fcfa52e457b65e2bd8..f351b7326c94c2310e9677091b9d2cb879fc5c74 100644 (file)
@@ -1,37 +1,80 @@
 package org.cacert.gigi.output;
 
 import java.io.PrintWriter;
+import java.util.LinkedList;
 import java.util.Map;
 
 import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.util.AuthorizationContext;
 
-public class Menu implements Outputable {
+public class Menu implements IMenuItem {
 
-    String menuName;
+    public static final String AUTH_VALUE = "ac";
 
-    String id;
+    private String menuName;
 
-    private MenuItem[] content;
+    private IMenuItem[] content;
 
-    public Menu(String menuName, String id, MenuItem... content) {
+    private LinkedList<IMenuItem> prepare = new LinkedList<IMenuItem>();
+
+    public Menu(String menuName) {
         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);
+        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;
+    }
 
-        out.println("</ul></div>");
+    @Override
+    public boolean isPermitted(AuthorizationContext ac) {
+        return true;
     }
+
+    public IMenuItem[] getContent() {
+        return content;
+    }
+
 }