From 8f86e2d6469269323bcd7b0788c56cf08ac34c49 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 30 Dec 2011 07:53:00 -0500
Subject: [PATCH] Indicate selected filters. Strip default db value from links.

---
 src/com/gitblit/wicket/PageRegistration.java |   43 +++++++++++++++++++++++++++++++++----------
 1 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/src/com/gitblit/wicket/PageRegistration.java b/src/com/gitblit/wicket/PageRegistration.java
index 6c13b82..fe76a85 100644
--- a/src/com/gitblit/wicket/PageRegistration.java
+++ b/src/com/gitblit/wicket/PageRegistration.java
@@ -76,19 +76,17 @@
 
 		private static final long serialVersionUID = 1L;
 
-		final PageParameters params;
+		final PageParameters parameters;
 		final String displayText;
 		final String parameter;
 		final String value;
+		final boolean isSelected;
 
 		/**
 		 * Divider constructor.
 		 */
 		public DropDownMenuItem() {
-			displayText = null;
-			parameter = null;
-			value = null;
-			params = null;
+			this(null, null, null, null);
 		}
 
 		/**
@@ -114,16 +112,37 @@
 			this.displayText = displayText;
 			this.parameter = parameter;
 			this.value = value;
+
 			if (params == null) {
-				this.params = new PageParameters();
+				// no parameters specified
+				parameters = new PageParameters();
+				setParameter(parameter, value);
+				isSelected = false;
 			} else {
-				this.params = new PageParameters(params);
+				parameters = new PageParameters(params);
+				if (parameters.containsKey(parameter)) {
+					isSelected = params.getString(parameter).equals(value);
+					if (isSelected) {
+						// already selected, so remove this enables toggling
+						parameters.remove(parameter);
+					} else {
+						// set the new selection value
+						setParameter(parameter, value);
+					}
+				} else {
+					// not currently selected
+					isSelected = false;
+					setParameter(parameter, value);
+				}
 			}
+		}
+
+		private void setParameter(String parameter, String value) {
 			if (!StringUtils.isEmpty(parameter)) {
 				if (StringUtils.isEmpty(value)) {
-					this.params.remove(parameter);
+					this.parameters.remove(parameter);
 				} else {
-					this.params.put(parameter, value);	
+					this.parameters.put(parameter, value);
 				}
 			}
 		}
@@ -136,13 +155,17 @@
 		}
 
 		public PageParameters getPageParameters() {
-			return params;
+			return parameters;
 		}
 
 		public boolean isDivider() {
 			return displayText == null && value == null && parameter == null;
 		}
 
+		public boolean isSelected() {
+			return isSelected;
+		}
+
 		@Override
 		public int hashCode() {
 			if (isDivider()) {

--
Gitblit v1.9.1