X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=svjatoslav_commons.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fcommons%2Fnetwork%2Fnavigation%2FNavigationItem.java;h=0359440a0a2489f56390e3d2a6fd2da3ea22edb3;hp=0edc44e800b6f90ac043fc3d8c983040164bb41b;hb=f7500732a4ba759bebc5680d0027ae903312a7c9;hpb=3fea835d27c37142574f6640fca663522b2162c0 diff --git a/src/main/java/eu/svjatoslav/commons/network/navigation/NavigationItem.java b/src/main/java/eu/svjatoslav/commons/network/navigation/NavigationItem.java index 0edc44e..0359440 100755 --- a/src/main/java/eu/svjatoslav/commons/network/navigation/NavigationItem.java +++ b/src/main/java/eu/svjatoslav/commons/network/navigation/NavigationItem.java @@ -12,73 +12,45 @@ package eu.svjatoslav.commons.network.navigation; import eu.svjatoslav.commons.string.WildCardMatcher; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class NavigationItem { - private final Map localeToTitle = new HashMap<>(); - private final ArrayList subElements = new ArrayList<>(); - private final NavigationItem parent; - private final Navigation navigation; - private final String linkUrl; - private String matchingPattern; - /** - * CSS prefix is inherited to child menu items. - */ - private String cssPrefix; - - /** - * Used to build root navigation item. - */ - public NavigationItem(final Navigation navigation) { - this.navigation = navigation; - parent = null; - matchingPattern = null; - linkUrl = null; - } - - public NavigationItem(final NavigationItem parent, final String linkUrl, final String... titles) { - - navigation = parent.getNavigation(); - this.parent = parent; - this.linkUrl = linkUrl; - matchingPattern = linkUrl; + private final ArrayList children = new ArrayList<>(); + private final String url; + private String pattern; + private String title; + private boolean isDefault; - initializeLocalizedTitles(titles); - - parent.addNavigationItem(this); + public NavigationItem(final String url, String pattern, String title ) { + this.url = url; + this.pattern = pattern; + this.title = title; } - public void addNavigationItem(final NavigationItem navigationItem) { - subElements.add(navigationItem); + public NavigationItem setDefault(){ + isDefault = true; + return this; } - protected String getCssPrefix() { - if (cssPrefix != null) - return cssPrefix; - - if (parent == null) - return null; - - return parent.getCssPrefix(); + public boolean isDefault(){ + return isDefault; } - public void setCssPrefix(final String cssPrefix) { - this.cssPrefix = cssPrefix; + public void add(final NavigationItem navigationItem) { + children.add(navigationItem); } - public String getLinkUrl() { - return linkUrl; + public String getUrl() { + return url; } - NavigationItem getMatchingNavigationItem(final String requestPath) { + NavigationItem getMatch(final String requestPath) { if (matchesUrl(requestPath)) return this; - for (final NavigationItem childNavigationItem : subElements) { - final NavigationItem match = childNavigationItem.getMatchingNavigationItem(requestPath); + for (final NavigationItem childNavigationItem : children) { + final NavigationItem match = childNavigationItem.getMatch(requestPath); if (match != null) return match; @@ -86,41 +58,22 @@ public class NavigationItem { return null; } - public Navigation getNavigation() { - return navigation; - } - - public List getSubElements() { - return subElements; + public List getChildren() { + return children; } - public String getTitle(final String locale) { - return localeToTitle.get(locale); - } - - private void initializeLocalizedTitles(final String... titles) { - final List locales = getNavigation().getLocaleConfiguration().getAllowedLocales(); - if (locales.size() != titles.length) - throw new RuntimeException("There should be exactly " + locales.size() + " title(s)."); - - for (int i = 0; i < titles.length; i++) - localeToTitle.put(locales.get(i), titles[i]); + public String getTitle() { + return title; } public boolean matchesUrl(final String url) { - return WildCardMatcher.match(url, matchingPattern); - } - - public NavigationItem setPattern(final String pattern) { - matchingPattern = pattern; - return this; + return WildCardMatcher.match(url, pattern); } - @Override - public String toString() { - return "NavigationItem [matchingPattern=" + matchingPattern + ", localeToTitle=" + localeToTitle - + ", subElements count=" + subElements.size() + ", linkUrl=" + linkUrl + ", cssPrefix=" + cssPrefix - + "]"; + public NavigationItem getDefaultNavigationItem() { + for (NavigationItem child : children) + if (child.isDefault()) + return child; + return null; } - }