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.CmsIllegalStateException; 38 import org.opencms.main.CmsLog; 39 import org.opencms.main.OpenCms; 40 import org.opencms.search.CmsSearchDocumentType; 41 import org.opencms.search.CmsSearchException; 42 import org.opencms.search.CmsSearchIndex; 43 import org.opencms.search.CmsSearchIndexSource; 44 import org.opencms.search.CmsSearchManager; 45 import org.opencms.workplace.CmsWorkplaceSettings; 46 import org.opencms.workplace.list.CmsListColumnAlignEnum; 47 import org.opencms.workplace.list.CmsListColumnDefinition; 48 import org.opencms.workplace.list.CmsListDefaultAction; 49 import org.opencms.workplace.list.CmsListDirectAction; 50 import org.opencms.workplace.list.CmsListItem; 51 import org.opencms.workplace.list.CmsListItemDetails; 52 import org.opencms.workplace.list.CmsListItemDetailsFormatter; 53 import org.opencms.workplace.list.CmsListMetadata; 54 import org.opencms.workplace.list.CmsListMultiAction; 55 import org.opencms.workplace.list.CmsListOrderEnum; 56 import org.opencms.workplace.tools.CmsToolDialog; 57 58 import java.io.IOException ; 59 import java.util.ArrayList ; 60 import java.util.HashMap ; 61 import java.util.Iterator ; 62 import java.util.List ; 63 import java.util.Map ; 64 65 import javax.servlet.ServletException ; 66 import javax.servlet.http.HttpServletRequest ; 67 import javax.servlet.http.HttpServletResponse ; 68 import javax.servlet.jsp.PageContext ; 69 70 import org.apache.commons.logging.Log; 71 72 87 public class CmsSearchIndexSourceRemoveList extends A_CmsEmbeddedListDialog { 88 89 90 public static final String LIST_ACTION_NONE = "an"; 91 92 93 public static final String LIST_ACTION_REMOVESOURCE = "ars"; 94 95 96 public static final String LIST_COLUMN_ICON = "ci"; 97 98 99 public static final String LIST_COLUMN_INDEXER = "ca"; 100 101 102 public static final String LIST_COLUMN_NAME = "cn"; 103 104 105 public static final String LIST_COLUMN_REMOVESOURCE = "crs"; 106 107 108 public static final String LIST_DETAIL_DOCTYPES = "dd"; 109 110 111 public static final String LIST_DETAIL_RESOURCES = "dr"; 112 113 114 public static final String LIST_ID = "lssisr"; 115 116 117 public static final String LIST_MACTION_REMOVESOURCE = "mars"; 118 119 120 protected static final String LIST_ACTION_REMOVESOURCE2 = LIST_ACTION_REMOVESOURCE + "2"; 121 122 123 private static final Log LOG = CmsLog.getLog(CmsSearchIndexSourceRemoveList.class); 124 125 126 private String m_paramIndexName; 127 128 133 public CmsSearchIndexSourceRemoveList(CmsJspActionElement jsp) { 134 135 this(jsp, LIST_ID, Messages.get().container(Messages.GUI_LIST_INDEXSOURCES_NAME_0)); 136 } 137 138 145 public CmsSearchIndexSourceRemoveList(CmsJspActionElement jsp, String listId, CmsMessageContainer listName) { 146 147 this(jsp, listId, listName, LIST_COLUMN_NAME, CmsListOrderEnum.ORDER_ASCENDING, null); 148 } 149 150 160 public CmsSearchIndexSourceRemoveList( 161 CmsJspActionElement jsp, 162 String listId, 163 CmsMessageContainer listName, 164 String sortedColId, 165 CmsListOrderEnum sortOrder, 166 String searchableColId) { 167 168 super(jsp, listId, listName, sortedColId, sortOrder, searchableColId); 169 170 } 171 172 181 public CmsSearchIndexSourceRemoveList(PageContext context, HttpServletRequest req, HttpServletResponse res) { 182 183 this(new CmsJspActionElement(context, req, res)); 184 } 185 186 189 public void executeListMultiActions() { 190 191 CmsSearchManager searchManager = OpenCms.getSearchManager(); 192 CmsListItem listItem = getSelectedItem(); 193 String action = getParamListAction(); 194 if (action.equals(LIST_MACTION_REMOVESOURCE)) { 195 Iterator itItems = getSelectedItems().iterator(); 197 CmsSearchIndex idx = searchManager.getIndex(getParamIndexName()); 198 while (itItems.hasNext()) { 199 listItem = (CmsListItem)itItems.next(); 200 if (idx.getSourceNames().size() > 1) { 201 idx.removeSourceName((String )listItem.get(LIST_COLUMN_NAME)); 202 getList().removeItem(listItem.getId(), getLocale()); 203 } else { 204 break; 205 } 206 } 207 try { 208 idx.initialize(); 209 } catch (CmsSearchException e) { 210 if (LOG.isErrorEnabled()) { 211 LOG.error(e); 212 } 213 } 214 refreshList(); 215 writeConfiguration(false); 216 } 217 listSave(); 218 } 219 220 225 public void executeListSingleActions() throws IOException , ServletException { 226 227 CmsSearchManager searchManager = OpenCms.getSearchManager(); 228 CmsListItem item = getSelectedItem(); 229 String action = getParamListAction(); 230 String indexsourceName = (String )item.get(LIST_COLUMN_NAME); 231 if (action.equals(LIST_ACTION_REMOVESOURCE) || action.equals(LIST_ACTION_REMOVESOURCE2)) { 232 CmsSearchIndex idx = searchManager.getIndex(getParamIndexName()); 233 if (idx.getSourceNames().size() > 1) { 235 idx.removeSourceName((String )item.get(LIST_COLUMN_NAME)); 236 getList().removeItem(item.getId(), getLocale()); 237 try { 238 idx.initialize(); 239 } catch (CmsSearchException e) { 240 if (LOG.isErrorEnabled()) { 241 LOG.error(e); 242 } 243 } 244 refreshList(); 245 writeConfiguration(false); 246 } 247 } else if (action.equals(CmsSearchIndexSourceControlList.LIST_ACTION_OVERVIEW_INDEXSOURCE)) { 248 249 Map params = new HashMap (); 251 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexsourceName); 253 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 254 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource", params); 255 256 } 257 } 258 259 266 public String getParamIndexName() { 267 268 return m_paramIndexName; 269 } 270 271 277 public void setParamIndexName(String paramSearchIndex) { 278 279 m_paramIndexName = paramSearchIndex; 280 } 281 282 285 protected void fillDetails(String detailId) { 286 287 List items = getList().getAllContent(); 289 Iterator itItems = items.iterator(); 290 CmsListItem item; 291 if (detailId.equals(LIST_DETAIL_DOCTYPES)) { 292 while (itItems.hasNext()) { 293 item = (CmsListItem)itItems.next(); 294 fillDetailDocTypes(item, detailId); 295 296 } 297 } 298 if (detailId.equals(LIST_DETAIL_RESOURCES)) { 299 while (itItems.hasNext()) { 300 item = (CmsListItem)itItems.next(); 301 fillDetailResources(item, detailId); 302 303 } 304 305 } 306 307 } 308 309 312 protected List getListItems() { 313 314 List result = new ArrayList (); 315 List sources = searchIndexSources(); 317 Iterator itSources = sources.iterator(); 318 CmsSearchIndexSource source; 319 while (itSources.hasNext()) { 320 source = (CmsSearchIndexSource)itSources.next(); 321 CmsListItem item = getList().newItem(source.getName()); 322 item.set(LIST_COLUMN_NAME, source.getName()); 323 item.set(LIST_COLUMN_INDEXER, source.getIndexer().getClass().getName()); 324 result.add(item); 325 } 326 return result; 327 } 328 329 332 protected void initMessages() { 333 334 addMessages(Messages.get().getBundleName()); 336 super.initMessages(); 338 } 339 340 343 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 344 345 super.initWorkplaceRequestValues(settings, request); 346 } 347 348 351 protected void setColumns(CmsListMetadata metadata) { 352 353 CmsListColumnDefinition editCol = new CmsListColumnDefinition(LIST_COLUMN_ICON); 355 editCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_0)); 356 editCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_HELP_0)); 357 editCol.setWidth("5"); 358 editCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 359 editCol.setSorteable(false); 360 CmsListDirectAction editAction = new CmsListDirectAction(LIST_ACTION_NONE); 362 editAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_0)); 363 editAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_HELP_0)); 364 editAction.setIconPath(CmsSearchIndexList.LIST_ICON_INDEXSOURCE); 365 editAction.setEnabled(false); 367 editCol.addDirectAction(editAction); 368 metadata.addColumn(editCol); 370 371 CmsListColumnDefinition addCol = new CmsListColumnDefinition(LIST_COLUMN_REMOVESOURCE); 373 addCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVESOURCE_NAME_0)); 374 addCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVESOURCE_NAME_HELP_0)); 375 addCol.setWidth("5"); 376 addCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 377 addCol.setSorteable(false); 378 CmsListDirectAction addAction = new CmsListDirectAction(LIST_ACTION_REMOVESOURCE); 380 addAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_REMOVESOURCE_NAME_0)); 381 addAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVESOURCE_NAME_HELP_0)); 382 addAction.setIconPath(ICON_MINUS); 383 addCol.addDirectAction(addAction); 384 metadata.addColumn(addCol); 386 387 CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME); 389 nameCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 390 nameCol.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_NAME_0)); 391 nameCol.setWidth("55%"); 392 CmsListDefaultAction defEditAction = new CmsListDefaultAction(LIST_ACTION_REMOVESOURCE2); 394 defEditAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_REMOVESOURCE_NAME_0)); 395 defEditAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVESOURCE_NAME_HELP_0)); 396 nameCol.addDefaultAction(defEditAction); 397 metadata.addColumn(nameCol); 398 399 CmsListColumnDefinition analyzerCol = new CmsListColumnDefinition(LIST_COLUMN_INDEXER); 401 analyzerCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 402 analyzerCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_INDEXER_0)); 403 analyzerCol.setWidth("30%"); 404 metadata.addColumn(analyzerCol); 405 406 } 407 408 411 protected void setIndependentActions(CmsListMetadata metadata) { 412 413 CmsListItemDetails doctypeDetails = new CmsListItemDetails(LIST_DETAIL_DOCTYPES); 415 doctypeDetails.setAtColumn(LIST_COLUMN_NAME); 416 doctypeDetails.setVisible(false); 417 doctypeDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 418 doctypeDetails.setShowActionHelpText(Messages.get().container( 419 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_SHOW_HELP_0)); 420 doctypeDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 421 doctypeDetails.setHideActionHelpText(Messages.get().container( 422 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_HIDE_HELP_0)); 423 doctypeDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 424 doctypeDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 425 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0))); 426 metadata.addItemDetails(doctypeDetails); 427 428 CmsListItemDetails resourceDetails = new CmsListItemDetails(LIST_DETAIL_RESOURCES); 430 resourceDetails.setAtColumn(LIST_COLUMN_NAME); 431 resourceDetails.setVisible(false); 432 resourceDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 433 resourceDetails.setShowActionHelpText(Messages.get().container( 434 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_SHOW_HELP_0)); 435 resourceDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 436 resourceDetails.setHideActionHelpText(Messages.get().container( 437 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_HIDE_HELP_0)); 438 resourceDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 439 resourceDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 440 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0))); 441 metadata.addItemDetails(resourceDetails); 442 443 } 444 445 448 protected void setMultiActions(CmsListMetadata metadata) { 449 450 CmsListMultiAction addMultiAction = new CmsListMultiAction(LIST_MACTION_REMOVESOURCE); 452 addMultiAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_MACTION_REMOVESOURCE_NAME_0)); 453 addMultiAction.setHelpText(Messages.get().container( 454 Messages.GUI_LIST_SEARCHINDEX_MACTION_REMOVESOURCE_NAME_HELP_0)); 455 addMultiAction.setIconPath(ICON_MULTI_MINUS); 456 metadata.addMultiAction(addMultiAction); 457 } 458 459 462 protected void validateParamaters() throws Exception { 463 464 if (getParamIndexName() == null) { 466 throw new CmsIllegalStateException(Messages.get().container( 467 Messages.ERR_SEARCHINDEX_EDIT_MISSING_PARAM_1, 468 A_CmsEditSearchIndexDialog.PARAM_INDEXNAME)); 469 } 470 } 471 472 478 protected void writeConfiguration(boolean refresh) { 479 480 OpenCms.writeConfiguration(CmsSearchConfiguration.class); 482 if (refresh) { 483 refreshList(); 484 } 485 } 486 487 494 private void fillDetailDocTypes(CmsListItem item, String detailId) { 495 496 CmsSearchManager searchManager = OpenCms.getSearchManager(); 497 StringBuffer html = new StringBuffer (); 498 499 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 501 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 502 503 List docTypes = idxSource.getDocumentTypes(); 505 Iterator itDocTypes = docTypes.iterator(); 507 CmsSearchDocumentType docType; 508 html.append("<ul>\n"); 509 while (itDocTypes.hasNext()) { 510 docType = searchManager.getDocumentTypeConfig(itDocTypes.next().toString()); 512 if (docType != null) { 514 515 html.append(" <li>\n").append(" ").append(docType.getName()).append("\n"); 516 html.append(" </li>"); 517 } 518 } 519 520 html.append("</ul>\n"); 521 item.set(detailId, html.toString()); 522 } 523 524 531 private void fillDetailResources(CmsListItem item, String detailId) { 532 533 CmsSearchManager searchManager = OpenCms.getSearchManager(); 534 StringBuffer html = new StringBuffer (); 535 536 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 538 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 539 540 List resources = idxSource.getResourcesNames(); 542 Iterator itResources = resources.iterator(); 544 html.append("<ul>\n"); 545 while (itResources.hasNext()) { 546 547 html.append(" <li>\n").append(" ").append(itResources.next().toString()).append("\n"); 548 html.append(" </li>"); 549 } 550 551 html.append("</ul>\n"); 552 553 item.set(detailId, html.toString()); 554 } 555 556 561 private List searchIndexSources() { 562 563 CmsSearchManager manager = OpenCms.getSearchManager(); 564 CmsSearchIndex index = manager.getIndex(getParamIndexName()); 565 List sources = index.getSources(); 566 return sources; 567 } 568 569 } 570 | Popular Tags |