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 * Florent Guillaume 016 * 017 * $Id: MultiDirectoryFactory.java 29587 2008-01-23 21:52:30Z jcarsique $ 018 */ 019 020package org.nuxeo.ecm.directory.multi; 021 022import java.util.ArrayList; 023import java.util.List; 024 025import org.nuxeo.ecm.directory.Directory; 026import org.nuxeo.ecm.directory.DirectoryException; 027import org.nuxeo.ecm.directory.DirectoryFactory; 028import org.nuxeo.ecm.directory.api.DirectoryService; 029import org.nuxeo.runtime.api.Framework; 030import org.nuxeo.runtime.model.ComponentContext; 031import org.nuxeo.runtime.model.DefaultComponent; 032import org.nuxeo.runtime.model.Extension; 033 034/** 035 * @author Florent Guillaume 036 */ 037public class MultiDirectoryFactory extends DefaultComponent implements DirectoryFactory { 038 039 private static final String NAME = "org.nuxeo.ecm.directory.multi.MultiDirectoryFactory"; 040 041 protected MultiDirectoryRegistry directories; 042 043 @Override 044 public Directory getDirectory(String name) { 045 return directories.getDirectory(name); 046 } 047 048 @Override 049 public String getName() { 050 return NAME; 051 } 052 053 @Override 054 public void activate(ComponentContext context) { 055 directories = new MultiDirectoryRegistry(); 056 } 057 058 @Override 059 public void deactivate(ComponentContext context) { 060 directories = null; 061 } 062 063 @Override 064 public void registerExtension(Extension extension) { 065 Object[] contribs = extension.getContributions(); 066 DirectoryService dirService = Framework.getService(DirectoryService.class); 067 for (Object contrib : contribs) { 068 MultiDirectoryDescriptor descriptor = (MultiDirectoryDescriptor) contrib; 069 directories.addContribution(descriptor); 070 String name = descriptor.name; 071 if (directories.getDirectory(name) != null) { 072 dirService.registerDirectory(name, this); 073 } else { 074 // handle case where directory is marked with "remove" 075 dirService.unregisterDirectory(name, this); 076 } 077 } 078 } 079 080 @Override 081 public void unregisterExtension(Extension extension) throws DirectoryException { 082 Object[] contribs = extension.getContributions(); 083 DirectoryService dirService = Framework.getService(DirectoryService.class); 084 for (Object contrib : contribs) { 085 MultiDirectoryDescriptor descriptor = (MultiDirectoryDescriptor) contrib; 086 String directoryName = descriptor.name; 087 dirService.unregisterDirectory(directoryName, this); 088 directories.removeContribution(descriptor); 089 } 090 } 091 092 @Override 093 public void shutdown() throws DirectoryException { 094 for (Directory directory : directories.getDirectories()) { 095 directory.shutdown(); 096 } 097 } 098 099 @Override 100 public List<Directory> getDirectories() { 101 return new ArrayList<Directory>(directories.getDirectories()); 102 } 103 104}