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.ui.apps.sitemanager; 029 030import org.opencms.file.CmsResource; 031import org.opencms.lock.CmsLockException; 032import org.opencms.main.CmsException; 033import org.opencms.main.CmsLog; 034import org.opencms.site.CmsSite; 035import org.opencms.ui.A_CmsUI; 036import org.opencms.ui.CmsVaadinUtils; 037import org.opencms.ui.apps.Messages; 038import org.opencms.ui.components.CmsBasicDialog; 039import org.opencms.ui.components.CmsResourceInfo; 040 041import java.util.ArrayList; 042import java.util.List; 043import java.util.Set; 044 045import org.apache.commons.logging.Log; 046 047import com.vaadin.ui.Button; 048import com.vaadin.ui.Button.ClickEvent; 049import com.vaadin.ui.Button.ClickListener; 050import com.vaadin.v7.shared.ui.label.ContentMode; 051import com.vaadin.v7.ui.CheckBox; 052import com.vaadin.v7.ui.Label; 053import com.vaadin.v7.ui.VerticalLayout; 054 055/** 056 * Dialog for deleting Sites.<p> 057 */ 058public class CmsDeleteSiteDialog extends CmsBasicDialog { 059 060 /** The logger for this class. */ 061 static Log LOG = CmsLog.getLog(CmsDeleteSiteDialog.class.getName()); 062 063 /**vaadin serial id.*/ 064 private static final long serialVersionUID = 4861877088383896218L; 065 066 /** The site manager instance.*/ 067 CmsSiteManager m_manager; 068 069 /**cancel button.*/ 070 private Button m_cancelButton; 071 072 /**check box: should resources be deleted?*/ 073 private CheckBox m_deleteResources; 074 075 /**ok button.*/ 076 private Button m_okButton; 077 078 /**sites to delete.*/ 079 private final List<CmsSite> m_sitesToDelete = new ArrayList<CmsSite>(); 080 081 /** 082 * Public constructor.<p> 083 * 084 * @param manager the site manager instance 085 * @param data with values for siteroots to delete. 086 */ 087 public CmsDeleteSiteDialog(CmsSiteManager manager, Set<String> data) { 088 089 m_manager = manager; 090 091 for (String site : data) { 092 m_sitesToDelete.add(manager.getElement(site)); 093 } 094 095 displayResourceInfoDirectly(getResourceInfos()); 096 097 setContent(getContent()); 098 m_okButton = new Button(CmsVaadinUtils.getMessageText(org.opencms.workplace.Messages.GUI_DIALOG_BUTTON_OK_0)); 099 m_cancelButton = new Button( 100 CmsVaadinUtils.getMessageText(org.opencms.workplace.Messages.GUI_DIALOG_BUTTON_CANCEL_0)); 101 addButton(m_okButton); 102 addButton(m_cancelButton); 103 //Set Clicklistener 104 m_cancelButton.addClickListener(new ClickListener() { 105 106 private static final long serialVersionUID = -5769891739879269176L; 107 108 public void buttonClick(ClickEvent event) { 109 110 m_manager.closeDialogWindow(false); 111 } 112 }); 113 m_okButton.addClickListener(new ClickListener() { 114 115 private static final long serialVersionUID = 6932464669055039855L; 116 117 public void buttonClick(ClickEvent event) { 118 119 submit(); 120 m_manager.closeDialogWindow(true); 121 } 122 }); 123 } 124 125 /** 126 * delete sites.<p> 127 */ 128 void submit() { 129 130 List<String> siteRootsToDelete = new ArrayList<String>(); 131 for (CmsSite site : m_sitesToDelete) { 132 133 String currentSite = A_CmsUI.getCmsObject().getRequestContext().getSiteRoot(); 134 if (currentSite.equals(site.getSiteRoot())) { 135 A_CmsUI.getCmsObject().getRequestContext().setSiteRoot(""); 136 } 137 siteRootsToDelete.add(site.getSiteRoot()); 138 } 139 m_manager.deleteElements(siteRootsToDelete); 140 if (m_deleteResources.getValue().booleanValue()) { 141 for (CmsSite site : m_sitesToDelete) { 142 try { 143 m_manager.getRootCmsObject().lockResource(site.getSiteRoot()); 144 } catch (CmsException e) { 145 LOG.error("unable to lock resource"); 146 } 147 try { 148 m_manager.getRootCmsObject().deleteResource( 149 site.getSiteRoot(), 150 CmsResource.DELETE_PRESERVE_SIBLINGS); 151 try { 152 m_manager.getRootCmsObject().unlockResource(site.getSiteRoot()); 153 } catch (CmsLockException e) { 154 LOG.info("Unlock failed.", e); 155 } 156 } catch (CmsException e) { 157 //ok, resource was not published and can not be unlocked anymore.. 158 } 159 } 160 } 161 } 162 163 /** 164 * Creates content of dialog containing CheckBox if resources should be deleted and a messages.<p> 165 * 166 * @return vertical layout component. 167 */ 168 private VerticalLayout getContent() { 169 170 String message; 171 172 if (m_sitesToDelete.size() == 1) { 173 message = CmsVaadinUtils.getMessageText( 174 Messages.GUI_SITE_CONFIRM_DELETE_SITE_1, 175 m_sitesToDelete.get(0).getTitle()); 176 } else { 177 message = ""; 178 for (CmsSite site : m_sitesToDelete) { 179 if (message.length() > 0) { 180 message += ", "; 181 } 182 message += site.getTitle(); 183 } 184 message = CmsVaadinUtils.getMessageText(Messages.GUI_SITE_CONFIRM_DELETE_SITES_1, message); 185 } 186 187 VerticalLayout layout = new VerticalLayout(); 188 189 m_deleteResources = new CheckBox(); 190 m_deleteResources.setCaption(CmsVaadinUtils.getMessageText(Messages.GUI_SITE_DELETE_RESOURCES_0)); 191 m_deleteResources.setDescription(CmsVaadinUtils.getMessageText(Messages.GUI_SITE_DELETE_RESOURCES_HELP_0)); 192 193 layout.addComponent(m_deleteResources); 194 195 Label label = new Label(); 196 label.setContentMode(ContentMode.HTML); 197 label.setValue(message); 198 199 layout.addComponent(label); 200 return layout; 201 } 202 203 /** 204 * Returns a list of CmsResourceInfo objects.<p> 205 * 206 * @return list of cmsresourceinfo. 207 */ 208 private List<CmsResourceInfo> getResourceInfos() { 209 210 List<CmsResourceInfo> infos = new ArrayList<CmsResourceInfo>(); 211 for (CmsSite site : m_sitesToDelete) { 212 infos.add( 213 new CmsResourceInfo(site.getTitle(), site.getSiteRoot(), m_manager.getFavIcon(site.getSiteRoot()))); 214 } 215 return infos; 216 } 217}