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.CmsSearchIndexSource; 42 import org.opencms.search.CmsSearchManager; 43 import org.opencms.workplace.CmsWorkplaceSettings; 44 import org.opencms.workplace.list.CmsListColumnAlignEnum; 45 import org.opencms.workplace.list.CmsListColumnDefinition; 46 import org.opencms.workplace.list.CmsListDefaultAction; 47 import org.opencms.workplace.list.CmsListDirectAction; 48 import org.opencms.workplace.list.CmsListItem; 49 import org.opencms.workplace.list.CmsListItemDetails; 50 import org.opencms.workplace.list.CmsListItemDetailsFormatter; 51 import org.opencms.workplace.list.CmsListMetadata; 52 import org.opencms.workplace.list.CmsListMultiAction; 53 import org.opencms.workplace.list.CmsListOrderEnum; 54 55 import java.util.ArrayList ; 56 import java.util.Iterator ; 57 import java.util.List ; 58 59 import javax.servlet.http.HttpServletRequest ; 60 import javax.servlet.http.HttpServletResponse ; 61 import javax.servlet.jsp.PageContext ; 62 63 import org.apache.commons.logging.Log; 64 65 81 public class CmsDocumentTypeRemoveList extends A_CmsEmbeddedListDialog { 82 83 84 public static final String LIST_ACTION_NONE = "an"; 85 86 87 public static final String LIST_ACTION_REMOVE_DOCTYPE = "ard"; 88 89 90 public static final String LIST_ACTION_REMOVE_DOCTYPE2 = LIST_ACTION_REMOVE_DOCTYPE + "2"; 91 92 93 public static final String LIST_COLUMN_DOCCLASS = "cdc"; 94 95 96 public static final String LIST_COLUMN_ICON = "ci"; 97 98 99 public static final String LIST_COLUMN_NAME = "cn"; 100 101 102 public static final String LIST_COLUMN_REMOVE_DOCTYPE = "crd"; 103 104 105 public static final String LIST_DETAIL_MIMETYPES = "dmt"; 106 107 108 public static final String LIST_DETAIL_RESOURCETYPES = "drt"; 109 110 111 public static final String LIST_ID = "lssisdtr"; 112 113 114 public static final String LIST_MACTION_REMOVE_DOCTYPE = "mard"; 115 116 117 private static final Log LOG = CmsLog.getLog(CmsDocumentTypeRemoveList.class); 118 119 120 private String m_paramIndexsource; 121 122 127 public CmsDocumentTypeRemoveList(CmsJspActionElement jsp) { 128 129 this(jsp, LIST_ID, Messages.get().container(Messages.GUI_LIST_DOCUMENTTYPES_NAME_0)); 130 } 131 132 139 public CmsDocumentTypeRemoveList(CmsJspActionElement jsp, String listId, CmsMessageContainer listName) { 140 141 this(jsp, listId, listName, LIST_COLUMN_NAME, CmsListOrderEnum.ORDER_ASCENDING, null); 142 } 143 144 154 public CmsDocumentTypeRemoveList( 155 CmsJspActionElement jsp, 156 String listId, 157 CmsMessageContainer listName, 158 String sortedColId, 159 CmsListOrderEnum sortOrder, 160 String searchableColId) { 161 162 super(jsp, listId, listName, sortedColId, sortOrder, searchableColId); 163 164 } 165 166 175 public CmsDocumentTypeRemoveList(PageContext context, HttpServletRequest req, HttpServletResponse res) { 176 177 this(new CmsJspActionElement(context, req, res)); 178 } 179 180 183 public void executeListMultiActions() { 184 185 CmsSearchManager searchManager = OpenCms.getSearchManager(); 186 if (getParamListAction().equals(LIST_MACTION_REMOVE_DOCTYPE)) { 187 Iterator itItems = getSelectedItems().iterator(); 189 CmsListItem listItem; 190 String doctype; 191 CmsSearchIndexSource idxsrc = searchManager.getIndexSource(getParamIndexsource()); 192 while (itItems.hasNext()) { 193 listItem = (CmsListItem)itItems.next(); 194 doctype = (String )listItem.get(LIST_COLUMN_NAME); 195 idxsrc.removeDocumentType(doctype); 196 getList().removeItem(listItem.getId(), getLocale()); 197 } 198 writeConfiguration(false); 199 refreshList(); 200 } 201 listSave(); 202 } 203 204 207 public void executeListSingleActions() { 208 209 CmsSearchManager searchManager = OpenCms.getSearchManager(); 210 String action = getParamListAction(); 211 if (action.equals(LIST_ACTION_REMOVE_DOCTYPE) || action.equals(LIST_ACTION_REMOVE_DOCTYPE2)) { 212 CmsSearchIndexSource idxsrc = searchManager.getIndexSource(getParamIndexsource()); 213 CmsListItem item = getSelectedItem(); 214 String doctypeName = (String )item.get(LIST_COLUMN_NAME); 215 idxsrc.removeDocumentType(doctypeName); 216 getList().removeItem(item.getId(), getLocale()); 217 refreshList(); 218 writeConfiguration(false); 219 } 220 } 221 222 227 public String getParamIndexsource() { 228 229 return m_paramIndexsource; 230 } 231 232 240 public void setParamIndexsource(String indexsource) { 241 242 m_paramIndexsource = indexsource; 243 } 244 245 248 protected void fillDetails(String detailId) { 249 250 List items = getList().getAllContent(); 252 Iterator itItems = items.iterator(); 253 CmsListItem item; 254 if (detailId.equals(LIST_DETAIL_MIMETYPES)) { 255 while (itItems.hasNext()) { 256 item = (CmsListItem)itItems.next(); 257 fillDetailMimetypes(item, detailId); 258 259 } 260 } 261 if (detailId.equals(LIST_DETAIL_RESOURCETYPES)) { 262 while (itItems.hasNext()) { 263 item = (CmsListItem)itItems.next(); 264 fillDetailResourceTypes(item, detailId); 265 266 } 267 268 } 269 270 } 271 272 275 protected List getListItems() { 276 277 List result = new ArrayList (); 278 List doctypes = documentTypes(); 280 Iterator itDoctypes = doctypes.iterator(); 281 CmsSearchDocumentType doctype; 282 while (itDoctypes.hasNext()) { 283 doctype = (CmsSearchDocumentType)itDoctypes.next(); 284 CmsListItem item = getList().newItem(doctype.getName()); 285 item.set(LIST_COLUMN_NAME, doctype.getName()); 286 item.set(LIST_COLUMN_DOCCLASS, doctype.getClassName()); 287 result.add(item); 288 } 289 return result; 290 } 291 292 295 protected void initMessages() { 296 297 addMessages(Messages.get().getBundleName()); 299 super.initMessages(); 301 } 302 303 306 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 307 308 super.initWorkplaceRequestValues(settings, request); 309 } 310 311 314 protected void setColumns(CmsListMetadata metadata) { 315 316 CmsListColumnDefinition dummyCol = new CmsListColumnDefinition(LIST_COLUMN_ICON); 318 dummyCol.setName(Messages.get().container(Messages.GUI_LIST_DOCUMENTTYPE_NAME_0)); 319 dummyCol.setHelpText(Messages.get().container(Messages.GUI_LIST_DOCUMENTTYPE_NAME_HELP_0)); 320 dummyCol.setWidth("20"); 321 dummyCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 322 dummyCol.setSorteable(false); 323 CmsListDirectAction dummyAction = new CmsListDirectAction(LIST_ACTION_NONE); 325 dummyAction.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_0)); 326 dummyAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_ICON_NAME_HELP_0)); 327 dummyAction.setIconPath(CmsDocumentTypeList.ICON_DOCTYPE); 328 dummyAction.setEnabled(false); 330 dummyCol.addDirectAction(dummyAction); 331 metadata.addColumn(dummyCol); 333 334 CmsListColumnDefinition remCol = new CmsListColumnDefinition(LIST_COLUMN_REMOVE_DOCTYPE); 336 remCol.setName(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVE_DOCTYPE_NAME_0)); 337 remCol.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVE_DOCTYPE_NAME_HELP_0)); 338 remCol.setWidth("20"); 339 remCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 340 remCol.setSorteable(false); 341 CmsListDirectAction remAction = new CmsListDirectAction(LIST_ACTION_REMOVE_DOCTYPE); 343 remAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_REMOVE_DOCTYPE_NAME_0)); 344 remAction.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVE_DOCTYPE_NAME_HELP_0)); 345 remAction.setIconPath(ICON_MINUS); 346 remCol.addDirectAction(remAction); 347 metadata.addColumn(remCol); 348 349 CmsListColumnDefinition nameCol = new CmsListColumnDefinition(LIST_COLUMN_NAME); 351 nameCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 352 nameCol.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_COL_NAME_0)); 353 nameCol.setWidth("50%"); 354 metadata.addColumn(nameCol); 355 CmsListDefaultAction remAction2 = new CmsListDefaultAction(LIST_ACTION_REMOVE_DOCTYPE2); 357 remAction2.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_ACTION_REMOVE_DOCTYPE_NAME_0)); 358 remAction2.setHelpText(Messages.get().container(Messages.GUI_LIST_INDEXSOURCE_COL_REMOVE_DOCTYPE_NAME_HELP_0)); 359 nameCol.addDefaultAction(remAction2); 360 metadata.addColumn(nameCol); 361 362 CmsListColumnDefinition docclassCol = new CmsListColumnDefinition(LIST_COLUMN_DOCCLASS); 364 docclassCol.setAlign(CmsListColumnAlignEnum.ALIGN_LEFT); 365 docclassCol.setName(Messages.get().container(Messages.GUI_LIST_DOCTYPE_COL_DOCCLASS_0)); 366 docclassCol.setWidth("45%"); 367 metadata.addColumn(docclassCol); 368 369 } 370 371 374 protected void setIndependentActions(CmsListMetadata metadata) { 375 376 CmsListItemDetails mimetypeDetails = new CmsListItemDetails(LIST_DETAIL_MIMETYPES); 378 mimetypeDetails.setAtColumn(LIST_COLUMN_NAME); 379 mimetypeDetails.setVisible(false); 380 mimetypeDetails.setShowActionName(Messages.get().container(Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_SHOW_0)); 381 mimetypeDetails.setShowActionHelpText(Messages.get().container( 382 Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_SHOW_HELP_0)); 383 mimetypeDetails.setHideActionName(Messages.get().container(Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_HIDE_0)); 384 mimetypeDetails.setHideActionHelpText(Messages.get().container( 385 Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_HIDE_HELP_0)); 386 mimetypeDetails.setName(Messages.get().container(Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_NAME_0)); 387 mimetypeDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 388 Messages.GUI_LIST_DOCTYPE_DETAIL_MIMETYPES_NAME_0))); 389 metadata.addItemDetails(mimetypeDetails); 390 391 CmsListItemDetails resourceDetails = new CmsListItemDetails(LIST_DETAIL_RESOURCETYPES); 393 resourceDetails.setAtColumn(LIST_COLUMN_NAME); 394 resourceDetails.setVisible(false); 395 resourceDetails.setShowActionName(Messages.get().container( 396 Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_SHOW_0)); 397 resourceDetails.setShowActionHelpText(Messages.get().container( 398 Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_SHOW_HELP_0)); 399 resourceDetails.setHideActionName(Messages.get().container( 400 Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_HIDE_0)); 401 resourceDetails.setHideActionHelpText(Messages.get().container( 402 Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_HIDE_HELP_0)); 403 resourceDetails.setName(Messages.get().container(Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_NAME_0)); 404 resourceDetails.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container( 405 Messages.GUI_LIST_DOCTYPE_DETAIL_RESOURCETYPES_NAME_0))); 406 metadata.addItemDetails(resourceDetails); 407 408 } 409 410 413 protected void setMultiActions(CmsListMetadata metadata) { 414 415 CmsListMultiAction addMultiAction = new CmsListMultiAction(LIST_MACTION_REMOVE_DOCTYPE); 417 addMultiAction.setName(Messages.get().container(Messages.GUI_LIST_SEARCHINDEX_MACTION_REMOVE_DOCTYPE_NAME_0)); 418 addMultiAction.setHelpText(Messages.get().container( 419 Messages.GUI_LIST_SEARCHINDEX_MACTION_REMOVE_DOCTYPE_NAME_HELP_0)); 420 addMultiAction.setIconPath(ICON_MULTI_MINUS); 421 metadata.addMultiAction(addMultiAction); 422 } 423 424 427 protected void validateParamaters() throws Exception { 428 429 if (getParamIndexsource() == null) { 431 throw new CmsIllegalStateException(Messages.get().container( 432 Messages.ERR_SEARCHINDEX_EDIT_MISSING_PARAM_1, 433 A_CmsEditIndexSourceDialog.PARAM_INDEXSOURCE)); 434 } 435 } 436 437 443 protected void writeConfiguration(boolean refresh) { 444 445 OpenCms.writeConfiguration(CmsSearchConfiguration.class); 447 if (refresh) { 448 refreshList(); 449 } 450 } 451 452 459 private List documentTypes() { 460 461 CmsSearchManager manager = OpenCms.getSearchManager(); 462 CmsSearchIndexSource indexsource = manager.getIndexSource(getParamIndexsource()); 463 List result; 464 if (indexsource != null) { 465 List doctypeNames = indexsource.getDocumentTypes(); 466 467 result = new ArrayList (doctypeNames.size()); 469 Iterator it = doctypeNames.iterator(); 470 String doctypename = ""; 471 CmsSearchDocumentType doctype; 472 while (it.hasNext()) { 473 doctypename = (String )it.next(); 474 if (doctypename != null) { 475 doctype = manager.getDocumentTypeConfig(doctypename); 476 if (doctype != null) { 477 result.add(doctype); 478 } 479 } 480 } 481 } else { 482 result = new ArrayList (0); 483 if (LOG.isErrorEnabled()) { 484 LOG.error(Messages.get().getBundle().key(Messages.ERR_SEARCHINDEX_EDIT_MISSING_PARAM_1, "indexsource")); 485 } 486 487 } 488 return result; 489 } 490 491 498 private void fillDetailMimetypes(CmsListItem item, String detailId) { 499 500 CmsSearchManager searchManager = OpenCms.getSearchManager(); 501 StringBuffer html = new StringBuffer (); 502 503 String doctypeName = (String )item.get(LIST_COLUMN_NAME); 504 CmsSearchDocumentType docType = searchManager.getDocumentTypeConfig(doctypeName); 505 506 Iterator itMimetypes = docType.getMimeTypes().iterator(); 508 html.append("<ul>\n"); 509 while (itMimetypes.hasNext()) { 510 html.append(" <li>\n").append(" ").append(itMimetypes.next()).append("\n"); 511 html.append(" </li>"); 512 } 513 514 html.append("</ul>\n"); 515 item.set(detailId, html.toString()); 516 } 517 518 525 private void fillDetailResourceTypes(CmsListItem item, String detailId) { 526 527 CmsSearchManager searchManager = OpenCms.getSearchManager(); 528 StringBuffer html = new StringBuffer (); 529 530 String doctypeName = (String )item.get(LIST_COLUMN_NAME); 531 CmsSearchDocumentType docType = searchManager.getDocumentTypeConfig(doctypeName); 532 533 Iterator itResourcetypes = docType.getResourceTypes().iterator(); 535 html.append("<ul>\n"); 536 while (itResourcetypes.hasNext()) { 537 html.append(" <li>\n").append(" ").append(itResourcetypes.next()).append("\n"); 538 html.append(" </li>"); 539 } 540 541 html.append("</ul>\n"); 542 item.set(detailId, html.toString()); 543 } 544 } 545 | Popular Tags |