InjectionManager injectionManager) { Predicate<ContractProvider> filter = ComponentBag.EXCLUDE_EMPTY .and(ComponentBag.excludeMetaProviders(injectionManager)); componentClass -> Providers.checkProviderRuntime( componentClass, componentBag.getModel(componentClass), constrainedTo, registeredClasses == null || !registeredClasses.contains(componentClass), Set<Class<?>> classes = new LinkedHashSet<>(componentBag.getClasses(filter)); if (constrainedTo != null) { classes = classes.stream() final ContractProvider model = componentBag.getModel(providerClass); binderToRegister.addAll(createProviderBinders(providerClass, model)); Set<Object> instances = componentBag.getInstances(filter); if (constrainedTo != null) { instances = instances.stream() final ContractProvider model = componentBag.getModel(provider.getClass()); binderToRegister.addAll(createProviderBinders(provider, model));
@Override public boolean isRegistered(final Class<?> componentClass) { return componentBag.getRegistrations().contains(componentClass); }
/** * Create a contract provider model by introspecting a component class. * * @param componentClass component class to create contract provider model for. * @return contract provider model for the class. */ public static ContractProvider modelFor(final Class<?> componentClass) { return modelFor(componentClass, ContractProvider.NO_PRIORITY, null, AS_IS); }
/** * Register a component class as a contract provider for the specified contracts. * * @param componentClass class to be introspected as a contract provider and registered. * @param contracts contracts to bind the component class to. * @param modelEnhancer custom contract provider model enhancer. * @return {@code true} if the component registration was successful. */ public boolean register(Class<?> componentClass, Set<Class<?>> contracts, Inflector<ContractProvider.Builder, ContractProvider> modelEnhancer) { final boolean result = registerModel(componentClass, ContractProvider.NO_PRIORITY, asMap(contracts), modelEnhancer); if (result) { classes.add(componentClass); } return result; }
private void configureExternalObjects(InjectionManager injectionManager) { componentBag.getInstances(model -> ComponentBag.EXTERNAL_ONLY.test(model, injectionManager)) .forEach(injectionManager::register); componentBag.getClasses(model -> ComponentBag.EXTERNAL_ONLY.test(model, injectionManager)) .forEach(injectionManager::register); }
compositeListener = new CompositeApplicationEventListener(appEventListeners); compositeListener.onEvent(new ApplicationEventImpl(ApplicationEvent.Type.INITIALIZATION_START, this.runtimeConfig, runtimeConfig.getComponentBag().getRegistrations(), resourceBag.classes, resourceBag.instances, null)); for (final Object instance : componentBag.getInstances(ComponentBag.excludeMetaProviders(injectionManager))) { injectionManager.inject(instance); ApplicationEvent initFinishedEvent = new ApplicationEventImpl( ApplicationEvent.Type.INITIALIZATION_APP_FINISHED, runtimeConfig, componentBag.getRegistrations(), resourceBag.classes, resourceBag.instances, bootstrapBag.getResourceModel()); compositeListener.onEvent(initFinishedEvent);
@Override public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) { ServerBootstrapBag serverBag = (ServerBootstrapBag) bootstrapBag; ResourceConfig runtimeConfig = serverBag.getRuntimeConfig(); ComponentBag componentBag = runtimeConfig.getComponentBag(); OptionsMethodProcessor optionsMethodProcessor = new OptionsMethodProcessor(); injectionManager.register(Bindings.service(optionsMethodProcessor).to(ModelProcessor.class)); // Get all model processors, registered as an instance or class List<ModelProcessor> modelProcessors = Stream.concat( componentBag.getClasses(CONTRACT_PROVIDER_MODEL_PROCESSOR_ONLY).stream() .map(injectionManager::createAndInitialize), componentBag.getInstances(CONTRACT_PROVIDER_MODEL_PROCESSOR_ONLY).stream()) .map(CAST_TO_MODEL_PROCESSOR) .collect(Collectors.toList()); modelProcessors.add(optionsMethodProcessor); // model processors registered using binders List<ModelProcessor> modelProcessorsFromBinders = ComponentBag .getFromBinders(injectionManager, componentBag, CAST_TO_MODEL_PROCESSOR, BINDING_MODEL_PROCESSOR_ONLY); modelProcessors.addAll(modelProcessorsFromBinders); serverBag.setModelProcessors(modelProcessors); } }
this.immutablePropertyNames = Collections.unmodifiableCollection(properties.keySet()); this.componentBag = ComponentBag.newInstance(registrationStrategy);
@Override public Map<Class<?>, Integer> getContracts(final Class<?> componentClass) { final ContractProvider model = componentBag.getModel(componentClass); return (model == null) ? Collections.emptyMap() : model.getContractMap(); }
/** * Create new empty component bag. * * @param registrationStrategy function driving the decision (based on the introspected * {@link org.glassfish.jersey.model.ContractProvider contract provider model}) whether * or not should the component class registration continue * towards a successful completion. * @return a new empty component bag. */ public static ComponentBag newInstance(Predicate<ContractProvider> registrationStrategy) { return new ComponentBag(registrationStrategy); }
/** * Clear and initialize the component registrations from given bag instance. * * @param bag component bag to initialize this one with. */ void loadFrom(final ComponentBag bag) { clear(); this.classes.addAll(bag.classes); this.instances.addAll(bag.instances); this.models.putAll(bag.models); }
@Override public Set<Object> getInstances() { return componentBag.getInstances(); }
/** * Copy constructor. * * @param config configurable to copy class properties from. */ public CommonConfig(final CommonConfig config) { this.type = config.type; this.properties = new HashMap<>(config.properties.size()); this.immutablePropertiesView = Collections.unmodifiableMap(this.properties); this.immutablePropertyNames = Collections.unmodifiableCollection(this.properties.keySet()); this.componentBag = config.componentBag.copy(); this.newFeatureRegistrations = new LinkedList<>(); this.enabledFeatureClasses = Collections.newSetFromMap(new IdentityHashMap<>()); this.enabledFeatures = new HashSet<>(); copy(config, false); }
@Override public Set<Class<?>> getClasses() { return componentBag.getClasses(); }
Map<Class<?>, Integer> contracts = contractMap; if (contracts == null) { // introspect contracts = asMap(Providers.getProviderContracts(componentClass)); } else { // filter custom contracts final Iterator<Class<?>> it = contracts.keySet().iterator();
/** * Register a component class as a contract provider for the specified contracts. * * @param componentClass class to be introspected as a contract provider and registered. * @param contracts contracts to bind the component class to. * @param modelEnhancer custom contract provider model enhancer. * @return {@code true} if the component registration was successful. */ public boolean register(Class<?> componentClass, Set<Class<?>> contracts, Inflector<ContractProvider.Builder, ContractProvider> modelEnhancer) { final boolean result = registerModel(componentClass, ContractProvider.NO_PRIORITY, asMap(contracts), modelEnhancer); if (result) { classes.add(componentClass); } return result; }
compositeListener = new CompositeApplicationEventListener(appEventListeners); compositeListener.onEvent(new ApplicationEventImpl(ApplicationEvent.Type.INITIALIZATION_START, this.runtimeConfig, runtimeConfig.getComponentBag().getRegistrations(), resourceBag.classes, resourceBag.instances, null)); for (final Object instance : componentBag.getInstances(ComponentBag.excludeMetaProviders(injectionManager))) { injectionManager.inject(instance); ApplicationEvent initFinishedEvent = new ApplicationEventImpl( ApplicationEvent.Type.INITIALIZATION_APP_FINISHED, runtimeConfig, componentBag.getRegistrations(), resourceBag.classes, resourceBag.instances, bootstrapBag.getResourceModel()); compositeListener.onEvent(initFinishedEvent);
private void configureExternalObjects(InjectionManager injectionManager) { componentBag.getInstances(model -> ComponentBag.EXTERNAL_ONLY.test(model, injectionManager)) .forEach(injectionManager::register); componentBag.getClasses(model -> ComponentBag.EXTERNAL_ONLY.test(model, injectionManager)) .forEach(injectionManager::register); }