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
|
/*
* Copyright (c) 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.ui.actions;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.internal.ui.messages.Messages;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.ui.actions.LongRunningAction;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IWorkbenchPage;
/**
* @author Eike Stepper
*/
public abstract class TransactionalBackgroundAction extends LongRunningAction
{
private final CDOObject object;
public TransactionalBackgroundAction(IWorkbenchPage page, String text, String toolTipText, ImageDescriptor image,
CDOObject object)
{
super(page, text, toolTipText, image);
this.object = object;
}
public final CDOObject getObject()
{
return object;
}
protected CDOTransaction openTransaction(CDOObject object)
{
CDOView view = object.cdoView();
CDOTransaction transaction = view.getSession().openTransaction(view.getBranch());
CDOUtil.configureView(transaction);
return transaction;
}
@Override
protected final void doRun(IProgressMonitor progressMonitor) throws Exception
{
progressMonitor.beginTask(Messages.getString("TransactionalBackgroundAction_1"), 100); //$NON-NLS-1$
CDOTransaction transaction = openTransaction(object);
CDOObject transactionalObject = null;
CDOCommitInfo commitInfo = null;
try
{
transactionalObject = transaction.getObject(object);
progressMonitor.worked(5);
doRun(transaction, transactionalObject, new SubProgressMonitor(progressMonitor, 5));
commitInfo = transaction.commit(new SubProgressMonitor(progressMonitor, 90));
}
finally
{
progressMonitor.done();
transaction.close();
transactionalObject = null;
}
if (commitInfo != null)
{
CDOView view = object.cdoView();
view.waitForUpdate(commitInfo.getTimeStamp(), 5000);
postRun(view, object);
}
}
protected abstract void doRun(CDOTransaction transaction, CDOObject object, IProgressMonitor progressMonitor)
throws Exception;
protected void postRun(CDOView view, CDOObject object)
{
}
}
|