- public NodeUserAdmin(TransactionManager transactionManager, Repository repository) {
- this.repository = repository;
- try {
- this.adminSession = this.repository.login();
- } catch (RepositoryException e) {
- throw new CmsException("Cannot log-in", e);
- }
-
- // DAOs
- File nodeBaseDir = new File(getOsgiInstanceDir(), DIR_NODE);
- nodeBaseDir.mkdirs();
- String userAdminUri = getFrameworkProp(USERADMIN_URIS);
- initUserAdmins(userAdminUri, nodeBaseDir);
- String nodeRolesUri = getFrameworkProp(ROLES_URI);
- initNodeRoles(nodeRolesUri, nodeBaseDir);
-
- // Transaction manager
- ((UserDirectory) nodeRoles).setTransactionManager(transactionManager);
- for (UserAdmin userAdmin : userAdmins.values()) {
- if (userAdmin instanceof UserDirectory)
- ((UserDirectory) userAdmin).setTransactionManager(transactionManager);
- }
-
- // JCR
- initJcr(adminSession);
- }
-
- Dictionary<String, ?> currentState() {
- Dictionary<String, Object> res = new Hashtable<String, Object>();
- for (LdapName name : userAdmins.keySet()) {
- StringBuilder buf = new StringBuilder();
- if (userAdmins.get(name) instanceof UserDirectory) {
- UserDirectory userDirectory = (UserDirectory) userAdmins.get(name);
- String uri = UserAdminConf.propertiesAsUri(userDirectory.getProperties()).toString();
- res.put(uri, "");
- } else {
- buf.append('/').append(name.toString()).append("?readOnly=true");
- }
- }
- return res;
- }
-
- public void destroy() {
- for (LdapName name : userAdmins.keySet()) {
- if (userAdmins.get(name) instanceof UserDirectory) {
- UserDirectory userDirectory = (UserDirectory) userAdmins.get(name);
- try {
- // FIXME Make it less bitronix dependant
- EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource());
- } catch (Exception e) {
- log.error("Cannot unregister resource from Bitronix", e);
- }
- userDirectory.destroy();
-
- }
- }
- }
-
- @Override
- public Role createRole(String name, int type) {
- return findUserAdmin(name).createRole(name, type);
- }
-
- @Override
- public boolean removeRole(String name) {
- boolean actuallyDeleted = findUserAdmin(name).removeRole(name);
- nodeRoles.removeRole(name);
- return actuallyDeleted;
- }
-
- @Override
- public Role getRole(String name) {
- return findUserAdmin(name).getRole(name);
- }
-
- @Override
- public Role[] getRoles(String filter) throws InvalidSyntaxException {
- List<Role> res = new ArrayList<Role>();
- for (UserAdmin userAdmin : userAdmins.values()) {
- res.addAll(Arrays.asList(userAdmin.getRoles(filter)));
- }
- res.addAll(Arrays.asList(nodeRoles.getRoles(filter)));
- return res.toArray(new Role[res.size()]);
- }
-
- @Override
- public User getUser(String key, String value) {
- List<User> res = new ArrayList<User>();
- for (UserAdmin userAdmin : userAdmins.values()) {
- User u = userAdmin.getUser(key, value);
- if (u != null)
- res.add(u);
- }
- // Note: node roles cannot contain users, so it is not searched
- return res.size() == 1 ? res.get(0) : null;