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.toolbar; 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.client.ui.CmsCreatableListItem; 034import org.opencms.ade.sitemap.client.ui.CmsCreatableListItem.NewEntryType; 035import org.opencms.ade.sitemap.client.ui.css.I_CmsSitemapLayoutBundle; 036import org.opencms.ade.sitemap.shared.CmsNewResourceInfo; 037import org.opencms.gwt.client.ui.CmsList; 038import org.opencms.gwt.client.ui.CmsListItemWidget; 039import org.opencms.gwt.client.ui.I_CmsButton; 040import org.opencms.gwt.client.ui.I_CmsListItem; 041import org.opencms.gwt.shared.CmsAdditionalInfoBean; 042import org.opencms.gwt.shared.CmsGwtLog; 043import org.opencms.gwt.shared.CmsListInfoBean; 044import org.opencms.util.CmsStringUtil; 045 046import com.google.gwt.user.client.ui.Label; 047import com.google.gwt.user.client.ui.SimplePanel; 048 049/** 050 * Sitemap toolbar new menu button.<p> 051 * 052 * @since 8.0.0 053 */ 054public class CmsToolbarNewButton extends A_CmsToolbarListMenuButton { 055 056 /** The tag for identifying redirect items. */ 057 public static final String TAG_REDIRECT = "redirect"; 058 059 /** The tag for identifying items from the special tab. */ 060 public static final String TAG_SPECIAL = "special"; 061 062 /** The special elements list. */ 063 private CmsList<I_CmsListItem> m_detailList; 064 065 /** The function element list. */ 066 private CmsList<I_CmsListItem> m_functionList; 067 068 /** The new-elements list. */ 069 private CmsList<I_CmsListItem> m_newElementsList; 070 071 /** 072 * Constructor.<p> 073 * 074 * @param toolbar the toolbar instance 075 * @param controller the sitemap controller 076 */ 077 public CmsToolbarNewButton(CmsSitemapToolbar toolbar, CmsSitemapController controller) { 078 079 super( 080 Messages.get().key(Messages.GUI_TOOLBAR_NEW_BUTTON_TITLE_0), 081 I_CmsButton.ButtonData.WAND_BUTTON.getIconClass(), 082 toolbar, 083 controller); 084 } 085 086 /** 087 * @see org.opencms.ade.sitemap.client.toolbar.A_CmsToolbarListMenuButton#initContent() 088 */ 089 @Override 090 protected boolean initContent() { 091 092 while (m_tabs.getTabCount() > 0) { 093 m_tabs.removeTab(0); 094 } 095 boolean hasTabs = false; 096 m_newElementsList = new CmsList<I_CmsListItem>(); 097 for (CmsNewResourceInfo info : getController().getData().getNewElementInfos()) { 098 m_newElementsList.add(makeNewElementItem(info)); 099 } 100 if (m_newElementsList.getWidgetCount() > 0) { 101 hasTabs = true; 102 addTab(createTab(m_newElementsList), Messages.get().key(Messages.GUI_NEW_PAGES_TAB_TITLE_0)); 103 } 104 m_detailList = new CmsList<I_CmsListItem>(); 105 if (getController().getData().canEditDetailPages()) { 106 for (CmsNewResourceInfo typeInfo : getController().getData().getResourceTypeInfos()) { 107 if (CmsStringUtil.isEmptyOrWhitespaceOnly(typeInfo.getCreateParameter())) { 108 CmsCreatableListItem item = makeDetailPageItem(typeInfo); 109 m_detailList.add(item); 110 } 111 } 112 } 113 114 if (getController().canManageDetailPages()) { 115 for (CmsNewResourceInfo typeInfo : getController().getData().getResourceTypeInfos()) { 116 if (!CmsStringUtil.isEmptyOrWhitespaceOnly(typeInfo.getCreateParameter())) { 117 CmsCreatableListItem item = makeDetailPageItem(typeInfo); 118 m_detailList.add(item); 119 } 120 } 121 } 122 if (m_detailList.getWidgetCount() > 0) { 123 hasTabs = true; 124 addTab(createTab(m_detailList), Messages.get().key(Messages.GUI_SPECIAL_TAB_TITLE_0)); 125 } 126 127 m_functionList = new CmsList<I_CmsListItem>(); 128 m_functionList.add(makeRedirectItem()); 129 m_functionList.add(makeNavigationLevelItem()); 130 131 if (m_functionList.getWidgetCount() > 0) { 132 hasTabs = true; 133 String tabLabel = Messages.get().key(Messages.GUI_FUNCTION_TAB_TITLE_0); 134 addTab(createTab(m_functionList), tabLabel); 135 } 136 137 if (!hasTabs) { 138 // no new elements available, show appropriate message 139 140 //TODO: improve styling, add localization 141 Label messageLabel = new Label(Messages.get().key(Messages.GUI_NO_CREATABLE_ELEMENTS_0)); 142 messageLabel.addStyleName(I_CmsSitemapLayoutBundle.INSTANCE.clipboardCss().menuTabContainer()); 143 SimplePanel content = new SimplePanel(); 144 content.setWidget(messageLabel); 145 setMenuWidget(messageLabel); 146 } 147 return false; 148 } 149 150 /** 151 * Creates a list item representing a detail page to be created.<p> 152 * 153 * @param typeInfo the bean for the type for which the detail page item should be created 154 * 155 * @return the detail page list item 156 */ 157 private CmsCreatableListItem makeDetailPageItem(CmsNewResourceInfo typeInfo) { 158 159 CmsListInfoBean info = new CmsListInfoBean(); 160 String subtitle = typeInfo.getSubTitle(); 161 String title = Messages.get().key( 162 typeInfo.isFunction() ? Messages.GUI_FUNCTION_PAGE_TITLE_1 : Messages.GUI_DETAIL_PAGE_TITLE_1, 163 typeInfo.getTitle()); 164 165 info.setTitle(title); 166 info.setSubTitle(subtitle); 167 CmsListItemWidget widget = new CmsListItemWidget(info); 168 widget.setIcon(typeInfo.getBigIconClasses()); 169 CmsCreatableListItem listItem = new CmsCreatableListItem(widget, typeInfo, NewEntryType.detailpage); 170 listItem.initMoveHandle(CmsSitemapView.getInstance().getTree().getDnDHandler()); 171 return listItem; 172 } 173 174 /** 175 * Creates a list item representing a redirect.<p> 176 * 177 * @return the new list item 178 */ 179 private CmsCreatableListItem makeNavigationLevelItem() { 180 181 CmsNewResourceInfo typeInfo = getController().getData().getNewNavigationLevelElementInfo(); 182 CmsListItemWidget widget = new CmsListItemWidget(typeInfo); 183 CmsCreatableListItem listItem = new CmsCreatableListItem(widget, typeInfo, NewEntryType.regular); 184 listItem.initMoveHandle(CmsSitemapView.getInstance().getTree().getDnDHandler()); 185 return listItem; 186 } 187 188 /** 189 * Create a new-element list item.<p> 190 * 191 * @param typeInfo the new-element info 192 * 193 * @return the list item 194 */ 195 private CmsCreatableListItem makeNewElementItem(final CmsNewResourceInfo typeInfo) { 196 197 CmsListItemWidget widget = new CmsListItemWidget(typeInfo); 198 if ((typeInfo.getDescription() != null) && (typeInfo.getDescription().trim().length() > 0)) { 199 widget.addAdditionalInfo( 200 new CmsAdditionalInfoBean( 201 Messages.get().key(Messages.GUI_LABEL_DESCRIPTION_0), 202 typeInfo.getDescription(), 203 null)); 204 } 205 if (typeInfo.getVfsPath() != null) { 206 widget.addAdditionalInfo( 207 new CmsAdditionalInfoBean( 208 Messages.get().key(Messages.GUI_LABEL_VFSPATH_0), 209 typeInfo.getVfsPath(), 210 null)); 211 } 212 if (typeInfo.getDate() != null) { 213 widget.addAdditionalInfo( 214 new CmsAdditionalInfoBean(Messages.get().key(Messages.GUI_LABEL_DATE_0), typeInfo.getDate(), null)); 215 } 216 CmsCreatableListItem listItem = new CmsCreatableListItem(widget, typeInfo, NewEntryType.regular); 217 listItem.initMoveHandle(CmsSitemapView.getInstance().getTree().getDnDHandler(), true); 218 return listItem; 219 } 220 221 /** 222 * Creates a list item representing a redirect.<p> 223 * 224 * @return the new list item 225 */ 226 private CmsCreatableListItem makeRedirectItem() { 227 228 CmsNewResourceInfo typeInfo = getController().getData().getNewRedirectElementInfo(); 229 CmsListInfoBean info = new CmsListInfoBean(); 230 info.setTitle(typeInfo.getTitle()); 231 info.setSubTitle(Messages.get().key(Messages.GUI_REDIRECT_SUBTITLE_0)); 232 CmsListItemWidget widget = new CmsListItemWidget(info); 233 widget.setIcon(typeInfo.getBigIconClasses()); 234 CmsCreatableListItem listItem = new CmsCreatableListItem(widget, typeInfo, NewEntryType.redirect); 235 listItem.initMoveHandle(CmsSitemapView.getInstance().getTree().getDnDHandler()); 236 return listItem; 237 } 238}