1 31 32 package org.opencms.workplace.tools.searchindex; 33 34 import org.opencms.configuration.CmsSearchConfiguration; 35 import org.opencms.i18n.CmsMessageContainer; 36 import org.opencms.jsp.CmsJspActionElement; 37 import org.opencms.main.CmsLog; 38 import org.opencms.main.OpenCms; 39 import org.opencms.search.CmsSearchDocumentType; 40 import org.opencms.search.CmsSearchIndexSource; 41 import org.opencms.search.CmsSearchManager; 42 import org.opencms.workplace.list.A_CmsListDialog; 43 import org.opencms.workplace.list.CmsListColumnAlignEnum; 44 import org.opencms.workplace.list.CmsListColumnDefinition; 45 import org.opencms.workplace.list.CmsListDefaultAction; 46 import org.opencms.workplace.list.CmsListDirectAction; 47 import org.opencms.workplace.list.CmsListItem; 48 import org.opencms.workplace.list.CmsListItemDetails; 49 import org.opencms.workplace.list.CmsListItemDetailsFormatter; 50 import org.opencms.workplace.list.CmsListMetadata; 51 import org.opencms.workplace.list.CmsListMultiAction; 52 import org.opencms.workplace.list.CmsListOrderEnum; 53 import org.opencms.workplace.tools.CmsToolDialog; 54 55 import java.io.IOException ; 56 import java.util.ArrayList ; 57 import java.util.HashMap ; 58 import java.util.Iterator ; 59 import java.util.LinkedList ; 60 import java.util.List ; 61 import java.util.Map ; 62 63 import javax.servlet.ServletException ; 64 import javax.servlet.http.HttpServletRequest ; 65 import javax.servlet.http.HttpServletResponse ; 66 import javax.servlet.jsp.PageContext ; 67 68 import org.apache.commons.logging.Log; 69 70 86 public class CmsSearchIndexSourceControlList extends A_CmsListDialog { 87 88 89 public static final String LIST_ACTION_DELETE = "ade"; 90 91 92 public static final String LIST_ACTION_DOCUMENTS = "ado"; 93 94 95 public static final String LIST_ACTION_EDIT = "ae"; 96 97 98 public static final String LIST_ACTION_OVERVIEW_INDEXSOURCE = "aois"; 99 100 107 public static final String LIST_ACTION_OVERVIEW_INDEXSOURCE2 = "aois2"; 108 109 110 public static final String LIST_ACTION_RESOURCES = "ar"; 111 112 113 public static final String LIST_COLUMN_DELETE = "cde"; 114 115 116 public static final String LIST_COLUMN_DOCUMENTS = "cdo"; 117 118 119 public static final String LIST_COLUMN_EDIT = "ce"; 120 121 122 public static final String LIST_COLUMN_INDEXER = "ca"; 123 124 125 public static final String LIST_COLUMN_NAME = "cn"; 126 127 128 public static final String LIST_COLUMN_RESOURCES = "cr"; 129 130 131 public static final String LIST_DETAIL_DOCTYPES = "dd"; 132 133 134 public static final String LIST_DETAIL_RESOURCES = "dr"; 135 136 137 public static final String LIST_ID = "lssisc"; 138 139 140 public static final String LIST_MACTION_DELETESOURCE = "mad"; 141 142 143 protected static final String ICON_FOLDER = "tools/searchindex/icons/small/indexsource-resources.png"; 144 145 146 private static final Log LOG = CmsLog.getLog(CmsSearchIndexSourceControlList.class); 147 148 153 public CmsSearchIndexSourceControlList(CmsJspActionElement jsp) { 154 155 this(jsp, LIST_ID, Messages.get().container(Messages.GUI_LIST_INDEXSOURCES_NAME_0)); 156 } 157 158 165 public CmsSearchIndexSourceControlList(CmsJspActionElement jsp, String listId, CmsMessageContainer listName) { 166 167 this(jsp, listId, listName, LIST_COLUMN_NAME, CmsListOrderEnum.ORDER_ASCENDING, null); 168 } 169 170 180 public CmsSearchIndexSourceControlList( 181 CmsJspActionElement jsp, 182 String listId, 183 CmsMessageContainer listName, 184 String sortedColId, 185 CmsListOrderEnum sortOrder, 186 String searchableColId) { 187 188 super(jsp, listId, listName, sortedColId, sortOrder, searchableColId); 189 190 } 191 192 201 public CmsSearchIndexSourceControlList(PageContext context, HttpServletRequest req, HttpServletResponse res) { 202 203 this(new CmsJspActionElement(context, req, res)); 204 } 205 206 209 public void executeListMultiActions() { 210 211 CmsSearchManager searchManager = OpenCms.getSearchManager(); 212 if (getParamListAction().equals(LIST_MACTION_DELETESOURCE)) { 213 Iterator itItems = getSelectedItems().iterator(); 215 CmsListItem listItem; 216 CmsSearchIndexSource idxsource; 217 while (itItems.hasNext()) { 218 listItem = (CmsListItem)itItems.next(); 219 idxsource = searchManager.getIndexSource((String )listItem.get(LIST_COLUMN_NAME)); 220 searchManager.removeSearchIndexSource(idxsource); 221 getList().removeItem(listItem.getId(), getLocale()); 222 } 223 refreshList(); 224 writeConfiguration(false); 225 } 226 listSave(); 227 } 228 229 234 public void executeListSingleActions() throws IOException , ServletException { 235 236 String indexSource = getSelectedItem().getId(); 237 Map params = new HashMap (); 238 String action = getParamListAction(); 239 if (action.equals(LIST_ACTION_EDIT)) { 240 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexSource); 242 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 243 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource/edit", params); 244 } else if (action.equals(LIST_ACTION_DELETE)) { 245 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexSource); 247 params.put(PARAM_ACTION, DIALOG_INITIAL); 248 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 249 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource/delete", params); 250 } else if (action.equals(LIST_ACTION_RESOURCES)) { 251 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexSource); 253 params.put(PARAM_ACTION, DIALOG_INITIAL); 254 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 255 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource/resources", params); 256 } else if (action.equals(LIST_ACTION_DOCUMENTS)) { 257 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexSource); 259 params.put(PARAM_ACTION, DIALOG_INITIAL); 260 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 261 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource/doctypes", params); 262 } else if (action.equals(LIST_ACTION_OVERVIEW_INDEXSOURCE)) { 263 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexSource); 265 params.put(PARAM_ACTION, DIALOG_INITIAL); 266 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 267 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource", params); 268 } 269 listSave(); 270 } 271 272 275 protected void fillDetails(String detailId) { 276 277 List items = getList().getAllContent(); 279 Iterator itItems = items.iterator(); 280 CmsListItem item; 281 if (detailId.equals(LIST_DETAIL_DOCTYPES)) { 282 while (itItems.hasNext()) { 283 item = (CmsListItem)itItems.next(); 284 fillDetailDocTypes(item, detailId); 285 286 } 287 } 288 if (detailId.equals(LIST_DETAIL_RESOURCES)) { 289 while (itItems.hasNext()) { 290 item = (CmsListItem)itItems.next(); 291 fillDetailResources(item, detailId); 292 293 } 294 295 } 296 297 } 298 299 302 protected List getListItems() { 303 304 List result = new ArrayList (); 305 List sources = searchIndexSources(); 307 Iterator itSources = sources.iterator(); 308 CmsSearchIndexSource source; 309 String value; 310 while (itSources.hasNext()) { 311 try { 312 source = (CmsSearchIndexSource)itSources.next(); 313 CmsListItem item = getList().newItem(source.getName()); 315 item.set(LIST_COLUMN_NAME, source.getName()); 316 try { 317 value = source.getIndexer().getClass().getName(); 318 } catch (Throwable f) { 319 value = "null"; 320 } 321 item.set(LIST_COLUMN_INDEXER, value); 322 result.add(item); 323 } catch (Throwable g) { 324 CmsMessageContainer msg = Messages.get().container( 325 Messages.LOG_ERR_LIST_ITEM_SKIPPED_2, 326 getList().getName().key(getLocale()), 327 "Name"); 328 if (LOG.isWarnEnabled()) { 329 LOG.warn(msg.key(getLocale())); 330 } 331 } 332 } 333 return result; 334 } 335 336 339 protected void initMessages() { 340 341 addMessages(Messages.get().getBundleName()); 343 super.initMessages(); 345 } 346 347 350 protected void setColumns(CmsListMetadata metadata) { 351 352 CmsListColumnDefinition editCol = new CmsListColumnDefinition(LIST_COLUMN_EDIT); 354 editCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_EDIT_NAME_0)); 355 editCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_EDIT_NAME_HELP_0)); 356 editCol.setWidth("5"); 357 editCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 358 editCol.setSorteable(false); 359 CmsListDirectAction editAction = new CmsListDirectAction(LIST_ACTION_EDIT); 361 editAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_ACTION_EDIT_NAME_0)); 362 editAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_EDIT_NAME_HELP_0)); 363 editAction.setIconPath(CmsSearchIndexList.LIST_ICON_INDEXSOURCE); 364 editCol.addDirectAction(editAction); 365 metadata.addColumn(editCol); 367 368 CmsListColumnDefinition resCol = new CmsListColumnDefinition(LIST_COLUMN_RESOURCES); 370 resCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_RESOURCES_NAME_0)); 371 resCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_RESOURCES_NAME_HELP_0)); 372 resCol.setWidth("5"); 373 resCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 374 resCol.setSorteable(false); 375 CmsListDirectAction resAction = new CmsListDirectAction(LIST_ACTION_RESOURCES); 377 resAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_RESOURCES_NAME_0)); 378 resAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_RESOURCES_NAME_HELP_0)); 379 resAction.setIconPath(ICON_FOLDER); 380 resCol.addDirectAction(resAction); 381 metadata.addColumn(resCol); 383 384 CmsListColumnDefinition docCol = new CmsListColumnDefinition(LIST_COLUMN_DOCUMENTS); 386 docCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_DOCUMENTS_NAME_0)); 387 docCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_DOCUMENTS_NAME_HELP_0)); 388 docCol.setWidth("5"); 389 docCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 390 docCol.setSorteable(false); 391 CmsListDirectAction docAction = new CmsListDirectAction(LIST_ACTION_DOCUMENTS); 393 docAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_DOCUMENTS_NAME_0)); 394 docAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_DOCUMENTS_NAME_HELP_0)); 395 docAction.setIconPath(CmsDocumentTypeList.ICON_DOCTYPE); 396 docCol.addDirectAction(docAction); 397 metadata.addColumn(docCol); 399 400 CmsListColumnDefinition deleteCol = new CmsListColumnDefinition(LIST_COLUMN_DELETE); 402 deleteCol.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_DELETE_NAME_0)); 403 deleteCol.setHelpText(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_DELETE_HELP_0)); 404 deleteCol.setWidth("10"); 405 deleteCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 406 deleteCol.setSorteable(false); 407 CmsListDirectAction deleteAction = new CmsListDirectAction(LIST_ACTION_DELETE); 409 deleteAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_DELETE_NAME_0)); 410 deleteAction.setHelpText(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_DELETE_HELP_0)); 411 deleteAction.setIconPath(ICON_DELETE); 414 deleteCol.addDirectAction(deleteAction); 415 metadata.addColumn(deleteCol); 417 418 CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME); 420 nameCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 421 nameCol.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_NAME_0)); 422 nameCol.setWidth("50%"); 423 CmsListDefaultAction defEditAction = new CmsListDefaultAction(LIST_ACTION_OVERVIEW_INDEXSOURCE); 425 defEditAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_OVERVIEW_NAME_0)); 426 defEditAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_OVERVIEW_NAME_HELP_0)); 427 nameCol.addDefaultAction(defEditAction); 428 metadata.addColumn(nameCol); 429 430 CmsListColumnDefinition analyzerCol = new CmsListColumnDefinition(LIST_COLUMN_INDEXER); 432 analyzerCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 433 analyzerCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_INDEXER_0)); 434 analyzerCol.setWidth("45%"); 435 metadata.addColumn(analyzerCol); 436 437 } 438 439 442 protected void setIndependentActions(CmsListMetadata metadata) { 443 444 CmsListItemDetails doctypeDetails = new CmsListItemDetails(LIST_DETAIL_DOCTYPES); 446 doctypeDetails.setAtColumn(LIST_COLUMN_NAME); 447 doctypeDetails.setVisible(false); 448 doctypeDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_SHOW_0)); 449 doctypeDetails.setShowActionHelpText(Messages.get().container( 450 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_SHOW_HELP_0)); 451 doctypeDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_HIDE_0)); 452 doctypeDetails.setHideActionHelpText(Messages.get().container( 453 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_HIDE_HELP_0)); 454 doctypeDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 455 doctypeDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 456 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0))); 457 metadata.addItemDetails(doctypeDetails); 458 459 CmsListItemDetails resourceDetails = new CmsListItemDetails(LIST_DETAIL_RESOURCES); 461 resourceDetails.setAtColumn(LIST_COLUMN_NAME); 462 resourceDetails.setVisible(false); 463 resourceDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_SHOW_0)); 464 resourceDetails.setShowActionHelpText(Messages.get().container( 465 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_SHOW_HELP_0)); 466 resourceDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_HIDE_0)); 467 resourceDetails.setHideActionHelpText(Messages.get().container( 468 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_HIDE_HELP_0)); 469 resourceDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 470 resourceDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 471 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0))); 472 metadata.addItemDetails(resourceDetails); 473 474 } 475 476 479 protected void setMultiActions(CmsListMetadata metadata) { 480 481 CmsListMultiAction deleteMultiAction = new CmsListMultiAction(LIST_MACTION_DELETESOURCE); 483 deleteMultiAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_MACTION_DELETESOURCE_NAME_0)); 484 deleteMultiAction.setHelpText(Messages.get().container( 485 Messages.GUI_LIST_INDEXSOURCE_MACTION_DELETESOURCE_NAME_HELP_0)); 486 deleteMultiAction.setConfirmationMessage(Messages.get().container( 487 Messages.GUI_LIST_INDEXSOURCE_MACTION_DELETESOURCE_CONF_0)); 488 deleteMultiAction.setIconPath(ICON_MULTI_MINUS); 489 metadata.addMultiAction(deleteMultiAction); 490 491 } 492 493 499 protected void writeConfiguration(boolean refresh) { 500 501 OpenCms.writeConfiguration(CmsSearchConfiguration.class); 503 if (refresh) { 504 refreshList(); 505 } 506 } 507 508 515 private void fillDetailDocTypes(CmsListItem item, String detailId) { 516 517 CmsSearchManager searchManager = OpenCms.getSearchManager(); 518 StringBuffer html = new StringBuffer (); 519 520 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 522 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 523 524 List docTypes = idxSource.getDocumentTypes(); 526 Iterator itDocTypes = docTypes.iterator(); 528 CmsSearchDocumentType docType; 529 html.append("<ul>\n"); 530 while (itDocTypes.hasNext()) { 531 docType = searchManager.getDocumentTypeConfig(itDocTypes.next().toString()); 533 if (docType != null) { 535 536 html.append(" <li>\n").append(" ").append(docType.getName()).append("\n"); 537 html.append(" </li>"); 538 } 539 } 540 541 html.append("</ul>\n"); 542 item.set(detailId, html.toString()); 543 } 544 545 552 private void fillDetailResources(CmsListItem item, String detailId) { 553 554 CmsSearchManager searchManager = OpenCms.getSearchManager(); 555 StringBuffer html = new StringBuffer (); 556 557 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 559 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 560 561 List resources = idxSource.getResourcesNames(); 563 Iterator itResources = resources.iterator(); 565 html.append("<ul>\n"); 566 while (itResources.hasNext()) { 567 568 html.append(" <li>\n").append(" ").append(itResources.next().toString()).append("\n"); 569 html.append(" </li>"); 570 } 571 572 html.append("</ul>\n"); 573 574 item.set(detailId, html.toString()); 575 } 576 577 582 private List searchIndexSources() { 583 584 CmsSearchManager manager = OpenCms.getSearchManager(); 585 return new LinkedList (manager.getSearchIndexSources().values()); 586 587 } 588 } 589 | Popular Tags |