1 24 package org.riotfamily.pages; 25 26 import java.util.ArrayList ; 27 import java.util.Collection ; 28 import java.util.Collections ; 29 import java.util.HashSet ; 30 import java.util.Iterator ; 31 import java.util.LinkedList ; 32 import java.util.List ; 33 import java.util.Locale ; 34 import java.util.Set ; 35 36 import org.springframework.util.ObjectUtils; 37 38 43 public class PageNode { 44 45 private Long id; 46 47 private PageNode parent; 48 49 private Site site; 50 51 private List childNodes; 52 53 private Set pages; 54 55 private String handlerName; 56 57 private boolean systemNode; 58 59 private String childHandlerName; 60 61 private boolean hidden; 62 63 public PageNode() { 64 } 65 66 public PageNode(Page page) { 67 addPage(page); 68 } 69 70 public Long getId() { 71 return id; 72 } 73 74 public void setId(Long id) { 75 this.id = id; 76 } 77 78 public PageNode getParent() { 79 return this.parent; 80 } 81 82 public void setParent(PageNode parent) { 83 this.parent = parent; 84 } 85 86 public Site getSite() { 87 return this.site; 88 } 89 90 public void setSite(Site site) { 91 this.site = site; 92 } 93 94 public Set getPages() { 95 return pages; 96 } 97 98 public void setPages(Set pages) { 99 this.pages = pages; 100 } 101 102 public void setChildNodes(List childNodes) { 103 this.childNodes = childNodes; 104 } 105 106 110 public void addChildNode(PageNode node) { 111 node.setParent(this); 112 node.setSite(site); 113 if (node.getHandlerName() == null) { 114 node.setHandlerName(childHandlerName); 115 } 116 if (node.getChildHandlerName() == null) { 117 node.setChildHandlerName(childHandlerName); 118 } 119 if (childNodes == null) { 120 childNodes = new ArrayList (); 121 } 122 childNodes.add(node); 123 } 124 125 public List getChildNodes() { 126 return this.childNodes; 127 } 128 129 public Collection getChildPages(Locale locale) { 130 LinkedList pages = new LinkedList (); 131 if (childNodes != null) { 132 Iterator it = childNodes.iterator(); 133 while (it.hasNext()) { 134 PageNode childNode = (PageNode) it.next(); 135 Page page = childNode.getPage(locale); 136 if (page != null) { 137 pages.add(page); 138 } 139 } 140 } 141 return Collections.unmodifiableCollection(pages); 142 } 143 144 public Collection getChildPages(Locale locale, Locale fallback) { 145 LinkedList pages = new LinkedList (); 146 if (childNodes != null) { 147 Iterator it = childNodes.iterator(); 148 while (it.hasNext()) { 149 PageNode childNode = (PageNode) it.next(); 150 Page page = childNode.getPage(locale); 151 if (page == null) { 152 page = fallback != null 153 ? childNode.getPage(fallback) 154 : childNode.getFirstPage(); 155 } 156 if (page != null) { 157 pages.add(page); 158 } 159 } 160 } 161 return Collections.unmodifiableCollection(pages); 162 } 163 164 public Page getPage(Locale locale) { 165 if (pages == null) { 166 return null; 167 } 168 Iterator it = pages.iterator(); 169 while (it.hasNext()) { 170 Page page = (Page) it.next(); 171 if (ObjectUtils.nullSafeEquals(page.getLocale(), locale)) { 172 return page; 173 } 174 } 175 return null; 176 } 177 178 private Page getFirstPage() { 179 return (Page) pages.iterator().next(); 180 } 181 182 public void addPage(Page page) { 183 page.setNode(this); 184 if (pages == null) { 185 pages = new HashSet (); 186 } 187 pages.add(page); 188 } 189 190 public void removePage(Page page) { 191 pages.remove(page); 192 } 193 194 public boolean hasPages() { 195 return !pages.isEmpty(); 196 } 197 198 201 public String getHandlerName() { 202 return handlerName; 203 } 204 205 public void setHandlerName(String handlerName) { 206 this.handlerName = handlerName; 207 } 208 209 213 public String getChildHandlerName() { 214 return this.childHandlerName; 215 } 216 217 public void setChildHandlerName(String childHandlerName) { 218 this.childHandlerName = childHandlerName; 219 } 220 221 224 public boolean isHidden() { 225 return this.hidden; 226 } 227 228 public void setHidden(boolean hidden) { 229 this.hidden = hidden; 230 } 231 232 237 public boolean isSystemNode() { 238 return this.systemNode; 239 } 240 241 public void setSystemNode(boolean systemNode) { 242 this.systemNode = systemNode; 243 } 244 245 } 246 | Popular Tags |