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.LocaleConfiguration;
20 public class Navigation<NI extends NavigationItem> {
22 private NI rootNavigationItem;
24 private NI defaultNavigationItem;
26 protected final LocaleConfiguration localeConfiguration;
28 public Navigation(final LocaleConfiguration localeConfiguration) {
29 this.localeConfiguration = localeConfiguration;
32 public NI getDefaultNavigationItem() {
33 return defaultNavigationItem;
36 private String getGetNotNullString(final String string) {
43 public LocaleConfiguration getLocaleConfiguration() {
44 return localeConfiguration;
47 public NI getRootNavigationItem() {
48 return rootNavigationItem;
51 public NI getSelectedItem(final HttpServletRequest request) {
52 final String requestUrl = request.getRequestURL().toString();
55 final String requestPath = new URL(requestUrl).getPath();
57 @SuppressWarnings("unchecked")
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 @SuppressWarnings("unchecked")
72 public String getTopMenu(final HttpServletRequest request) {
74 final String currentLocale = localeConfiguration
75 .detectCurrentLocale(request);
77 final NI selectedItem = getSelectedItem(request);
78 final StringBuffer result = new StringBuffer();
80 result.append("<div class=\""
81 + getGetNotNullString(rootNavigationItem.getCssPrefix())
82 + "navigationMenu\">");
84 for (final NI item : (List<NI>) getRootNavigationItem()
87 if (item == selectedItem)
88 result.append("<a class=\""
89 + getGetNotNullString(item.getCssPrefix())
90 + "menuItemSelected\" href=\"" + item.getLinkUrl()
93 result.append("<a class=\""
94 + getGetNotNullString(item.getCssPrefix())
95 + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
97 result.append("<div>" + item.getTitle(currentLocale) + "</div>");
98 result.append("</a>");
101 result.append("</div>");
103 return result.toString();
106 public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
107 this.defaultNavigationItem = defaultNavigationItem;
108 return defaultNavigationItem;
111 public NI setRootNavigationItem(final NI rootNavigationItem) {
112 this.rootNavigationItem = rootNavigationItem;
113 return rootNavigationItem;