1 22 23 package org.meshcms.core; 24 25 import java.util.*; 26 import org.meshcms.util.*; 27 28 31 public class SiteMapIterator implements Iterator { 32 private boolean skipHiddenSubPages; 33 34 private SiteMap siteMap; 35 private SiteInfo siteInfo; 36 private Iterator iter; 37 private PageInfo nextPage; 38 private boolean nextPageChecked; 39 40 43 public SiteMapIterator(WebSite webSite) { 44 this(webSite, Path.ROOT); 45 } 46 47 51 public SiteMapIterator(WebSite webSite, Path root) { 52 siteMap = webSite.getSiteMap(); 53 siteInfo = webSite.getSiteInfo(); 54 iter = siteMap.getPagesList(root).iterator(); 55 } 56 57 public boolean hasNext() { 58 return findNextPage(); 59 } 60 61 public Object next() { 62 if (!findNextPage()) { 63 throw new NoSuchElementException(); 64 } 65 66 return getNextPage(); 67 } 68 69 public void remove() { 70 throw new UnsupportedOperationException ("Site map is readonly"); 71 } 72 73 77 public PageInfo getNextPage() { 78 findNextPage(); 79 nextPageChecked = false; 80 return nextPage; 81 } 82 83 private boolean findNextPage() { 84 if (!nextPageChecked) { 85 if (skipHiddenSubPages && nextPage != null && 86 siteInfo.getHideSubmenu(nextPage.getPath())) { 87 int level = nextPage.getLevel(); 88 nextPage = null; 89 90 while (nextPage == null && iter.hasNext()) { 91 nextPage = (PageInfo) iter.next(); 92 93 if (nextPage.getLevel() > level) { 94 nextPage = null; 95 } 96 } 97 } else { 98 if (iter.hasNext()) { 99 nextPage = (PageInfo) iter.next(); 100 } else { 101 nextPage = null; 102 } 103 } 104 105 nextPageChecked = true; 106 } 107 108 return nextPage != null; 109 } 110 111 public boolean isSkipHiddenSubPages() { 112 return skipHiddenSubPages; 113 } 114 115 public void setSkipHiddenSubPages(boolean skipHiddenSubPages) { 116 this.skipHiddenSubPages = skipHiddenSubPages; 117 } 118 } 119 | Popular Tags |