/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.blueprint.reflect; import java.util.List; import org.eclipse.gemini.blueprint.blueprint.config.internal.BlueprintParser; import org.osgi.service.blueprint.reflect.BeanArgument; import org.osgi.service.blueprint.reflect.BeanMetadata; import org.osgi.service.blueprint.reflect.BeanProperty; import org.osgi.service.blueprint.reflect.Target; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.util.StringUtils; /** * Default {@link LocalComponentMetadata} implementation based on Spring's {@link BeanDefinition}. * * @author Costin Leau */ class SimpleBeanMetadata extends SimpleComponentMetadata implements BeanMetadata { private final List<BeanArgument> arguments; private final List<BeanProperty> properties; private final String factoryMethod; private final Target factoryComponent; private final String scope; /** * Constructs a new <code>SpringLocalComponentMetadata</code> instance. * * @param name bean name * @param definition Spring bean definition */ public SimpleBeanMetadata(String name, BeanDefinition definition) { super(name, definition); final String factoryMtd = definition.getFactoryMethodName(); if (StringUtils.hasText(factoryMtd)) { factoryMethod = factoryMtd; String factory = definition.getFactoryBeanName(); if (StringUtils.hasText(factory)) { factoryComponent = new SimpleRefMetadata(factory); } else { factoryComponent = null; } } else { factoryComponent = null; factoryMethod = null; } arguments = MetadataUtils.getBeanArguments(definition); properties = MetadataUtils.getBeanProperties(definition); // double check if the definition had "scope" declared boolean hasAttribute = definition.hasAttribute(BlueprintParser.DECLARED_SCOPE); scope = (hasAttribute ? (StringUtils.hasText(name) ? beanDefinition.getScope() : null) : null); } public List<BeanArgument> getArguments() { return arguments; } public String getClassName() { return beanDefinition.getBeanClassName(); } public String getDestroyMethod() { return beanDefinition.getDestroyMethodName(); } public Target getFactoryComponent() { return factoryComponent; } public String getFactoryMethod() { return factoryMethod; } public String getInitMethod() { return beanDefinition.getInitMethodName(); } public List<BeanProperty> getProperties() { return properties; } public Class<?> getRuntimeClass() { return beanDefinition.getBeanClass(); } public String getScope() { return scope; } }