1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* 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.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.CVSTag;
import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
import org.eclipse.team.internal.ccvs.ui.Policy;
import org.eclipse.team.internal.ccvs.ui.operations.ReplaceOperation;
import org.eclipse.team.internal.ccvs.ui.tags.TagSelectionDialog;
import org.eclipse.team.internal.ccvs.ui.tags.TagSource;
/**
* Action for replace with tag.
*/
public class ReplaceWithTagAction extends WorkspaceAction {
/*
* Method declared on IActionDelegate.
*/
public void execute(IAction action) throws InterruptedException, InvocationTargetException {
// Setup the holders
final IResource[][] resources = new IResource[][] {null};
final CVSTag[] tag = new CVSTag[] {null};
final boolean[] recurse = new boolean[] {true};
// Show a busy cursor while display the tag selection dialog
run(new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
try {
resources[0] =
checkOverwriteOfDirtyResources(
getSelectedResources(),
null /* no progress just a busy cursor for now */);
} catch (CVSException e) {
throw new InvocationTargetException(e);
}
if(resources[0].length == 0) {
// nothing to do
return;
}
TagSelectionDialog dialog = new TagSelectionDialog(getShell(), TagSource.create(resources[0]),
Policy.bind("ReplaceWithTagAction.message"), //$NON-NLS-1$
Policy.bind("TagSelectionDialog.Select_a_Tag_1"), //$NON-NLS-1$
TagSelectionDialog.INCLUDE_ALL_TAGS,
true, /*show recurse*/
IHelpContextIds.REPLACE_TAG_SELECTION_DIALOG); //$NON-NLS-1$
dialog.setBlockOnOpen(true);
if (dialog.open() == Dialog.CANCEL) {
return;
}
tag[0] = dialog.getResult();
recurse[0] = dialog.getRecursive();
// For non-projects determine if the tag being loaded is the same as the resource's parent
// If it's not, warn the user that they will have strange sync behavior
try {
if(!CVSAction.checkForMixingTags(getShell(), resources[0], tag[0])) {
tag[0] = null;
return;
}
} catch (CVSException e) {
throw new InvocationTargetException(e);
}
}
}, false /* cancelable */, PROGRESS_BUSYCURSOR); //$NON-NLS-1$
if (resources[0] == null || resources[0].length == 0 || tag[0] == null) return;
// Peform the replace in the background
new ReplaceOperation(getTargetPart(), resources[0], tag[0], recurse[0]).run();
}
/**
* @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle()
*/
protected String getErrorTitle() {
return Policy.bind("ReplaceWithTagAction.replace"); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForNonExistantResources()
*/
protected boolean isEnabledForNonExistantResources() {
return true;
}
}
|