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