Code cleanup and formatting. Migrated to java 1.8.
[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 eu.svjatoslav.commons.network.LocaleConfiguration;
13
14 import javax.servlet.http.HttpServletRequest;
15 import java.net.MalformedURLException;
16 import java.net.URL;
17 import java.util.List;
18
19 public class Navigation<NI extends NavigationItem> {
20
21     protected final LocaleConfiguration localeConfiguration;
22     private NI rootNavigationItem;
23     private NI defaultNavigationItem;
24
25     public Navigation(final LocaleConfiguration localeConfiguration) {
26         this.localeConfiguration = localeConfiguration;
27     }
28
29     public NI getDefaultNavigationItem() {
30         return defaultNavigationItem;
31     }
32
33     private String getGetNotNullString(final String string) {
34         if (string != null)
35             return string;
36
37         return "";
38     }
39
40     public LocaleConfiguration getLocaleConfiguration() {
41         return localeConfiguration;
42     }
43
44     public NI getRootNavigationItem() {
45         return rootNavigationItem;
46     }
47
48     public NI getSelectedItem(final HttpServletRequest request) {
49         final String requestUrl = request.getRequestURL().toString();
50
51         try {
52             final String requestPath = new URL(requestUrl).getPath();
53
54             @SuppressWarnings("unchecked")
55             final NI match = (NI) rootNavigationItem.getMatchingNavigationItem(requestPath);
56
57             if (match != null)
58                 return match;
59         } catch (final MalformedURLException e) {
60             System.out.println("Cannot handle URL: " + requestUrl);
61             e.printStackTrace();
62         }
63
64         return getDefaultNavigationItem();
65     }
66
67     @SuppressWarnings("unchecked")
68     public String getTopMenu(final HttpServletRequest request) {
69
70         final String currentLocale = localeConfiguration.detectCurrentLocale(request);
71
72         final NI selectedItem = getSelectedItem(request);
73         final StringBuilder result = new StringBuilder();
74
75         result.append("<div class=\"" + getGetNotNullString(rootNavigationItem.getCssPrefix()) + "navigationMenu\">");
76
77         for (final NI item : (List<NI>) getRootNavigationItem().getSubElements()) {
78
79             if (item == selectedItem)
80                 result.append("<a class=\"" + getGetNotNullString(item.getCssPrefix()) + "menuItemSelected\" href=\""
81                         + item.getLinkUrl() + "\">");
82             else
83                 result.append("<a class=\"" + getGetNotNullString(item.getCssPrefix()) + "menuItem\" href=\""
84                         + item.getLinkUrl() + "\">");
85
86             result.append("<div>" + item.getTitle(currentLocale) + "</div>");
87             result.append("</a>");
88         }
89
90         result.append("</div>");
91
92         return result.toString();
93     }
94
95     public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
96         this.defaultNavigationItem = defaultNavigationItem;
97         return defaultNavigationItem;
98     }
99
100     public NI setRootNavigationItem(final NI rootNavigationItem) {
101         this.rootNavigationItem = rootNavigationItem;
102         return rootNavigationItem;
103     }
104
105 }