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.LinkedList ; 63 import java.util.List ; 64 import java.util.Map ; 65 66 import javax.servlet.ServletException ; 67 import javax.servlet.http.HttpServletRequest ; 68 import javax.servlet.http.HttpServletResponse ; 69 import javax.servlet.jsp.PageContext ; 70 71 import org.apache.commons.logging.Log; 72 73 87 public class CmsSearchIndexSourceAddList extends A_CmsEmbeddedListDialog { 88 89 90 public static final String LIST_ACTION_ADDSOURCE = "a"; 91 92 93 public static final String LIST_ACTION_NONE = "n"; 94 95 96 public static final String LIST_COLUMN_ADDSOURCE = "cas"; 97 98 99 public static final String LIST_COLUMN_ADDSOURCE2 = LIST_COLUMN_ADDSOURCE + "2"; 100 101 102 public static final String LIST_COLUMN_ICON = "ci"; 103 104 105 public static final String LIST_COLUMN_INDEXER = "ca"; 106 107 108 public static final String LIST_COLUMN_NAME = "cn"; 109 110 111 public static final String LIST_DETAIL_DOCTYPES = "dd"; 112 113 114 public static final String LIST_DETAIL_RESOURCES = "dr"; 115 116 117 public static final String LIST_ID = "lssisa"; 118 119 120 public static final String LIST_MACTION_ADDSOURCE = "maa"; 121 122 123 private static final Log LOG = CmsLog.getLog(CmsSearchIndexSourceAddList.class); 124 125 126 private String m_paramIndexName; 127 128 133 public CmsSearchIndexSourceAddList(CmsJspActionElement jsp) { 134 135 this(jsp, LIST_ID, Messages.get().container(Messages.GUI_LIST_INDEXSOURCES_AVAIL_NAME_0)); 136 } 137 138 145 public CmsSearchIndexSourceAddList(CmsJspActionElement jsp, String listId, CmsMessageContainer listName) { 146 147 this(jsp, listId, listName, LIST_COLUMN_NAME, CmsListOrderEnum.ORDER_ASCENDING, null); 148 } 149 150 160 public CmsSearchIndexSourceAddList( 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 CmsSearchIndexSourceAddList(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 item = getSelectedItem(); 193 if (getParamListAction().equals(LIST_MACTION_ADDSOURCE)) { 194 Iterator itItems = getSelectedItems().iterator(); 196 String indexSource; 197 CmsSearchIndex idx = searchManager.getIndex(getParamIndexName()); 198 while (itItems.hasNext()) { 199 item = (CmsListItem)itItems.next(); 200 indexSource = (String )item.get(LIST_COLUMN_NAME); 201 idx.addSourceName(indexSource); 202 getList().removeItem(item.getId(), getLocale()); 203 } 204 try { 205 idx.initialize(); 206 } catch (CmsSearchException e) { 207 if (LOG.isErrorEnabled()) { 208 LOG.error(e); 209 } 210 } 211 writeConfiguration(false); 212 refreshList(); 213 } 214 215 listSave(); 216 } 217 218 223 public void executeListSingleActions() throws IOException , ServletException { 224 225 CmsSearchManager searchManager = OpenCms.getSearchManager(); 226 CmsListItem item = getSelectedItem(); 227 String indexsourceName = (String )item.get(LIST_COLUMN_NAME); 228 String action = getParamListAction(); 229 if (action.equals(LIST_ACTION_ADDSOURCE) || action.equals(LIST_COLUMN_ADDSOURCE2)) { 230 231 CmsSearchIndex idx = searchManager.getIndex(getParamIndexName()); 232 idx.addSourceName(indexsourceName); 233 getList().removeItem(item.getId(), getLocale()); 234 try { 235 idx.initialize(); 236 } catch (CmsSearchException e) { 237 if (LOG.isErrorEnabled()) { 238 LOG.error(e); 239 } 240 } 241 refreshList(); 242 writeConfiguration(false); 243 } else if (action.equals(CmsSearchIndexSourceControlList.LIST_ACTION_OVERVIEW_INDEXSOURCE)) { 244 245 Map params = new HashMap (); 247 params.put(A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE, indexsourceName); 249 params.put(PARAM_STYLE, CmsToolDialog.STYLE_NEW); 250 getToolManager().jspForwardTool(this, "/searchindex/indexsources/indexsource", params); 251 252 } 253 } 254 255 262 public String getParamIndexName() { 263 264 return m_paramIndexName; 265 } 266 267 273 public void setParamIndexName(String paramSearchIndex) { 274 275 m_paramIndexName = paramSearchIndex; 276 } 277 278 281 protected void fillDetails(String detailId) { 282 283 List items = getList().getAllContent(); 285 Iterator itItems = items.iterator(); 286 CmsListItem item; 287 if (detailId.equals(LIST_DETAIL_DOCTYPES)) { 288 while (itItems.hasNext()) { 289 item = (CmsListItem)itItems.next(); 290 fillDetailDocTypes(item, detailId); 291 292 } 293 } 294 if (detailId.equals(LIST_DETAIL_RESOURCES)) { 295 while (itItems.hasNext()) { 296 item = (CmsListItem)itItems.next(); 297 fillDetailResources(item, detailId); 298 299 } 300 301 } 302 303 } 304 305 308 protected List getListItems() { 309 310 List result = new ArrayList (); 311 List allSources = new LinkedList (OpenCms.getSearchManager().getSearchIndexSources().values()); 314 allSources.removeAll(searchIndexSources()); 315 Iterator itSources = allSources.iterator(); 316 CmsSearchIndexSource source; 317 while (itSources.hasNext()) { 318 source = (CmsSearchIndexSource)itSources.next(); 319 CmsListItem item = getList().newItem(source.getName()); 320 item.set(LIST_COLUMN_NAME, source.getName()); 321 item.set(LIST_COLUMN_INDEXER, source.getIndexer().getClass().getName()); 322 result.add(item); 323 } 324 return result; 325 } 326 327 330 protected void initMessages() { 331 332 addMessages(Messages.get().getBundleName()); 334 super.initMessages(); 336 } 337 338 341 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 342 343 super.initWorkplaceRequestValues(settings, request); 344 } 345 346 349 protected void setColumns(CmsListMetadata metadata) { 350 351 CmsListColumnDefinition editCol = new CmsListColumnDefinition(LIST_COLUMN_ICON); 353 editCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_0)); 354 editCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_HELP_0)); 355 editCol.setWidth("5"); 356 editCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 357 editCol.setSorteable(false); 358 CmsListDirectAction editAction = new CmsListDirectAction(LIST_ACTION_NONE); 360 editAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_0)); 361 editAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_HELP_0)); 362 editAction.setIconPath(CmsSearchIndexList.LIST_ICON_INDEXSOURCE); 363 editAction.setEnabled(false); 365 editCol.addDirectAction(editAction); 366 metadata.addColumn(editCol); 368 369 CmsListColumnDefinition addCol = new CmsListColumnDefinition(LIST_COLUMN_ADDSOURCE); 371 addCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ADDSOURCE_NAME_0)); 372 addCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ADDSOURCE_NAME_HELP_0)); 373 addCol.setWidth("5"); 374 addCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 375 addCol.setSorteable(false); 376 CmsListDirectAction addAction = new CmsListDirectAction(LIST_ACTION_ADDSOURCE); 378 addAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ADDSOURCE_NAME_0)); 379 addAction.setHelpText(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_ADDSOURCE_NAME_0)); 380 addAction.setIconPath(ICON_ADD); 381 addCol.addDirectAction(addAction); 382 metadata.addColumn(addCol); 384 385 CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME); 387 nameCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 388 nameCol.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_NAME_0)); 389 nameCol.setWidth("55%"); 390 CmsListDefaultAction addAction2 = new CmsListDefaultAction(LIST_COLUMN_ADDSOURCE2); 392 addAction2.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ADDSOURCE_NAME_0)); 393 addAction2.setHelpText(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_ADDSOURCE_NAME_0)); 394 nameCol.addDefaultAction(addAction2); 395 metadata.addColumn(nameCol); 396 397 CmsListColumnDefinition analyzerCol = new CmsListColumnDefinition(LIST_COLUMN_INDEXER); 399 analyzerCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 400 analyzerCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_INDEXER_0)); 401 analyzerCol.setWidth("30%"); 402 metadata.addColumn(analyzerCol); 403 404 } 405 406 409 protected void setIndependentActions(CmsListMetadata metadata) { 410 411 CmsListItemDetails doctypeDetails = new CmsListItemDetails(LIST_DETAIL_DOCTYPES); 413 doctypeDetails.setAtColumn(LIST_COLUMN_NAME); 414 doctypeDetails.setVisible(false); 415 doctypeDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 416 doctypeDetails.setShowActionHelpText(Messages.get().container( 417 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_SHOW_HELP_0)); 418 doctypeDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 419 doctypeDetails.setHideActionHelpText(Messages.get().container( 420 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_HIDE_HELP_0)); 421 doctypeDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0)); 422 doctypeDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 423 Messages.GUI_LIST_INDEXSOURCE_DETAIL_DOCTYPE_NAME_0))); 424 metadata.addItemDetails(doctypeDetails); 425 426 CmsListItemDetails resourceDetails = new CmsListItemDetails(LIST_DETAIL_RESOURCES); 428 resourceDetails.setAtColumn(LIST_COLUMN_NAME); 429 resourceDetails.setVisible(false); 430 resourceDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 431 resourceDetails.setShowActionHelpText(Messages.get().container( 432 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_SHOW_HELP_0)); 433 resourceDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 434 resourceDetails.setHideActionHelpText(Messages.get().container( 435 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_HIDE_HELP_0)); 436 resourceDetails.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0)); 437 resourceDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 438 Messages.GUI_LIST_INDEXSOURCE_DETAIL_RESOURCE_NAME_0))); 439 metadata.addItemDetails(resourceDetails); 440 441 } 442 443 446 protected void setMultiActions(CmsListMetadata metadata) { 447 448 CmsListMultiAction addMultiAction = new CmsListMultiAction(LIST_MACTION_ADDSOURCE); 450 addMultiAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_MACTION_ADDSOURCE_NAME_0)); 451 addMultiAction.setHelpText(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_MACTION_ADDSOURCE_NAME_HELP_0)); 452 addMultiAction.setIconPath(ICON_MULTI_ADD); 453 metadata.addMultiAction(addMultiAction); 454 } 455 456 459 protected void validateParamaters() throws Exception { 460 461 if (getParamIndexName() == null) { 463 throw new CmsIllegalStateException(Messages.get().container( 464 Messages.ERR_SEARCHINDEX_EDIT_MISSING_PARAM_1, 465 A_CmsEditSearchIndexDialog.PARAM_INDEXNAME)); 466 } 467 } 468 469 475 protected void writeConfiguration(boolean refresh) { 476 477 OpenCms.writeConfiguration(CmsSearchConfiguration.class); 479 if (refresh) { 480 refreshList(); 481 } 482 } 483 484 491 private void fillDetailDocTypes(CmsListItem item, String detailId) { 492 493 CmsSearchManager searchManager = OpenCms.getSearchManager(); 494 StringBuffer html = new StringBuffer (); 495 496 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 498 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 499 500 List docTypes = idxSource.getDocumentTypes(); 502 Iterator itDocTypes = docTypes.iterator(); 504 CmsSearchDocumentType docType; 505 html.append("<ul>\n"); 506 while (itDocTypes.hasNext()) { 507 docType = searchManager.getDocumentTypeConfig(itDocTypes.next().toString()); 509 if (docType != null) { 511 512 html.append(" <li>\n").append(" ").append(docType.getName()).append("\n"); 513 html.append(" </li>"); 514 } 515 } 516 517 html.append("</ul>\n"); 518 item.set(detailId, html.toString()); 519 } 520 521 528 private void fillDetailResources(CmsListItem item, String detailId) { 529 530 CmsSearchManager searchManager = OpenCms.getSearchManager(); 531 StringBuffer html = new StringBuffer (); 532 533 String idxSourceName = (String )item.get(LIST_COLUMN_NAME); 535 CmsSearchIndexSource idxSource = searchManager.getIndexSource(idxSourceName); 536 537 List resources = idxSource.getResourcesNames(); 539 Iterator itResources = resources.iterator(); 541 html.append("<ul>\n"); 542 while (itResources.hasNext()) { 543 544 html.append(" <li>\n").append(" ").append(itResources.next().toString()).append("\n"); 545 html.append(" </li>"); 546 } 547 548 html.append("</ul>\n"); 549 550 item.set(detailId, html.toString()); 551 } 552 553 558 private List searchIndexSources() { 559 560 CmsSearchManager manager = OpenCms.getSearchManager(); 561 CmsSearchIndex index = manager.getIndex(getParamIndexName()); 562 List sources = index.getSources(); 563 return sources; 564 } 565 566 } 567 | Popular Tags |