2 * Svjatoslav Commons - shared library of common functionality.
3 * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of version 3 of the GNU Lesser General Public License
7 * or later as published by the Free Software Foundation.
10 package eu.svjatoslav.commons.network.navigation;
12 import java.net.MalformedURLException;
14 import java.util.List;
16 import javax.servlet.http.HttpServletRequest;
18 import eu.svjatoslav.commons.network.Locale;
19 import eu.svjatoslav.commons.network.LocaleConfiguration;
21 public class Navigation<NI extends NavigationItem> {
23 private NI rootNavigationItem;
25 private NI defaultNavigationItem;
27 protected final LocaleConfiguration localeConfiguration;
29 public Navigation(final LocaleConfiguration localeConfiguration) {
30 this.localeConfiguration = localeConfiguration;
33 public NI getDefaultNavigationItem() {
34 return defaultNavigationItem;
37 private String getGetNotNullString(final String string) {
44 public LocaleConfiguration getLocaleConfiguration() {
45 return localeConfiguration;
48 public NI getRootNavigationItem() {
49 return rootNavigationItem;
52 public NI getSelectedItem(final HttpServletRequest request) {
53 final String requestUrl = request.getRequestURL().toString();
56 final String requestPath = new URL(requestUrl).getPath();
58 final NI match = (NI) rootNavigationItem
59 .getMatchingNavigationItem(requestPath);
63 } catch (final MalformedURLException e) {
64 System.out.println("Cannot handle URL: " + requestUrl);
68 return getDefaultNavigationItem();
71 public String getTopMenu(final HttpServletRequest request) {
73 final Locale currentLocale = localeConfiguration
74 .detectCurrentLocale(request);
76 final NI selectedItem = getSelectedItem(request);
77 final StringBuffer result = new StringBuffer();
79 result.append("<div class=\""
80 + getGetNotNullString(rootNavigationItem.getCssPrefix())
81 + "navigationMenu\">");
83 for (final NI item : (List<NI>) getRootNavigationItem()
86 if (item == selectedItem)
87 result.append("<a class=\""
88 + getGetNotNullString(item.getCssPrefix())
89 + "menuItemSelected\" href=\"" + item.getLinkUrl()
92 result.append("<a class=\""
93 + getGetNotNullString(item.getCssPrefix())
94 + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
96 result.append("<div>" + item.getTitle(currentLocale) + "</div>");
97 result.append("</a>");
100 result.append("</div>");
102 return result.toString();
105 public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
106 this.defaultNavigationItem = defaultNavigationItem;
107 return defaultNavigationItem;
110 public NI setRootNavigationItem(final NI rootNavigationItem) {
111 this.rootNavigationItem = rootNavigationItem;
112 return rootNavigationItem;