]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/UserTransactionProvider.java
Fix invalid thread access
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / providers / UserTransactionProvider.java
1 package org.argeo.security.ui.admin.internal.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.argeo.ArgeoException;
10 import org.argeo.security.ui.admin.SecurityAdminPlugin;
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 public final static String TRANSACTION_STATE = SecurityAdminPlugin.PLUGIN_ID
17 + ".userTransactionState";
18 public final static String STATUS_ACTIVE = "status.active";
19 public final static String STATUS_NO_TRANSACTION = "status.noTransaction";
20
21 /* DEPENDENCY INJECTION */
22 private UserTransaction userTransaction;
23
24 @Override
25 public String[] getProvidedSourceNames() {
26 return new String[] { TRANSACTION_STATE };
27 }
28
29 @Override
30 public Map<String, String> getCurrentState() {
31 Map<String, String> currentState = new HashMap<String, String>(1);
32 currentState.put(TRANSACTION_STATE, getInternalCurrentState());
33 return currentState;
34 }
35
36 @Override
37 public void dispose() {
38 }
39
40 private String getInternalCurrentState() {
41 try {
42 String transactionState;
43 if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
44 transactionState = STATUS_NO_TRANSACTION;
45 else
46 // if (userTransaction.getStatus() == Status.STATUS_ACTIVE)
47 transactionState = STATUS_ACTIVE;
48 return transactionState;
49 } catch (Exception e) {
50 throw new ArgeoException("Unable to begin transaction", e);
51 }
52 }
53
54 /** Publishes the ability to notify a state change */
55 public void fireTransactionStateChange() {
56 fireSourceChanged(ISources.WORKBENCH, TRANSACTION_STATE,
57 getInternalCurrentState());
58 }
59
60 /* DEPENDENCY INJECTION */
61 public void setUserTransaction(UserTransaction userTransaction) {
62 this.userTransaction = userTransaction;
63 }
64 }