+/*
+ * Svjatoslav Commons - shared library of common functionality. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ */
package eu.svjatoslav.commons.network.navigation;
+import javax.servlet.http.HttpServletRequest;
import java.net.MalformedURLException;
import java.net.URL;
public class Navigation {
- private NavigationItem rootNavigationItem;
+ private NavigationItem root = new NavigationItem(null, null, null);
- private NavigationItem defaultNavigationItem;
+ public NavigationItem getRoot(){
+ return root;
+ }
- public NavigationItem getDefaultNavigationItem() {
- return defaultNavigationItem;
- }
+ public NavigationItem getSelectedItem(final HttpServletRequest request) {
+ final String requestUrl = request.getRequestURL().toString();
- public NavigationItem getRootNavigationItem() {
- return rootNavigationItem;
- }
+ final String requestPath;
+ try {
+ requestPath = new URL(requestUrl).getPath();
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("Illegal request URL provided." , e);
+ }
- public NavigationItem getSelectedItem(final String requestUrl) {
+ @SuppressWarnings("unchecked") final NavigationItem match = root.getMatch(requestPath);
- try {
- final String requestPath = new URL(requestUrl).getPath();
+ if (match != null)
+ return match;
- for (final NavigationItem item : rootNavigationItem.subElements)
- if (item.matchesUrl(requestPath))
- return item;
- } catch (final MalformedURLException e) {
- System.out.println("Cannot handle URL: " + requestUrl);
- e.printStackTrace();
- }
+ return root.getDefaultNavigationItem();
+ }
- return getDefaultNavigationItem();
- }
+ @SuppressWarnings("unchecked")
+ public String getTopMenu(final HttpServletRequest request) {
- public String getTopMenu(final String requestUrl) {
+ final NavigationItem selectedItem = getSelectedItem(request);
+ final StringBuilder result = new StringBuilder();
- final NavigationItem selectedItem = getSelectedItem(requestUrl);
- final StringBuffer result = new StringBuffer();
+ result.append("<div class=\"navigationMenu\">");
- result.append("<div id=\"topNavigation\">");
+ for (final NavigationItem item : root.getChildren()) {
- for (final NavigationItem item : rootNavigationItem.getSubElements()) {
+ if (item == selectedItem)
+ result.append("<a class=\"menuItemSelected\" href=\""
+ + item.getUrl() + "\">");
+ else
+ result.append("<a class=\"menuItem\" href=\""
+ + item.getUrl() + "\">");
- if (item == selectedItem)
- result.append("<a class=\"selected\" href=\"" + item.getLink()
- + "\">");
- else
- result.append("<a href=\"" + item.getLink() + "\">");
+ result.append("<div>" + item.getTitle() + "</div>");
+ result.append("</a>");
+ }
- result.append(item.getTitle());
- result.append("</a>");
- }
+ result.append("</div>");
- result.append("</div>");
-
- return result.toString();
- }
-
- public void setDefaultNavigationItem(
- final NavigationItem defaultNavigationItem) {
- this.defaultNavigationItem = defaultNavigationItem;
- }
-
- public void setRootNavigationItem(final NavigationItem rootNavigationItem) {
- this.rootNavigationItem = rootNavigationItem;
- }
+ return result.toString();
+ }
}