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