1 package eu.svjatoslav.commons.network.navigation;
3 import java.util.ArrayList;
4 import java.util.HashMap;
8 import eu.svjatoslav.commons.network.Locale;
9 import eu.svjatoslav.commons.string.WildCardMatcher;
11 public class NavigationItem {
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;
20 public NavigationItem(final Locale... localeOrder) {
21 this.localeOrder = localeOrder;
22 matchingWildcard = null;
26 public NavigationItem(final NavigationItem parent, final String linkUrl,
27 final String... titles) {
29 this.linkUrl = linkUrl;
30 matchingWildcard = linkUrl;
32 initializeLocalizedTitles(titles);
35 public NavigationItem addChild(final String linkUrl, final String... titles) {
37 final NavigationItem item = new NavigationItem(this, linkUrl, titles);
38 subElements.add(item);
43 public String getLinkUrl() {
47 public Locale[] getLocaleOrder() {
48 if (localeOrder != null)
51 return parent.getLocaleOrder();
54 public List<NavigationItem> getSubElements() {
58 public String getTitle() {
59 if (localeToTitle.size() != 1)
60 throw new RuntimeException("there shall be exactly one title");
62 return localeToTitle.values().iterator().next();
65 public String getTitle(final Locale locale) {
66 return localeToTitle.get(locale);
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).");
75 for (int i = 0; i < titles.length; i++)
76 localeToTitle.put(locales[i], titles[i]);
79 public boolean matchesUrl(final String url) {
80 return WildCardMatcher.match(url, matchingWildcard);