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