From 856f3fc2a8365c141d1418d3cfff502be233c104 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 05 May 2014 11:17:14 -0400
Subject: [PATCH] Overhaul menu item classes and add AdminMenuExtension point

---
 src/main/java/com/gitblit/wicket/panels/DropDownMenu.java |   33 +++++++++++++++++++++++++--------
 1 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java b/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
index d1a632e..f561143 100644
--- a/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
+++ b/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
@@ -21,7 +21,11 @@
 import org.apache.wicket.markup.repeater.data.DataView;
 import org.apache.wicket.markup.repeater.data.ListDataProvider;
 
-import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
+import com.gitblit.models.Menu.MenuDivider;
+import com.gitblit.models.Menu.ExternalLinkMenuItem;
+import com.gitblit.models.Menu.MenuItem;
+import com.gitblit.models.Menu.PageLinkMenuItem;
+import com.gitblit.models.Menu.ParameterMenuItem;
 import com.gitblit.wicket.PageRegistration.DropDownMenuRegistration;
 import com.gitblit.wicket.WicketUtils;
 
@@ -33,26 +37,39 @@
 		super(id);
 
 		add(new Label("label", label).setRenderBodyOnly(true));
-		ListDataProvider<DropDownMenuItem> items = new ListDataProvider<DropDownMenuItem>(
+		ListDataProvider<MenuItem> items = new ListDataProvider<MenuItem>(
 				menu.menuItems);
-		DataView<DropDownMenuItem> view = new DataView<DropDownMenuItem>("menuItems", items) {
+		DataView<MenuItem> view = new DataView<MenuItem>("menuItems", items) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void populateItem(final Item<DropDownMenuItem> item) {
-				DropDownMenuItem entry = item.getModelObject();
-				if (entry.isDivider()) {
+			public void populateItem(final Item<MenuItem> item) {
+				MenuItem entry = item.getModelObject();
+				if (entry instanceof PageLinkMenuItem) {
+					// link to another Wicket page
+					PageLinkMenuItem pageLink = (PageLinkMenuItem) entry;
+					item.add(new LinkPanel("menuItem", null, null, pageLink.toString(), pageLink.getPageClass(),
+							pageLink.getPageParameters(), false).setRenderBodyOnly(true));
+				} else if (entry instanceof ExternalLinkMenuItem) {
+					// link to a specified href
+					ExternalLinkMenuItem extLink = (ExternalLinkMenuItem) entry;
+					item.add(new LinkPanel("menuItem", null, extLink.toString(), extLink.getHref(),
+							extLink.openInNewWindow()).setRenderBodyOnly(true));
+				} else if (entry instanceof MenuDivider) {
+					// divider
 					item.add(new Label("menuItem").setRenderBodyOnly(true));
 					WicketUtils.setCssClass(item, "divider");
 				} else {
+					ParameterMenuItem parameter = (ParameterMenuItem) entry;
+					// parameter link for the current page
 					String icon = null;
-					if (entry.isSelected()) {
+					if (parameter.isSelected()) {
 						icon = "icon-ok";
 					} else {
 						icon = "icon-ok-white";
 					}
 					item.add(new LinkPanel("menuItem", icon, null, entry.toString(), menu.pageClass,
-							entry.getPageParameters(), false).setRenderBodyOnly(true));
+							parameter.getPageParameters(), false).setRenderBodyOnly(true));
 				}
 			}
 		};

--
Gitblit v1.9.1