Changed license to CC0
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
1 /*
2  * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5 package eu.svjatoslav.commons.network.navigation;
6
7 import javax.servlet.http.HttpServletRequest;
8 import java.net.MalformedURLException;
9 import java.net.URL;
10
11 public class Navigation {
12
13     private NavigationItem root = new NavigationItem(null, null, null);
14
15     public NavigationItem getRoot(){
16         return root;
17     }
18
19     public NavigationItem getSelectedItem(final HttpServletRequest request) {
20         final String requestUrl = request.getRequestURL().toString();
21
22         final String requestPath;
23         try {
24             requestPath = new URL(requestUrl).getPath();
25         } catch (MalformedURLException e) {
26             throw new IllegalArgumentException("Illegal request URL provided." , e);
27         }
28
29         @SuppressWarnings("unchecked") final NavigationItem match = root.getMatch(requestPath);
30
31         if (match != null)
32             return match;
33
34         return root.getDefaultNavigationItem();
35     }
36
37     @SuppressWarnings("unchecked")
38     public String getTopMenu(final HttpServletRequest request) {
39
40         final NavigationItem selectedItem = getSelectedItem(request);
41         final StringBuilder result = new StringBuilder();
42
43         result.append("<div class=\"navigationMenu\">");
44
45         for (final NavigationItem item : root.getChildren()) {
46
47             if (item == selectedItem)
48                 result.append("<a class=\"menuItemSelected\" href=\""
49                         + item.getUrl() + "\">");
50             else
51                 result.append("<a class=\"menuItem\" href=\""
52                         + item.getUrl() + "\">");
53
54             result.append("<div>" + item.getTitle() + "</div>");
55             result.append("</a>");
56         }
57
58         result.append("</div>");
59
60         return result.toString();
61     }
62
63 }