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