339db68ab5f782102ee92c2abd0e009fcd42a510
[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 public class Navigation {
18
19         private NavigationItem rootNavigationItem;
20
21         private NavigationItem defaultNavigationItem;
22
23         public NavigationItem getDefaultNavigationItem() {
24                 return defaultNavigationItem;
25         }
26
27         public NavigationItem getRootNavigationItem() {
28                 return rootNavigationItem;
29         }
30
31         public NavigationItem getSelectedItem(final HttpServletRequest request) {
32                 final String requestUrl = request.getRequestURL().toString();
33
34                 try {
35                         final String requestPath = new URL(requestUrl).getPath();
36
37                         final NavigationItem match = rootNavigationItem
38                                         .getMatchingNavigationItem(requestPath);
39
40                         if (match != null)
41                                 return match;
42                 } catch (final MalformedURLException e) {
43                         System.out.println("Cannot handle URL: " + requestUrl);
44                         e.printStackTrace();
45                 }
46
47                 return getDefaultNavigationItem();
48         }
49
50         public String getTopMenu(final HttpServletRequest request) {
51
52                 final NavigationItem selectedItem = getSelectedItem(request);
53                 final StringBuffer result = new StringBuffer();
54
55                 result.append("<div class=\"navigationMenu\">");
56
57                 for (final NavigationItem item : getRootNavigationItem()
58                                 .getSubElements()) {
59
60                         if (item == selectedItem)
61                                 result.append("<a class=\"menuItemSelected\" href=\""
62                                                 + item.getLinkUrl() + "\">");
63                         else
64                                 result.append("<a class=\"menuItem\" href=\""
65                                                 + item.getLinkUrl() + "\">");
66
67                         result.append("<div>" + item.getTitle() + "</div>");
68                         result.append("</a>");
69                 }
70
71                 result.append("</div>");
72
73                 return result.toString();
74         }
75
76         public NavigationItem setDefaultNavigationItem(
77                         final NavigationItem defaultNavigationItem) {
78                 this.defaultNavigationItem = defaultNavigationItem;
79                 return defaultNavigationItem;
80         }
81
82         public NavigationItem setRootNavigationItem(
83                         final NavigationItem rootNavigationItem) {
84                 this.rootNavigationItem = rootNavigationItem;
85                 return rootNavigationItem;
86         }
87
88 }