From 0ea17fc294c1bb55a90037a150f4624992c0e9fb Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 02 Jan 2012 09:21:12 -0500
Subject: [PATCH] Merge pull request #3 from docbobo/master
---
src/com/gitblit/wicket/PageRegistration.java | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/src/com/gitblit/wicket/PageRegistration.java b/src/com/gitblit/wicket/PageRegistration.java
index f7ddcc5..fe76a85 100644
--- a/src/com/gitblit/wicket/PageRegistration.java
+++ b/src/com/gitblit/wicket/PageRegistration.java
@@ -76,17 +76,17 @@
private static final long serialVersionUID = 1L;
+ 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;
+ this(null, null, null, null);
}
/**
@@ -97,9 +97,54 @@
* @param value
*/
public DropDownMenuItem(String displayText, String parameter, String value) {
+ this(displayText, parameter, value, null);
+ }
+
+ /**
+ * Standard Menu Item constructor that preserves aggregate parameters.
+ *
+ * @param displayText
+ * @param parameter
+ * @param value
+ */
+ public DropDownMenuItem(String displayText, String parameter, String value,
+ PageParameters params) {
this.displayText = displayText;
this.parameter = parameter;
this.value = value;
+
+ if (params == null) {
+ // no parameters specified
+ parameters = new PageParameters();
+ setParameter(parameter, value);
+ isSelected = false;
+ } else {
+ 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.parameters.remove(parameter);
+ } else {
+ this.parameters.put(parameter, value);
+ }
+ }
}
public String formatParameter() {
@@ -109,10 +154,18 @@
return parameter + "=" + value;
}
+ public PageParameters getPageParameters() {
+ 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