public ContainerState()

in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java [75:187]


	public ContainerState(
		Bundle bundle,
		Bundle extenderBundle,
		ChangeCount ccrChangeCount,
		PromiseFactory promiseFactory,
		ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> caTracker,
		Logs ccrLogs) {

		_bundle = bundle;
		_extenderBundle = extenderBundle;
		_ccrLogs = ccrLogs;
		_bundleContext = bundle.getBundleContext();
		_log = _ccrLogs.getLogger(getClass());
		_containerLogs = new Logs.Builder(_bundleContext).build();

		_changeCount = new ChangeCount();
		_changeCount.addObserver(ccrChangeCount);

		_promiseFactory = promiseFactory;
		_caTracker = caTracker;

		BundleWiring bundleWiring = _bundle.adapt(BundleWiring.class);

		Map<String, Object> cdiAttributes = emptyMap();

		for (BundleWire wire : bundleWiring.getRequiredWires(EXTENDER_NAMESPACE)) {
			BundleCapability capability = wire.getCapability();
			Map<String, Object> attributes = capability.getAttributes();
			String extender = (String)attributes.get(EXTENDER_NAMESPACE);

			if (extender.equals(CDI_CAPABILITY_NAME)) {
				BundleRequirement requirement = wire.getRequirement();
				cdiAttributes = requirement.getAttributes();
				break;
			}
		}

		_cdiAttributes = unmodifiableMap(cdiAttributes);

		Set<String> extensionRequirements = new HashSet<>();

		collectExtensionRequirements(bundleWiring, extensionRequirements);

		_containerDTO = new ContainerDTO();
		_containerDTO.bundle = _bundle.adapt(BundleDTO.class);
		_containerDTO.changeCount = _changeCount.get();
		_containerDTO.components = new CopyOnWriteArrayList<>();
		_containerDTO.errors = new CopyOnWriteArrayList<>();
		_containerDTO.extensions = new CopyOnWriteArrayList<>();
		_containerDTO.template = new ContainerTemplateDTO();
		_containerDTO.template.components = new CopyOnWriteArrayList<>();
		_containerDTO.template.extensions = new CopyOnWriteArrayList<>();
		_containerDTO.template.id = ofNullable(
			(String)_cdiAttributes.get(CDI_CONTAINER_ID)
		).orElse(
			_bundle.getSymbolicName()
		);

		extensionRequirements.forEach(
			extensionFilter -> {
				ExtendedExtensionTemplateDTO extensionTemplateDTO = new ExtendedExtensionTemplateDTO();

				try {
					extensionTemplateDTO.filter = asFilter(extensionFilter);
					extensionTemplateDTO.serviceFilter = extensionFilter;

					_containerDTO.template.extensions.add(extensionTemplateDTO);
				}
				catch (Exception e) {
					_containerDTO.errors.add(asString(e));
				}
			}
		);

		_containerComponentTemplateDTO = new ComponentTemplateDTO();
		_containerComponentTemplateDTO.activations = new CopyOnWriteArrayList<>();
		_containerComponentTemplateDTO.beans = new CopyOnWriteArrayList<>();
		_containerComponentTemplateDTO.configurations = new CopyOnWriteArrayList<>();
		_containerComponentTemplateDTO.name = _containerDTO.template.id;
		_containerComponentTemplateDTO.properties = emptyMap();
		_containerComponentTemplateDTO.references = new CopyOnWriteArrayList<>();
		_containerComponentTemplateDTO.type = CONTAINER;

		ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
		configurationTemplate.maximumCardinality = ONE;
		configurationTemplate.pid = ofNullable(
			(String)_cdiAttributes.get(CDI_CONTAINER_ID)
		).map(
			s -> s.replaceAll("-", ".")
		).orElse(
			"osgi.cdi." + _bundle.getSymbolicName().replaceAll("-", ".")
		);
		configurationTemplate.policy = OPTIONAL;

		_containerComponentTemplateDTO.configurations.add(configurationTemplate);

		_containerDTO.template.components.add(_containerComponentTemplateDTO);

		_aggregateClassLoader = new BundleClassLoader(_bundle, _extenderBundle);

		_beansModel = new BeansModelBuilder(this, _aggregateClassLoader, bundleWiring, _cdiAttributes).build();

		try {
			new Discovery(this).discover();
		}
		catch (Exception e) {
			_log.error(l -> l.error("CCR Discovery resulted in errors on {}", bundle, e));

			_containerDTO.errors.add(asString(e));
		}

		_beanManagerDeferred = _promiseFactory.deferred();
	}