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 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 if (localeOrder.length == 0)
22 this.localeOrder = new Locale[] { Locale.ENG };
24 this.localeOrder = localeOrder;
26 matchingWildcard = null;
30 public NavigationItem(final NavigationItem parent, final String linkUrl,
31 final String... titles) {
33 this.linkUrl = linkUrl;
35 initializeLocalizedTitles(titles);
38 public NavigationItem addChild(final String linkUrl, final String... titles) {
40 final NavigationItem item = new NavigationItem(this, linkUrl, titles);
41 subElements.add(item);
46 public String getLinkUrl() {
50 public Locale[] getLocaleOrder() {
51 if (localeOrder != null)
54 return parent.getLocaleOrder();
57 public List<NavigationItem> getSubElements() {
61 public String getTitle() {
62 if (localeToTitle.size() != 1)
63 throw new RuntimeException("there shall be exactly one title");
65 return localeToTitle.values().iterator().next();
68 public String getTitle(final Locale locale) {
69 return localeToTitle.get(locale);
72 private void initializeLocalizedTitles(final String... titles) {
73 final Locale[] locales = getLocaleOrder();
74 if (locales.length != titles.length)
75 throw new RuntimeException("There should be exactly "
76 + locales.length + " title(s).");
78 for (int i = 0; i < titles.length; i++)
79 localeToTitle.put(locales[i], titles[i]);
82 public boolean matchesUrl(final String url) {
83 return WildCardMatcher.match(url, matchingWildcard);