001/* 002 * (C) Copyright 2006-2007 Nuxeo SAS (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * Nuxeo - initial API and implementation 016 * 017 * $Id$ 018 */ 019 020package org.nuxeo.ecm.directory.ldap; 021 022import java.util.ArrayList; 023import java.util.List; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.nuxeo.ecm.directory.Directory; 028import org.nuxeo.ecm.directory.DirectoryException; 029import org.nuxeo.ecm.directory.DirectoryFactory; 030import org.nuxeo.ecm.directory.DirectoryServiceImpl; 031import org.nuxeo.ecm.directory.api.DirectoryService; 032import org.nuxeo.ecm.directory.ldap.registry.LDAPDirectoryRegistry; 033import org.nuxeo.ecm.directory.ldap.registry.LDAPServerRegistry; 034import org.nuxeo.runtime.api.Framework; 035import org.nuxeo.runtime.model.ComponentContext; 036import org.nuxeo.runtime.model.DefaultComponent; 037import org.nuxeo.runtime.model.Extension; 038 039public class LDAPDirectoryFactory extends DefaultComponent implements DirectoryFactory { 040 041 public static final String NAME = "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory"; 042 043 private static final Log log = LogFactory.getLog(LDAPDirectoryFactory.class); 044 045 protected LDAPDirectoryRegistry proxies; 046 047 protected LDAPServerRegistry servers; 048 049 public Directory getDirectory(String name) { 050 return proxies.getDirectory(name); 051 } 052 053 public List<Directory> getDirectories() { 054 List<Directory> directories = new ArrayList<Directory>(); 055 directories.addAll(proxies.getDirectories()); 056 return directories; 057 } 058 059 public LDAPServerDescriptor getServer(String name) { 060 return servers.getServer(name); 061 } 062 063 public String getName() { 064 return NAME; 065 } 066 067 @Override 068 public void activate(ComponentContext context) { 069 log.info("component activated"); 070 proxies = new LDAPDirectoryRegistry(); 071 servers = new LDAPServerRegistry(); 072 } 073 074 @Override 075 public void deactivate(ComponentContext context) { 076 log.info("component deactivated"); 077 proxies = null; 078 servers = null; 079 } 080 081 protected static DirectoryServiceImpl getDirectoryService() { 082 return (DirectoryServiceImpl) Framework.getLocalService(DirectoryService.class); 083 } 084 085 @Override 086 public void registerExtension(Extension extension) { 087 String xp = extension.getExtensionPoint(); 088 if (xp.equals("directories")) { 089 registerDirectoryExtension(extension); 090 } else if (xp.equals("servers")) { 091 registerServerExtension(extension); 092 } 093 } 094 095 @Override 096 public void unregisterExtension(Extension extension) throws DirectoryException { 097 String xp = extension.getExtensionPoint(); 098 if (xp.equals("directories")) { 099 unregisterDirectoryExtension(extension); 100 } else if (xp.equals("servers")) { 101 unregisterServerExtension(extension); 102 } 103 } 104 105 public void registerServerExtension(Extension extension) { 106 Object[] contribs = extension.getContributions(); 107 for (Object contrib : contribs) { 108 LDAPServerDescriptor descriptor = (LDAPServerDescriptor) contrib; 109 servers.addContribution(descriptor); 110 } 111 } 112 113 public void unregisterServerExtension(Extension extension) { 114 Object[] contribs = extension.getContributions(); 115 for (Object contrib : contribs) { 116 LDAPServerDescriptor descriptor = (LDAPServerDescriptor) contrib; 117 servers.removeContribution(descriptor); 118 } 119 } 120 121 public void registerDirectoryExtension(Extension extension) { 122 Object[] contribs = extension.getContributions(); 123 DirectoryServiceImpl dirService = getDirectoryService(); 124 for (Object contrib : contribs) { 125 LDAPDirectoryDescriptor descriptor = (LDAPDirectoryDescriptor) contrib; 126 proxies.addContribution(descriptor); 127 dirService.registerDirectory(descriptor.getName(), this); 128 } 129 } 130 131 public void unregisterDirectoryExtension(Extension extension) throws DirectoryException { 132 Object[] contribs = extension.getContributions(); 133 DirectoryServiceImpl dirService = getDirectoryService(); 134 for (Object contrib : contribs) { 135 LDAPDirectoryDescriptor descriptor = (LDAPDirectoryDescriptor) contrib; 136 proxies.removeContribution(descriptor); 137 dirService.unregisterDirectory(descriptor.getName(), this); 138 } 139 } 140 141 public void shutdown() throws DirectoryException { 142 for (Directory directory : proxies.getDirectories()) { 143 directory.shutdown(); 144 } 145 } 146 147}