001/* 002 * This library is part of OpenCms - 003 * the Open Source Content Management System 004 * 005 * Copyright (c) Alkacon Software GmbH & Co. KG (https://www.alkacon.com) 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * For further information about Alkacon Software, please see the 018 * company website: https://www.alkacon.com 019 * 020 * For further information about OpenCms, please see the 021 * project website: https://www.opencms.org 022 * 023 * You should have received a copy of the GNU Lesser General Public 024 * License along with this library; if not, write to the Free Software 025 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 026 */ 027 028package org.opencms.ade.sitemap.client.hoverbar; 029 030import org.opencms.ade.sitemap.client.CmsSitemapView; 031import org.opencms.ade.sitemap.client.Messages; 032import org.opencms.ade.sitemap.client.control.CmsSitemapController; 033import org.opencms.ade.sitemap.shared.CmsClientSitemapEntry; 034import org.opencms.ade.sitemap.shared.CmsSitemapData; 035import org.opencms.gwt.client.ui.A_CmsListItemSelectDialog; 036import org.opencms.gwt.client.ui.CmsConfirmDialog; 037import org.opencms.gwt.client.ui.CmsListItemWidget; 038import org.opencms.gwt.client.ui.I_CmsConfirmDialogHandler; 039import org.opencms.gwt.shared.CmsListInfoBean; 040import org.opencms.util.CmsStringUtil; 041 042import java.util.List; 043 044/** 045 * Sitemap context menu create sub sitemap entry.<p> 046 * 047 * @since 8.0.0 048 */ 049public class CmsSubSitemapMenuEntry extends A_CmsSitemapMenuEntry { 050 051 /** 052 * Selection dialog for sitemap folder types.<p> 053 */ 054 protected class SitemapTypeDialog extends A_CmsListItemSelectDialog<CmsListInfoBean> { 055 056 /** 057 * Creates a new instance.<p> 058 * 059 * @param itemInfos the list info beans for the different sitemap types 060 */ 061 public SitemapTypeDialog(List<CmsListInfoBean> itemInfos) { 062 063 super( 064 itemInfos, 065 Messages.get().key(Messages.GUI_SITEMAP_TYPE_CHOICE_TITLE_0), 066 Messages.get().key(Messages.GUI_SITEMAP_TYPE_CHOICE_TEXT_0)); 067 068 } 069 070 /** 071 * @see org.opencms.gwt.client.ui.A_CmsListItemSelectDialog#handleSelection(org.opencms.gwt.shared.CmsListInfoBean) 072 */ 073 @Override 074 protected void handleSelection(CmsListInfoBean info) { 075 076 CmsSitemapController controller = CmsSitemapView.getInstance().getController(); 077 String typeName = info.getResourceType(); 078 final CmsClientSitemapEntry entry = getHoverbar().getEntry(); 079 controller.createSitemapSubEntry(entry, typeName); 080 } 081 082 } 083 084 /** 085 * Constructor.<p> 086 * 087 * @param hoverbar the hoverbar 088 */ 089 public CmsSubSitemapMenuEntry(CmsSitemapHoverbar hoverbar) { 090 091 super(hoverbar); 092 setLabel(Messages.get().key(Messages.GUI_HOVERBAR_SUBSITEMAP_0)); 093 setActive(true); 094 } 095 096 /** 097 * @see org.opencms.gwt.client.ui.contextmenu.I_CmsContextMenuEntry#execute() 098 */ 099 public void execute() { 100 101 if (isCreateFolderMode()) { 102 executeFolderMode(); 103 } else { 104 executeConvertMode(); 105 } 106 } 107 108 /** 109 * @see org.opencms.ade.sitemap.client.hoverbar.A_CmsSitemapMenuEntry#onShow() 110 */ 111 @Override 112 public void onShow() { 113 114 CmsSitemapController controller = getHoverbar().getController(); 115 CmsClientSitemapEntry entry = getHoverbar().getEntry(); 116 boolean show = controller.isEditable() 117 && CmsSitemapView.getInstance().isNavigationMode() 118 && entry.isInNavigation() 119 && entry.isFolderType() 120 && !controller.isRoot(entry.getSitePath()); 121 if (isCreateFolderMode()) { 122 setVisible(show); 123 setActive(show); 124 setDisabledReason(null); 125 } else { 126 setVisible(show); 127 if (show && !entry.isEditable()) { 128 setActive(false); 129 setDisabledReason(controller.getNoEditReason(entry)); 130 } else { 131 setActive(true); 132 setDisabledReason(null); 133 } 134 } 135 } 136 137 /** 138 * @see org.opencms.gwt.client.ui.contextmenu.I_CmsContextMenuEntry#execute() 139 */ 140 private void executeConvertMode() { 141 142 final CmsSitemapController controller = getHoverbar().getController(); 143 String confirmTitle = Messages.get().key(Messages.GUI_SUBSITEMAP_CONFIRM_TITLE_0); 144 String confirmMessage = Messages.get().key(Messages.GUI_SUBSITEMAP_CONFIRM_TEXT_0); 145 CmsConfirmDialog confirmDialog = new CmsConfirmDialog(confirmTitle, confirmMessage); 146 147 final CmsClientSitemapEntry entry = getHoverbar().getEntry(); 148 149 CmsListInfoBean infoBean = new CmsListInfoBean(); 150 infoBean.setTitle(entry.getTitle()); 151 infoBean.setSubTitle(entry.getSitePath()); 152 infoBean.addAdditionalInfo(Messages.get().key(Messages.GUI_NAME_0), entry.getName()); 153 String shownPath = entry.getVfsPath(); 154 if (CmsStringUtil.isEmptyOrWhitespaceOnly(shownPath)) { 155 shownPath = "-"; 156 } 157 infoBean.addAdditionalInfo(Messages.get().key(Messages.GUI_VFS_PATH_0), shownPath); 158 // showing the resource type icon of the default file in navigation mode 159 infoBean.setResourceType( 160 CmsStringUtil.isNotEmptyOrWhitespaceOnly(entry.getDefaultFileType()) 161 ? entry.getDefaultFileType() 162 : entry.getResourceTypeName()); 163 confirmDialog.addTopWidget(new CmsListItemWidget(infoBean)); 164 confirmDialog.setHandler(new I_CmsConfirmDialogHandler() { 165 166 /** 167 * @see org.opencms.gwt.client.ui.I_CmsCloseDialogHandler#onClose() 168 */ 169 public void onClose() { 170 171 // do nothing 172 } 173 174 /** 175 * @see org.opencms.gwt.client.ui.I_CmsConfirmDialogHandler#onOk() 176 */ 177 public void onOk() { 178 179 controller.createSubSitemap(entry.getId()); 180 } 181 }); 182 confirmDialog.center(); 183 } 184 185 /** 186 * @see org.opencms.gwt.client.ui.contextmenu.I_CmsContextMenuEntry#execute() 187 */ 188 private void executeFolderMode() { 189 190 final CmsSitemapController controller = getHoverbar().getController(); 191 SitemapTypeDialog dialog = new SitemapTypeDialog(controller.getData().getSubsitemapFolderTypeInfos()); 192 dialog.center(); 193 } 194 195 /** 196 * Checks if new folders should be created for subsitemaps.<p> 197 * 198 * @return true if new folders should be created for subsitemaps 199 */ 200 private boolean isCreateFolderMode() { 201 202 CmsSitemapController controller = getHoverbar().getController(); 203 CmsSitemapData data = controller.getData(); 204 return data.isCreateNewFoldersForSubsitemaps() 205 && (data.getSubsitemapFolderTypeInfos() != null) 206 && !data.getSubsitemapFolderTypeInfos().isEmpty(); 207 } 208 209}