1 31 32 package org.opencms.frontend.templateone; 33 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.i18n.CmsEncoder; 37 import org.opencms.i18n.CmsLocaleManager; 38 import org.opencms.main.CmsException; 39 import org.opencms.search.CmsSearch; 40 import org.opencms.search.CmsSearchResult; 41 import org.opencms.search.Messages; 42 import org.opencms.util.CmsStringUtil; 43 import org.opencms.workplace.CmsWorkplace; 44 45 import java.util.ArrayList ; 46 import java.util.Iterator ; 47 import java.util.List ; 48 import java.util.Map ; 49 50 import javax.servlet.http.HttpServletRequest ; 51 import javax.servlet.http.HttpServletResponse ; 52 import javax.servlet.jsp.JspException ; 53 import javax.servlet.jsp.PageContext ; 54 55 64 public class CmsTemplateSearch extends CmsTemplateBean { 65 66 67 public static final String PARAM_SEARCHALL = "entire"; 68 69 70 private String m_pageUri; 71 72 73 private boolean m_searchAll; 74 75 78 public CmsTemplateSearch() { 79 80 super(); 81 } 82 83 92 public CmsTemplateSearch(PageContext context, HttpServletRequest req, HttpServletResponse res) { 93 94 super(); 95 init(context, req, res); 96 } 97 98 107 public String buildSearchErrorMessages(CmsSearch search, List results) { 108 109 StringBuffer result = new StringBuffer (32); 110 if (search.getLastException() != null) { 111 String errorMessage = ""; 113 if (((CmsException)search.getLastException()).getMessageContainer().getKey().equals( 114 Messages.ERR_QUERY_TOO_SHORT_1)) { 115 errorMessage = key("search.error.wordlength"); 117 } else { 118 errorMessage = key("search.error.details"); 120 } 121 result.append("<h3>"); 122 result.append(key("search.error")); 123 result.append("</h3>\n"); 124 result.append("<p>"); 125 result.append(errorMessage); 126 result.append("</p>\n"); 127 result.append("<!-- Exception message: "); 128 result.append(search.getLastException().toString()); 129 result.append("// -->\n"); 130 } else if (results == null || results.size() == 0) { 131 result.append("<h3>"); 133 result.append(key("search.error.nomatch")); 134 result.append("</h3>\n"); 135 } 136 return result.toString(); 137 } 138 139 144 public String buildSearchHeadline() { 145 146 StringBuffer result = new StringBuffer (32); 147 result.append(key("search.headline")); 148 if (!isSearchAll() && !"/".equals(getStartFolder())) { 149 result.append(key("search.headline.area")); 150 result.append(getAreaName()); 151 } else { 152 result.append(key("search.headline.all")); 153 } 154 return result.toString(); 155 } 156 157 163 public String buildSearchLinks(CmsSearch search) { 164 165 StringBuffer result = new StringBuffer (32); 166 boolean showPageLinks = false; 167 StringBuffer additionalParams = new StringBuffer (16); 169 if (search.getPreviousUrl() != null || search.getNextUrl() != null) { 170 showPageLinks = true; 172 result.append("<div class=\"searchlinks\">\n"); 173 additionalParams.append("&uri="); 175 additionalParams.append(CmsEncoder.encode(getRequestContext().getUri())); 176 additionalParams.append("&"); 177 additionalParams.append(CmsLocaleManager.PARAMETER_LOCALE); 178 additionalParams.append("="); 179 additionalParams.append(getRequestContext().getLocale()); 180 additionalParams.append("&"); 181 additionalParams.append(PARAM_SEARCHALL); 182 additionalParams.append("="); 183 additionalParams.append(isSearchAll()); 184 } 185 if (search.getPreviousUrl() != null) { 186 result.append("\t<input type=\"button\" class=\"formbutton\" value=\"<< "); 188 result.append(key("search.previous")); 189 result.append("\" onclick=\"location.href=\'"); 190 result.append(link(search.getPreviousUrl())); 191 result.append(additionalParams); 192 result.append("\';\">"); 193 } 194 Map pageLinks; 195 try { 196 getRequestContext().setUri(CmsWorkplace.VFS_PATH_MODULES + MODULE_NAME + "/pages/search.html"); 198 pageLinks = search.getPageLinks(); 199 } finally { 200 getRequestContext().setUri(getPageUri()); 202 } 203 Iterator i = pageLinks.keySet().iterator(); 204 while (i.hasNext()) { 205 int pageNumber = ((Integer )i.next()).intValue(); 207 String pageLink = link((String )pageLinks.get(new Integer (pageNumber))); 208 result.append(" "); 209 if (pageNumber != search.getSearchPage()) { 210 result.append("<a HREF=\""); 212 result.append(pageLink); 213 result.append(additionalParams); 214 result.append("\">"); 215 result.append(pageNumber); 216 result.append("</a>"); 217 } else { 218 result.append(pageNumber); 220 } 221 } 222 if (search.getNextUrl() != null) { 223 result.append(" <input type=\"button\" class=\"formbutton\" value=\""); 225 result.append(key("search.next")); 226 result.append(" >>\" onclick=\"location.href=\'"); 227 result.append(link(search.getNextUrl())); 228 result.append(additionalParams); 229 result.append("\';\">"); 230 } 231 if (showPageLinks) { 232 result.append("\n</div>\n"); 233 } 234 return result.toString(); 235 } 236 237 243 public String buildSearchResultList(List results) { 244 245 StringBuffer result = new StringBuffer (128); 246 Iterator iterator = results.iterator(); 247 while (iterator.hasNext()) { 248 CmsSearchResult entry = (CmsSearchResult)iterator.next(); 250 result.append("<div class=\"searchresult\">"); 251 String path = entry.getPath(); 252 path = getRequestContext().removeSiteRoot(path); 254 String fileIcon = getFileIcon(path); 256 if (CmsStringUtil.isNotEmpty(fileIcon)) { 257 result.append("<a HREF=\""); 258 result.append(link(path)); 259 result.append("\">"); 260 result.append(fileIcon); 261 result.append("</a> "); 262 } 263 264 result.append("<a HREF=\""); 265 result.append(link(path)); 266 result.append("\">"); 267 String title = entry.getTitle(); 268 if (CmsStringUtil.isEmpty(title)) { 269 title = CmsResource.getName(path); 271 } 272 result.append(title); 273 result.append("</a> ("); 274 result.append(entry.getScore()); 275 result.append("%)<br>"); 276 if (entry.getExcerpt() != null) { 277 result.append(entry.getExcerpt()); 279 } 280 if (entry.getKeywords() != null) { 281 result.append("<br>"); 283 result.append(key("search.keywords")); 284 result.append(": "); 285 result.append(entry.getKeywords()); 286 } 287 if (entry.getDescription() != null) { 288 result.append("<br>"); 290 result.append(key("search.description")); 291 result.append(": "); 292 result.append(entry.getDescription()); 293 } 294 result.append("<br>"); 296 result.append(messages().getDateTime(entry.getDateLastModified().getTime())); 297 result.append("</div>\n"); 298 } 299 return result.toString(); 300 } 301 302 308 public String getFileIcon(String fileName) { 309 310 int lastDot = fileName.lastIndexOf('.'); 311 String extension = ""; 312 if ((lastDot > 0) && (lastDot < (fileName.length() - 1))) { 314 extension = fileName.substring(lastDot + 1).toLowerCase(); 315 String iconPath = CmsWorkplace.VFS_PATH_MODULES 316 + MODULE_NAME 317 + "/resources/icons/ic_app_" 318 + extension 319 + ".gif"; 320 if (getCmsObject().existsResource(iconPath)) { 322 StringBuffer result = new StringBuffer (8); 323 String title = property(CmsPropertyDefinition.PROPERTY_TITLE, iconPath, ""); 324 result.append("<img SRC=\""); 325 result.append(link(iconPath)); 326 result.append("\" border=\"0\" alt=\""); 327 result.append(title); 328 result.append("\" title=\""); 329 result.append(title); 330 result.append("\" align=\"left\" hspace=\"2\">"); 331 return result.toString(); 332 } 333 } 334 return ""; 335 336 } 337 338 343 public String getPageUri() { 344 345 return m_pageUri; 346 } 347 348 353 public String getSearchAllChecked() { 354 355 if (isSearchAll() || "/".equals(getStartFolder())) { 356 return " checked=\"checked\""; 357 } 358 return ""; 359 } 360 361 369 public List getSearchResults(CmsSearch search) { 370 371 List result; 372 if (isSearchAll()) { 373 search.setSearchRoot("/"); 375 } else { 376 search.setSearchRoot(getStartFolder()); 378 } 379 String queryString = search.getQuery(); 380 try { 381 if (CmsStringUtil.isEmptyOrWhitespaceOnly(queryString)) { 382 queryString = ""; 384 search.setQuery(""); 385 result = new ArrayList (); 386 } else { 387 getRequestContext().setUri(CmsWorkplace.VFS_PATH_MODULES + MODULE_NAME + "/pages/search.html"); 389 result = search.getSearchResult(); 390 } 391 } finally { 392 getRequestContext().setUri(getPageUri()); 394 } 395 return result; 396 } 397 398 406 public void includeWithPageUri(String element) throws JspException { 407 408 String template = property(CmsPropertyDefinition.PROPERTY_TEMPLATE, "search", null); 409 include(template, element); 411 } 412 413 423 public void init(PageContext context, HttpServletRequest req, HttpServletResponse res) { 424 425 super.init(context, req, res); 427 m_pageUri = req.getParameter(CmsTemplateBean.PARAM_URI); 429 if (m_pageUri == null) { 430 m_pageUri = getRequestContext().getUri(); 431 } 432 m_searchAll = Boolean.valueOf(req.getParameter(PARAM_SEARCHALL)).booleanValue(); 433 getRequestContext().setUri(m_pageUri); 435 } 436 437 442 public boolean isSearchAll() { 443 444 return m_searchAll; 445 } 446 447 452 public boolean isSearchAllDisplayed() { 453 454 return !"/".equals(getStartFolder()); 455 } 456 457 462 public void setSearchAll(boolean searchAll) { 463 464 m_searchAll = searchAll; 465 } 466 467 } | Popular Tags |