001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * 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, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.application.support; 017 018 import java.util.Map; 019 020 import org.springframework.beans.factory.BeanNotOfRequiredTypeException; 021 import org.springframework.beans.factory.NoSuchBeanDefinitionException; 022 import org.springframework.context.support.ApplicationObjectSupport; 023 import org.springframework.richclient.application.ViewDescriptor; 024 import org.springframework.richclient.application.ViewDescriptorRegistry; 025 import org.springframework.richclient.util.Assert; 026 027 028 /** 029 * A simple {@link ViewDescriptorRegistry} implementation that pulls singleton view definitions out 030 * of a spring application context. This class is intended to be managed by a Spring IoC container. 031 * If being created programatically, be sure to call the 032 * {@link #setApplicationContext(org.springframework.context.ApplicationContext)} method. 033 * 034 * 035 * @author Keith Donald 036 * @author Kevin Stembridge 037 */ 038 public class BeanFactoryViewDescriptorRegistry extends ApplicationObjectSupport implements ViewDescriptorRegistry { 039 040 /** 041 * {@inheritDoc} 042 */ 043 public ViewDescriptor[] getViewDescriptors() { 044 Map beans = getApplicationContext().getBeansOfType(ViewDescriptor.class, false, false); 045 return (ViewDescriptor[])beans.values().toArray(new ViewDescriptor[beans.size()]); 046 } 047 048 /** 049 * Returns the view descriptor with the given identifier, or null if no such bean definition 050 * with the given name exists in the current application context. 051 * 052 * @param viewName The bean name of the view descriptor that is to be retrieved from the 053 * underlying application context. Must not be null. 054 * 055 * @throws IllegalArgumentException if {@code viewName} is null. 056 * @throws BeanNotOfRequiredTypeException if the bean retrieved from the underlying application 057 * context is not of type {@link ViewDescriptor}. 058 * 059 */ 060 public ViewDescriptor getViewDescriptor(String viewName) { 061 062 Assert.required(viewName, "viewName"); 063 064 try { 065 return (ViewDescriptor) getApplicationContext().getBean(viewName, ViewDescriptor.class); 066 } 067 catch (NoSuchBeanDefinitionException e) { 068 return null; 069 } 070 071 } 072 073 }