localized navigation menu
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
1 /*
2  * Svjatoslav Commons - shared library of common functionality.
3  * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  *
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.
8  */
9
10 package eu.svjatoslav.commons.network.navigation;
11
12 import java.net.MalformedURLException;
13 import java.net.URL;
14
15 import javax.servlet.http.HttpServletRequest;
16
17 import eu.svjatoslav.commons.network.Locale;
18 import eu.svjatoslav.commons.network.LocaleHelper;
19
20 public class Navigation {
21
22         private NavigationItem rootNavigationItem;
23
24         private NavigationItem defaultNavigationItem;
25
26         public NavigationItem getDefaultNavigationItem() {
27                 return defaultNavigationItem;
28         }
29
30         private String getGetNotNullString(final String string) {
31                 if (string != null)
32                         return string;
33
34                 return "";
35         }
36
37         public NavigationItem getRootNavigationItem() {
38                 return rootNavigationItem;
39         }
40
41         public NavigationItem getSelectedItem(final HttpServletRequest request) {
42                 final String requestUrl = request.getRequestURL().toString();
43
44                 try {
45                         final String requestPath = new URL(requestUrl).getPath();
46
47                         final NavigationItem match = rootNavigationItem
48                                         .getMatchingNavigationItem(requestPath);
49
50                         if (match != null)
51                                 return match;
52                 } catch (final MalformedURLException e) {
53                         System.out.println("Cannot handle URL: " + requestUrl);
54                         e.printStackTrace();
55                 }
56
57                 return getDefaultNavigationItem();
58         }
59
60         public String getTopMenu(final HttpServletRequest request) {
61
62                 final Locale currentLocale = LocaleHelper.detectLocale(request);
63
64                 final NavigationItem selectedItem = getSelectedItem(request);
65                 final StringBuffer result = new StringBuffer();
66
67                 result.append("<div class=\""
68                                 + getGetNotNullString(rootNavigationItem.getCssPrefix())
69                                 + "navigationMenu\">");
70
71                 for (final NavigationItem item : getRootNavigationItem()
72                                 .getSubElements()) {
73
74                         if (item == selectedItem)
75                                 result.append("<a class=\""
76                                                 + getGetNotNullString(item.getCssPrefix())
77                                                 + "menuItemSelected\" href=\"" + item.getLinkUrl()
78                                                 + "\">");
79                         else
80                                 result.append("<a class=\""
81                                                 + getGetNotNullString(item.getCssPrefix())
82                                                 + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
83
84                         result.append("<div>" + item.getTitle(currentLocale) + "</div>");
85                         result.append("</a>");
86                 }
87
88                 result.append("</div>");
89
90                 return result.toString();
91         }
92
93         public NavigationItem setDefaultNavigationItem(
94                         final NavigationItem defaultNavigationItem) {
95                 this.defaultNavigationItem = defaultNavigationItem;
96                 return defaultNavigationItem;
97         }
98
99         public NavigationItem setRootNavigationItem(
100                         final NavigationItem rootNavigationItem) {
101                 this.rootNavigationItem = rootNavigationItem;
102                 return rootNavigationItem;
103         }
104
105 }