package com.gitblit.models;
|
|
import java.io.Serializable;
|
|
import org.apache.wicket.PageParameters;
|
import org.apache.wicket.markup.html.WebPage;
|
|
import com.gitblit.utils.StringUtils;
|
|
public class Menu {
|
|
/**
|
* A MenuItem for a drop down menu.
|
*
|
* @author James Moger
|
* @since 1.6.0
|
*/
|
public abstract static class MenuItem implements Serializable {
|
|
private static final long serialVersionUID = 1L;
|
|
final String displayText;
|
|
MenuItem(String displayText) {
|
this.displayText = displayText;
|
}
|
|
@Override
|
public int hashCode() {
|
return displayText.hashCode();
|
}
|
|
@Override
|
public boolean equals(Object o) {
|
if (o instanceof MenuItem) {
|
return hashCode() == o.hashCode();
|
}
|
return false;
|
}
|
|
@Override
|
public String toString() {
|
return displayText;
|
}
|
}
|
|
/**
|
* A divider for the menu.
|
*
|
* @since 1.6.0
|
*/
|
public static class MenuDivider extends MenuItem {
|
|
private static final long serialVersionUID = 1L;
|
|
public MenuDivider() {
|
super("");
|
}
|
}
|
|
|
/**
|
* A MenuItem for setting a parameter of the current url.
|
*
|
* @author James Moger
|
*
|
*/
|
public static class ParameterMenuItem extends MenuItem {
|
|
private static final long serialVersionUID = 1L;
|
|
final PageParameters parameters;
|
final String parameter;
|
final String value;
|
final boolean isSelected;
|
|
/**
|
* @param displayText
|
*/
|
public ParameterMenuItem(String displayText) {
|
this(displayText, null, null, null);
|
}
|
|
/**
|
* @param displayText
|
* @param parameter
|
* @param value
|
*/
|
public ParameterMenuItem(String displayText, String parameter, String value) {
|
this(displayText, parameter, value, null);
|
}
|
|
/**
|
* @param displayText
|
* @param parameter
|
* @param value
|
*/
|
public ParameterMenuItem(String displayText, String parameter, String value,
|
PageParameters params) {
|
super(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);
|
// set the new selection value
|
setParameter(parameter, value);
|
} else {
|
// not currently selected
|
isSelected = false;
|
setParameter(parameter, value);
|
}
|
}
|
}
|
|
protected 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() {
|
if (StringUtils.isEmpty(parameter) || StringUtils.isEmpty(value)) {
|
return "";
|
}
|
return parameter + "=" + value;
|
}
|
|
public PageParameters getPageParameters() {
|
return parameters;
|
}
|
|
public boolean isSelected() {
|
return isSelected;
|
}
|
|
@Override
|
public int hashCode() {
|
if (StringUtils.isEmpty(displayText)) {
|
return value.hashCode() + parameter.hashCode();
|
}
|
return displayText.hashCode();
|
}
|
|
@Override
|
public boolean equals(Object o) {
|
if (o instanceof MenuItem) {
|
return hashCode() == o.hashCode();
|
}
|
return false;
|
}
|
|
@Override
|
public String toString() {
|
if (StringUtils.isEmpty(displayText)) {
|
return formatParameter();
|
}
|
return displayText;
|
}
|
}
|
|
/**
|
* Menu item for toggling a parameter.
|
*
|
*/
|
public static class ToggleMenuItem extends ParameterMenuItem {
|
|
private static final long serialVersionUID = 1L;
|
|
/**
|
* @param displayText
|
* @param parameter
|
* @param value
|
*/
|
public ToggleMenuItem(String displayText, String parameter, String value,
|
PageParameters params) {
|
super(displayText, parameter, value, params);
|
if (isSelected) {
|
// already selected, so remove this enables toggling
|
parameters.remove(parameter);
|
}
|
}
|
}
|
|
/**
|
* Menu item for linking to another Wicket page.
|
*
|
* @since 1.6.0
|
*/
|
public static class PageLinkMenuItem extends MenuItem {
|
|
private static final long serialVersionUID = 1L;
|
|
private final Class<? extends WebPage> pageClass;
|
|
private final PageParameters params;
|
|
/**
|
* Page Link Item links to another page.
|
*
|
* @param displayText
|
* @param pageClass
|
* @since 1.6.0
|
*/
|
public PageLinkMenuItem(String displayText, Class<? extends WebPage> pageClass) {
|
this(displayText, pageClass, null);
|
}
|
|
/**
|
* Page Link Item links to another page.
|
*
|
* @param displayText
|
* @param pageClass
|
* @param params
|
* @since 1.6.0
|
*/
|
public PageLinkMenuItem(String displayText, Class<? extends WebPage> pageClass, PageParameters params) {
|
super(displayText);
|
this.pageClass = pageClass;
|
this.params = params;
|
}
|
|
/**
|
* @return the page class
|
* @since 1.6.0
|
*/
|
public Class<? extends WebPage> getPageClass() {
|
return pageClass;
|
}
|
|
/**
|
* @return the page parameters
|
* @since 1.6.0
|
*/
|
public PageParameters getPageParameters() {
|
return params;
|
}
|
}
|
|
/**
|
* Menu item to link to an external page.
|
*
|
* @since 1.6.0
|
*/
|
public static class ExternalLinkMenuItem extends MenuItem {
|
|
private static final long serialVersionUID = 1L;
|
|
private final String href;
|
|
private final boolean newWindow;
|
|
/**
|
* External Link Item links to something else.
|
*
|
* @param displayText
|
* @param href
|
* @since 1.6.0
|
*/
|
public ExternalLinkMenuItem(String displayText, String href) {
|
this(displayText, href, false);
|
}
|
|
/**
|
* External Link Item links to something else.
|
*
|
* @param displayText
|
* @param href
|
* @since 1.6.0
|
*/
|
public ExternalLinkMenuItem(String displayText, String href, boolean newWindow) {
|
super(displayText);
|
this.href = href;
|
this.newWindow = newWindow;
|
}
|
|
/**
|
* @since 1.6.0
|
*/
|
public String getHref() {
|
return href;
|
}
|
|
/**
|
* @since 1.6.0
|
*/
|
public boolean openInNewWindow() {
|
return newWindow;
|
}
|
}
|
}
|