constructor tweak
[svjatoslav_commons.git] / src / main / java / eu / svjatoslav / commons / network / navigation / NavigationItem.java
1 package eu.svjatoslav.commons.network.navigation;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import eu.svjatoslav.commons.network.Locale;
9 import eu.svjatoslav.commons.string.WildCardMatcher;
10
11 public class NavigationItem {
12
13         private final String matchingWildcard;
14         private final Map<Locale, String> localeToTitle = new HashMap<Locale, String>();
15         ArrayList<NavigationItem> subElements = new ArrayList<NavigationItem>();
16         private Locale[] localeOrder;
17         private NavigationItem parent;
18         private final String linkUrl;
19
20         public NavigationItem(final Locale... localeOrder) {
21                 this.localeOrder = localeOrder;
22                 matchingWildcard = null;
23                 linkUrl = null;
24         }
25
26         public NavigationItem(final NavigationItem parent, final String linkUrl,
27                         final String... titles) {
28                 this.parent = parent;
29                 this.linkUrl = linkUrl;
30                 matchingWildcard = linkUrl;
31
32                 initializeLocalizedTitles(titles);
33         }
34
35         public NavigationItem addChild(final String linkUrl, final String... titles) {
36
37                 final NavigationItem item = new NavigationItem(this, linkUrl, titles);
38                 subElements.add(item);
39
40                 return item;
41         }
42
43         public String getLinkUrl() {
44                 return linkUrl;
45         }
46
47         public Locale[] getLocaleOrder() {
48                 if (localeOrder != null)
49                         return localeOrder;
50
51                 return parent.getLocaleOrder();
52         }
53
54         public List<NavigationItem> getSubElements() {
55                 return subElements;
56         }
57
58         public String getTitle() {
59                 if (localeToTitle.size() != 1)
60                         throw new RuntimeException("there shall be exactly one title");
61
62                 return localeToTitle.values().iterator().next();
63         }
64
65         public String getTitle(final Locale locale) {
66                 return localeToTitle.get(locale);
67         }
68
69         private void initializeLocalizedTitles(final String... titles) {
70                 final Locale[] locales = getLocaleOrder();
71                 if (locales.length != titles.length)
72                         throw new RuntimeException("There should be exactly "
73                                         + locales.length + " title(s).");
74
75                 for (int i = 0; i < titles.length; i++)
76                         localeToTitle.put(locales[i], titles[i]);
77         }
78
79         public boolean matchesUrl(final String url) {
80                 return WildCardMatcher.match(url, matchingWildcard);
81
82         }
83
84 }