package org.argeo.osgi.useradmin.cm; import java.util.Dictionary; import java.util.HashMap; import java.util.Map; import org.argeo.osgi.useradmin.AbstractLdapUserAdmin; import org.argeo.osgi.useradmin.ArgeoUserAdminException; import org.argeo.osgi.useradmin.LdapUserAdmin; import org.argeo.osgi.useradmin.LdifUserAdmin; import org.argeo.osgi.useradmin.UserAdminAggregator; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedServiceFactory; public class LdapUserAdminFactory implements ManagedServiceFactory { private final UserAdminAggregator userAdminAggregator; private Map index = new HashMap(); public LdapUserAdminFactory(UserAdminAggregator userAdminAggregator) { this.userAdminAggregator = userAdminAggregator; } @Override public String getName() { return "LDAP/LDIF User Source"; } @Override public synchronized void updated(String pid, Dictionary properties) throws ConfigurationException { String baseDn = properties.get("baseDn").toString(); String userAdminUri = properties.get("uri").toString(); AbstractLdapUserAdmin userAdmin; if (userAdminUri.startsWith("ldap")) userAdmin = new LdapUserAdmin(userAdminUri); else userAdmin = new LdifUserAdmin(userAdminUri); userAdminAggregator.addUserAdmin(baseDn, userAdmin); index.put(pid, baseDn); } @Override public synchronized void deleted(String pid) { if (index.containsKey(pid)) userAdminAggregator.removeUserAdmin(index.get(pid)); else throw new ArgeoUserAdminException("No user admin registered for " + pid); index.remove(pid); } }