+/*
+ * Svjatoslav Commons - shared library of common functionality.
+ * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+ */
+
package eu.svjatoslav.commons.network.navigation;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import eu.svjatoslav.commons.network.Locale;
+import eu.svjatoslav.commons.network.LocaleConfiguration;
+
+public class Navigation<NI extends NavigationItem> {
-public class Navigation {
+ private NI rootNavigationItem;
- private NavigationItem rootNavigationItem;
+ private NI defaultNavigationItem;
- private NavigationItem defaultNavigationItem;
+ protected final LocaleConfiguration localeConfiguration;
- public NavigationItem getDefaultNavigationItem() {
+ public Navigation(final LocaleConfiguration localeConfiguration) {
+ this.localeConfiguration = localeConfiguration;
+ }
+
+ public NI getDefaultNavigationItem() {
return defaultNavigationItem;
}
- public NavigationItem getRootNavigationItem() {
+ private String getGetNotNullString(final String string) {
+ if (string != null)
+ return string;
+
+ return "";
+ }
+
+ public LocaleConfiguration getLocaleConfiguration() {
+ return localeConfiguration;
+ }
+
+ public NI getRootNavigationItem() {
return rootNavigationItem;
}
- public NavigationItem getSelectedItem(final String requestUrl) {
+ public NI getSelectedItem(final HttpServletRequest request) {
+ final String requestUrl = request.getRequestURL().toString();
try {
final String requestPath = new URL(requestUrl).getPath();
- for (final NavigationItem item : rootNavigationItem.subElements)
- if (item.matchesUrl(requestPath))
- return item;
+ final NI match = (NI) rootNavigationItem
+ .getMatchingNavigationItem(requestPath);
+
+ if (match != null)
+ return match;
} catch (final MalformedURLException e) {
System.out.println("Cannot handle URL: " + requestUrl);
e.printStackTrace();
return getDefaultNavigationItem();
}
- public String getTopMenu(final String requestUrl) {
+ public String getTopMenu(final HttpServletRequest request) {
- final NavigationItem selectedItem = getSelectedItem(requestUrl);
+ final Locale currentLocale = localeConfiguration
+ .detectCurrentLocale(request);
+
+ final NI selectedItem = getSelectedItem(request);
final StringBuffer result = new StringBuffer();
- result.append("<div id=\"topNavigation\">");
+ result.append("<div class=\""
+ + getGetNotNullString(rootNavigationItem.getCssPrefix())
+ + "navigationMenu\">");
- for (final NavigationItem item : rootNavigationItem.getSubElements()) {
+ for (final NI item : (List<NI>) getRootNavigationItem()
+ .getSubElements()) {
if (item == selectedItem)
- result.append("<a class=\"selected\" href=\"" + item.getLink()
+ result.append("<a class=\""
+ + getGetNotNullString(item.getCssPrefix())
+ + "menuItemSelected\" href=\"" + item.getLinkUrl()
+ "\">");
else
- result.append("<a href=\"" + item.getLink() + "\">");
+ result.append("<a class=\""
+ + getGetNotNullString(item.getCssPrefix())
+ + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
- result.append(item.getTitle());
+ result.append("<div>" + item.getTitle(currentLocale) + "</div>");
result.append("</a>");
}
return result.toString();
}
- public void setDefaultNavigationItem(
- final NavigationItem defaultNavigationItem) {
+ public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
this.defaultNavigationItem = defaultNavigationItem;
+ return defaultNavigationItem;
}
- public void setRootNavigationItem(final NavigationItem rootNavigationItem) {
+ public NI setRootNavigationItem(final NI rootNavigationItem) {
this.rootNavigationItem = rootNavigationItem;
+ return rootNavigationItem;
}
}