1bdf3784aa6f7d87421df86c24ef820a0fd6e7a4
[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.LocaleConfiguration;
19
20 public class Navigation {
21
22         private NavigationItem rootNavigationItem;
23
24         private NavigationItem defaultNavigationItem;
25
26         protected final LocaleConfiguration localeConfiguration;
27
28         public Navigation(final LocaleConfiguration localeConfiguration) {
29                 this.localeConfiguration = localeConfiguration;
30         }
31
32         public NavigationItem getDefaultNavigationItem() {
33                 return defaultNavigationItem;
34         }
35
36         private String getGetNotNullString(final String string) {
37                 if (string != null)
38                         return string;
39
40                 return "";
41         }
42
43         public LocaleConfiguration getLocaleConfiguration() {
44                 return localeConfiguration;
45         }
46
47         public NavigationItem getRootNavigationItem() {
48                 return rootNavigationItem;
49         }
50
51         public NavigationItem getSelectedItem(final HttpServletRequest request) {
52                 final String requestUrl = request.getRequestURL().toString();
53
54                 try {
55                         final String requestPath = new URL(requestUrl).getPath();
56
57                         final NavigationItem match = rootNavigationItem
58                                         .getMatchingNavigationItem(requestPath);
59
60                         if (match != null)
61                                 return match;
62                 } catch (final MalformedURLException e) {
63                         System.out.println("Cannot handle URL: " + requestUrl);
64                         e.printStackTrace();
65                 }
66
67                 return getDefaultNavigationItem();
68         }
69
70         public String getTopMenu(final HttpServletRequest request) {
71
72                 final Locale currentLocale = localeConfiguration
73                                 .detectCurrentLocale(request);
74
75                 final NavigationItem selectedItem = getSelectedItem(request);
76                 final StringBuffer result = new StringBuffer();
77
78                 result.append("<div class=\""
79                                 + getGetNotNullString(rootNavigationItem.getCssPrefix())
80                                 + "navigationMenu\">");
81
82                 for (final NavigationItem item : getRootNavigationItem()
83                                 .getSubElements()) {
84
85                         if (item == selectedItem)
86                                 result.append("<a class=\""
87                                                 + getGetNotNullString(item.getCssPrefix())
88                                                 + "menuItemSelected\" href=\"" + item.getLinkUrl()
89                                                 + "\">");
90                         else
91                                 result.append("<a class=\""
92                                                 + getGetNotNullString(item.getCssPrefix())
93                                                 + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
94
95                         result.append("<div>" + item.getTitle(currentLocale) + "</div>");
96                         result.append("</a>");
97                 }
98
99                 result.append("</div>");
100
101                 return result.toString();
102         }
103
104         public NavigationItem setDefaultNavigationItem(
105                         final NavigationItem defaultNavigationItem) {
106                 this.defaultNavigationItem = defaultNavigationItem;
107                 return defaultNavigationItem;
108         }
109
110         public NavigationItem setRootNavigationItem(
111                         final NavigationItem rootNavigationItem) {
112                 this.rootNavigationItem = rootNavigationItem;
113                 return rootNavigationItem;
114         }
115
116 }