| /******************************************************************************* |
| * Copyright (c) 2010 Angelo Zerr and others. All rights reserved. This |
| * program and the accompanying materials are made available under the terms of |
| * the Eclipse Public License v1.0 which accompanies this distribution, and is |
| * available at http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Angelo ZERR <angelo.zerr@gmail.com>. - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ecf.springframework; |
| |
| import org.eclipse.ecf.core.ContainerCreateException; |
| import org.eclipse.ecf.core.ContainerFactory; |
| import org.eclipse.ecf.core.IContainer; |
| import org.eclipse.ecf.core.IContainerFactory; |
| import org.eclipse.ecf.core.IContainerManager; |
| import org.springframework.beans.factory.DisposableBean; |
| import org.springframework.beans.factory.FactoryBean; |
| import org.springframework.beans.factory.InitializingBean; |
| |
| /** |
| * Abstract {@link org.springframework.beans.factory.FactoryBean} that creates |
| * ECF container {@link IContainer}. |
| * |
| */ |
| public abstract class AbstractContainerFactoryBean implements FactoryBean, |
| InitializingBean, DisposableBean { |
| |
| private IContainer container = null; |
| |
| private String containerType = null; |
| |
| private IContainerFactory containerFactory = null; |
| |
| public void setContainerManager(IContainerManager containerManager) { |
| setContainerFactory(containerManager.getContainerFactory()); |
| } |
| |
| public void setContainerFactory(IContainerFactory containerFactory) { |
| this.containerFactory = containerFactory; |
| } |
| |
| protected IContainerFactory getContainerFactory() { |
| return containerFactory; |
| } |
| |
| public void setContainerType(String containerType) { |
| this.containerType = containerType; |
| } |
| |
| protected String getContainerType() { |
| return containerType; |
| } |
| |
| // public void setConnectContext(IConnectContext connectContext) { |
| // this.connectContext = connectContext; |
| // } |
| |
| public Object getObject() throws Exception { |
| return this.container; |
| } |
| |
| public Class getObjectType() { |
| return (this.container != null ? this.container.getClass() |
| : IContainer.class); |
| } |
| |
| public boolean isSingleton() { |
| return true; |
| } |
| |
| public void afterPropertiesSet() throws Exception { |
| |
| if (containerFactory == null) { |
| containerFactory = ContainerFactory.getDefault(); |
| } |
| |
| this.container = createContainer(); |
| } |
| |
| public void destroy() throws Exception { |
| if (this.container != null) { |
| this.container.disconnect(); |
| this.container.dispose(); |
| } |
| this.container = null; |
| this.containerType = null; |
| this.containerFactory = null; |
| } |
| |
| protected IContainer createBasicContainer() throws ContainerCreateException { |
| return containerFactory.createContainer(this.containerType); |
| } |
| |
| protected abstract IContainer createContainer() throws Exception; |
| } |