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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ui.mapping;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.team.core.mapping.IMergeContext;
import org.eclipse.team.core.mapping.ISynchronizationContext;
import org.eclipse.team.core.mapping.provider.SynchronizationContext;
import org.eclipse.team.internal.ui.Policy;
import org.eclipse.team.internal.ui.TeamUIMessages;
import org.eclipse.team.ui.mapping.SynchronizationOperation;
import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
import org.eclipse.team.ui.synchronize.ModelMergeOperation;
public final class MergeAllOperation extends SynchronizationOperation {
private final IMergeContext context;
private final String jobName;
public MergeAllOperation(String jobName, ISynchronizePageConfiguration configuration, Object[] elements, IMergeContext context) {
super(configuration, elements);
this.jobName = jobName;
this.context = context;
}
/* (non-Javadoc)
* @see org.eclipse.team.ui.mapping.SynchronizationOperation#execute(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void execute(IProgressMonitor monitor) throws InvocationTargetException,
InterruptedException {
new ModelMergeOperation(getPart(), ((SynchronizationContext)context).getScopeManager()) {
@Override
public boolean isPreviewRequested() {
return false;
}
@Override
protected void initializeContext(IProgressMonitor monitor) throws CoreException {
monitor.beginTask(null, 10);
monitor.done();
}
@Override
protected ISynchronizationContext getContext() {
return context;
}
@Override
protected void executeMerge(IProgressMonitor monitor) throws CoreException {
monitor.beginTask(null, 100);
if (!hasChangesOfInterest()) {
handleNoChanges();
} else if (isPreviewRequested()) {
handlePreviewRequest();
} else {
IStatus status = ModelMergeOperation.validateMerge(getMergeContext(), Policy.subMonitorFor(monitor, 10));
if (!status.isOK()) {
if (!promptToContinue(status))
return;
}
status = performMerge(Policy.subMonitorFor(monitor, 90));
if (!status.isOK()) {
handleMergeFailure(status);
}
}
monitor.done();
}
private IMergeContext getMergeContext() {
return (IMergeContext)getContext();
}
private boolean promptToContinue(final IStatus status) {
final boolean[] result = new boolean[] { false };
Runnable runnable = new Runnable() {
@Override
public void run() {
ErrorDialog dialog = new ErrorDialog(getShell(), TeamUIMessages.ModelMergeOperation_0, TeamUIMessages.ModelMergeOperation_1, status, IStatus.ERROR | IStatus.WARNING | IStatus.INFO) {
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL,
false);
createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL,
true);
createDetailsButton(parent);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.ErrorDialog#buttonPressed(int)
*/
@Override
protected void buttonPressed(int id) {
if (id == IDialogConstants.YES_ID)
super.buttonPressed(IDialogConstants.OK_ID);
else if (id == IDialogConstants.NO_ID)
super.buttonPressed(IDialogConstants.CANCEL_ID);
super.buttonPressed(id);
}
};
int code = dialog.open();
result[0] = code == 0;
}
};
getShell().getDisplay().syncExec(runnable);
return (result[0]);
}
}.run(monitor);
}
/* (non-Javadoc)
* @see org.eclipse.team.ui.TeamOperation#canRunAsJob()
*/
@Override
protected boolean canRunAsJob() {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.team.ui.TeamOperation#getJobName()
*/
@Override
protected String getJobName() {;
return jobName;
}
}
|