001/* 002 * This library is part of OpenCms - 003 * the Open Source Content Management System 004 * 005 * Copyright (c) Alkacon Software GmbH & Co. KG (http://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: http://www.alkacon.com 019 * 020 * For further information about OpenCms, please see the 021 * project website: http://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.client.ui.CmsCopyModelPageDialog; 034import org.opencms.ade.sitemap.shared.CmsClientSitemapEntry; 035import org.opencms.ade.sitemap.shared.CmsNewResourceInfo; 036import org.opencms.gwt.client.CmsCoreProvider; 037import org.opencms.gwt.client.ui.CmsConfirmDialog; 038import org.opencms.gwt.client.ui.I_CmsConfirmDialogHandler; 039import org.opencms.gwt.shared.CmsListInfoBean; 040import org.opencms.util.CmsUUID; 041 042import com.google.gwt.user.client.rpc.AsyncCallback; 043 044/** 045 * Context menu entry for copying a model page.<p> 046 */ 047public class CmsCopyModelPageMenuEntry extends A_CmsSitemapMenuEntry { 048 049 /** The instance of the dialog for copying a model page. */ 050 CmsCopyModelPageDialog m_dialog; 051 052 /** 053 * Creates a new model page menu entry.<p> 054 * 055 * @param hoverbar the hoverbar 056 */ 057 public CmsCopyModelPageMenuEntry(CmsSitemapHoverbar hoverbar) { 058 059 super(hoverbar); 060 setLabel(Messages.get().key(Messages.GUI_COPY_MODEL_PAGE_0)); 061 setActive(true); 062 } 063 064 /** 065 * Opens the confirmation dialog for editing a model page.<p> 066 * 067 * @param resourceInfo the resource information bean which belongs to the model page to edit 068 */ 069 public static void openEditConfirmDialog(final CmsNewResourceInfo resourceInfo) { 070 071 I_CmsConfirmDialogHandler handler = new I_CmsConfirmDialogHandler() { 072 073 public void onClose() { 074 075 // noop 076 } 077 078 public void onOk() { 079 080 String resourcePath = resourceInfo.getVfsPath(); 081 String siteRoot = CmsCoreProvider.get().getSiteRoot(); 082 if (resourcePath.startsWith(siteRoot)) { 083 resourcePath = resourcePath.substring(siteRoot.length()); 084 // prepend slash if necessary 085 if (!resourcePath.startsWith("/")) { 086 resourcePath = "/" + resourcePath; 087 } 088 } 089 CmsSitemapController controller = CmsSitemapView.getInstance().getController(); 090 controller.leaveEditor(resourcePath); 091 } 092 }; 093 String dialogTitle = Messages.get().key(Messages.GUI_EDIT_MODELPAGE_CONFIRM_TITLE_0); 094 String dialogContent = Messages.get().key(Messages.GUI_EDIT_MODELPAGE_CONFIRM_CONTENT_0); 095 String buttonText = Messages.get().key(Messages.GUI_EDIT_MODELPAGE_OK_0); 096 097 CmsConfirmDialog dialog = new CmsConfirmDialog(dialogTitle, dialogContent); 098 dialog.getOkButton().setText(buttonText); 099 dialog.setHandler(handler); 100 dialog.center(); 101 } 102 103 /** 104 * @see org.opencms.gwt.client.ui.contextmenu.I_CmsContextMenuEntry#execute() 105 */ 106 public void execute() { 107 108 CmsClientSitemapEntry entry = getHoverbar().getEntry(); 109 final CmsUUID id = entry.getId(); 110 CmsListInfoBean listInfo = CmsSitemapView.getInstance().getModelPageEntry(id).getListInfoBean(); 111 m_dialog = new CmsCopyModelPageDialog(listInfo, false, new AsyncCallback<String>() { 112 113 public void onFailure(Throwable caught) { 114 115 // do nothing 116 117 } 118 119 public void onSuccess(String title) { 120 121 if (title != null) { 122 CmsSitemapView.getInstance().getController().createNewModelPage( 123 title, 124 m_dialog.getDescription(), 125 id, 126 false); 127 } 128 } 129 }); 130 m_dialog.center(); 131 } 132 133 /** 134 * @see org.opencms.ade.sitemap.client.hoverbar.A_CmsSitemapMenuEntry#onShow() 135 */ 136 @Override 137 public void onShow() { 138 139 CmsClientSitemapEntry entry = getHoverbar().getEntry(); 140 final CmsUUID id = entry.getId(); 141 boolean show = getHoverbar().getController().isEditable() 142 && CmsSitemapView.getInstance().isModelPageMode() 143 && (CmsSitemapView.getInstance().isModelPageEntry(id) 144 || CmsSitemapView.getInstance().isParentModelPageEntry(id)); 145 setVisible(show); 146 } 147}