Simplified navigation.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
index 408372a..2c23e1d 100755 (executable)
@@ -1,76 +1,68 @@
+/*
+ * Svjatoslav Commons - shared library of common functionality.
+ * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+ */
+
 package eu.svjatoslav.commons.network.navigation;
 
+import javax.servlet.http.HttpServletRequest;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import javax.servlet.http.HttpServletRequest;
-
 public class Navigation {
 
-       private NavigationItem rootNavigationItem;
-
-       private NavigationItem defaultNavigationItem;
-
-       public NavigationItem getDefaultNavigationItem() {
-               return defaultNavigationItem;
-       }
-
-       public NavigationItem getRootNavigationItem() {
-               return rootNavigationItem;
-       }
-
-       public NavigationItem getSelectedItem(final HttpServletRequest request) {
-               final String requestUrl = request.getRequestURL().toString();
+    private NavigationItem root = new NavigationItem(null, null, null);
 
-               try {
-                       final String requestPath = new URL(requestUrl).getPath();
+    public NavigationItem getRoot(){
+        return root;
+    }
 
-                       final NavigationItem match = rootNavigationItem
-                                       .getMatchingNavigationItem(requestPath);
+    public NavigationItem getSelectedItem(final HttpServletRequest request) {
+        final String requestUrl = request.getRequestURL().toString();
 
-                       if (match != null)
-                               return match;
-               } catch (final MalformedURLException e) {
-                       System.out.println("Cannot handle URL: " + requestUrl);
-                       e.printStackTrace();
-               }
+        final String requestPath;
+        try {
+            requestPath = new URL(requestUrl).getPath();
+        } catch (MalformedURLException e) {
+            throw new IllegalArgumentException("Illegal request URL provided." , e);
+        }
 
-               return getDefaultNavigationItem();
-       }
+        @SuppressWarnings("unchecked") final NavigationItem match = root.getMatch(requestPath);
 
-       public String getTopMenu(final HttpServletRequest request) {
+        if (match != null)
+            return match;
 
-               final NavigationItem selectedItem = getSelectedItem(request);
-               final StringBuffer result = new StringBuffer();
+        return root.getDefaultNavigationItem();
+    }
 
-               result.append("<div class=\"navigationMenu\">");
+    @SuppressWarnings("unchecked")
+    public String getTopMenu(final HttpServletRequest request) {
 
-               for (final NavigationItem item : getRootNavigationItem()
-                               .getSubElements()) {
+        final NavigationItem selectedItem = getSelectedItem(request);
+        final StringBuilder result = new StringBuilder();
 
-                       if (item == selectedItem)
-                               result.append("<a class=\"menuItemSelected\" href=\""
-                                               + item.getLinkUrl() + "\">");
-                       else
-                               result.append("<a class=\"menuItem\" href=\""
-                                               + item.getLinkUrl() + "\">");
+        result.append("<div class=\"navigationMenu\">");
 
-                       result.append("<div>" + item.getTitle() + "</div>");
-                       result.append("</a>");
-               }
+        for (final NavigationItem item : root.getChildren()) {
 
-               result.append("</div>");
+            if (item == selectedItem)
+                result.append("<a class=\"menuItemSelected\" href=\""
+                        + item.getUrl() + "\">");
+            else
+                result.append("<a class=\"menuItem\" href=\""
+                        + item.getUrl() + "\">");
 
-               return result.toString();
-       }
+            result.append("<div>" + item.getTitle() + "</div>");
+            result.append("</a>");
+        }
 
-       public void setDefaultNavigationItem(
-                       final NavigationItem defaultNavigationItem) {
-               this.defaultNavigationItem = defaultNavigationItem;
-       }
+        result.append("</div>");
 
-       public void setRootNavigationItem(final NavigationItem rootNavigationItem) {
-               this.rootNavigationItem = rootNavigationItem;
-       }
+        return result.toString();
+    }
 
 }