View Javadoc

1   /***
2    * Copyright (C) 2008 Jeremy Thomerson (jthomerson@users.sourceforge.net)
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package net.sf.vcaperture.util.spring;
18  
19  import net.sf.vcaperture.model.IApplicationContext;
20  
21  import org.springframework.beans.BeansException;
22  import org.springframework.context.ApplicationContext;
23  import org.springframework.context.ApplicationContextAware;
24  
25  /***
26   * The static factory which provides the context as necesary within the
27   * application.
28   * 
29   * <p>
30   * TODO: This class assumes that only one context will ever be used within the
31   * container in which it is running. It could make use of a <tt>ThreadLocal</tt>
32   * (or similar) to provide for multiple contexts to be available.
33   * </p>
34   * 
35   * <p>
36   * TODO: Not so much a factory as it is a locator. Perhaps should be renamed.
37   * </p>
38   * 
39   * @author Jeremy Thomerson (jthomerson@users.sourceforge.net)
40   */
41  public class ApplicationContextFactory implements ApplicationContextAware {
42  
43  	private static final ApplicationContextFactory INSTANCE = new ApplicationContextFactory();
44  
45  	public static ApplicationContextFactory getFactory() {
46  		return INSTANCE;
47  	}
48  
49  	private IApplicationContext mWrapper;
50  
51  	public final IApplicationContext getContext() {
52  		return mWrapper;
53  	}
54  
55  	public final void setContext(ApplicationContext context) {
56  		mWrapper = new AppContextWrapper(context);
57  	}
58  
59  	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
60  		getFactory().setContext(applicationContext);
61  	}
62  
63  	private static class AppContextWrapper implements IApplicationContext {
64  		private final ApplicationContext mContext;
65  
66  		private AppContextWrapper(ApplicationContext context) {
67  			mContext = context;
68  		}
69  
70  		@SuppressWarnings("unchecked")
71  		public <T> T getBean(Class<T> clazz) {
72  			return (T) mContext.getBean(clazz.getName());
73  		}
74  
75  		public Object getBean(String name) {
76  			return mContext.getBean(name);
77  		}
78  		
79  		public String getName() {
80  		    return (String) mContext.getBean("context-name");
81  		}
82  	}
83  }