improved navigation
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / Navigation.java
index 5e605ab..2c5aa27 100755 (executable)
@@ -11,25 +11,25 @@ package eu.svjatoslav.commons.network.navigation;
 
 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 {
+public class Navigation<NI extends NavigationItem> {
 
-       private NavigationItem rootNavigationItem;
+       private NI rootNavigationItem;
 
-       private NavigationItem defaultNavigationItem;
+       private NI defaultNavigationItem;
 
-       private final LocaleConfiguration localeConfiguration;
+       protected final LocaleConfiguration localeConfiguration;
 
        public Navigation(final LocaleConfiguration localeConfiguration) {
                this.localeConfiguration = localeConfiguration;
        }
 
-       public NavigationItem getDefaultNavigationItem() {
+       public NI getDefaultNavigationItem() {
                return defaultNavigationItem;
        }
 
@@ -44,18 +44,18 @@ public class Navigation {
                return localeConfiguration;
        }
 
-       public NavigationItem getRootNavigationItem() {
+       public NI getRootNavigationItem() {
                return rootNavigationItem;
        }
 
-       public NavigationItem getSelectedItem(final HttpServletRequest request) {
+       public NI getSelectedItem(final HttpServletRequest request) {
                final String requestUrl = request.getRequestURL().toString();
 
                try {
                        final String requestPath = new URL(requestUrl).getPath();
 
-                       final NavigationItem match = rootNavigationItem
-                                       .getMatchingNavigationItem(requestPath);
+                       @SuppressWarnings("unchecked")
+                       final NI match = (NI) rootNavigationItem.getMatchingNavigationItem(requestPath);
 
                        if (match != null)
                                return match;
@@ -67,30 +67,24 @@ public class Navigation {
                return getDefaultNavigationItem();
        }
 
+       @SuppressWarnings("unchecked")
        public String getTopMenu(final HttpServletRequest request) {
 
-               final Locale currentLocale = localeConfiguration
-                               .detectCurrentLocale(request);
+               final String currentLocale = localeConfiguration.detectCurrentLocale(request);
 
-               final NavigationItem selectedItem = getSelectedItem(request);
+               final NI selectedItem = getSelectedItem(request);
                final StringBuffer result = new StringBuffer();
 
-               result.append("<div class=\""
-                               + getGetNotNullString(rootNavigationItem.getCssPrefix())
-                               + "navigationMenu\">");
+               result.append("<div class=\"" + getGetNotNullString(rootNavigationItem.getCssPrefix()) + "navigationMenu\">");
 
-               for (final NavigationItem item : getRootNavigationItem()
-                               .getSubElements()) {
+               for (final NI item : (List<NI>) getRootNavigationItem().getSubElements()) {
 
                        if (item == selectedItem)
-                               result.append("<a class=\""
-                                               + getGetNotNullString(item.getCssPrefix())
-                                               + "menuItemSelected\" href=\"" + item.getLinkUrl()
-                                               + "\">");
+                               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("<a class=\"" + getGetNotNullString(item.getCssPrefix()) + "menuItem\" href=\""
+                                               + item.getLinkUrl() + "\">");
 
                        result.append("<div>" + item.getTitle(currentLocale) + "</div>");
                        result.append("</a>");
@@ -101,14 +95,12 @@ public class Navigation {
                return result.toString();
        }
 
-       public NavigationItem setDefaultNavigationItem(
-                       final NavigationItem defaultNavigationItem) {
+       public NI setDefaultNavigationItem(final NI defaultNavigationItem) {
                this.defaultNavigationItem = defaultNavigationItem;
                return defaultNavigationItem;
        }
 
-       public NavigationItem setRootNavigationItem(
-                       final NavigationItem rootNavigationItem) {
+       public NI setRootNavigationItem(final NI rootNavigationItem) {
                this.rootNavigationItem = rootNavigationItem;
                return rootNavigationItem;
        }