void processBean()

in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java [151:218]


	<X> void processBean(@Observes ProcessBean<X> pb) {
		final Class<X> declaringClass = Annotates.declaringClass(pb);

		String className = declaringClass.getName();

		OSGiBean osgiBean = _containerState.beansModel().getOSGiBean(className);

		if (osgiBean == null) {
			return;
		}

		final Annotated annotated = pb.getAnnotated();

		try {
			List<String> serviceTypes = Annotates.serviceClassNames(annotated);
			Map<String, Object> componentProperties = Annotates.componentProperties(annotated);
			ServiceScope serviceScope = Annotates.serviceScope(annotated);

			if (annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.SingleComponent.class) ||
				annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.FactoryComponent.class)) {

				ActivationTemplateDTO activationTemplate = osgiBean.getComponent().activations.get(0);
				activationTemplate.scope = serviceScope;
				activationTemplate.serviceClasses = serviceTypes;
				osgiBean.getComponent().properties = componentProperties;
			}
			else if (annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.ComponentScoped.class)) {
				// Explicitly ignore this case
			}
			else if (!serviceTypes.isEmpty()) {
				AnnotatedMember<?> producer = null;

				if (pb instanceof ProcessProducerField) {
					producer = ((ProcessProducerField<?, ?>) pb).getAnnotatedProducerField();
				}
				else if (pb instanceof ProcessProducerMethod) {
					producer = ((ProcessProducerMethod<?, ?>) pb).getAnnotatedProducerMethod();
				}

				ExtendedActivationTemplateDTO activationTemplate = null;

				for (ActivationTemplateDTO at : _containerTemplate.activations) {
					ExtendedActivationTemplateDTO extended = (ExtendedActivationTemplateDTO)at;
					if (extended.declaringClass.equals(declaringClass) &&
							equals(extended.producer, producer)) {

						activationTemplate = extended;
						break;
					}
				}

				if (activationTemplate == null) {
					activationTemplate = new ExtendedActivationTemplateDTO();
					activationTemplate.cdiScope = pb.getBean().getScope();
					activationTemplate.declaringClass = declaringClass;
					activationTemplate.producer = producer;
					_containerTemplate.activations.add(activationTemplate);
				}

				activationTemplate.properties = componentProperties;
				activationTemplate.scope = serviceScope;
				activationTemplate.serviceClasses = serviceTypes;
			}
		}
		catch (Exception e) {
			pb.addDefinitionError(e);
		}
	}