001/* 002 * (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Nuxeo - initial API and implementation 018 * 019 * $Id$ 020 */ 021 022package org.nuxeo.ecm.directory.ldap; 023 024import java.util.ArrayList; 025import java.util.List; 026 027import org.apache.commons.logging.Log; 028import org.apache.commons.logging.LogFactory; 029import org.nuxeo.ecm.directory.Directory; 030import org.nuxeo.ecm.directory.DirectoryException; 031import org.nuxeo.ecm.directory.DirectoryFactory; 032import org.nuxeo.ecm.directory.DirectoryServiceImpl; 033import org.nuxeo.ecm.directory.api.DirectoryService; 034import org.nuxeo.ecm.directory.ldap.registry.LDAPDirectoryRegistry; 035import org.nuxeo.ecm.directory.ldap.registry.LDAPServerRegistry; 036import org.nuxeo.runtime.api.Framework; 037import org.nuxeo.runtime.model.ComponentContext; 038import org.nuxeo.runtime.model.DefaultComponent; 039import org.nuxeo.runtime.model.Extension; 040 041public class LDAPDirectoryFactory extends DefaultComponent implements DirectoryFactory { 042 043 public static final String NAME = "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory"; 044 045 private static final Log log = LogFactory.getLog(LDAPDirectoryFactory.class); 046 047 protected LDAPDirectoryRegistry proxies; 048 049 protected LDAPServerRegistry servers; 050 051 public Directory getDirectory(String name) { 052 return proxies.getDirectory(name); 053 } 054 055 public List<Directory> getDirectories() { 056 List<Directory> directories = new ArrayList<Directory>(); 057 directories.addAll(proxies.getDirectories()); 058 return directories; 059 } 060 061 public LDAPServerDescriptor getServer(String name) { 062 return servers.getServer(name); 063 } 064 065 public String getName() { 066 return NAME; 067 } 068 069 @Override 070 public void activate(ComponentContext context) { 071 log.info("component activated"); 072 proxies = new LDAPDirectoryRegistry(); 073 servers = new LDAPServerRegistry(); 074 } 075 076 @Override 077 public void deactivate(ComponentContext context) { 078 log.info("component deactivated"); 079 proxies = null; 080 servers = null; 081 } 082 083 protected static DirectoryServiceImpl getDirectoryService() { 084 return (DirectoryServiceImpl) Framework.getLocalService(DirectoryService.class); 085 } 086 087 @Override 088 public void registerExtension(Extension extension) { 089 String xp = extension.getExtensionPoint(); 090 if (xp.equals("directories")) { 091 registerDirectoryExtension(extension); 092 } else if (xp.equals("servers")) { 093 registerServerExtension(extension); 094 } 095 } 096 097 @Override 098 public void unregisterExtension(Extension extension) throws DirectoryException { 099 String xp = extension.getExtensionPoint(); 100 if (xp.equals("directories")) { 101 unregisterDirectoryExtension(extension); 102 } else if (xp.equals("servers")) { 103 unregisterServerExtension(extension); 104 } 105 } 106 107 public void registerServerExtension(Extension extension) { 108 Object[] contribs = extension.getContributions(); 109 for (Object contrib : contribs) { 110 LDAPServerDescriptor descriptor = (LDAPServerDescriptor) contrib; 111 servers.addContribution(descriptor); 112 } 113 } 114 115 public void unregisterServerExtension(Extension extension) { 116 Object[] contribs = extension.getContributions(); 117 for (Object contrib : contribs) { 118 LDAPServerDescriptor descriptor = (LDAPServerDescriptor) contrib; 119 servers.removeContribution(descriptor); 120 } 121 } 122 123 public void registerDirectoryExtension(Extension extension) { 124 Object[] contribs = extension.getContributions(); 125 DirectoryServiceImpl dirService = getDirectoryService(); 126 for (Object contrib : contribs) { 127 LDAPDirectoryDescriptor descriptor = (LDAPDirectoryDescriptor) contrib; 128 proxies.addContribution(descriptor); 129 dirService.registerDirectory(descriptor.getName(), this); 130 } 131 } 132 133 public void unregisterDirectoryExtension(Extension extension) throws DirectoryException { 134 Object[] contribs = extension.getContributions(); 135 DirectoryServiceImpl dirService = getDirectoryService(); 136 for (Object contrib : contribs) { 137 LDAPDirectoryDescriptor descriptor = (LDAPDirectoryDescriptor) contrib; 138 proxies.removeContribution(descriptor); 139 dirService.unregisterDirectory(descriptor.getName(), this); 140 } 141 } 142 143 public void shutdown() throws DirectoryException { 144 for (Directory directory : proxies.getDirectories()) { 145 directory.shutdown(); 146 } 147 } 148 149}