package fitnesse.html.template; import fitnesse.wiki.PathParser; import fitnesse.wiki.WikiPagePath; import java.util.ArrayList; import java.util.List; import java.util.Collections; public class PageTitle { private String title; private String link; private List<BreadCrumb> breadCrumbs = new ArrayList<>(); private String pageType; private String pageTags; public PageTitle(WikiPagePath pagePath) { pagePath = pagePath.copy(); List<String> names = pagePath.getNames(); link = PathParser.render(pagePath); if (!names.isEmpty()) { title = names.get(names.size() - 1); pagePath.removeNameFromEnd(); while (!pagePath.getNames().isEmpty()) { names = pagePath.getNames(); BreadCrumb crumb = new BreadCrumb(names.get(names.size() - 1), PathParser.render(pagePath)); breadCrumbs.add(crumb); pagePath.removeNameFromEnd(); } Collections.reverse(breadCrumbs); } else { title = "root"; } } public PageTitle() { } public PageTitle(String pageType) { this.setPageType(pageType); this.title = pageType; } public PageTitle(String pageType, WikiPagePath wikiPagePath) { this(wikiPagePath); this.setPageType(pageType); } public PageTitle(String pageType, WikiPagePath wikiPagePath, String pageTags) { this(wikiPagePath); this.setPageType(pageType); this.setPageTags(pageTags); } public PageTitle(String path, String separator) { String[] crumbs = path.split(separator); String crumb; StringBuilder trail = new StringBuilder(64); for (int i = 0; i < crumbs.length - 1; i++) { crumb = crumbs[i]; breadCrumbs.add(new BreadCrumb(crumb, trail + crumb)); trail.append(crumb).append(separator); } if (crumbs.length > 0) { crumb = crumbs[crumbs.length - 1]; title = crumb; link = trail + crumb; } } public PageTitle(String pageType, String path, String separator) { this(path, separator); this.setPageType(pageType); } public PageTitle(String pageType, String path, String separator, String pageTags) { this(path, separator); this.setPageType(pageType); this.setPageTags(pageTags); } public PageTitle notLinked() { link = null; return this; } public String getTitle() { return title; } public String getLink() { return link; } public List<BreadCrumb> getBreadCrumbs() { return breadCrumbs; } public String getPageType() { return pageType; } public void setPageType(String pageType) { this.pageType = pageType; } public String getPageTags() { return pageTags; } public void setPageTags(String pageTags) { if(pageTags == null || "".equals(pageTags)) return; this.pageTags = pageTags; } public String[] getPageTagsArray() { return pageTags != null ? pageTags.trim().split("\\s*,\\s*") : new String[] {}; } public class BreadCrumb { private String name; private String link; public BreadCrumb(String name, String link) { this.name = name; this.link = link; } public String getName() { return name; } public String getLink() { return link; } } }