/** * $Id: EntityProviderAutoRegistrar.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $ * $URL: https://source.sakaiproject.org/svn/entitybroker/trunk/utils/src/java/org/sakaiproject/entitybroker/util/spring/EntityProviderAutoRegistrar.java $ * EBlogic.java - entity-broker - Apr 15, 2008 4:29:18 PM - azeckoski ************************************************************************** * Copyright (c) 2007, 2008, 2009 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakaiproject.entitybroker.util.spring; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.entitybroker.entityprovider.EntityProvider; import org.sakaiproject.entitybroker.entityprovider.EntityProviderManager; import org.sakaiproject.entitybroker.entityprovider.capabilities.AutoRegisterEntityProvider; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * Finds and registers any {@link EntityProvider} implementation which also implements * {@link AutoRegisterEntityProvider} * * @author Antranig Basman (antranig@caret.cam.ac.uk) * @author Aaron Zeckoski (aaronz@vt.edu) */ public class EntityProviderAutoRegistrar implements ApplicationContextAware { private static Log log = LogFactory.getLog(EntityProviderAutoRegistrar.class); EntityProviderManager entityProviderManager; public void setEntityProviderManager(EntityProviderManager entityProviderManager) { this.entityProviderManager = entityProviderManager; } protected EntityProviderAutoRegistrar() { } /** * Construct the auto-registrar which will search the spring app context and will register all * entity providers found in it which implement {@link AutoRegisterEntityProvider} * @param entityProviderManager the entityProviderManager service which is used for registration */ public EntityProviderAutoRegistrar(EntityProviderManager entityProviderManager) { super(); this.entityProviderManager = entityProviderManager; init(); } public void init() { log.info("init"); } public void setApplicationContext(ApplicationContext context) throws BeansException { log.debug("setAC: " + context.getDisplayName()); String[] autobeans = context.getBeanNamesForType(AutoRegisterEntityProvider.class, false, false); StringBuilder registeredPrefixes = new StringBuilder(); for (String autobean : autobeans) { AutoRegisterEntityProvider register = (AutoRegisterEntityProvider) context .getBean(autobean); if (register.getEntityPrefix() == null || register.getEntityPrefix().equals("")) { // should this die here or is this error log enough? -AZ log.error("Could not autoregister EntityProvider because the enity prefix is null or empty string for class: " + register.getClass().getName()); } else { registeredPrefixes.append(" : " + register.getEntityPrefix()); entityProviderManager.registerEntityProvider(register); } } log.info("AutoRegistered EntityProvider prefixes " + registeredPrefixes); // TODO - deal with de-registration in the case we ever support dynamic contexts. } }