]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java
Re-add org.argeo.cms.util.useradmin
[lgpl/argeo-commons.git] / org.argeo.security.ui.admin / src / org / argeo / security / ui / admin / internal / UserAdminWrapper.java
1 package org.argeo.security.ui.admin.internal;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.transaction.Status;
7 import javax.transaction.UserTransaction;
8
9 import org.argeo.ArgeoException;
10 import org.osgi.service.useradmin.UserAdminEvent;
11 import org.osgi.service.useradmin.UserAdminListener;
12
13 /** Centralize interaction with the UserAdmin in this bundle */
14 public class UserAdminWrapper extends
15 org.argeo.security.ui.admin.internal.AbstractUserAdminWrapper {
16 // private Log log = LogFactory.getLog(UserAdminWrapper.class);
17
18 // Registered listeners
19 List<UserAdminListener> listeners = new ArrayList<UserAdminListener>();
20
21 /**
22 * Overwrite the normal begin transaction behaviour to also notify the UI.
23 * Must be called from the UI Thread.
24 */
25 public UserTransaction beginTransactionIfNeeded() {
26 try {
27 UserTransaction userTransaction = getUserTransaction();
28 if (userTransaction.getStatus() == Status.STATUS_NO_TRANSACTION) {
29 userTransaction.begin();
30 UiAdminUtils.notifyTransactionStateChange(userTransaction);
31 }
32 return userTransaction;
33 } catch (Exception e) {
34 throw new ArgeoException("Unable to begin transaction", e);
35 }
36 }
37
38 // TODO implement safer mechanism
39 public void addListener(UserAdminListener userAdminListener) {
40 if (!listeners.contains(userAdminListener))
41 listeners.add(userAdminListener);
42 }
43
44 // Expose this?
45 public void removeListener(UserAdminListener userAdminListener) {
46 if (listeners.contains(userAdminListener))
47 listeners.remove(userAdminListener);
48 }
49
50 public void notifyListeners(UserAdminEvent event) {
51 for (UserAdminListener listener : listeners)
52 listener.roleChanged(event);
53 }
54 }