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