Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   * as indicated by the @author tags. See the copyright.txt file in the
   * distribution for a full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.spring.facade;
 
 import java.util.Set;
 
 import  org.jboss.beans.info.spi.BeanInfo;
 import  org.jboss.beans.metadata.spi.BeanMetaData;
 import  org.jboss.beans.metadata.spi.ConstructorMetaData;
 import  org.jboss.beans.metadata.spi.PropertyMetaData;
 import  org.jboss.beans.metadata.spi.ValueMetaData;
 import  org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
 import  org.jboss.beans.metadata.spi.factory.AbstractBeanFactory;
 import  org.jboss.dependency.spi.Controller;
 import  org.jboss.dependency.spi.ControllerContext;
 import  org.jboss.dependency.spi.ControllerState;
 import  org.jboss.kernel.spi.dependency.KernelControllerContext;
 import  org.jboss.reflect.spi.ClassInfo;
 import  org.jboss.reflect.spi.TypeInfoFactory;
BeanFactory facade over MC's Controller.

Author(s):
Ales Justin
Marius Bogoevici
 
 public abstract class ControllerBeanFactory implements BeanFactory {
 
     private Controller controller;
 
     public ControllerBeanFactory(Controller controller) {
         if (controller == null) {
             throw new IllegalArgumentException("Null controller");
         }
 
         this. = controller;
     }

    
Get the controller context.

Parameters:
name the context name
Returns:
context or null if not found
 
     protected ControllerContext getInstalledContext(String name) {
         return .getInstalledContext(name);
     }

    
Get the controller context.

Parameters:
name the context name
state the state
Returns:
context or null if not found
 
     protected ControllerContext getContext(String name, ControllerState state) {
         return .getContext(namestate);
     }
 
     public Object getBean(String namethrows BeansException {
         ControllerContext context = getInstalledContext(name);
         if (context == null) {
             throw new NoSuchBeanDefinitionException(name);
         }
 
         return context.getTarget();
     }
 
     @SuppressWarnings("unchecked")
     public Object getBean(String nameClass clazzthrows BeansException {
         if (clazz == null) {
             return getBean(name);
         } else {
             return getBeanWithType(nameclazz);
        }
    }

    
Get exact bean.

Parameters:
name the bean name
clazz the expected class
<T> the exact type
Returns:
exact bean
Throws:
BeansException for any error
    protected <T> T getBeanWithType(String nameClass<T> clazzthrows BeansException {
        Object result = getBean(name);
        if (!clazz.isInstance(result)) {
            throw new BeanNotOfRequiredTypeException(nameclazzresult.getClass());
        }
        return clazz.cast(result);
    }
    @SuppressWarnings({"SynchronizationOnLocalVariableOrMethodParameter"})
    public Object getBean(String nameObject[] parametersthrows BeansException {
        AbstractBeanFactory result = getBeanWithType(name, AbstractBeanFactory.class);
        ConstructorMetaData cmd = result.getConstructor();
        BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder("Temp");
        for (Object parameter : parameters) {
            builder.addConstructorParameter(nullparameter);
        }
        ConstructorMetaData tempCMD = builder.getBeanMetaData().getConstructor();
        synchronized (result) {
            result.setConstructor(tempCMD);
            try {
                return createBean(result);
            } finally {
                result.setConstructor(cmd);
            }
        }
    }
    public boolean containsBean(String name) {
        return getInstalledContext(name) != null;
    }
    public boolean isSingleton(String namethrows NoSuchBeanDefinitionException {
        return !isPrototype(name);
    }
    public boolean isPrototype(String namethrows NoSuchBeanDefinitionException {
        Object result = getBean(name);
        return isPrototype(result);
    }

    
Is the result prototype.

Parameters:
result the result
Returns:
true if prototyle, false otherwise
    protected boolean isPrototype(Object result) {
        return org.jboss.beans.metadata.spi.factory.BeanFactory.class.isInstance(result);
    }

    
Create the bean.

Parameters:
factory the bean factory
Returns:
new bean instance
Throws:
BeansException for any error
    protected Object createBean(Object factorythrows BeansException {
        try {
            return org.jboss.beans.metadata.spi.factory.BeanFactory.class.cast(factory).createBean();
        } catch (Throwable t) {
            throw new FatalBeanException("Cannot create bean: " + factoryt);
        }
    }
    public boolean isTypeMatch(String nameClass clazzthrows NoSuchBeanDefinitionException {
        return clazz.isInstance(getBean(name));
    }
    @SuppressWarnings("deprecation")
    public Class getType(String namethrows NoSuchBeanDefinitionException {
        ControllerContext context = getContext(name, ControllerState.DESCRIBED);
        if (context == null) {
            throw new NoSuchBeanDefinitionException(name);
        }
        if (context instanceof KernelControllerContext) {
            KernelControllerContext kcc = (KernelControllerContext) context;
            BeanInfo beanInfo = kcc.getBeanInfo();
            ClassInfo classInfo = beanInfo.getClassInfo();
            TypeInfoFactory tif = classInfo.getTypeInfoFactory();
            // it's a bean factory
            if (tif.getTypeInfo(AbstractBeanFactory.class).isAssignableFrom(classInfo)) {
                return getPrototypeClass(kcc);
            } else {
                return classInfo.getType();
            }
        }
        return null;
    }

    
Get prototype class.

Parameters:
cc the controller context
Returns:
prototype's class
    protected Class<?> getPrototypeClass(ControllerContext cc) {
        if (cc instanceof KernelControllerContext == false) {
            return null;
        }
        KernelControllerContext kcc = (KernelControllerContext) cc;
        BeanMetaData bmd = kcc.getBeanMetaData();
        Set<PropertyMetaData> properties = bmd.getProperties();
        for (PropertyMetaData pmd : properties) {
            if ("bean".equals(pmd.getName())) {
                ValueMetaData value = pmd.getValue();
                if (value != null && value.getUnderlyingValue() != null) {
                    String className = value.getUnderlyingValue().toString();
                    return getBeanClass(classNamekcc);
                } else {
                    return null;
                }
            }
        }
        return null;
    }

    
Get the bean class.

Parameters:
className the class name
context the context
Returns:
bean's class
Throws:
BeansException for any error
    protected Class<?> getBeanClass(String className, KernelControllerContext contextthrows BeansException {
        try {
            ClassLoader cl = context.getClassLoader();
            return cl.loadClass(className);
        } catch (Throwable t) {
            throw new FatalBeanException("Cannot load class: " + className + ", context: " + contextt);
        }
    }
    public String[] getAliases(String name) {
        ControllerContext context = getContext(namenull);
        if (context == null || context.getAliases() == null) {
            return new String[]{};
        } else {
            Set<Objectaliases = context.getAliases();
            String[] result = new String[aliases.size()];
            int i = 0;
            for (Object alias : aliases) {
                result[i++] = alias.toString();
            }
            return result;
        }
    }
New to GrepCode? Check out our FAQ X