1 package org
.argeo
.maintenance
;
3 import java
.util
.ArrayList
;
7 import javax
.naming
.InvalidNameException
;
8 import javax
.naming
.ldap
.LdapName
;
10 import org
.argeo
.api
.cms
.CmsLog
;
11 import org
.argeo
.osgi
.transaction
.WorkTransaction
;
12 import org
.osgi
.service
.useradmin
.Role
;
13 import org
.osgi
.service
.useradmin
.UserAdmin
;
16 * Register one or many roles via a user admin service. Does nothing if the role
17 * is already registered.
19 public class SimpleRoleRegistration
implements Runnable
{
20 private final static CmsLog log
= CmsLog
.getLog(SimpleRoleRegistration
.class);
23 private List
<String
> roles
= new ArrayList
<String
>();
24 private UserAdmin userAdmin
;
25 private WorkTransaction userTransaction
;
30 userTransaction
.begin();
31 if (role
!= null && !roleExists(role
))
34 for (String r
: roles
)
37 userTransaction
.commit();
38 } catch (Exception e
) {
40 userTransaction
.rollback();
41 } catch (Exception e1
) {
42 log
.error("Cannot rollback", e1
);
44 throw new IllegalArgumentException("Cannot add roles", e
);
48 private boolean roleExists(String role
) {
49 return userAdmin
.getRole(toDn(role
).toString()) != null;
52 protected void newRole(LdapName r
) {
53 userAdmin
.createRole(r
.toString(), Role
.GROUP
);
54 log
.info("Added role " + r
+ " required by application.");
57 public void register(UserAdmin userAdminService
, Map
<?
, ?
> properties
) {
58 this.userAdmin
= userAdminService
;
62 protected LdapName
toDn(String name
) {
64 return new LdapName("cn=" + name
+ ",ou=roles,ou=node");
65 } catch (InvalidNameException e
) {
66 throw new IllegalArgumentException("Badly formatted role name " + name
, e
);
70 public void setRole(String role
) {
74 public void setRoles(List
<String
> roles
) {
78 public void setUserAdmin(UserAdmin userAdminService
) {
79 this.userAdmin
= userAdminService
;
82 public void setUserTransaction(WorkTransaction userTransaction
) {
83 this.userTransaction
= userTransaction
;