1 package org
.argeo
.cms
.ui
.workbench
.internal
.useradmin
;
3 import java
.util
.ArrayList
;
6 import javax
.transaction
.Status
;
7 import javax
.transaction
.UserTransaction
;
9 import org
.argeo
.cms
.CmsException
;
10 import org
.osgi
.service
.useradmin
.UserAdminEvent
;
11 import org
.osgi
.service
.useradmin
.UserAdminListener
;
13 /** Centralise interaction with the UserAdmin in this bundle */
14 public class UserAdminWrapper
extends
15 org
.argeo
.cms
.util
.useradmin
.UserAdminWrapper
{
17 // First effort to simplify UX while managing users and groups
18 public final static boolean COMMIT_ON_SAVE
= true;
20 // Registered listeners
21 List
<UserAdminListener
> listeners
= new ArrayList
<UserAdminListener
>();
24 * Starts a transaction if necessary. Should always been called together
25 * with {@link UserAdminWrapper#commitOrNotifyTransactionStateChange()} once
26 * the security model changes have been performed.
28 public UserTransaction
beginTransactionIfNeeded() {
30 UserTransaction userTransaction
= getUserTransaction();
31 if (userTransaction
.getStatus() == Status
.STATUS_NO_TRANSACTION
) {
32 userTransaction
.begin();
33 // UiAdminUtils.notifyTransactionStateChange(userTransaction);
35 return userTransaction
;
36 } catch (Exception e
) {
37 throw new CmsException("Unable to begin transaction", e
);
42 * Depending on the current application configuration, it will either commit
43 * the current transaction or throw a notification that the transaction
44 * state has changed (In the later case, it must be called from the UI
47 public void commitOrNotifyTransactionStateChange() {
49 UserTransaction userTransaction
= getUserTransaction();
50 if (userTransaction
.getStatus() == Status
.STATUS_NO_TRANSACTION
)
53 if (UserAdminWrapper
.COMMIT_ON_SAVE
)
54 userTransaction
.commit();
56 UiAdminUtils
.notifyTransactionStateChange(userTransaction
);
57 } catch (Exception e
) {
58 throw new CmsException("Unable to clean transaction", e
);
62 // TODO implement safer mechanism
63 public void addListener(UserAdminListener userAdminListener
) {
64 if (!listeners
.contains(userAdminListener
))
65 listeners
.add(userAdminListener
);
68 public void removeListener(UserAdminListener userAdminListener
) {
69 if (listeners
.contains(userAdminListener
))
70 listeners
.remove(userAdminListener
);
73 public void notifyListeners(UserAdminEvent event
) {
74 for (UserAdminListener listener
: listeners
)
75 listener
.roleChanged(event
);