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