]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/argeo-commons/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserTransactionProvider.java
Prepare next development cacle
[gpl/argeo-slc.git] / legacy / argeo-commons / org.argeo.cms.ui.workbench / src / org / argeo / cms / ui / workbench / internal / useradmin / providers / UserTransactionProvider.java
1 package org.argeo.cms.ui.workbench.internal.useradmin.providers;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.argeo.api.cms.CmsLog;
7 import org.argeo.cms.CmsException;
8 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
9 import org.argeo.osgi.transaction.WorkTransaction;
10 import org.eclipse.ui.AbstractSourceProvider;
11 import org.eclipse.ui.ISources;
12
13 /** Observe and notify UI on UserTransaction state changes */
14 public class UserTransactionProvider extends AbstractSourceProvider {
15 private final static CmsLog log = CmsLog
16 .getLog(UserTransactionProvider.class);
17
18 public final static String TRANSACTION_STATE = WorkbenchUiPlugin.PLUGIN_ID
19 + ".userTransactionState";
20 public final static String STATUS_ACTIVE = "status.active";
21 public final static String STATUS_NO_TRANSACTION = "status.noTransaction";
22
23 /* DEPENDENCY INJECTION */
24 private WorkTransaction userTransaction;
25
26 @Override
27 public String[] getProvidedSourceNames() {
28 return new String[] { TRANSACTION_STATE };
29 }
30
31 @Override
32 public Map<String, String> getCurrentState() {
33 Map<String, String> currentState = new HashMap<String, String>(1);
34 currentState.put(TRANSACTION_STATE, getInternalCurrentState());
35 return currentState;
36 }
37
38 @Override
39 public void dispose() {
40 }
41
42 private String getInternalCurrentState() {
43 try {
44 String transactionState;
45 if (userTransaction.isNoTransactionStatus())
46 transactionState = STATUS_NO_TRANSACTION;
47 else
48 // if (userTransaction.getStatus() == Status.STATUS_ACTIVE)
49 transactionState = STATUS_ACTIVE;
50 return transactionState;
51 } catch (Exception e) {
52 throw new CmsException("Unable to begin transaction", e);
53 }
54 }
55
56 /** Publishes the ability to notify a state change */
57 public void fireTransactionStateChange() {
58 try {
59 fireSourceChanged(ISources.WORKBENCH, TRANSACTION_STATE,
60 getInternalCurrentState());
61 } catch (Exception e) {
62 log.warn("Cannot fire transaction state change event. Caught exception: "
63 + e.getClass().getCanonicalName() + " - " + e.getMessage());
64 }
65 }
66
67 /* DEPENDENCY INJECTION */
68 public void setUserTransaction(WorkTransaction userTransaction) {
69 this.userTransaction = userTransaction;
70 }
71 }