fixed constructor
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / NavigationItem.java
index 6392fa9..d5eeb80 100755 (executable)
@@ -1,37 +1,58 @@
 package eu.svjatoslav.commons.network.navigation;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import eu.svjatoslav.commons.network.Locale;
 import eu.svjatoslav.commons.string.WildCardMatcher;
 
 public class NavigationItem {
 
-       private final String title;
-       private final String link;
        private final String matchingWildcard;
-
+       private final Map<Locale, String> localeToTitle = new HashMap<Locale, String>();
        ArrayList<NavigationItem> subElements = new ArrayList<NavigationItem>();
+       private Locale[] localeOrder;
+       private NavigationItem parent;
+       private final String linkUrl;
+
+       public NavigationItem() {
+               this(Locale.ENG);
+       }
 
-       public NavigationItem(final String title, final String link) {
-               this.title = title;
-               this.link = link;
-               matchingWildcard = link;
+       public NavigationItem(final Locale... localeOrder) {
+               this.localeOrder = localeOrder;
+               matchingWildcard = null;
+               linkUrl = null;
        }
 
-       public NavigationItem(final String title, final String link,
-                       final String wildcard) {
-               this.title = title;
-               this.link = link;
-               matchingWildcard = wildcard;
+       public NavigationItem(final NavigationItem parent, final String linkUrl,
+                       final String... titles) {
+               this.parent = parent;
+               this.linkUrl = linkUrl;
+               matchingWildcard = linkUrl;
+
+               initializeLocalizedTitles(titles);
        }
 
-       public void addSubNavigation(final NavigationItem item) {
+       public NavigationItem addChild(final String linkUrl, final String... titles) {
+
+               final NavigationItem item = new NavigationItem(this, linkUrl, titles);
                subElements.add(item);
+
+               return item;
+       }
+
+       public String getLinkUrl() {
+               return linkUrl;
        }
 
-       public String getLink() {
-               return link;
+       public Locale[] getLocaleOrder() {
+               if (localeOrder != null)
+                       return localeOrder;
+
+               return parent.getLocaleOrder();
        }
 
        public List<NavigationItem> getSubElements() {
@@ -39,11 +60,27 @@ public class NavigationItem {
        }
 
        public String getTitle() {
-               return title;
+               if (localeToTitle.size() != 1)
+                       throw new RuntimeException("there shall be exactly one title");
+
+               return localeToTitle.values().iterator().next();
        }
 
-       public boolean matchesUrl(final String url) {
+       public String getTitle(final Locale locale) {
+               return localeToTitle.get(locale);
+       }
 
+       private void initializeLocalizedTitles(final String... titles) {
+               final Locale[] locales = getLocaleOrder();
+               if (locales.length != titles.length)
+                       throw new RuntimeException("There should be exactly "
+                                       + locales.length + " title(s).");
+
+               for (int i = 0; i < titles.length; i++)
+                       localeToTitle.put(locales[i], titles[i]);
+       }
+
+       public boolean matchesUrl(final String url) {
                return WildCardMatcher.match(url, matchingWildcard);
 
        }