2 * Svjatoslav Commons - shared library of common functionality.
3 * Copyright ©2012-2017, 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 eu.svjatoslav.commons.network.LocaleConfiguration;
14 import javax.servlet.http.HttpServletRequest;
15 import java.net.MalformedURLException;
17 import java.util.List;
19 public class Navigation<NI extends NavigationItem> {
21 protected final LocaleConfiguration localeConfiguration;
22 private NI rootNavigationItem;
23 private NI defaultNavigationItem;
25 public Navigation(final LocaleConfiguration localeConfiguration) {
26 this.localeConfiguration = localeConfiguration;
29 public NI getDefaultNavigationItem() {
30 return defaultNavigationItem;
33 private String getGetNotNullString(final String string) {
40 public LocaleConfiguration getLocaleConfiguration() {
41 return localeConfiguration;
44 public NI getRootNavigationItem() {
45 return rootNavigationItem;
48 public NI getSelectedItem(final HttpServletRequest request) {
49 final String requestUrl = request.getRequestURL().toString();
52 final String requestPath = new URL(requestUrl).getPath();
54 @SuppressWarnings("unchecked")
55 final NI match = (NI) rootNavigationItem.getMatchingNavigationItem(requestPath);
59 } catch (final MalformedURLException e) {
60 System.out.println("Cannot handle URL: " + requestUrl);
64 return getDefaultNavigationItem();
67 @SuppressWarnings("unchecked")
68 public String getTopMenu(final HttpServletRequest request) {
70 final String currentLocale = localeConfiguration.detectCurrentLocale(request);
72 final NI selectedItem = getSelectedItem(request);
73 final StringBuilder result = new StringBuilder();
75 result.append("<div class=\"" + getGetNotNullString(rootNavigationItem.getCssPrefix()) + "navigationMenu\">");
77 for (final NI item : (List<NI>) getRootNavigationItem().getSubElements()) {
79 if (item == selectedItem)
80 result.append("<a class=\"" + getGetNotNullString(item.getCssPrefix()) + "menuItemSelected\" href=\""
81 + item.getLinkUrl() + "\">");
83 result.append("<a class=\"" + getGetNotNullString(item.getCssPrefix()) + "menuItem\" href=\""
84 + item.getLinkUrl() + "\">");
86 result.append("<div>" + item.getTitle(currentLocale) + "</div>");
87 result.append("</a>");
90 result.append("</div>");
92 return result.toString();
95 public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
96 this.defaultNavigationItem = defaultNavigationItem;
97 return defaultNavigationItem;
100 public NI setRootNavigationItem(final NI rootNavigationItem) {
101 this.rootNavigationItem = rootNavigationItem;
102 return rootNavigationItem;