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.PageDescriptor;
024 import org.springframework.richclient.application.PageDescriptorRegistry;
025 import org.springframework.richclient.util.Assert;
026
027
028 /**
029 * A simple {@link PageDescriptorRegistry} implementation that pulls singleton page 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 * @author Rogan Dawes
038 */
039 public class BeanFactoryPageDescriptorRegistry extends ApplicationObjectSupport implements PageDescriptorRegistry {
040
041 /**
042 * {@inheritDoc}
043 */
044 public PageDescriptor[] getPageDescriptors() {
045 Map beans = getApplicationContext().getBeansOfType(PageDescriptor.class, false, false);
046 return (PageDescriptor[])beans.values().toArray(new PageDescriptor[beans.size()]);
047 }
048
049 /**
050 * Returns the page descriptor with the given identifier, or null if no such bean definition
051 * with the given name exists in the current application context.
052 *
053 * @param pageName The bean name of the page descriptor that is to be retrieved from the
054 * underlying application context. Must not be null.
055 *
056 * @throws IllegalArgumentException if {@code pageName} is null.
057 * @throws BeanNotOfRequiredTypeException if the bean retrieved from the underlying application
058 * context is not of type {@link PageDescriptor}.
059 *
060 */
061 public PageDescriptor getPageDescriptor(String pageName) {
062
063 Assert.required(pageName, "pageName");
064
065 try {
066 return (PageDescriptor) getApplicationContext().getBean(pageName, PageDescriptor.class);
067 }
068 catch (NoSuchBeanDefinitionException e) {
069 return null;
070 }
071
072 }
073
074 }