All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.deephacks.tools4j.config.internal.core.ConfigCdiContext Maven / Gradle / Ivy

There is a newer version: 0.15.0
Show newest version
package org.deephacks.tools4j.config.internal.core;

import org.deephacks.tools4j.config.ConfigContext;
import org.deephacks.tools4j.config.ConfigScope;

import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Singleton;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

@Singleton
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public class ConfigCdiContext implements Context {
    private BeanManager bm;
    private ConfigContext ctx;
    private CreationalContext cctx = null;
    private Map cache = new HashMap<>();

    public ConfigCdiContext(BeanManager bm) {
        this.bm = bm;
    }

    @Override
    public Class getScope() {
        return ConfigScope.class;
    }

    @Override
    public  T get(Contextual contextual, CreationalContext creationalContext) {
        Bean bean = (Bean) contextual;
        cctx = creationalContext;
        if (ctx == null) {
            ctx = lookupRuntimeContext();
        }
        return (T) ctx.get(bean.getBeanClass());
    }

    @Override
    public  T get(Contextual contextual) {
        if (cctx == null) {
            return null;
        }
        if (ctx == null) {
            ctx = lookupRuntimeContext();
        }
        Bean bean = (Bean) contextual;
        return (T) ctx.get(bean.getBeanClass());
    }

    @Override
    public boolean isActive() {
        return true;
    }

    private ConfigContext lookupRuntimeContext() {
        Set> beans = bm.getBeans(ConfigContext.class);
        Bean bean = bm.resolve(beans);
        CreationalContext cc = bm.createCreationalContext(bean);
        return (ConfigContext) bm.getReference(bean, ConfigContext.class, cc);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy