/*
 *  Copyright 2008 biaoping.yin
 *
 *  Licensed under the Apache 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.apache.org/licenses/LICENSE-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.frameworkset.spi;

import java.util.HashMap;
import java.util.Map;

import org.frameworkset.spi.assemble.Pro;


/**
 * <p>Title: BeanContainer.java</p> 
 * <p>Description: bean 管理容器</p>
 * <p>bboss workgroup</p>
 * <p>Copyright (c) 2007</p>
 * @Date 2010-1-17 下午02:44:15
 * @author biaoping.yin
 * @version 1.0
 */
public class BeanContainer
{
	private Map<String,Pro> properties = new HashMap<String,Pro>();
	private Map<String, Object>	servicProviders = new HashMap<String, Object>();
	private BeanContainer parentContainer ;
	private String configfile;
	private boolean root = false;
	
	public BeanContainer(String configfile)
	{
		this.root = true;
		this.configfile = configfile;
	}
	public BeanContainer(BeanContainer parentContainer,String configfile)
	{
		this.parentContainer = parentContainer;
		this.configfile = configfile;
	}
	
	
/*********引入应用模块上下文时注释-2010-03-22*/	
//	public Object getBeanObject(String name)
//    {
//        return getBeanObject(null, name);
//    }
	
//	public Object getBeanObject(CallContext context, String name)
//    {
//	    
//        int idx = name.indexOf("?");
//        
//        String _name = name;
//        if(context == null)
//            context = new CallContext();
//        if(idx > 0)
//        {
//            String params = name.substring(idx + 1);
//            context = BaseSPIManager.buildCallContext(params,context);
//            name = name.substring(0,idx);
//        }
//        ServiceID serviceID = BaseSPIManager.buildBeanServiceID(serviceids, name);
////        if(context != null && context.getSecutiryContext() != null)
////            context.getSecutiryContext().setServiceid(serviceID.getService());
//        if(serviceID.isRemote())
//        	return BaseSPIManager.getBeanObject(context,_name);
//        // new ServiceID(name,GroupRequest.GET_ALL,0,ServiceID.result_rsplist,
//        // ServiceID.PROPERTY_BEAN_SERVICE);
//        Pro providerManagerInfo = properties.get(serviceID.getService());
//        if (providerManagerInfo == null )
//        {
//        	if(this.root || parentContainer == null)
//        		return BaseSPIManager.getBeanObject(context, name);
//        	else
//        		return parentContainer.getBeanObject(context, name);
//            
//        }
//        return getBeanObject(context, providerManagerInfo,  serviceID);
//        
//    }
//	
//	public Object getBeanObject(CallContext context, Pro providerManagerInfo,
//            ServiceID serviceID)
//    {
//        if (providerManagerInfo == null)
//            return null;
//        String key = providerManagerInfo.getName();
//        if (key == null)
//        {
//            key = providerManagerInfo.getRefid();
//        }
//        Object finalsynProvider = null;
//        if (serviceID == null)
//            serviceID = BaseSPIManager.buildBeanServiceID(serviceids, key);
//        // new ServiceID(key, GroupRequest.GET_ALL ,0,ServiceID.result_rsplist,ServiceID.PROPERTY_BEAN_SERVICE);
//        key = serviceID.getOrigineServiceID();
//        finalsynProvider = providerManagerInfo.getBeanObject(context);
//        if (providerManagerInfo.enableTransaction())
//        {
//            if (providerManagerInfo.isSinglable())
//            {
////                String key = serviceID.getServiceID();
//                if(context != null && !context.containHeaders() )//如果包含头信息时，代理类将不能被缓冲，原因是头信息的动态性会导致缓冲实例过多
//                {
//                    Object provider = servicProviders .get(key);
//                    if (provider != null)
//                        return provider;
//                    synchronized (servicProviders)
//                    {
//                        provider = servicProviders.get(key);
//                        if (provider != null)
//                            return provider;
//                        provider = BaseSPIManager.createInf(context, providerManagerInfo, finalsynProvider, serviceID);
//                        servicProviders.put(key, provider);
//                    }
//                    return provider;
//                }
//                else
//                {
//                    finalsynProvider = BaseSPIManager.createInf(context, providerManagerInfo, finalsynProvider, serviceID);
//                    return finalsynProvider;
//                }
//            }
//            else
//            {
//                finalsynProvider = BaseSPIManager.createInf(context, providerManagerInfo, finalsynProvider, serviceID);
//                return finalsynProvider;
//            }
//        }
//        else
//        {
//            return finalsynProvider;
//        }
//    }
	/*********引入应用模块上下文时注释-2010-03-22*/
}
