]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.maintenance/src/org/argeo/maintenance/SimpleRoleRegistration.java
Close release cycle
[lgpl/argeo-commons.git] / org.argeo.maintenance / src / org / argeo / maintenance / SimpleRoleRegistration.java
1 package org.argeo.maintenance;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.naming.InvalidNameException;
8 import javax.naming.ldap.LdapName;
9 import javax.transaction.UserTransaction;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.osgi.service.useradmin.Role;
14 import org.osgi.service.useradmin.UserAdmin;
15
16 /**
17 * Register one or many roles via a user admin service. Does nothing if the role
18 * is already registered.
19 */
20 public class SimpleRoleRegistration implements Runnable {
21 private final static Log log = LogFactory.getLog(SimpleRoleRegistration.class);
22
23 private String role;
24 private List<String> roles = new ArrayList<String>();
25 private UserAdmin userAdmin;
26 private UserTransaction userTransaction;
27
28 @Override
29 public void run() {
30 try {
31 userTransaction.begin();
32 if (role != null && !roleExists(role))
33 newRole(toDn(role));
34
35 for (String r : roles)
36 if (!roleExists(r))
37 newRole(toDn(r));
38 userTransaction.commit();
39 } catch (Exception e) {
40 try {
41 userTransaction.rollback();
42 } catch (Exception e1) {
43 log.error("Cannot rollback", e1);
44 }
45 throw new IllegalArgumentException("Cannot add roles", e);
46 }
47 }
48
49 private boolean roleExists(String role) {
50 return userAdmin.getRole(toDn(role).toString()) != null;
51 }
52
53 protected void newRole(LdapName r) {
54 userAdmin.createRole(r.toString(), Role.GROUP);
55 log.info("Added role " + r + " required by application.");
56 }
57
58 public void register(UserAdmin userAdminService, Map<?, ?> properties) {
59 this.userAdmin = userAdminService;
60 run();
61 }
62
63 protected LdapName toDn(String name) {
64 try {
65 return new LdapName("cn=" + name + ",ou=roles,ou=node");
66 } catch (InvalidNameException e) {
67 throw new IllegalArgumentException("Badly formatted role name " + name, e);
68 }
69 }
70
71 public void setRole(String role) {
72 this.role = role;
73 }
74
75 public void setRoles(List<String> roles) {
76 this.roles = roles;
77 }
78
79 public void setUserAdmin(UserAdmin userAdminService) {
80 this.userAdmin = userAdminService;
81 }
82
83 public void setUserTransaction(UserTransaction userTransaction) {
84 this.userTransaction = userTransaction;
85 }
86
87 }