reusable logic for web site navigation
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
1 package eu.svjatoslav.commons.network.navigation;
2
3 import java.net.MalformedURLException;
4 import java.net.URL;
5
6 public class Navigation {
7
8         private NavigationItem rootNavigationItem;
9
10         private NavigationItem defaultNavigationItem;
11
12         public NavigationItem getRootNavigationItem() {
13                 return rootNavigationItem;
14         }
15
16         public NavigationItem getSelectedItem(final String requestUrl) {
17
18                 try {
19                         final String requestPath = new URL(requestUrl).getPath();
20
21                         for (final NavigationItem item : rootNavigationItem.subElements)
22                                 if (item.matchesUrl(requestPath))
23                                         return item;
24                 } catch (final MalformedURLException e) {
25                         System.out.println("Cannot handle URL: " + requestUrl);
26                         e.printStackTrace();
27                 }
28
29                 return defaultNavigationItem;
30         }
31
32         public String getTopMenu(final String requestUrl) {
33
34                 final NavigationItem selectedItem = getSelectedItem(requestUrl);
35                 final StringBuffer result = new StringBuffer();
36
37                 result.append("<div id=\"topNavigation\">");
38
39                 for (final NavigationItem item : rootNavigationItem.getSubElements()) {
40
41                         if (item == selectedItem)
42                                 result.append("<a class=\"selected\" href=\"" + item.getLink()
43                                                 + "\">");
44                         else
45                                 result.append("<a href=\"" + item.getLink() + "\">");
46
47                         result.append(item.getTitle());
48                         result.append("</a>");
49                 }
50
51                 result.append("</div>");
52
53                 return result.toString();
54         }
55
56         public void setRootNavigationItem(final NavigationItem rootNavigationItem) {
57                 this.rootNavigationItem = rootNavigationItem;
58         }
59
60 }