1 22 23 package org.meshcms.core; 24 25 import java.util.*; 26 import org.meshcms.util.*; 27 28 31 public class SiteInfo { 32 35 public static final String TITLE = "title"; 36 37 40 public static final String SCORE = "score"; 41 42 45 public static final String THEME = "theme"; 46 47 50 public static final String HIDESUBMENU = "hideSubmenu"; 51 52 private Properties data; 53 private transient WebSite webSite; 54 55 protected SiteInfo() { 56 data = new Properties(); 57 } 58 59 64 public static SiteInfo load(WebSite webSite) { 65 SiteInfo siteInfo = (SiteInfo) 66 webSite.loadFromXML(webSite.getPropertiesFilePath()); 67 68 if (siteInfo == null) { 69 siteInfo = new SiteInfo(); 70 siteInfo.setWebSite(webSite); 71 } else { 72 siteInfo.setWebSite(webSite); 73 } 74 75 return siteInfo; 76 } 77 78 83 public boolean store() { 84 return webSite.storeToXML(this, webSite.getPropertiesFilePath()); 85 } 86 87 90 public String getPageTheme(Path pagePath) { 91 return Utils.noNull(data.getProperty(getThemeCode(pagePath))); 92 } 93 94 98 public void setPageTheme(Path pagePath, String theme) { 99 if (Utils.isNullOrEmpty(theme)) { 100 data.remove(getThemeCode(pagePath)); 101 } else { 102 data.setProperty(getThemeCode(pagePath), theme); 103 } 104 } 105 106 110 public String getPageTitle(PageInfo pageInfo) { 111 String customTitle = getPageTitle(pageInfo.getPath()); 112 113 if (Utils.isNullOrEmpty(customTitle)) { 114 customTitle = pageInfo.getTitle(); 115 } 116 117 return customTitle; 118 } 119 120 123 public String getPageTitle(Path pagePath) { 124 return Utils.noNull(data.getProperty(getTitleCode(pagePath))); 125 } 126 127 131 public void setPageTitle(Path pagePath, String title) { 132 if (Utils.isNullOrEmpty(title)) { 133 data.remove(getTitleCode(pagePath)); 134 } else { 135 data.setProperty(getTitleCode(pagePath), title); 136 } 137 } 138 139 142 public int getPageScore(Path pagePath) { 143 return Utils.parseInt(data.getProperty(getScoreCode(pagePath)), 0); 144 } 145 146 150 public String getPageScoreAsString(Path pagePath) { 151 int score = getPageScore(pagePath); 152 return score == 0 ? "" : Integer.toString(score); 153 } 154 155 158 public void setPageScore(Path pagePath, String score) { 159 setPageScore(pagePath, Utils.parseInt(score, 0)); 160 } 161 162 166 public void setPageScore(Path pagePath, int score) { 167 if (score == 0) { 168 data.remove(getScoreCode(pagePath)); 169 } else { 170 data.setProperty(getScoreCode(pagePath), Integer.toString(score)); 171 } 172 } 173 174 177 public boolean getHideSubmenu(Path pagePath) { 178 return Utils.isTrue(data.getProperty(getHideSubmenuCode(pagePath))); 179 } 180 181 185 public String getHideSubmenuAsString(Path pagePath) { 186 boolean hide = getHideSubmenu(pagePath); 187 return hide == false ? "" : Boolean.toString(hide); 188 } 189 190 193 public void setHideSubmenu(Path pagePath, String hide) { 194 setHideSubmenu(pagePath, Utils.isTrue(hide)); 195 } 196 197 201 public void setHideSubmenu(Path pagePath, boolean hide) { 202 if (hide == false) { 203 data.remove(getHideSubmenuCode(pagePath)); 204 } else { 205 data.setProperty(getHideSubmenuCode(pagePath), Boolean.toString(hide)); 206 } 207 } 208 209 213 public static String getScoreCode(Path pagePath) { 214 return SCORE + WebUtils.getMenuCode(pagePath); 215 } 216 217 221 public static String getTitleCode(Path pagePath) { 222 return TITLE + WebUtils.getMenuCode(pagePath); 223 } 224 225 229 public static String getThemeCode(Path pagePath) { 230 return THEME + WebUtils.getMenuCode(pagePath); 231 } 232 233 237 public static String getHideSubmenuCode(Path pagePath) { 238 return HIDESUBMENU + WebUtils.getMenuCode(pagePath); 239 } 240 241 248 public boolean setValue(String fieldName, String value) { 249 if (fieldName == null) { 250 return false; 251 } 252 253 if (value != null) { 254 value = value.trim(); 255 } 256 257 if (fieldName.startsWith(TITLE)) { 258 if (Utils.isNullOrEmpty(value)) { 259 data.remove(fieldName); 260 } else { 261 data.setProperty(fieldName, Utils.encodeHTML(value)); 262 } 263 264 return true; 265 } 266 267 if (fieldName.startsWith(THEME)) { 268 if (Utils.isNullOrEmpty(value)) { 269 data.remove(fieldName); 270 } else { 271 data.setProperty(fieldName, value); 272 } 273 274 return true; 275 } 276 277 if (fieldName.startsWith(SCORE)) { 278 int n = Utils.parseInt(value, 0); 279 280 if (n == 0) { 281 data.remove(fieldName); 282 } else { 283 data.setProperty(fieldName, value); 284 } 285 286 return true; 287 } 288 289 if (fieldName.startsWith(HIDESUBMENU)) { 290 boolean b = Utils.isTrue(value); 291 292 if (b == false) { 293 data.remove(fieldName); 294 } else { 295 data.setProperty(fieldName, "true"); 296 } 297 298 return true; 299 } 300 301 return false; 302 } 303 304 protected Path getThemePath(Path pagePath) { 305 do { 306 String theme = getPageTheme(pagePath); 307 308 if (!Utils.isNullOrEmpty(theme)) { 309 if (theme.equals(PageAssembler.EMPTY)) { 310 return null; 311 } 312 313 Path themePath = (Path) webSite.getSiteMap().getThemesMap().get(theme); 314 315 if (themePath != null) { 316 return themePath; 317 } 318 } 319 320 pagePath = pagePath.getParent(); 321 } while (!pagePath.isRelative()); 322 323 return null; 324 } 325 326 329 public Path getThemeRoot(Path pagePath) { 330 do { 331 String theme = getPageTheme(pagePath); 332 333 if (!Utils.isNullOrEmpty(theme)) { 334 if (webSite.getSiteMap().getThemesMap().get(theme) != null) { 335 return pagePath; 336 } 337 } 338 339 pagePath = pagePath.getParent(); 340 } while (!pagePath.isRelative()); 341 342 return null; 343 } 344 345 public WebSite getWebSite() { 346 return webSite; 347 } 348 349 public void setWebSite(WebSite webSite) { 350 this.webSite = webSite; 351 } 352 353 361 protected boolean cleanupSiteInfo() { 362 boolean success = true; 363 SiteInfo newSiteInfo = new SiteInfo(); 364 newSiteInfo.setWebSite(webSite); 365 List pagesList = webSite.getSiteMap().getPagesList(); 366 367 if (pagesList != null) { 368 Iterator iter = pagesList.iterator(); 369 370 while (iter.hasNext()) { 371 Path pagePath = ((PageInfo) iter.next()).getPath(); 372 newSiteInfo.setPageTitle(pagePath, getPageTitle(pagePath)); 373 newSiteInfo.setPageTheme(pagePath, getPageTheme(pagePath)); 374 newSiteInfo.setPageScore(pagePath, getPageScore(pagePath)); 375 newSiteInfo.setHideSubmenu(pagePath, getHideSubmenu(pagePath)); 376 } 377 378 if (this.data.size() != newSiteInfo.data.size()) { 379 success = newSiteInfo.store(); 380 webSite.setSiteInfo(newSiteInfo); 381 } 382 } 383 384 return success; 385 } 386 } 387 | Popular Tags |