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