1 31 32 package org.opencms.frontend.templateone.modules; 33 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.file.CmsResourceFilter; 37 import org.opencms.file.types.CmsResourceTypeFolder; 38 import org.opencms.file.types.I_CmsResourceType; 39 import org.opencms.frontend.templateone.CmsPropertyTemplateOne; 40 import org.opencms.frontend.templateone.CmsTemplateBase; 41 import org.opencms.jsp.CmsJspNavElement; 42 import org.opencms.main.CmsException; 43 import org.opencms.main.CmsLog; 44 import org.opencms.main.OpenCms; 45 import org.opencms.util.CmsStringUtil; 46 47 import java.util.Calendar ; 48 import java.util.Date ; 49 import java.util.GregorianCalendar ; 50 import java.util.List ; 51 52 import javax.servlet.http.HttpServletRequest ; 53 import javax.servlet.http.HttpServletResponse ; 54 import javax.servlet.jsp.PageContext ; 55 56 import org.apache.commons.logging.Log; 57 58 71 public class CmsTemplateModules extends CmsTemplateBase { 72 73 74 public static final String PARAM_CATEGORYFOLDER = "categoryfolder"; 75 76 77 public static final String PARAM_COLLECTOR = "collector"; 78 79 80 public static final String PARAM_COUNT = "count"; 81 82 83 public static final String PARAM_ELEMENTCOUNT = "elementcount"; 84 85 86 public static final String PARAM_FOLDER = "folder"; 87 88 89 private static final Log LOG = CmsLog.getLog(CmsPropertyTemplateOne.class); 90 91 private String m_categoryFolder; 92 private boolean m_hasCategoryFolders; 93 94 97 public CmsTemplateModules(PageContext context, HttpServletRequest req, HttpServletResponse res) { 98 99 super(context, req, res); 100 } 101 102 112 public String buildHtmlNavBreadcrumb(String separator) { 113 114 StringBuffer result = new StringBuffer (16); 115 String startfolder = getRequest().getParameter(PARAM_FOLDER); 117 int displayLevels = -(CmsResource.getPathLevel(getCategoryFolder()) - CmsResource.getPathLevel(startfolder) + 1); 119 List breadcrumb = getNavigation().getNavigationBreadCrumb(getCategoryFolder(), displayLevels, -1, true); 121 122 for (int i = 0, n = breadcrumb.size(); i < n; i++) { 123 CmsJspNavElement navElement = (CmsJspNavElement)breadcrumb.get(i); 124 String title = navElement.getTitle(); 126 if (CmsStringUtil.isEmptyOrWhitespaceOnly(title)) { 127 if (LOG.isWarnEnabled()) { 128 LOG.warn(Messages.get().getBundle().key( 129 Messages.LOG_ERR_MISSING_PROP_2, 130 navElement.getResourceName(), 131 CmsPropertyDefinition.PROPERTY_TITLE)); 132 } 133 title = CmsResource.getName(navElement.getResourceName()); 134 } 135 String folderUri = link(getRequestContext().getUri() 137 + "?" 138 + PARAM_CATEGORYFOLDER 139 + "=" 140 + navElement.getResourceName()); 141 142 result.append("<a HREF=\""); 144 result.append(folderUri); 145 result.append("\">"); 146 result.append(title); 147 result.append("</a>"); 148 149 if (i < (n - 1)) { 151 result.append(separator); 152 } 153 } 154 155 return result.toString(); 156 } 157 158 168 public String buildHtmlNavList(int resourceTypeId, String attrs) throws CmsException { 169 170 String startfolder = getCategoryFolder(); 172 173 if (LOG.isDebugEnabled()) { 174 LOG.debug(Messages.get().getBundle().key( 175 Messages.LOG_DEBUG_BUILD_HTML_NAVLIST_2, 176 startfolder, 177 new Integer (resourceTypeId))); 178 } 179 180 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(CmsResourceTypeFolder.RESOURCE_TYPE_ID); 182 List resourceTree = getCmsObject().readResources(startfolder, filter, true); 183 184 String indent = " "; 185 StringBuffer result = new StringBuffer (32); 186 187 if (resourceTree.size() > 0) { 188 189 result.append("<ul"); 191 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(attrs)) { 192 result.append(" ").append(attrs); 194 } 195 196 result.append(">\n"); 197 198 int indentCount = 0; 199 int startLevel = CmsResource.getPathLevel(getCmsObject().getSitePath((CmsResource)resourceTree.get(0))); 200 int lastLevel = startLevel; 201 m_hasCategoryFolders = true; 203 204 for (int i = 0, n = resourceTree.size(); i < n; i++) { 205 206 CmsResource resource = (CmsResource)resourceTree.get(i); 207 String resourceName = getCmsObject().getSitePath(resource); 208 209 if (!resource.isFolder()) { 211 continue; 212 } 213 214 int faqCount = getResourceCount(resourceName, resourceTypeId); 216 217 int level = CmsResource.getPathLevel(resourceName); 218 219 if (lastLevel < level) { 220 indentCount++; 222 } else if (lastLevel > level) { 223 indentCount--; 225 } 226 227 if (level == startLevel) { 229 if (i == 0) { 230 result.append("<li>\n"); 231 } else { 232 result.append("<br> \n"); 233 result.append("</li>\n"); 234 result.append("<li>\n"); 235 } 236 } 237 238 if (level > startLevel) { 240 result.append("<br>"); 241 } 242 243 for (int j = 0; j < indentCount; j++) { 245 result.append(indent); 246 } 247 248 String faqUri = link(getRequestContext().getUri() + "?" + PARAM_CATEGORYFOLDER + "=" + resourceName); 249 250 String title = getCmsObject().readPropertyObject( 251 resourceName, 252 CmsPropertyDefinition.PROPERTY_TITLE, 253 false).getValue(null); 254 255 if (CmsStringUtil.isEmptyOrWhitespaceOnly(title)) { 256 if (LOG.isWarnEnabled()) { 257 LOG.warn(Messages.get().getBundle().key( 258 Messages.LOG_ERR_MISSING_PROP_2, 259 resourceName, 260 CmsPropertyDefinition.PROPERTY_TITLE)); 261 } 262 title = resource.getName(); 263 } 264 265 result.append("<a HREF=\""); 267 result.append(faqUri); 268 result.append("\">"); 269 if (level == startLevel) { 270 result.append("<b>").append(title).append("</b>"); 271 } else { 272 result.append(title); 273 } 274 result.append("</a>"); 275 276 if (level == startLevel) { 278 result.append(" ("); 279 result.append(faqCount); 280 result.append(")\n"); 281 } 282 283 result.append("\n"); 284 lastLevel = level; 285 } 286 287 result.append("</li>\n"); 289 290 result.append("</ul>\n"); 292 } 293 294 return result.toString(); 295 } 296 297 307 public String buildHtmlNavList(String resourceTypeName, String attrs) throws CmsException { 308 309 I_CmsResourceType resType = OpenCms.getResourceManager().getResourceType(resourceTypeName); 310 return buildHtmlNavList(resType.getTypeId(), attrs); 311 } 312 313 321 public String getAnchor(String hrefAttrib, String descrAttrib, String targetAttrib) { 322 323 String attribHref = (String )getJspContext().getAttribute(hrefAttrib); 324 String attribDescr = (String )getJspContext().getAttribute(descrAttrib); 325 boolean openBlank = Boolean.valueOf((String )getJspContext().getAttribute(targetAttrib)).booleanValue(); 326 327 String description = attribDescr; 328 if (CmsStringUtil.isEmpty(attribDescr) || attribDescr.startsWith("???")) { 329 description = attribHref; 330 } 331 332 String href = attribHref; 333 if (!attribHref.toLowerCase().startsWith("http")) { 334 href = link(attribHref); 335 } 336 337 String target = ""; 338 if (openBlank) { 339 target = "_blank"; 340 } 341 342 StringBuffer anchor = new StringBuffer (); 343 anchor.append("<a HREF=\"").append(href).append("\""); 344 345 if (CmsStringUtil.isNotEmpty(description)) { 346 anchor.append(" title=\"").append(description).append("\""); 347 } 348 349 if (CmsStringUtil.isNotEmpty(target)) { 350 anchor.append(" target=\"").append(target).append("\""); 351 } 352 353 anchor.append(">").append(description).append("</a>"); 354 355 return anchor.toString(); 356 } 357 358 363 public String getCategoryFolder() { 364 365 if (m_categoryFolder == null) { 366 m_categoryFolder = getRequest().getParameter(PARAM_CATEGORYFOLDER); 368 if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_categoryFolder)) { 369 m_categoryFolder = getRequest().getParameter(PARAM_FOLDER); 371 } 372 } 373 return m_categoryFolder; 374 } 375 376 384 public int getResourceCount(String foldername, int resourceTypeId) { 385 386 int result = -1; 387 388 try { 389 CmsResourceFilter filter = CmsResourceFilter.DEFAULT.addRequireType(resourceTypeId); 391 List resources = getCmsObject().readResources(foldername, filter, false); 392 result = resources.size(); 393 } catch (CmsException e) { 394 if (LOG.isErrorEnabled()) { 396 LOG.error(org.opencms.db.Messages.get().getBundle().key( 397 org.opencms.db.Messages.ERR_READ_RESOURCES_WITH_TYPE_2, 398 new Integer (resourceTypeId), 399 foldername), e); 400 } 401 result = -1; 402 } 403 404 return result; 405 } 406 407 415 public int getResourceCount(String foldername, String resourceTypeName) { 416 417 try { 418 I_CmsResourceType resType = OpenCms.getResourceManager().getResourceType(resourceTypeName); 419 return getResourceCount(foldername, resType.getTypeId()); 420 } catch (CmsException e) { 421 if (LOG.isErrorEnabled()) { 423 LOG.error(org.opencms.db.Messages.get().getBundle().key( 424 org.opencms.loader.Messages.ERR_UNKNOWN_RESTYPE_NAME_REQ_1, 425 resourceTypeName), e); 426 } 427 return -1; 428 } 429 } 430 431 438 public boolean hasCategoryFolders() { 439 440 return m_hasCategoryFolders; 441 } 442 443 450 public boolean isSameDate(String startDateAttrib, String endDateAttrib) { 451 452 String timeString = (String )getJspContext().getAttribute(startDateAttrib); 453 long timestamp = (new Long (timeString)).longValue(); 454 Calendar calStart = new GregorianCalendar (); 455 calStart.setTimeInMillis(timestamp); 456 457 timeString = (String )getJspContext().getAttribute(endDateAttrib); 458 timestamp = (new Long (timeString)).longValue(); 459 Calendar calEnd = new GregorianCalendar (); 460 calEnd.setTimeInMillis(timestamp); 461 462 return ((calStart.get(Calendar.DAY_OF_YEAR) == calEnd.get(Calendar.DAY_OF_YEAR)) && (calStart.get(Calendar.YEAR) == calEnd.get(Calendar.YEAR))); 463 } 464 465 471 public void setDate(String dateAttrib) { 472 473 String timeString = (String )getJspContext().getAttribute(dateAttrib); 474 long timestamp = (new Long (timeString)).longValue(); 475 Date date = new Date (timestamp); 476 getJspContext().setAttribute("date", date); 477 } 478 479 486 public boolean showNavBreadCrumb() { 487 488 return hasCategoryFolders() || !getRequest().getParameter(PARAM_FOLDER).equals(getCategoryFolder()); 489 } 490 } | Popular Tags |