Simplified navigation.
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
index 6ef5e68..2c23e1d 100755 (executable)
@@ -1,6 +1,6 @@
 /*
  * Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * 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
 
 package eu.svjatoslav.commons.network.navigation;
 
+import javax.servlet.http.HttpServletRequest;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import eu.svjatoslav.commons.network.Locale;
-import eu.svjatoslav.commons.network.LocaleConfiguration;
-
-public class Navigation<NI extends NavigationItem> {
-
-       private NI rootNavigationItem;
-
-       private NI defaultNavigationItem;
-
-       protected final LocaleConfiguration localeConfiguration;
-
-       public Navigation(final LocaleConfiguration localeConfiguration) {
-               this.localeConfiguration = localeConfiguration;
-       }
-
-       public NI getDefaultNavigationItem() {
-               return defaultNavigationItem;
-       }
-
-       private String getGetNotNullString(final String string) {
-               if (string != null)
-                       return string;
-
-               return "";
-       }
-
-       public LocaleConfiguration getLocaleConfiguration() {
-               return localeConfiguration;
-       }
-
-       public NI getRootNavigationItem() {
-               return rootNavigationItem;
-       }
 
-       public NI getSelectedItem(final HttpServletRequest request) {
-               final String requestUrl = request.getRequestURL().toString();
+public class Navigation {
 
-               try {
-                       final String requestPath = new URL(requestUrl).getPath();
+    private NavigationItem root = new NavigationItem(null, null, null);
 
-                       final NI match = (NI) rootNavigationItem
-                                       .getMatchingNavigationItem(requestPath);
+    public NavigationItem getRoot(){
+        return root;
+    }
 
-                       if (match != null)
-                               return match;
-               } catch (final MalformedURLException e) {
-                       System.out.println("Cannot handle URL: " + requestUrl);
-                       e.printStackTrace();
-               }
+    public NavigationItem getSelectedItem(final HttpServletRequest request) {
+        final String requestUrl = request.getRequestURL().toString();
 
-               return getDefaultNavigationItem();
-       }
+        final String requestPath;
+        try {
+            requestPath = new URL(requestUrl).getPath();
+        } catch (MalformedURLException e) {
+            throw new IllegalArgumentException("Illegal request URL provided." , e);
+        }
 
-       public String getTopMenu(final HttpServletRequest request) {
+        @SuppressWarnings("unchecked") final NavigationItem match = root.getMatch(requestPath);
 
-               final Locale currentLocale = localeConfiguration
-                               .detectCurrentLocale(request);
+        if (match != null)
+            return match;
 
-               final NI selectedItem = getSelectedItem(request);
-               final StringBuffer result = new StringBuffer();
+        return root.getDefaultNavigationItem();
+    }
 
-               result.append("<div class=\""
-                               + getGetNotNullString(rootNavigationItem.getCssPrefix())
-                               + "navigationMenu\">");
+    @SuppressWarnings("unchecked")
+    public String getTopMenu(final HttpServletRequest request) {
 
-               for (final NI item : (List<NI>) getRootNavigationItem()
-                               .getSubElements()) {
+        final NavigationItem selectedItem = getSelectedItem(request);
+        final StringBuilder result = new StringBuilder();
 
-                       if (item == selectedItem)
-                               result.append("<a class=\""
-                                               + getGetNotNullString(item.getCssPrefix())
-                                               + "menuItemSelected\" href=\"" + item.getLinkUrl()
-                                               + "\">");
-                       else
-                               result.append("<a class=\""
-                                               + getGetNotNullString(item.getCssPrefix())
-                                               + "menuItem\" href=\"" + item.getLinkUrl() + "\">");
+        result.append("<div class=\"navigationMenu\">");
 
-                       result.append("<div>" + item.getTitle(currentLocale) + "</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 NI setDefaultNavigationItem(final NI defaultNavigationItem) {
-               this.defaultNavigationItem = defaultNavigationItem;
-               return defaultNavigationItem;
-       }
+        result.append("</div>");
 
-       public NI setRootNavigationItem(final NI rootNavigationItem) {
-               this.rootNavigationItem = rootNavigationItem;
-               return rootNavigationItem;
-       }
+        return result.toString();
+    }
 
 }