blob: 4e0d77c11d56078ae7ca5d0a1188c7f2780fa16b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.actions;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.ICVSResource;
import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
import org.eclipse.team.internal.ccvs.ui.operations.DisconnectOperation;
import org.eclipse.ui.PlatformUI;
/**
* Unmanage action removes the cvs feature from a project and optionally
* deletes the CVS meta information that is stored on disk.
*/
public class UnmanageAction extends WorkspaceAction {
static class DeleteProjectDialog extends MessageDialog {
boolean deleteContent = false;
Button radio1;
Button radio2;
DeleteProjectDialog(Shell parentShell, IProject[] projects) {
super(
parentShell,
getTitle(projects),
null, // accept the default window icon
getMessage(projects),
MessageDialog.QUESTION,
new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL},
0); // yes is the default
}
static String getTitle(IProject[] projects) {
if (projects.length == 1)
return CVSUIMessages.Unmanage_title;
else
return CVSUIMessages.Unmanage_titleN;
}
static String getMessage(IProject[] projects) {
if (projects.length == 1) {
IProject project = projects[0];
return NLS.bind(CVSUIMessages.Unmanage_message, new String[] { project.getName() });
}
else {
return NLS.bind(CVSUIMessages.Unmanage_messageN, new String[] { Integer.valueOf(projects.length).toString() });
}
}
@Override
protected Control createCustomArea(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
radio1 = new Button(composite, SWT.RADIO);
radio1.addSelectionListener(selectionListener);
radio1.setText(CVSUIMessages.Unmanage_option2);
radio2 = new Button(composite, SWT.RADIO);
radio2.addSelectionListener(selectionListener);
radio2.setText(CVSUIMessages.Unmanage_option1);
// set initial state
radio1.setSelection(deleteContent);
radio2.setSelection(!deleteContent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.DISCONNECT_ACTION);
return composite;
}
private SelectionListener selectionListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Button button = (Button) e.widget;
if (button.getSelection()) {
deleteContent = (button == radio1);
}
}
};
public boolean getDeleteContent() {
return deleteContent;
}
}
private boolean deleteContent = false;
@Override
public void execute(IAction action) throws InterruptedException, InvocationTargetException {
if(confirmDeleteProjects()) {
new DisconnectOperation(getTargetPart(), getSelectedProjects(), deleteContent)
.run();
}
}
boolean confirmDeleteProjects() {
final int[] result = new int[] { Window.OK };
IProject[] projects = getSelectedProjects();
final DeleteProjectDialog dialog = new DeleteProjectDialog(getShell(), projects);
getShell().getDisplay().syncExec(() -> result[0] = dialog.open());
deleteContent = dialog.getDeleteContent();
return result[0] == 0; // YES
}
@Override
protected String getErrorTitle() {
return CVSUIMessages.Unmanage_unmanagingError;
}
@Override
protected boolean isEnabledForCVSResource(ICVSResource cvsResource) throws CVSException {
IResource resource = cvsResource.getIResource();
return resource != null && resource.getType() == IResource.PROJECT;
}
}