]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserTransactionProvider.java
Plug automatic refresh of the transaction edition commands.
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / UserTransactionProvider.java
1 package org.argeo.security.ui.admin.internal;
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 /** Centralize interaction with the UserTransaction among the UI */
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 private String transactionState = STATUS_NO_TRANSACTION;
22
23 /* DEPENDENCY INJECTION */
24 private UserTransaction 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 // TODO implement asking to the UserTransaction
35 // String transactionState = isActive ? STATUS_ACTIVE :
36 // STATUS_NO_TRANSACTION;
37 currentState.put(TRANSACTION_STATE, transactionState);
38 return currentState;
39 }
40
41 @Override
42 public void dispose() {
43 }
44
45 /** Publish the ability to change the state. */
46 public void setUserTransactionState(String newState) {
47 transactionState = newState;
48 // fireSourceChanged(ISources.WORKBENCH, TRANSACTION_STATE,
49 // transactionState);
50 }
51
52 private void refreshState() {
53 try {
54 if (userTransaction != null) {
55 if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION)
56 transactionState = STATUS_NO_TRANSACTION;
57 else if (userTransaction.getStatus() == Status.STATUS_ACTIVE)
58 transactionState = STATUS_ACTIVE;
59 fireSourceChanged(ISources.WORKBENCH, TRANSACTION_STATE,
60 transactionState);
61 }
62 } catch (Exception e) {
63 throw new ArgeoException("Unable to begin transaction", e);
64 }
65 }
66
67 /** Publish the ability to notify a state change */
68 public void fireTransactionStateChange() {
69 refreshState();
70 }
71
72 /** FIXME: Rather inject the UserTransaction. */
73 @Deprecated
74 public void setUserTransaction(UserTransaction userTransaction) {
75 this.userTransaction = userTransaction;
76 // dirty init
77 refreshState();
78 }
79 }